如何在数字Arduino引脚上使用12 V输入?


38

我正在使用Arduino Uno microcrontroller为12 V系统创建控制器。对于输出,我使用继电器屏蔽来切换12 V组件。我有一个12 V拨动开关,可以打开系统中的一些12 V组件,我想使用同一开关的触发信号发送到Arduino数字输入。我知道Arduino最多只能处理5 V电压。将来自开关的12 V降压至5 V输入的最佳方法是什么?

编辑:该系统用于汽车。是否需要以某种方式降低汽车电池的电流强度,以免炸毁组件?


3
汽车的电流强度无关紧要-组件仅使用所需的电流。汽车电池能够提供数百安培的电流,例如启动马达所需的电流。这并不意味着总会有数百安培的电流在流动,并可能损坏设备。:)
KyranF

Answers:


44

好消息!这将很便宜!:-)

一个简单的电阻分压器会将Arduino可以消化的12 V电压降至5V。输出电压可以计算为

VOUT=R2R1+R2VIN

电阻值在10kΩ的范围内是一个不错的选择。如果您的R2为10kΩ,则R1应该为14kΩ。现在14kΩ不是标准值,而是15kΩ。您的输入电压将是4.8 V而不是5 V,但是Arduino仍将其视为高电平。如果12 V的电压过高,您还有一点裕量。即使18kΩ仍会为您提供足够高的4.3 V,但随后您必须开始考虑12 V有点太低。电压仍会被视为高吗?我会坚持使用15kΩ。

编辑
您提到了汽车环境,那么您确实需要一些额外的保护。汽车的12 V永远不会是12 V,但大多数时候会更高,峰值比标称12 V高几伏。(实际上标称值更像是12.9 V,每个电池为2.15V。)您可以放置​​5 V齐纳二极管二极管与R2并联,这将切断高于齐纳二极管5 V的任何电压。但是,齐纳电压会随电流而变化,并且在低输入电流时,电阻器为您提供的电阻将在较低电压下截止。更好的解决方案是在Arduino的输入和5 V电源之间安装一个肖特基二极管。然后,任何高于5.2 V的输入电压都会使肖特基二极管导通,并且输入电压将被限制在5.2V。为此,您确实需要一个肖特基二极管,一个普通的PN二极管为0。

更好的
迈克尔的光耦合器是一个很好的选择,尽管价格稍贵。通常,您将使用光耦合器将输入与输出隔离,但是您也可以在此处使用它来保护输入。

在此处输入图片说明

工作原理:输入电流点亮内部红外LED,这会导致通过光电晶体管的输出电流。输入电流和输出电流之间的比率称为CTR,即“电流传输比率”。所述CNY17具有最少40%的点击率,则需要4毫安输出10毫安输入该装置。让我们选择10 mA输入。那么R1应该是(12 V-1.5 V)/ 10 mA = 1kΩ。输出电阻必须在4 mA处产生5 V的压降,然后应为5 V / 4 mA = 1250Ω。最好有一个更高的值,反正电压降不会超过5V。4.7kΩ会将电流限制为约1 mA。

Vcc是Arduino的5 V电源,Vout用于Arduino的输入。请注意,输入将被反相:如果存在12 V,它将为低电平,否则将为高电平。如果您不希望这样做,则可以交换光耦合器输出和上拉电阻的位置。

编辑2
光耦合器解决方案如何解决过电压问题?电阻分压器是成比例的:输出电压是输入的固定比率。如果您在12 V输入下计算出5 V输出,那么24 V输入将给出10 V输出。不好,因此是保护二极管。

在光耦合器电路中,您可以看到连接到Arduino输入引脚的右侧根本没有任何高于5 V的电压。如果光耦合器导通,则晶体管将汲取电流,在上述示例中,我使用了4 mA。根据欧姆定律(电流乘以电阻=电压),1.2kΩ会导致4.8 V电压降。然后,电阻两端的输出电压将为5 V(Vcc)-4.8 V = 0.2 V,这是一个低电平。如果电流较低,则电压降也将较小,并且输出电压将上升。例如,1 mA电流将导致1.2 V压降,输出将为5 V-1.2 V = 3.8V。最小电流为零。然后,电阻两端没有电压,输出将为5V。这是最大值,

如果输入电压过高怎么办?您不小心连接了24 V电池而不是12V。然后,LED电流将增加一倍,形成10 mA至20 mA。40%的点击率将导致8 mA输出电流,而不是计算出的4 mA。通过1.2kΩ电阻的8 mA压降为9.6V。但是用5 V电源供电将是负的,这是不可能的。您不能在这里低于0V。因此,尽管光耦合器非常希望汲取8 mA电流,但电阻会限制这一电流。通过它的最大电流是满5 V时的最大电流。这样,输出实际上将为0 V,电流为5 V / 1.2kΩ= 4.2 mA。因此,无论您使用哪种电源,输出电流都不会高于该值,并且电压将保持在0 V至5 V之间。不需要进一步的保护。

如果你希望过压你必须检查光耦的LED能够处理增加的电流,但20mA的不会是大多数光耦合器的一个问题(他们通常额定在50 mA以下),而且,这对输入电压,可能不会发生IRL。


该系统用于汽车。是否需要以某种方式降低汽车电池的电流强度,以免炸毁组件?我是新来的。谢谢
DW 2012年

@DW呃,车!:-(我会更新我的答案。
stevenvh

@DW-不,汽车电池的容量无关紧要。电流将由电压(12 V)和电阻(总计25 kohm)决定。然后根据欧姆定律,电流将为12 V / 25 kohm = 0.5 mA。电池是40 Ah型还是400 Ah型都没有关系。电阻不会允许更多。
stevenvh 2012年

那很棒。谢谢你的帮助。只是好奇,但是这样的事情会起作用吗?robotshop.com/ca/productinfo.aspx?pc=RB-Spa-750&lang=zh-CN
DW

2
@stevenvh谢谢史蒂夫。一旦我对电子产品有了新的认识,我期待着重新青睐它。谢谢
DW 2012年

15

隔离12V开关信号的一种好方法是将其通过光电耦合器。该电路的配置类似于以下内容。

在此处输入图片说明

图中的Vi代表电路中由开关(S1)切换的12V。选择R1可将通过光耦合器D1部分的电流限制在所选组件额定值范围内的水平。

光耦合器并不是世界上最快的组件,尤其是最便宜的组件,但是对于动作缓慢的情况(例如人为控制的开关),耦合器的速度几乎没有关系。


15

您还可以使用二极管和电阻器,如下所示:

原理图

模拟该电路 –使用CircuitLab创建的原理图

我会让电阻变得相当坚硬,否则您将从该电路中吸收大量功率。该电路的优点(与分压器相比)在于,它并不关心您的原始电压是12V,14V还是15V:它将为5V(取决于二极管,实际上为5.2-5.3V),无论输入电压。


相当聪明,电压独立性为+1!
Florian Castellane

5
小心引脚绝对最大额定值上的过电压。例如,ATmega32u4数据表:任意引脚相对于地(8)的电压:-0.5V至VCC + 0.5V。如果使用常规二极管,则使用小于170kOhm的电阻时,电压将大于VCC + 0.5V。我认为肖特基二极管是最安全的。
cyberponk

13

为了实现电压独立性,请使用电阻器调节电流,并使用齐纳二极管调节电压,如下所示:

原理图

模拟该电路 –使用CircuitLab创建的原理图

使用30k电阻器,它将输出4.99V,在12Vin时仅使用约234uA。
在这种情况下:
R1消耗234uA x(12V-4.99V)= 1.64mW
D1消耗234uA x 4.99V = 1.17mW

总功耗:2.81mW(输入高时)


对于可见的任何东西,我将串联使用LED +电阻分压器以在12V时提供5V信号,并将齐纳二极管与分压器和LED的下半部分并联,以防止过压。这样,当您有输入信号时,LED会亮起并提供视觉反馈。
Goswin von Brederlow

@GoswinvonBrederlow能否请您将电路LED /二极管/电阻电路拉出?
嘶嘶

在上面的示意图中,将R1设置为770 Ohm,并在齐纳二极管上并联一个330Ohm和一个红色LED。然后,在12V输入下,约9mA电流将流经LED,您将获得5V输出信号。如果通过齐纳二极管使输入电压升高,则会将输出信号限制为5.1V,并保护arduino和LED。
Goswin von Brederlow

-2

有点晚了,但是在我的车上我使用了LM7805。效果很好,价格便宜。


1
不如2个电阻器或一个电阻器和一个二极管便宜。
戴夫·特威德

7
@TonNies您猜错了。OP不在为其控制器寻找电源电压。更多关于信号调理。
Ariser 2015年

1
使用LM7805进行电平转换12v信号没什么错。
chugadie '16

1
@chugadie:但是,如果您只想为一个IO引脚降低12V电压,那是一种非常不常见且相对“昂贵”的过大方法。
Rev1.0
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.