第7课 测量电压与 ADC 精度

我是潘,曾经是个工程师。这是为 Ardui.Co 制作的 “Arduino 公开课” 系列的入门教程。第7课我们会继续利用 Arduino 模拟端口和ADC功能,测量电池电压,还会涉及到新的知识:串口通信。有任何疑问请在评论区提出,我会逐一回答。

第5课已经讲过,Arduino Uno能够读取 0 ~ 5V 的电压,并转换为10bit 即 0~1023 级的数字信号。这怎么理解呢?

如上图,若分辨率为 2bit(即2²) ,意味着将 5V 分为 0~3 级的数字信号,每级精度是 5V /4 = 1250mV。如果分辨率为10bit,即 0~1023,每级是 5V / 1024 = 4.88mV;如果是 12bit,即 0~4096 ,每级是 5V / 4096 = 1.22mV。分辨率越高,每级分得越小,精度就越高。

得到0~1023级测量结果后,在程序内简单转化一下(没有复杂函数,只用乘除法),就能直观读出电压。接线图如下:

问题来了,怎样显示电压呢?这里使用最简单的 IDE 串口监视器,连着开发板,直接在电脑屏幕上显示,但我们先要使用 Serial.begin() 启动串口通信,然后通过 Serial.print() 将电压在屏幕打印出来:

 

通过 A0 读取电压范围不能超过 5V,否则会损坏开发板,但要测量更高的电压怎么办?其实,我们可以通过分压电路来实现:

根据欧姆定律,Va0 = V *  R1/(R1+R2) = V * 10/20 = 1/2 V

即: V =  2 Va0

因此调整一下换算语句就能得出实际电压:

但经过分压电路的测量会降低分辨率 (R1+R2)/ R1 倍(上述电路为 2 倍),如果分压式电阻R1 = 10K,R2 = 20K,可以测量 0 ~ 15V ,但分辨率降低 3 倍。换句话说,分压测量越高的电压,分辨率就越底。

ADC 的测量精度十分重要,尤其对数控机床、3D打印、机器人、能源系统等现实应用中。下一课我们用另外一个案例,来介绍怎样提高 Arduino 模拟端口分辨率。

Leave a Reply

Your email address will not be published. Required fields are marked *