坚持只有一个万用表/电压表?但是,有时您需要同时检查 2 或 3 个电压。那么您可能会考虑制作一个真正的直流电压表!
采用常用组件和易于理解的代码设计,可以同时测量单个威廉希尔官方网站 或 3 个独立威廉希尔官方网站 中 3 个节点的正电压和负电压。
以下硬件用于构建此设备:-
通常,ATmega328P (Arduino Uno) 可以测量 Gnd 和 AVCC 范围之间的电压(即 0 到 5V),无需任何分压电阻网络。如果启用内部 AREF,它可以测量 Gnd 和 AREF 范围之间的电压(即 0 到 1.1 V)。使用一些分压器,可以测量高于 5V 的电压。这些都是相对于 Gnd 的正电压。
但它无法测量低于 Gnd 的任何电压,这意味着它无法测量负电压。问题是,ATmega328P 有一个单端 ADC,默认情况下会根据Gnd 进行测量。
解决办法是,不要再对 Gnd 进行测量。
真正的电压表有 COM(黑色)和 V(红色)端子,您将 COM 连接到一个节点,V 连接到威廉希尔官方网站 上的另一个节点。相对于 COM 节点,V 节点上的电压读数。
您需要构建一个 (AFE)模拟前端,某种信号调节威廉希尔官方网站 来生成类似 COM 的行为。此 COM 节点的电压应介于 AVCC 和 Gnd 之间。理想情况下,AVCC 电压的一半,但对于本设计,它是 AREF 的一半。
当对 COM 进行外部电压测量时,您可以轻松测量正电压和负电压!
请仔细检查以下威廉希尔官方网站 :
那么,这里发生了什么?内部参考 AREF 在 ATmega328P 上启用(来自无效设置中的固件/代码)。AREF 引脚为 1.1 V。现在,ADC 测量的有效范围为 0 至 1.1 伏。
接下来,使用 LM324 运算放大器缓冲这个 1.1 AREF 电压,这意味着我们仍然有来自第一个运算放大器输出的 1.1 电压。一个 10k 多圈微调电位器精确设置为 5k 以产生 550mV(半 AREF)伏特。这个 550 mV 信号由第二个运算放大器缓冲。550 mV 信号也连接到 ADC Ch - 0。它应该读取 512(10 位的一半)。
有一个分压器网络由 5 兆欧姆(两个 10M 并联)和 100 千欧姆电阻组成,连接到第二个运算放大器的输出。
我将此分压器网络上的电阻较低端 (100k) 定义为 COM,电阻较高端 (5M) 端定义为 V。此分压器的中点连接到 ADC Ch - 1。当没有外部电压施加到此分压器时,ADC Ch - 1 应读取 512(因为 550 mV)
当施加外部电压时,分压器中点电压将移动到 550 mV 以上或以下。如果 V 上的外部电压相对于 COM 较高(正电压),它将移动到 550 mV 以上,如果 V 上的外部电压相对于 COM 较低(负电压),它将移动到 550 mV 以下。ADC Ch-1 读数将相应改变。使用 ADC 读数的这种变化,我们可以计算外部电压。
为什么使用 AREF 而不是 AVCC ?
此设计由 LiPo 电池供电,充满电的 LiPo 将从 4.2 伏开始,电压会逐渐下降。所以,AVCC也会发生变化。但内部参考 AREF 具有恒定的 1.1 伏特。这就是我选择 AREF 的原因。
如果使用其他没有AREF的单片机,可以使用TL431 IC来产生参考电压!
为什么使用 LM324 运算放大器?
LM324 IC 在一个封装中有 4 个运算放大器,应用广泛,它的输出可以(非常接近)Gnd。它还适用于 3 至 32 伏之间的任何电源电压。
您始终可以使用更好的运算放大器(精密、低噪声、轨到轨)
使用 ADC 测量的电压将是实际施加电压的一小部分。这就是为什么在固件内部使用以下公式来计算实际电压的原因:-
+/- V = (R_High / R_Low) / 2
V < sqrt ((R_High + R_Low) * P)
R_High + R_Low > hundreds of kOhms to few MOhms
对于这个项目,这个电压表可以测量 +/- 25 伏特,R_High = 5M(或 5000k)和 R_Low = 100K ,额定功率为 1/10 瓦,满足以上 3 个条件
Measurement Resolution = Measurement Range / ADC Resolution
示例:假设新的 AA 电池用 Fluke 电压表读数为 1.627 伏,但该电压表可能读数仅为 1.5 或 1.6 或 1.7 伏
For better range or resolution select microcontroller with 12 bit ADC or more
Reduce measurement range to increase resolution
Reduce resolution to increase range or measure bigger voltages
准确性取决于很多因素。在这个项目中实现了以下一些技巧。
在固件中实施以下操作将提高准确性:-
尽管可以使用以下代码将 Arduino UNO 或 Atmega328P 的 AREF 引脚设置为 1.1 伏
analogReference(INTERNAL);
不同芯片的实际 AREF 电压可能在 1.06 伏到 1.13 伏之间变化。建议使用高精度万用表测量 AREF 引脚,并找到实际电压。然后在代码中定义它以获得更高的准确性
#define AREF 1.097 // Aref pin voltage
不要只是复制粘贴 1.1 伏!
这是用于过压或浪涌保护的双向二极管钳位,您可以与 R_Low 并联使用。由于空间不足,我将这部分留在了我的构建中!
安全永远不能掉以轻心!当 R_Low 两端的电压超过 +/- 800 mV 时,这些二极管将开始钳位。这只是一个例子,根据需要使用不同类型的二极管以获得合适的钳位电压。
为 1306 OLED 显示器安装u8glib(由 Oliver 设计)库。
校准
为获得最佳效果,您需要使用常规万用表/电压表校准该电压表。您将需要任何电池 AA 或 LiPo。用普通万用表测量电池电压。然后用这个电压表测量电池。看到读数有一些差异,现在稍微调整/调整 10K 电位器(参见示意图)以进行校准。
通过反转电池的负电压来执行相同的步骤。
您还可以通过使用电阻器定义的值添加/减去一些偏移值来从代码进行软校准。
测量
共有 3 个 Commons COM1、COM2、COM3 和 3 个对应的 V1、V2、V3 探头,用于 3 个不同通道的电压测量。
对于通道 1,电压是在 V1 上相对于 COM1 测量的。如果用 V1 探测的威廉希尔官方网站 节点的电位高于用 COM1 探测的节点,则电压读数将为正。如果 V1 和 COM1 在这两个威廉希尔官方网站 节点上交换,则电压读数将为负。
同样适用于带 V2 和 COM2 的通道 2 以及带 V3 和 COM3 的通道 3。
在不共享任何电气连接的 3 个不同威廉希尔官方网站 上测量三个不同电压时,对 3 个威廉希尔官方网站 使用 V1/COM1、V2/COM2、V3/COM3 对。
在单个威廉希尔官方网站 上测量三个不同的电压时,请勿使用多个 COM 。只需将一个 COM (例如 COM3,任何 COM 都可以!)连接到 Gnd 或该威廉希尔官方网站 的任何节点。然后使用 V1、V2、V3 测量 3 个不同节点上相对于 Gnd 或连接 COM 的节点的 3 个不同电压。
在同一威廉希尔官方网站 上连接多个 COM 会搞砸读数!
我忘了添加一些重要的东西,当电压范围超过测量范围时显示 OL(过载)。希望我会用额外的功能更新代码。
内部 EEPROM 上的一些电压记录可能很方便,我也会尝试这样做。我想为 REL(归零幻影电压)和 HOLD(冻结屏幕)添加几个按钮。我已经在顶部焊接了一个母接头以供将来扩展,敬请期待。
该设计可用于测量缓慢变化的交流电压/信号(假设为正弦波),而无需更改硬件。它还可用于设计分流电流表(提示:用非常低的 R 值替换分压器)。但是您需要为此编写不同的代码。
这个概念适用于任何微控制器,请随意构建您自己的设计,祝您好运。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !