STM32之ADC调试日志

1、开始选择dma方式去采样,读出ad采样的数据值波形是正常的。移植完计算相关的函数后,计算的值相对实际的值有较大的偏差,此时修改固有系数,计算的值没有发生相应的变化,将固有系数改为0后,依然不会有变化;将固有系数改大后会出现很小的变化。检查程序的计算部分,发现计算单项电压电流的公式中,for循环的计数部分出现越界,导致数组计算的也出现错误,修正后,计算结果可以通过改变固有系数来调整。

2、此时计算出的电压和电流值在电压和电流较小时跳动很小,电压电流加大后,计算的值跳动很大,但采样的波形是很完整,跳动很小的,按照之前的方式进行采样,修改ADC采样方式。

3、改变adc采样的方式为查询的方式进行采样,计算的值依然有很大的跳动,并且不像之前计算的数据有一定的规律,计算后电压和电流的数据交错出现。此时读出波形的数据不正常,通道之间的数据是混乱的。尝试过改变采样时间,结果是无效的。经过查看相关寄存器,发现在切换一遍通道后,所有的通道依次都被打开了。经过查找原因是库函数中在配置通道寄存器时,ADC1->CHSEL |= ADC_Channel;这样一来,所有的通道在切换一遍以后,就所有的通道都打开了,导致转换的结果不正常。将库函数略作修改后,采样数据波形正常。

4、此时计算仍然会有很大的跳动,尝试将10个连续的波形数据采样出来(采样波形是正常的),然后直接将首个波形和最后一个波形的数据带入程序中,直接进行计算,发现有很大的偏差,确定是计算相关程序部分有错误。在程序中加断点,单步跟踪计算数据,查看FFT计算后的数据不正常,将Acuvim393的FFT程序移植过来,计算结果正常。

5、此时只加一相电压,在MBDebug上读出数据三相电压都有,并且完全相同,电流只有A相和B相有;检查采样程序后发现之前修改过的采样点数没有修改回来,导致采样数据的数组出现越界,后面的数据被覆盖了。修改采样点数后,采样计算正常。

总结:

1、尽量按原有的机制去进行移植修改。    

2、计算相关的部分出现问题,先检查逻辑有没有问题;然后检查相关数组部分是否有越界,数据类型是否产生截断,导致结果错误。    

3、STM32部分硬件跳转Hardfault IRQHandler是由于数组越界导致的;

4、使用库函数,注意应用的正确性;    

5、在修改程序的过程中注意备份并说明,这样可以减少来回修改程序的时间,方便查找问题,提高工作效率;  

6、注意理清思路,按照既定路线逐个排查问题,多动手记录相关测试部分。

永不止步步 发表于03-31 10:24 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67417个|学分:363791个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号