为什么arduino电压读数更高,当有继电器打开(数字引脚上的负载)



我使用arduino Uno通过简单的1/3电阻分压器从A0引脚读取电压(5v适用于分压器,A0获得5v的1/3)。D1脚接继电器

(我的最终目标是测量15v,这就是为什么使用分压器来诊断问题)

我注意到当继电器接通时,A0读数高于应有的值。我不确定原因是什么,但我想了解一下。

电路描述:

A0:用于测量电压的模拟引脚。

D1:用于控制继电器的数字引脚。

电阻分压器:R1 = 2k, R2 = 1k。R1接5v (arudino Uno 5v输出)。A0接R2,因此A0应得到5v的1/3,即1.67v。

很少测量来诊断问题:

Vmesaure_all: R1 + R2的手动电压测量值。

Vmeasure_r1:仅对R2进行手动电压测量,为A0的输入电压。

Vcode_r1_A0: arduino A0模拟读数。

A)继电器断开:

Vmeasure_r1=1.67v (1.67 *3 = 5.01)

Vmesaure_all = 5.03 v

Vcode_r1_A0=339 (339 * 3 = 1017)

以上都有意义。

B)继电器打开:

Vmeasure_r1=1.63v (1.63 * 3 = 4.89v)好的。有意义,因为它几乎与Vmesaure_all)相同

Vmesaure_all=4.91v(继电器是负载,当测量R1+ R2电压时使电压降。我认为这是预料之中的)

Vcode_r1_A0=345 (为什么高于339,这是继电器关闭A0读取??)

我无法解释这个。如果用这个值来计算R1 + R2上的电压,与继电器断开相比,你将得到更高的电压(待测电压)。

我希望Vcode_r1_A0是<339 .

我做了一些实验,并得到了上述一致的行为。为什么?

是的,这些数字是有意义的。模数转换器(ADC)本身并不是一个绝对电压表。ADC有一个参考电压,并计算相对于该参考电压的数字值。Arduino通过analogReference()函数为您提供参考电压的选择

默认行为是模拟基准为电源电压引脚,名义上为5.0 V。但这就引出了你的问题:

If Vcc changes while the analog input stays the same, the digital value changes.  
If Vcc drops, the digital value will increase.

换句话说,ADC的精度取决于其参考电压。

ATmega芯片包括一个不随Vcc变化的参考电压。如果你设置内部参考,那么满量程1024数字现在是1.1 v。

analogReference(INTERNAL);
x = analogRead(A0);
// now x = 1024 is A0 = 1.1 V

使用此代码,数字值将更准确,对Vcc不敏感。权衡是,满量程范围大大减少到只有1.1 V。为了适应减小的范围,你需要加一个分压器。因为你已经打算这样做了,你应该使用内部参考并调整你的分频器的电阻值。

但是,你的Vcc下降了0.1 V!你有没有注意到薯条很烫或者有烧焦的味道?确认继电器线圈吸入的电流在引脚的额定值之内。通常,人们使用晶体管或驱动芯片(例如ULN2003)为继电器负载供电。还要注意,将继电器和电机等电感负载直接连接到数字引脚往往会破坏这些引脚,因为当您关闭线圈时会产生反激电压。

最新更新