我正在使用 Arduino Uno microcrontroller 为 12 V 系统创建控制器。对于输出,我使用继电器屏蔽来切换 12 V 组件。我有一个 12 V 拨动开关,可以打开系统中的一些 12 V 组件,我想使用同一开关的触发信号发送到 Arduino 数字输入。我知道 Arduino 最多只能处理 5 V。将来自开关的 12 V 降压到输入 5 V 的最佳方法是什么?
编辑:该系统用于汽车。是否需要以某种方式降低汽车电池的安培数以免炸毁组件?
我正在使用 Arduino Uno microcrontroller 为 12 V 系统创建控制器。对于输出,我使用继电器屏蔽来切换 12 V 组件。我有一个 12 V 拨动开关,可以打开系统中的一些 12 V 组件,我想使用同一开关的触发信号发送到 Arduino 数字输入。我知道 Arduino 最多只能处理 5 V。将来自开关的 12 V 降压到输入 5 V 的最佳方法是什么?
编辑:该系统用于汽车。是否需要以某种方式降低汽车电池的安培数以免炸毁组件?
好消息!这会很便宜!:-)
一个简单的电阻分压器将 12 V 降至 Arduino 可以消化的 5 V。输出电压可以计算为
10 kΩ 范围内的电阻值是一个不错的选择。如果您的 R2 为 10 kΩ,则 R1 应为 14 kΩ。现在 14 kΩ 不是标准值,但 15 kΩ 是。您的输入电压将为 4.8 V 而不是 5 V,但 Arduino 仍会将其视为高电平。如果 12 V 有点太高,您还有一点余量。即使 18 kΩ 仍然会给你足够高的 4.3 V,但是你必须开始考虑 12 V 有点太低了。电压仍然会被视为高吗?我会坚持使用 15 kΩ。
编辑
您提到汽车环境,然后您确实需要一些额外的保护。汽车的 12 V 永远不会是 12 V,但大多数时候会更高,峰值比标称 12 V 高几伏。(实际上标称更像是 12.9 V,每个电池为 2.15 V。)您可以放置一个 5 V 齐纳二极管二极管与 R2 并联,这应该会切断任何高于齐纳二极管 5 V 的电压。但是齐纳二极管电压会随电流而变化,并且在低输入电流下,电阻器会在较低电压下切断。更好的解决方案是在 Arduino 的输入和 5 V 电源之间安装一个肖特基二极管。那么任何高于约 5.2 V 的输入电压都会使肖特基二极管导通,并且输入电压将被限制在 5.2 V。为此,您确实需要一个肖特基二极管,一个普通的 PN 二极管有一个 0。
Better
Michael 的光耦合器是一个不错的选择,虽然价格稍贵一些。您通常会使用光耦合器将输入与输出隔离,但您也可以使用它来保护您想要的输入。
工作原理:输入电流点亮内部红外 LED,从而产生通过光电晶体管的输出电流。输入和输出电流之间的比率称为CTR,即电流传输比。CNY17的最小 CTR 为 40 %,这意味着您需要 10 mA 输入才能获得 4 mA 输出。让我们选择 10 mA 输入。那么 R1 应该是 (12 V - 1.5 V) / 10 mA = 1 kΩ。输出电阻必须在 4 mA 时产生 5 V 压降,那么这应该是 5 V / 4 mA = 1250 Ω。最好有高一点的值,反正电压不会下降超过5V。4.7 kΩ 会将电流限制在大约 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.2 kΩ 将导致 4.8 V 电压降。那么输出电压将为 5 V (Vcc) - 电阻两端的 4.8 V = 0.2 V,这是一个低电平。如果电流越低,电压降也会越小,输出电压也会升高。例如,1 mA 电流将导致 1.2 V 压降,输出将为 5 V - 1.2 V = 3.8 V。最小电流为零。然后你没有电阻两端的电压,输出将是 5 V。这是最大值,那里'
如果输入电压太高怎么办?您不小心连接了 24 V 电池而不是 12 V。然后 LED 电流将翻倍,从 10 mA 变为 20 mA。40 % CTR 将产生 8 mA 输出电流,而不是计算得出的 4 mA。通过 1.2 kΩ 电阻器的 8 mA 将是 9.6 V 压降。但如果是 5 V 电源,那将是负的,这是不可能的;你不能低于 0 V 这里。因此,虽然光耦合器非常希望消耗 8 mA 电流,但电阻器会限制这一点。通过它的最大电流是满 5 V 电压通过它时。输出将真正为 0 V,电流为 5 V / 1.2 kΩ = 4.2 mA。因此,无论您连接何种电源,输出电流都不会高于此值,并且电压将保持在 0 V 和 5 V 之间。无需进一步保护。
如果您预计过压,则必须检查光耦合器的 LED 是否可以处理增加的电流,但 20 mA 对大多数光耦合器来说不是问题(它们通常额定最大为 50 mA),此外,这是双倍的输入电压,这可能不会发生IRL。
隔离 12V 开关信号的一个好方法是将其通过光耦合器。该电路的配置类似于以下内容。
图中的 Vi 代表电路中由开关 (S1) 切换的 12V。选择 R1 可将通过光耦合器 D1 部分的电流限制在您选择的组件额定值范围内。
光耦合器不是世界上最快的组件,尤其是最便宜的组件,但对于像人控开关这样缓慢动作的情况,耦合器的速度是无关紧要的。
对于电压独立性,使用一个电阻器来调节电流和一个齐纳二极管来调节电压,如下所示:
使用 30k 电阻器,这将输出 4.99V 并且仅使用大约 234uA @ 12Vin。
在这种情况下:
R1 消耗 234uA x (12V - 4.99V) = 1.64mW
D1 消耗 234uA x 4.99V = 1.17mW
总功耗:2.81mW(输入高时)
您还可以使用二极管和电阻器,如下所示:
我会让电阻器变得相当硬,否则你会从这个电路中吸收很多功率。该电路的优点(与分压器相比)在于它不关心您的原始电压是 12V、14V 还是 15V:它将是 5V(实际上是 5.2-5.3V,具体取决于二极管),无论输入电压。