最近更新于 2024-05-05 12:32
这个模块其实就是用电阻分压,大概电路就是下面的样子吧
我用万用表测了一下,-
和 S
之间电阻约为 7.4kΩ,GND
和 VCC
之间约 37.3kΩ,大约 5.0405 倍的关系,并不是刚好 5 倍,满足精度要求就行。
接线如表
\begin{array}{|c|c|}
\hline
电压检测模块 & Arduino \\
\hline
- & GND \\
\hline
S & A0 \\
\hline
\end{array}
使用模拟引脚 A0 读取 S 端的模拟信号大小,模拟信号的取值范围是 0~1023,那么\frac{模拟信号数值}{1023}=\frac{S端的电压}{Arduino 电源电压}
,所以S端的电压=\frac{模拟信号数值}{1023}\times Arduino 电源电压
,则有VCC 端电压=S端的电压 * \frac{GND 和 VCC 之间电阻值}{-和S端电阻值}=\frac{模拟信号数值}{1023}\times Arduino 电源电压\times \frac{GND 和 VCC 之间电阻值}{-和S端电阻值}
。
这里只是演示,对精度要求不是那么高,\frac{GND 和 VCC 之间电阻值}{-和S端电阻值}
就取 5 了。我这里 Arduino 电源是 USB 插在笔记本电脑上的,我拿万用表测试了一下,实际电压 4.852V(把电脑内部的视作内阻,外设越多,供电电流越大,内阻分压越多,有效电压就会下降),这个我就是取的实际值,没有照 USB 标准 5V 来算。因此确定计算式为VCC端电压=\frac{模拟信号数值}{1023}\times4.852\times5
#define VOLTAGE 4.852
#define RATIO 5
void setup()
{
Serial.begin(9600);
pinMode(A0, INPUT);
}
void loop()
{
Serial.println(analogRead(A0) / 1023.0 * VOLTAGE * RATIO);
delay(500);
}
因此这个电压测量模块的最终精度其实和 Arduino 电源电压(VOLTAGE)和分压电阻比值(RATIO)有关,如果要保证模块测量精确,首先就要测量校正这两个参数。
下面是电压检测模块测量的某电源两端电压和万用表测量的结果