想做一个20v的电压表,但是串联电阻后,第一测量的值不对,第二,还是固定值
最好上一下电路图
测量20V的电压如果采用上分压电阻15K下分压电阻5K,就用你原来单片机采集5V以内电压的方法,获取的结果左移2位就可以了。
这个是图
你的意思不用乘以4?
怎么左移呢
看看分压电路的地有没有和单片机连接,单片机做AD功能的部分有没有设置正确。
对于移位操作,左右移位分别是移一位是乘以或除以2,移两位则是乘以或除以4,移三位则是乘以或除以8,这是做5伏内电压值到20伏内电压值的转换。
这种移位计算对于汇编编程会显得比较方便,但是对于C语言编程的话,也就是一行语句的事。
电路中有一个电阻没写数值,从分压来算,就认为是1k的电阻,分压电路是3k和1k两个电阻分压,应该没问题。主要看看单片机做AD功能的部分有没有设置正确。
左移2位和乘以4是一回事,C语言:x=x<<2; 等同于 x=x*4;
五v时左移两位,20v还要左移吗?
五v时左移两位,20v还要左移吗?
你是用分压电路来测量20伏内的电压的,用的是3k和1k的电阻分压,电压是从1k电阻上取得的,所以取得的电压是20伏内电压的四分之一,这是电阻分压的原理和计算方法决定的。所以,AD转换所得到的电压需要乘以4,这样就是20伏内的电压值。
比如现在的电压是16伏,分压后在1k电阻上是4伏,扣除误差等因素,AD转换后就是4伏,那么就需要乘以4,就得到实际的电压值16伏
以一个最简单的8位AD转换测量范围0~5V电压为例:
ADC_RES=(IN/VCC)*256, ADC_RES为转换结果寄存器,IN为被测电压,VCC为电源做参考电压。
ADC_RES=(2.5/5)*256,ADC_RES=128;或ADC_RES=0x80;用2进制表示1000 0000
这个结果是代表2.5V电压的数,如果直接用相同方法测量0~20V电压ADC_RES就会溢出,
所以才用电阻分压的方式来解决,如果按上电阻3K下电阻1K配置,还是测量2.5V,
那么ADC_RES得到的结果是32或0x20,用2进制表示0010 0000,这时左移2位才能得到正确结果:1000 0000
啰啰嗦嗦说了这么多,如还不能领会请自行补课。
谢谢分享 赞一个