你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
sistao 提问时间:2024-11-5 10:14 / 未解决

由于使用环境的问题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(); }

}

收藏 评论13 发布时间:2024-11-5 10:14

举报

13个回答
chenkh 回答时间:2024-11-5 11:07:57

看RM0468手册1248页上说,OTRIMx:These bits are available only on dual-channel DACs

sistao 回答时间:2024-11-5 13:18:30

chenkh 发表于 2024-11-5 11:07
看RM0468手册1248页上说,OTRIMx:These bits are available only on dual-channel DACs
...

我留意到这句话了,但是这句话是针对OTRIM2的,也适用OTRIM1吗?我使用的是Channel1。

image.png

chenkh 回答时间:2024-11-5 16:42:47

我要变胖 发表于 2024-11-5 13:18
我留意到这句话了,但是这句话是针对OTRIM2的,也适用OTRIM1吗?我使用的是Channel1。</p>
<p>![image.png] ...

[md]这就不清楚了,没用过

butterflyspring 回答时间:2024-11-5 17:38:50
从手册上看,通道1 的buffer 是可以单独校准的,并且须按照手册介绍的步骤来实施的。

校准是调整额外的偏移量,这个电压很小,估计示波器可能很难量测出来变化。

STM32H743 DAC CHANNEL CALIBRATION 1.PNG STM32H743 DAC CHANNEL CALIBRATION 2.PNG
sistao 回答时间:2024-11-6 09:37:43

butterflyspring 发表于 2024-11-5 17:38
从手册上看,通道1 的buffer 是可以单独校准的,并且须按照手册介绍的步骤来实施的。</p>
<p>校准是调整额外的偏 ...

我认为你这个说法是合理的,示波器应该是很难测出电压变化的。我用万用表测了一下(6位半的万用表,精度肯定满足),如果采用12位右对齐方式的话,将OTRIM分别设置成1和31,实测二者输出电压相差23mv左右,理论计算(3300/4096)(31-1)=24mv,这个结果好像是能说通的。但是如果采用8位右对齐方式的话,实测二者输出电压也是相差23mv左右,理论计算(3300/256)(31-1)=386mv,这个相差是比较大的。不知道我这种计算方式是不是正确的,或者说DAC的补偿方式是不是一种线性补偿?

butterflyspring 回答时间:2024-11-6 10:00:55
我要变胖 发表于 2024-11-6 09:37
[md]我认为你这个说法是合理的,示波器应该是很难测出电压变化的。我用万用表测了一下(6位半的万用表, ...

从厂家的手册上看,这应该是个额外附加上的偏移电压。


如截图上红圈所示,它是加号,所以我认为它不是线性比列关系,是每个具体电路结构带来固定的值。
sistao 回答时间:2024-11-6 10:09:48

butterflyspring 发表于 2024-11-6 10:00
从厂家的手册上看,这应该是个额外附加上的偏移电压。</p>
<p>

谢谢大佬的解答。也就是说理论值(3300/256)*(31-1)不能简单的这样计算,所以和实测值相差很多?是这样理解吗

butterflyspring 回答时间:2024-11-6 10:25:17
sistao 发表于 2024-11-6 10:09
[md]谢谢大佬的解答。也就是说理论值(3300/256)*(31-1)不能简单的这样计算,所以和实测值相差很多? ...

我的理解是这样的,用这个乘法公式不合适。
sistao 回答时间:2024-11-6 10:41:57

butterflyspring 发表于 2024-11-6 10:25
我的理解是这样的,用这个乘法公式不合适。

非常感谢😄

xmshao 回答时间:2024-11-6 14:32:02
关于这个问题,一起来看看,供参考。


1、我们知道,DAC的实际输出是理论值和偏差之和,这个偏差对应参考手册中那个输出公式中的VOS.

rrr.png



正因为实际输出跟理论值存在偏差,所以在实际应用中需要做输出校正,让实际输出尽量接近理论值。

2、STM32H7芯片内部的DAC都支持输出校正功能,即实际输出是基于当前转换结果结合当前校准寄存器里
的校准值即OTRIM值  实施校准  后的最后输出。每个DAC模块的校准各种独立。


3、关于OTRIM值的获得。STM32H7芯片在出厂时就基于一定条件做了校准操作,得到相应的OTRIM值存储到对应
的寄存器,使用DAC时即可使用。


当然,出厂校准条件未必适应所有应用场合,用户适时地重新启动校准操作并获取新的OTRIM值也是正常、必要的。


我们可以发现OTRIM字段是可以读写的,但通过DAC校准并获取合适的ORTIM值是 硬件确定 的,即哪个值最合适是


硬件确定的,具体就是在校准操作过程中找到最佳OTRIM值后通过特定状态位给予用户提示并存储到特定寄存器。


我们不能 随意或想当然 写入特定的OTRIM值,虽然你现有这个权利或能力。


做DAC校准操作时,实际上是硬件基于中间点0x800的输出和理论值进行反复比较、修正实现的,并得到最终的最佳
OTRIM值。关于这点的更多细节可以阅读参考手册。


打个比方:


手头示波器的4支架突然坏掉一个放不平稳了,你想让旁人给你几本书垫一下,假设书本规格都一样,最后到底用几本才合适,
不是递书人说了算,而是你经过多次尝试后,最好来一声“好了”时才定下来的。如果让递书人跟着感觉一次给你几本,
可能神助力刚刚好,但也可能不是多了就是少了。


4、至于每个OTRIM单位对应的电压步进,我的理解跟你的一样。实际上,在数据手册里有给出中间点0x800时对应的步进值,
跟我们计算的差不多,但不一样。它这个值仅仅针对输入0x800时做校准的步进值,跟全范围的平均步进值有差异可以理解。


其实,看到这里,我们是否知道这个步进值其实并不重要。因为校准本身是硬件完成的,哪个值最合适也不是用户随意定的。


在实施用户校准过程中,我们用户充其量做了上面递书的人,到底要几本才合适不是递书人说了算的。


5、这里的DAC校准及输出校正针对使能了DAC BUFFER功能。
sistao 回答时间:2024-11-8 11:05:35

xmshao 发表于 2024-11-6 14:32
关于这个问题,一起来看看,供参考。</p>
<p>

大佬,请接受来自菜鸟的膜拜!讲解的太详细了,豁然开朗。非常感谢!

我还有一个疑惑:在得到最佳OTRIM值后,将该值存入特定寄存器。至此,校准过程是否已经完成?还需要用户将得到的最佳OTRIM值跟ODR寄存器的值做加法操作吗?

xmshao 回答时间:2024-11-8 11:33:22

sistao 发表于 2024-11-8 11:05
大佬,请接受来自菜鸟的膜拜!讲解的太详细了,豁然开朗。非常感谢!</p>
<p>我还有一个疑惑:在得到最佳OT ...

[md]无须客气,探讨交流而已。

在校准过程中有个标志提示“上面比方中的那声“好了””,此时的最佳trim值找到了,最终自然是写进DAC_CCR寄存器了。

之后DAC运行时硬件会 自动基于这个TRIM值做修正后 做最后的输出。

sistao 回答时间:2024-11-8 13:04:38

xmshao 发表于 2024-11-8 11:33
无须客气,探讨交流而已。</p>
<p>在校准过程中有有个标志提示“上面比方中的那声“好了””,此时的最佳tr ...

[md]感谢,感谢!

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版