在翻找电脑里的东西时候,发现了原来半途而废研究的资料:用分压电路测量负电压。
于是又拿出来看看,忽然脑袋一时清亮起来,把原理想明白了。仿真了一下,效果还好。用实际器材测试一下,达到了可以接受的程度。
花絮ps:
本来想法的形成是昨天(2023.8.16)晚上的事情,上午要忙批阅作业和一些杂事儿,简单用Micro:bit试验了一下,并与网上一位大神交流了。中午半梦半醒,计算了原理,晚上使用Arduino UNO测试了真实的数据,挺好。
实际古老的Arduino UNO尽管在今天看起来已经不是那么时髦了,但是个人感觉它的ADC质量相当不错,而且在8位ADC水平上,远强于Micro:bit,和ESP32比也不逊色(个人感觉)。
原理图:
- 其中VCC 3.17V是我实测的Micro:bit板3V和GND引脚间电压。Micro:bit输出的3V并不准。多数单片机引出的输出电压都来自板载稳压芯片,但是由于不象参考电压那么要求高,所以也都不太准。但偏差也并不大。
- 为说明原理,要测量的负电压,记为V_in,比如这里把5V电源正极接在GND,那么R3右侧相当于输入了5V负电压。
- 测量点,即R1、R2之间探针所在处。记为V_out。
一般我们习惯上取分压器R1=R2=R,基尔霍夫一下子,有
[如果R1、R2、R3均为一般取值,即则比较麻烦]
若3个电阻使用上面电路图中的参数,则V_out = 0.0892857V_in + 0.455357*E_VCC。这样,我们在Arduino里面,可以这样写代码(以下代码,已测试):
float VCC=5.0; //这里的5.0,一般不太准,可以用好点儿的表校一下
//电脑USB口供电时校准的VCC电压
float VCC=5.062;
void setup() {
Serial.begin(9600);
}
void loop() {
//把电路图探针接到模拟引脚A0
int Vol = analogRead(A0);
float V_out = Vol/1023.0*VCC;
//R、R为等值分压电阻,R3为接入电阻
//R取10k,R3取51k
//V_{out}=frac{R}{R+2R_3}V_{in}+frac{R_3}{R+2R_3}E_{VCC}
float V_in = (V_out-0.455357*VCC)/0.0892857;
Serial.println(V_in);
delay(1000);
}
以下使用的是Micro:bit的粗略测试。3只电阻相应都缩小了10倍,即10k、10k、51k。是因为手边没有合适大小的电阻,实际保持原值应该好一些,因为R3相当于电压表内阻,小了不好。 连线图:
IO2接模拟引脚P0。MicroBlocks编写代码。分别测量两只干电池的正反向电压,以毫伏为单位。发现差值均为0.019V,这应该是零点误差造成的,估计可以很容易修正回来。 总之结论是,可以。
刚刚使用Arduino UNO的测试
实物图:
4F超级电容器40Ω电阻放电:
4F超级电容器0.22Ω电阻放电:
有什么用?
在实验数据要求并不是太过于精确时,简便地使用。比如观察电容器的充、放电实验,电压、电流很严格了吗?没有,这个时候就可以祭出此一大招了。至少,在精度允许的范围内,省了不少大角钱啊。
-
超级电容器
+关注
关注
19文章
405浏览量
28639 -
电阻器
+关注
关注
20文章
3743浏览量
61956 -
负电压
+关注
关注
3文章
98浏览量
19009 -
分压电路
+关注
关注
5文章
32浏览量
14435 -
GND
+关注
关注
2文章
527浏览量
38615
发布评论请先 登录
相关推荐
评论