结合分压电路直接测量负电压

电子说

1.3w人已加入

描述

在翻找电脑里的东西时候,发现了原来半途而废研究的资料:用分压电路测量负电压。

于是又拿出来看看,忽然脑袋一时清亮起来,把原理想明白了。仿真了一下,效果还好。用实际器材测试一下,达到了可以接受的程度。

花絮ps:

本来想法的形成是昨天(2023.8.16)晚上的事情,上午要忙批阅作业和一些杂事儿,简单用Micro:bit试验了一下,并与网上一位大神交流了。中午半梦半醒,计算了原理,晚上使用Arduino UNO测试了真实的数据,挺好。

实际古老的Arduino UNO尽管在今天看起来已经不是那么时髦了,但是个人感觉它的ADC质量相当不错,而且在8位ADC水平上,远强于Micro:bit,和ESP32比也不逊色(个人感觉)。

原理图:

  1. 其中VCC 3.17V是我实测的Micro:bit板3V和GND引脚间电压。Micro:bit输出的3V并不准。多数单片机引出的输出电压都来自板载稳压芯片,但是由于不象参考电压那么要求高,所以也都不太准。但偏差也并不大。
  2. 为说明原理,要测量的负电压,记为V_in,比如这里把5V电源正极接在GND,那么R3右侧相当于输入了5V负电压。
  3. 测量点,即R1、R2之间探针所在处。记为V_out。

GND

一般我们习惯上取分压器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相当于电压表内阻,小了不好。 连线图:

GND

IO2接模拟引脚P0。MicroBlocks编写代码。分别测量两只干电池的正反向电压,以毫伏为单位。发现差值均为0.019V,这应该是零点误差造成的,估计可以很容易修正回来。 总之结论是,可以。

GND

GND

GND

GND

刚刚使用Arduino UNO的测试

实物图:

GND

4F超级电容器40Ω电阻放电:

GND

4F超级电容器0.22Ω电阻放电:

GND

有什么用?

在实验数据要求并不是太过于精确时,简便地使用。比如观察电容器的充、放电实验,电压、电流很严格了吗?没有,这个时候就可以祭出此一大招了。至少,在精度允许的范围内,省了不少大角钱啊。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分