最近更新于 2023-08-20 00:14

file

这个模块其实就是用电阻分压,大概电路就是下面的样子吧
file

我用万用表测了一下,-S 之间电阻约为 7.4kΩ,GNDVCC 之间约 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)有关,如果要保证模块测量精确,首先就要测量校正这两个参数。

下面是电压检测模块测量的某电源两端电压和万用表测量的结果
file
file