通过GPIO引脚为5V继电器供电


22

我有一组继电器(5),我希望从我的Pi上运行。我正在使用由Sparkfun的大功率继电器套件供电的5V TE Con​​nectivity继电器,该继电器套件使用NPN晶体管触发继电器。

到目前为止,我遇到的问题是我无法切换继电器。GPIO输出引脚不提供5V电压吗?我以为Pi是在GPIO上做的。


4
没有Gpio引脚为3.3伏。
史蒂夫·罗比拉德

那您知道我可以修改电路的方法吗?
hightekjonathan

1
这将需要5伏电源和接地线,以将所有地面连接在一起-我这样做是为了切换塔式信号灯,例如ebay.com/itm/…–
Steve Robillard,

2
我建议先让它与单独的电源一起工作,然后解决Pi的电源需求和便携性的复杂性。就像他们说的,吃大象的最好方法是一次咬一口。
史蒂夫·罗比拉德

1
所有地面都绑在一起。5v正极连接到达灵顿的公共端。我按照图。
hightekjonathan

Answers:


36

为什么不简单地这样?

Raspberry Pi在0和3V3之间切换,足以使Q1饱和,从而接管了“繁重的”工作:开启/关闭+ 5V继电器。根据您使用的继电器,可能会对D1和Q1进行一些小的修改。

树莓派控制继电器


很好的答案!这是一种非常安全的方法。
Piotr Kula 2015年

3
很好的答案,那应该彻底解决“继电器问题”。也许最好补充一下,Pi和继电器的电源电压应该相同或者至少共享一个公共GND。虽然这对于电气工程师来说似乎很明显,但对于初学者来说却是一个陷阱。
加纳玛

@Ghanima:是的,您肯定有一点。但是正如您提到的,对我来说,如果我看到一个地面符号,那么这对双方都是“显而易见的”(此处:覆盆子和接力)。我特意为继电器提供了+ 5V的电压(甚至可以是+ 24V或任何安全的低直流电压),以向听众清楚地表明,上述电路的目的是在两个站点上使用不同的电压。这就是电路的目的。
GeertVc 2015年

1
R2的目的是什么?
erikH 2015年

2
@erikH:该电阻将确保Q1的基极具有固定电平(在这种情况下,接地),以防R1的输入浮动。如果您确定输入永远不会浮动,则不需要R2,但这是一种“保护措施”。如果输入可以浮动并且您没有连接R2,则晶体管可以不受控制的方式开始开关。
GeertVc 2015年

7

# 介绍 #

OP希望使用Rpi安全地控制5个Sparkfun的Beefcake继电器模块库。他有一个问题,因为Rpi GPIO逻辑电平为3.3V,但他的继电器使用5V逻辑控制。他想知道如何修改Rpi来解决逻辑级差异问题。他的选择包括:使用晶体管BC5468来驱动继电器线圈。获得一个光隔离继电器,并使用ULN2803驱动它;使用诸如UDN2981之类的源驱动程序...

经过调查后,我现在提出一些解决方案,各有其优缺点。在权衡风险,可靠性,成本等之后,OP可以选择解决方案。

#内容#

解决方案1-修改NPN晶体管的偏置电阻

解决方案2-使用UDN2981将Rpi的3.3V GPIO信号上移至5V

解决方案3-使用74HC03和74HC04将Rpi的3.3V GPIO信号上移至5V

解决方案4-使用74HCT125进行逻辑电平转换

解决方案5-使用TXS0102进行逻辑电平转换

Soution 6-使用2N2222进行逻辑电平转换

解决方案7-使用2N7000进行逻辑电平转换

FAQ1-如何给Rpi和继电器模块供电并接地

FAQ2-如何避免浮动输入问题

FAQ3-我的继电器总是打开,无论是高输入还是低输入,是因为Rpi Low信号不够低吗?

FAQ3-我的Rpi GPIO低信号无法关闭继电器,但是可以将GPIO设置为输入。如果这样做会伤害Rpi吗?

硬件故障排除建议

软件故障排除建议

参考文献

#解决方案1.修改NPN晶体管偏置使其兼容3.3V#

有两种通用的解决方案类型:

(1)修改模块的5V逻辑电平输入电路以适应3.3V信号,

(2)使用3.3V至5V逻辑电平转换器将Rpi的3.3V信号上移至5V。

我现在从(1)开始。

调查中

Sparkfun的Beefcake继电器模块具有一个NPN晶体管2N3904(Q2),用于驱动线圈(U1)。它设计用于Arduino的5V逻辑信号。

SparkFun继电器控制套件原理图

我有一个类似的NPN晶体管模块KY019,可以由Rpi的3.3V信号驱动。因此,我检查了其输入信号要求,以了解为什么KY019可以接受3.3V信号,但Beecake却不能。

KY019规格

我发现KY-019的触发电平为2.5V和0.1mA。NPN晶体管将该信号放大到50mA,足以使线圈充能以激活继电器。

铜陵线圈规格

Rpi GPIO(具有高于2.8V的高电平,最大电流限制为16mA),可以舒适地提供4mA 电流,直接驱动模块应该没有问题。

线圈的响应时间为10mS。我对Rpi GPIO引脚17进行了编程,以便在40毫秒(25cps)的周期内切换继电器模块,并发现继电器可以如预期般高兴地咔嗒一声。(我使用的是2米长的GPIO信号连接线,因此继电器输入端的信号有点吵。)

KY019拨动测试

如何修改Beefcake模块以使其兼容3.3V逻辑

Beefcake NPN晶体管具有一个值为1K的限流电阻R2。该电阻器限制了Arduino 5V逻辑高电平的基本电流。放大后的极限范围内的基极电流(通常hFE> 100)足够大,可以使线圈充满能量。

计算进入Beefcake继电器模块的Arduino 5V GPIO电流:

Arduino电流i〜(4V [Arduino高]-1V [Vce(sat)])/ 1K [R])= 3V / 1K = 3mA

但是,Rpi的逻辑高信号低于Arduino,因此相应的受限电流较小,并且放大后不足以驱动线圈。

Rpi电流i〜((3V [Rpi高]-1V)/ 1K = 2mA

修改很简单-只需用较小的电阻(例如510R)替换1K R2。

Rpi电流i(修改后)=(3V-1V)/ 501R = 4mA

我根据电路分析和实验来进行教育猜测。我认为我的猜测是90%正确。

风险分析

尽管小信号NPN晶体管2N3094可以用于小负载切换,但是它不是那么可靠。对于继电器开关,使用专为电感性负载设计的功率晶体管(例如SS8050,UDN2981)更为安全。

OP希望使用一种不会炸掉他的Pi的安全方法,因此出于可靠性考虑,应该使用诸如UDN2981之类的源驱动程序。

/ ...

#解决方案2-使用UDN2981驱动Beefcake继电器模块#

评论指出,OP的Sparkfun Beefcake继电器模块是高电平触发器,因此不能使用常用的接收器驱动程序ULN2803。与ULN2803类似的驱动程序,但应改用电流源而不是电流吸收

我认为UDN2981是OP中继模块的合适驱动程序。

我成功验证了UDN2981驱动类似于Beefcak的高电平触发继电器模块,而ULN2803触发了低触发继电器模块。以下是摘要。

UDN2981控制高触发,NPN晶体管输入型继电器模块

我首先在不连接Rpi的情况下手动测试了UDN2981,以使4个LED闪烁,以确保电路工作正常。

uln2803 udn2981照片

然后,我设置了4个NPN晶体管输入型继电器模块(KY019),并将这4个继电器模块输入连接到4个UDN2981通道输出。

KY019 x 4

然后,我将4个Rpi 3.3V GPIO引脚直接连接到4个UDN2981通道输入。我使用以下python函数以25 cps的速率切换4个中继模块。

python函数切换4个继电器

结果很好。4个继电器模块发出咔嗒声,LED按预期的25cps闪烁。Rpi GPIO输出信号保持在3.3V附近,而UDN输出信号保持在4.0V附近,这意味着没有输入过载。

切换模块波形

UDN2981控制高触发,光电隔离继电器模块

OP还考虑使用光电隔离继电器模块,因为它们更安全。我已成功使用相同的UDN2981控制4个高电平触发光电隔离继电器模块(MK055)。

MK055继电器模块

实际上,无论NPN晶体管还是光电隔离类型,UDN2981均可用于控制任何种类的高触发模块。

但是,对于低触发模块,无论是PNP晶体管还是光电隔离的,源极驱动器UDN2981都不起作用,应使用ULN2803或其他漏极驱动器。

ULN2803控制低触发PNP晶体管输入或光电隔离继电器模块

我已成功验证ULN2083宿驱动器可以控制4个低触发光电隔离继电器模块。我首先测试了手动闪烁的4个LED,然后使用了与上面相同的python函数来测试这4个模块。结果也不错。

MK101继电器模块

讨论区

ULN2803和UDN2981的优缺点

优点

  1. ULN2803UDN2981可以通过TTL或CMOS逻辑信号与3.3V或5V的电源电压直接驱动。

  2. 其带有钳位二极管的额定500mA输出适用于开关继电器和步进电机。

缺点

  1. ULN2803尤其不是UDN2981并不常见。

  2. 它们具有8个通道,因此具有更大的18引脚DIP封装。对于较少的通道,带14引脚DIP封装的更常见的74HC03 / 04或74HCT125更常见且更易于操作。

#解决方案3-使用74HC03和74HC04将RPi的3.3V GPIO信号上移#

使用UDN2981驱动继电器模块是一个很大的挑战,因为它们具有内置的反激二极管来直接为继电器供电。

UDN2981不常见,也不适合初学者尝试。对于初学者来说,非常普通且便宜的逻辑门IC,74HC03 Quad NAND门和HC04十六进制反相器可以完成与UDN2981相同的工作,可以填充3.3V逻辑信号。

我已经成功验证了HC03和HC04将3.3V逻辑电压升至5V,并发现它可用于晶体管输入和光电隔离的高电平触发模块。

HC03 04转换器原理图

hc03 hc04 ky019 mk047

hc03 hc04 ky019 ky047

#参考#

R1。继电器如何工作?-TechyDIY

R2 继电器开关电路-电子教程

R3。牛肉蛋糕继电器控制连接指南-SparkFun

R4 数字缓冲器和三态缓冲器-电子教程

R5 上拉电阻-电子教程

R6。逻辑级别教程-SparkFun

Arduino的Voh 4.2V,Vol 0.9V

R7。GPIO GPIO引脚电压和电流规格

Rpi Voh 2.4V,Vol 0.7V

R8。双极晶体管-电子教程

================

#A.3使用HCT125的逻辑电平转换器#

因此,我测试了另一个上变频器HCT125。我很高兴发现它运作良好。连接到NPN晶体管驱动的继电器模块时,HCT125转换的5V0信号不会下降。

HCT125液位转换器

/ ...

附录完

** *长答案将被删除* **

这个冗长的答案太冗长而混乱。我现在正试图删除不相关的段落,也许通过问相关问题并回答自己来代替它们。


如何检查光电耦合器/光电隔离继电器模块

  1. 获取跳线。
  2. 将一端连接到继电器模块的信号/输入引脚。
  3. 握住另一端并触摸Vcc(+)和Gnd(-)引脚,然后检查以下结果。

继电器模块测试结果表

2.1晶体管输入类型

对于流行的双极NPN晶体管输入类型,源极驱动器信号(3.3V至5V逻辑电平转换后的Rpi GPIO信号或RPi GPIO信号)通过串联的LED和偏置电阻到达晶体管的基极。

晶体管输入型(BJT NPN)继电器模块的示例

本继电器开关教程中所述,还有其他不太流行的继电器开关电路

2.2光电耦合器输入类型

光电耦合器输入型继电器具有光耦合器作为输入。光电耦合器驱动另一个晶体管,该晶体管又驱动继电器线圈。


附录C-使用TXS0102的逻辑电平转换器

现在我知道Rpi GPIO可以直接驱动继电器模块,但是有两个问题。首先,带有长连接线的GPIO信号有噪声,因此可靠性不高。其次,飞轮二极管1N4148可能无法完全抑制线圈反电动势,如果1N4148不幸发生故障或连接不正确(接触不良,干焊点等),反电动势可能会损坏Rpi。

因此,我决定使用逻辑电平转换器将Rpi GPIO信号从3V3上移至5V。我首先尝试了TXS102转换器,并发现它运行良好。除了上移GPIO信号外,高电平噪声也大大降低了。

TXs0102的照片和波形

但是,将转换后的5V GPIO信号馈送到继电器模块时,发现了一个大问题。继电器仍然使用3V3信号像以前一样打开和关闭,但是当我使用示波器检查波形时,我非常惊讶地发现5V信号下降了一半,降至2.2V

我怀疑原因是TXS0102的吸收电流比向继电器模块提供电流要好得多。为了验证我的猜测,我将5V信号馈送到另一个继电器模块,即下拉型光电耦合器,型号为MK01。

这次我发现5V信号没有下降任何明显的数量。

所以我很快得出结论,NPN晶体管型继电器模块是一个不好的选择。从现在起,我将停止测试这种继电器,而继续使用光耦合器类型的继电器。

我还测试了另一个光电耦合器驱动程序模块MK101。该模块具有一个跳线,用于选择高电平触发或低电平触发。我发现对于低触发,TSX0102转换的5V信号电平不受影响。但是,当选择“低”触发时,尽管继电器仍在工作,但转换后的5V信号电平降至2.5V左右。

txs0102测试高低触发模块


附录E-使用HC04的逻辑电平转换器

HCT125不是那么常见。因此,我尝试了另一种转换器电路,使用HC03四开漏极与非门和HC04十六进制反相器。当我测试HC04输出时,我发现它非常嘈杂。我猜到一个原因是我在使用直接电源,一个用于rpi,另一个用于转换器。甚至我将电源的接地点连接在一起形成一个公共点,噪音也没有消失。然后,我为RPI和转换器使用了一个电源,噪音消失了。

噪声转换器输出

在此处输入图片说明

我在低触发模式(需要吸收电流,但在高触发模式(需要拉电流))中尝试了继电器模块的HC04输出信号,因此我要添加HC04十六进制NOT门,它可以向继电器模块。

附录F-HC04液位转换器浮动输入问题

上一次当我第一次尝试在光耦合器继电器模块上使用基于HC03的电平转换器时,我发现如果我将输入悬空,该模块会拾取噪声,并且继电器会疯狂地打开和关闭。我认为频率可能是1kHz。我不确定这是否是某种正反馈振荡。但是,当我使用示波器进行检出时,我惊讶地发现它是50Hz!我想这是某种共鸣。但是我不知道共振和振荡之间有什么区别。也许我应该再凝视一下。无论如何,我认为我需要在某处添加一个上拉/下拉电阻。

HC04液位转换器浮动输入问题


下面将被缩短或删除

#附录#

#A1。光电隔离/光电耦合器继电器模块板和示意图

光电隔离继电器模块具有一个光电耦合器,该耦合器是4针IC。下图显示了一个光电耦合器PC1(四个标记为1、2、3、4的绿色引脚)和一个晶体管Q1。IC并非总是带有标记。在此图中,PC1是EL354,而Q1是8050。

光电耦合器输入型继电器模块照片

光电耦合器输入继电器模块原理图

图表链接

 35https//i.stack.imgur.com/cWkRi.jpg


1
tlfong01:“因此Rpi的3V3 GPIO信号可以直接驱动继电器。” :您不应该这样说,因为阅读此行可能给非技术人员留下深刻的印象,他们可以将RPi的GPIO引脚直接连接到继电器的线圈。随着灾难性的后果......还有用于添加2N3904的理由......你应该说“所以RPI的3V3 GPIO信号可以直接驱动继电器模块,而不是...
GeertVc

感谢您指出我粗心的错误,即不考虑非技术人员。进行更正后,我发现插入两个相同的KY019图片时又犯了一个错误。实际上,第一个应该是SparkFun模块的示意图。
tlfong01 '18 / 05/11

没问题,我们在这里互相帮助... :-)
GeertVc '18年

直接使用GPIO与使用移位器的GPIO存在差异的原因是移位器旨在提供特定的电压(5V)。另一方面,为3.3V逻辑引脚指定了阈值,该阈值指示了低电平与高电平之间的差异。对于pi而言,这意味着1.3V以上的电压都很高。如果通过接地电阻(即上拉电流)吸收电流,则应获得3.3V电压,但这可能不是继电器上的输入-浮空。
goldilocks

@goldilocks:是的,这令人困惑。OA表示,他的继电器套件使用NPN晶体管触发继电器[线圈],似乎有一个答案建议修改晶体管[至BC5468]。另一个建议是使用darlington ULN2803,..我需要再阅读一次注释以澄清我的想法。
tlfong01 '18
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.