硬汉嵌入式论坛

 找回密码
 立即注册
查看: 321|回复: 6
收起左侧

[有问必答] 使用F407zgt6DAC输出正弦波,高频波形衰减,求一份补偿算法

[复制链接]

2

主题

3

回帖

9

积分

新手上路

积分
9
发表于 2024-5-15 16:31:53 | 显示全部楼层 |阅读模式
使用F407 DAC加DMA,定时器事件触发,输出正弦波,波形一个周期输出20个点。在21K一下输出波形无失真,30Khz波形衰减10mv,100K衰减40mv,我有一个思路是在高频时把原来的波形每一个点的值都放大,进行补偿,但是怎么具体实现,怎么随着频率的上升把放大的系数增大,还需要大佬们指点一下,本人萌新,还望大佬们多多担待。

主函数代码:

float Voltage_list[9]={1.0,0.9,0.8,0.7,0.6,0.5,0.4,0.3,0.2};
uint16_t Sin[9] [20]=
{
{648,848,1028,1172,1264,1296,1264,1172,1028,848,648,447,267,123,31,0,31,123,267,447},//1V
{583,763,925,1054,1137,1166,1137,1054,925,763,583,402,240,111,28,0,28,111,240,402},         //0.9V
{518,678,822,937,1010,1036,1010,937,822,678,518,357,213,98,25,0,25,98,213,357},                 //0.8V
{454,594,720,821,885,908,885,821,720,594,454,313,187,86,22,0,22,86,187,313},                 //0.7V
{389,509,617,703,758,778,758,703,617,509,389,268,160,74,19,0,19,74,160,268},                 //0.6V
{324,424,514,586,632,648,632,586,514,424,324,223,133,61,15,0,15,61,133,223},                 //0.5V
{259,339,411,468,505,518,505,468,411,339,259,178,106,49,12,0,12,49,106,178},                 //0.4V
{193,252,306,349,376,386,376,349,306,252,193,133,79,36,9,0,9,36,79,133},                         //0.3V
{129,168,204,233,251,258,251,233,204,168,129,89,53,24,6,0,6,24,53,89},                //0.2V
};



bsp_Init();//bsp初始化
HAL_TIM_Base_Start(&htim2);
HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1,(uint32_t *)Sin[1], 20, DAC_ALIGN_12B_R);
while(1)
{
}





回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107672
QQ
发表于 2024-5-16 09:17:18 | 显示全部楼层
F4系列有输出缓冲可以使能,先使能下。
回复

使用道具 举报

2

主题

3

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2024-5-16 20:13:57 | 显示全部楼层
eric2013 发表于 2024-5-16 09:17
F4系列有输出缓冲可以使能,先使能下。

使用输出缓冲器后就不能输出0电压了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107672
QQ
发表于 2024-5-17 09:15:49 | 显示全部楼层
凌乱的邻家 发表于 2024-5-16 20:13
使用输出缓冲器后就不能输出0电压了

弄个运算放大器做个输出调节比较好,软件补偿的话。可以针对输入输出值做个校准公式。校准后让DAC发。
回复

使用道具 举报

337

主题

2048

回帖

3064

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3064
发表于 2024-5-17 10:24:16 | 显示全部楼层
本帖最后由 caicaptain2 于 2024-5-17 10:26 编辑

Snipaste_2024-05-17_10-25-35.png
注意看一下F407的规格书,它的DAC最高速度只有1us,还是在数值变化1个的时候。 所以,你的100KHz配20个点的时候已经远超DAC的速度了。 30KHz的时候,因为相邻数值变化大,也是超规格了的。

所以,内置DAC不能做高频的波形输出。
回复

使用道具 举报

2

主题

3

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2024-5-21 20:49:24 | 显示全部楼层
eric2013 发表于 2024-5-17 09:15
弄个运算放大器做个输出调节比较好,软件补偿的话。可以针对输入输出值做个校准公式。校准后让DAC发。

后续就是通过软件补偿了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107672
QQ
发表于 2024-5-22 13:16:21 | 显示全部楼层
凌乱的邻家 发表于 2024-5-21 20:49
后续就是通过软件补偿了

好的,满足需求的话也行。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-11 15:39 , Processed in 0.304454 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表