电位器取值的时候总是抖动,怎么解决?
现在我用一个EC11的10K电位器做数值输入,3根引脚分别接VCC\A3引脚\地。
代码是: iMod = map(analogRead(A3), 0, 1023, 0, 127);
然后运行的时候 iMod的值会在随机出现+-1的数值抖动,来回变。比如当前的值是60,它就一下60,一下61这样。
有什么办法可以让这个值更稳定一些吗?比如加上什么外围辅助电路? 或者把电位器换成编码器会不会好些? 先看看 analogRead 抖动范围再说?这个太大了(>10) 一般可以考虑接线太长、电压不稳 感覺上像是正常,就算是三用電錶也會有類似的現象產生,
主要是 A/D 硬體轉換上的公差吧? 要精確一點的話有精密度
更高的電位器、單晶片,不然硬體就將就用一下,利用軟體
把這誤差給處理掉(某合理範圍內的值都算是同值,然後再依值處理) 范围取平均值
for(i=0;i<10;i++)
{
iMod =+map(analogRead(A3), 0, 1023, 0, 127)/10;
} RC滤波,电压跟随器,滤波算法什么的都行吧 正常情况的ad一般不会这样,抖动确实比较大,排除一下供电,连接和干扰问题,如果不能解决就用算法滤波吧 轉用多圈精密電位器再試一試 本帖最后由 Stormer 于 2020-4-6 12:11 编辑
我感觉解决这个问题还是需要更高位数的AD转换器,1024有点小。很容易就碰到数值的边界了,造成抖动。
-------
刚找了个ADS1115 16位的AD模块测试,问题解决。现在数字不抖动了,电位器旋转调节时候数值变化也更细腻稳定了。
代码
bpm = map(tempBPM, 0, 24340, 0, 127);
让我奇怪的是,在串口监视器里看AD芯片输出的值范围是0~243xx。 怎么最大值是这个值呢?如果是16位的话,为什么不是65535?
---
应该是ADS1115代码设置的问题,试了半天也没搞明白。不论如何,数值抖动的问题解决了。谢谢大家~
页:
[1]