【单片机】电位器的一个奇葩问题。

2019-07-15 09:30发布


电位器的信号输出接到单片机(ARDUINO UNO)的模拟口上,然后程序里读取这个模拟口的值。用串口监视器看,读取的值都是对的,0~1023.

envelopeRate = analogRead(A0);
Serial.println("envelopeRate");
Serial.println(envelopeRate);
envelopeRate = map(envelopeRate, 0, 1023, 0, 255); //作用是将模拟量从[0,1023]映射到[0,255]区间。

或者不用map()
envelopeRate = envelopeRate/4;

得到的值都是正常的。然后把值写到寄存器操作函数
WriteReg(0x0C, envelopeRate);

但是,只要电位器旋钮拧过12点方向,寄存器的操作函数就不正常了。 我以为是电位器的问题,试了多个电位器都是这个问题。

那么你可能会想,是不是envelopeRate的值超出范围了? OK,我改一下代码:

if(envelopeRate >14) envelopeRate=14;

在调用WriteReg()前,我把值限制到14. 理论上这个值最大可以255. 也就是说,随便我怎么拧电位器,即便超过12点的角度,向右拧到头envelopeRate的值也是14.

运行代码测试, 拧大电位器,寄存器操作的参数可以看出是0~14产生对应的变化,旋钮值超过14的时候寄存器的值还是14.  接着拧电位器的角度到12点位置,从这个角度开始,寄存器的操作函数就懵逼了,没反应。只要电位器旋转超过12点位置就这样。 太诡异了。

也不知道有没有人遇到过类似的情况。怎么解决啊~  好心塞。
WechatIMG222.jpg
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
3guoyangyang7
1楼-- · 2019-07-15 17:21
通过叙述来看应该是电路问题,那么问题来了,如果是电路问题,就需要你上电路图了,另外1楼说的对,这种问题第一个要做的就是测输出电压啊。。。。

评分

参与人数 1积分 +5 收起 理由 ElecFans王岑 + 5

查看全部评分

blust
2楼-- · 2019-07-15 19:26
可能是电位器有一个悬空点,就是旋转到头的时候触头就悬空了,要旋过一定距离才会接触到电位器的另一头,这段时间悬空所以导致异常,加下拉电阻就是把悬空状态拉到地了。

评分

参与人数 1积分 +5 收起 理由 ElecFans王岑 + 5

查看全部评分

blust
3楼-- · 2019-07-15 19:41
猜的,具体的还是要按照楼上说的实测一下。
stormer
4楼-- · 2019-07-15 20:05
blust 发表于 2017-10-18 17:13
猜的,具体的还是要按照楼上说的实测一下。

其实电压输出是正常的。 就是电阻拧到足够大的阻值的时候(电压小到一定程度),单片机上的输入端就当做悬空了。加个下拉电阻,输入端就是个准确的0了。 我猜是这样。

评分

参与人数 1积分 +5 收起 理由 ElecFans王岑 + 5

查看全部评分

blust
5楼-- · 2019-07-15 23:49
 精彩回答 2  元偷偷看……
李雷
6楼-- · 2019-07-16 04:08
AD采集外部不加附加电路就是会有问题的。

一周热门 更多>