标题:
单片机ADC采样导致数码管变暗的问题
[打印本页]
作者:
hxdby
时间:
2022-5-25 22:51
标题:
单片机ADC采样导致数码管变暗的问题
之前开发一些简单的单片机程序,并没有感觉到经常提到的实时性的问题,最近需要开发一个产品,要用到ADC采样,需要采集三路ADC,我用的是ADC+DMA方式,每个通道采集10次,DMA搬运30次,采集完之后先做中位值平均滤波算法,然后在使用得到的值。
ADC采样和数据处理,滤波算法等都放在一个函数中,暂且称为采集函数,采集函数放在main中,我的产品中也有数码管显示,显示函数也放在main中,程序功能都没什么问题,代码也没啥问题,能正常采集到数据,也能正常显示。
现在的问题是,数码管亮度会变暗。当我在main中注释掉ADC采集函数后,数码管亮度恢复正常,证明是这个采集函数问题,而且我把通道采集次数放长一点,比如由10次放到20次,或更长,亮度会依次变暗,也就是说,采集次数设置的越长,亮度就越暗。
我后来仔细想了一下,怀疑是采集次数变长以后,中位值滤波算法要执行更多的计算,耗时更长,导致整个采集函数执行时间变长,而且这个执行时间明显大于main函数里面其他函数的执行时间,导致实时性变差,影响了数码管显示。目前的思路就是打算把采集函数分解开来,把ADC采样,ADC数据处理,中位值滤波等都放在不同的函数,让执行时间更均匀,但我没试过,不知道有没有效果,因为总时间好像没变。
除此之外,大家还有其他思路和框架吗?可以改善实时性问题的,谢谢
作者:
Materialism
时间:
2022-5-25 23:11
把ADC采样和LED显示都使用定时器进行定时,比如DMA一直采样,但不进行计算,比如每隔500ms进行一次计算,同样的,数码管显示也是每隔一段时间进行显示刷新。
如果还想更要实时性,可以使用RTOS。
作者:
188610329
时间:
2022-5-25 23:54
说明你数码管没有通过定时器中断点亮。
作者:
fj51hei
时间:
2022-5-26 09:13
Materialism 发表于 2022-5-25 23:11
把ADC采样和LED显示都使用定时器进行定时,比如DMA一直采样,但不进行计算,比如每隔500ms进行一次计算,同 ...
会不会采集函数的算量已经在哪里了,你隔500mS 那ADC的实时性?另等500mS数据处理得完?
作者:
名字不是重点
时间:
2022-5-26 09:43
因为你的数码管是扫显,在等ADC完成的过程中,扫显停了所以就显得数码管暗了。你在ADC中插入扫显试试?
作者:
hxdby
时间:
2022-5-26 09:45
Materialism 发表于 2022-5-25 23:11
把ADC采样和LED显示都使用定时器进行定时,比如DMA一直采样,但不进行计算,比如每隔500ms进行一次计算,同 ...
我初步也是你这个思路,好像也只有这种思路了,但不知道是否有效,后面我会试一下,谢谢
作者:
Y_G_G
时间:
2022-5-26 22:21
不知道你用的是什么单片机
STM32的ADC如果是用DMA方式的话,是不会用到主函数的等待的,基本等于不消耗程序的效率
如果程序没有其它重要中断,ADC可以用中断的方式采样,中断函数只清除中断标志位和数据传送
主函数进行数据处理,基本也不会有太大的影响
如果是在主函数中用while来等待ADC完成,这肯定是要消耗很多时间的
一定要采用这种方式的话,数码管显示可以中定时器中断来显示
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1