打印
[STM32H7]

H743 DAC通道缓冲器的校准问题

[复制链接]
265|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jcky001|  楼主 | 2024-11-6 16:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
由于使用环境的问题H743的DAC输出值有偏差,我想对H743的DAC通道缓冲器进行校准,OTRIM[4:0]位的默认值是16,我尝试更改该位的值(1和31都有尝试),但是DAC的输出电压好像没有什么变化(通过示波器来测量DAC的输出电压)。后面会附上我的代码,有两个问题请教各位大佬:

1.有关缓冲器校准的程序是否有问题?

2.OTRIM[4:0]的范围是0到31,那么步进值是多少呢?我的理解:假如VDD=VDDA=VREFIN=3.3V,OTRIM[4:0]值设置为31,那么步进值 = 3.3/(4096),那么校准后的电压值 = 校准前的电压值 + 31*步进值。不知道我理解的是不是对的。麻烦大佬提供一些帮助。

下面是DAC的配置:

static void DAC_Ch1_Config(void) { DacHandle.Instance = DAC1; /##-1- Initialize the DAC peripheral ######################################/ if (HAL_DAC_Init(&DacHandle) != HAL_OK) { / DAC initialization Error / Error_Handler(); }

/##-2- DAC channel2 Configuration #########################################/ sConfig.DAC_Trigger = DAC_TRIGGER_T6_TRGO; sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE; sConfig.DAC_ConnectOnChipPeripheral = DAC_CHIPCONNECT_BOTH; sConfig.DAC_UserTrimming = DAC_TRIMMING_USER; sConfig.DAC_TrimmingValue = 31;

if (HAL_DAC_ConfigChannel(&DacHandle, &sConfig, DAC_CHANNEL_1) != HAL_OK) { / Channel configuration Error / Error_Handler(); }

HAL_DACEx_SelfCalibrate(&DacHandle, &sConfig, DAC_CHANNEL_1);

/##-5- Set DAC channel1 DHR12RD register ################################################/ if (HAL_DAC_SetValue(&DacHandle, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 0x7FF) != HAL_OK) { / Setting value Error / Error_Handler(); }

/##-4- Enable DAC Channel1 ################################################/ if (HAL_DAC_Start(&DacHandle, DAC_CHANNEL_1) != HAL_OK) { / Start Error / Error_Handler(); }

}

使用特权

评论回复
沙发
七毛钱| | 2024-11-8 12:15 | 只看该作者
查阅STM32 H743的参考手册,确认在用户修正模式下,HAL_DACEx_SelfCalibrate函数的行为。如果该函数在用户修正模式下不起作用,您可能需要手动调整DAC_TrimmingValue来找到最佳的校准值。

使用特权

评论回复
板凳
duo点| | 2024-11-8 12:16 | 只看该作者
不要直接将DAC_TrimmingValue设置为最大值(如31),而是逐步增加或减少该值,并观察DAC输出的变化。

使用特权

评论回复
地板
内政奇才| | 2024-11-8 19:00 | 只看该作者
确保DAC的输出正确连接到示波器,并且示波器的设置正确,以便准确测量DAC的输出电压。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1510

主题

4543

帖子

6

粉丝