我有一组继电器(5),我希望从我的Pi上运行。我正在使用由Sparkfun的大功率继电器套件供电的5V TE Connectivity继电器,该继电器套件使用NPN晶体管触发继电器。
到目前为止,我遇到的问题是我无法切换继电器。GPIO输出引脚不提供5V电压吗?我以为Pi是在GPIO上做的。
我有一组继电器(5),我希望从我的Pi上运行。我正在使用由Sparkfun的大功率继电器套件供电的5V TE Connectivity继电器,该继电器套件使用NPN晶体管触发继电器。
到目前为止,我遇到的问题是我无法切换继电器。GPIO输出引脚不提供5V电压吗?我以为Pi是在GPIO上做的。
Answers:
为什么不简单地这样?
Raspberry Pi在0和3V3之间切换,足以使Q1饱和,从而接管了“繁重的”工作:开启/关闭+ 5V继电器。根据您使用的继电器,可能会对D1和Q1进行一些小的修改。
# 介绍 #
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逻辑信号。
我有一个类似的NPN晶体管模块KY019,可以由Rpi的3.3V信号驱动。因此,我检查了其输入信号要求,以了解为什么KY019可以接受3.3V信号,但Beecake却不能。
我发现KY-019的触发电平为2.5V和0.1mA。NPN晶体管将该信号放大到50mA,足以使线圈充能以激活继电器。
Rpi GPIO(具有高于2.8V的高电平,最大电流限制为16mA),可以舒适地提供4mA 电流,直接驱动模块应该没有问题。
线圈的响应时间为10mS。我对Rpi GPIO引脚17进行了编程,以便在40毫秒(25cps)的周期内切换继电器模块,并发现继电器可以如预期般高兴地咔嗒一声。(我使用的是2米长的GPIO信号连接线,因此继电器输入端的信号有点吵。)
如何修改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闪烁,以确保电路工作正常。
然后,我设置了4个NPN晶体管输入型继电器模块(KY019),并将这4个继电器模块输入连接到4个UDN2981通道输出。
然后,我将4个Rpi 3.3V GPIO引脚直接连接到4个UDN2981通道输入。我使用以下python函数以25 cps的速率切换4个中继模块。
结果很好。4个继电器模块发出咔嗒声,LED按预期的25cps闪烁。Rpi GPIO输出信号保持在3.3V附近,而UDN输出信号保持在4.0V附近,这意味着没有输入过载。
UDN2981控制高触发,光电隔离继电器模块
OP还考虑使用光电隔离继电器模块,因为它们更安全。我已成功使用相同的UDN2981控制4个高电平触发光电隔离继电器模块(MK055)。
实际上,无论NPN晶体管还是光电隔离类型,UDN2981均可用于控制任何种类的高触发模块。
但是,对于低触发模块,无论是PNP晶体管还是光电隔离的,源极驱动器UDN2981都不起作用,应使用ULN2803或其他漏极驱动器。
ULN2803控制低触发PNP晶体管输入或光电隔离继电器模块
我已成功验证ULN2083宿驱动器可以控制4个低触发光电隔离继电器模块。我首先测试了手动闪烁的4个LED,然后使用了与上面相同的python函数来测试这4个模块。结果也不错。
讨论区
ULN2803和UDN2981的优缺点
优点
缺点
ULN2803尤其不是UDN2981并不常见。
它们具有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,并发现它可用于晶体管输入和光电隔离的高电平触发模块。
#参考#
R2 继电器开关电路-电子教程
R5 上拉电阻-电子教程
Arduino的Voh 4.2V,Vol 0.9V
Rpi Voh 2.4V,Vol 0.7V
R8。双极晶体管-电子教程
================
#A.3使用HCT125的逻辑电平转换器#
因此,我测试了另一个上变频器HCT125。我很高兴发现它运作良好。连接到NPN晶体管驱动的继电器模块时,HCT125转换的5V0信号不会下降。
/ ...
附录完
** *长答案将被删除* **
这个冗长的答案太冗长而混乱。我现在正试图删除不相关的段落,也许通过问相关问题并回答自己来代替它们。
如何检查光电耦合器/光电隔离继电器模块
2.1晶体管输入类型
对于流行的双极NPN晶体管输入类型,源极驱动器信号(3.3V至5V逻辑电平转换后的Rpi GPIO信号或RPi GPIO信号)通过串联的LED和偏置电阻到达晶体管的基极。
如本继电器开关教程中所述,还有其他不太流行的继电器开关电路
2.2光电耦合器输入类型
光电耦合器输入型继电器具有光耦合器作为输入。光电耦合器驱动另一个晶体管,该晶体管又驱动继电器线圈。
附录C-使用TXS0102的逻辑电平转换器
现在我知道Rpi GPIO可以直接驱动继电器模块,但是有两个问题。首先,带有长连接线的GPIO信号有噪声,因此可靠性不高。其次,飞轮二极管1N4148可能无法完全抑制线圈反电动势,如果1N4148不幸发生故障或连接不正确(接触不良,干焊点等),反电动势可能会损坏Rpi。
因此,我决定使用逻辑电平转换器将Rpi GPIO信号从3V3上移至5V。我首先尝试了TXS102转换器,并发现它运行良好。除了上移GPIO信号外,高电平噪声也大大降低了。
但是,将转换后的5V GPIO信号馈送到继电器模块时,发现了一个大问题。继电器仍然使用3V3信号像以前一样打开和关闭,但是当我使用示波器检查波形时,我非常惊讶地发现5V信号下降了一半,降至2.2V。
我怀疑原因是TXS0102的吸收电流比向继电器模块提供电流要好得多。为了验证我的猜测,我将5V信号馈送到另一个继电器模块,即下拉型光电耦合器,型号为MK01。
这次我发现5V信号没有下降任何明显的数量。
所以我很快得出结论,NPN晶体管型继电器模块是一个不好的选择。从现在起,我将停止测试这种继电器,而继续使用光耦合器类型的继电器。
我还测试了另一个光电耦合器驱动程序模块MK101。该模块具有一个跳线,用于选择高电平触发或低电平触发。我发现对于低触发,TSX0102转换的5V信号电平不受影响。但是,当选择“低”触发时,尽管继电器仍在工作,但转换后的5V信号电平降至2.5V左右。
附录E-使用HC04的逻辑电平转换器
HCT125不是那么常见。因此,我尝试了另一种转换器电路,使用HC03四开漏极与非门和HC04十六进制反相器。当我测试HC04输出时,我发现它非常嘈杂。我猜到一个原因是我在使用直接电源,一个用于rpi,另一个用于转换器。甚至我将电源的接地点连接在一起形成一个公共点,噪音也没有消失。然后,我为RPI和转换器使用了一个电源,噪音消失了。
我在低触发模式(需要吸收电流,但在高触发模式(需要拉电流))中尝试了继电器模块的HC04输出信号,因此我要添加HC04十六进制NOT门,它可以向继电器模块。
附录F-HC04液位转换器浮动输入问题
上一次当我第一次尝试在光耦合器继电器模块上使用基于HC03的电平转换器时,我发现如果我将输入悬空,该模块会拾取噪声,并且继电器会疯狂地打开和关闭。我认为频率可能是1kHz。我不确定这是否是某种正反馈振荡。但是,当我使用示波器进行检出时,我惊讶地发现它是50Hz!我想这是某种共鸣。但是我不知道共振和振荡之间有什么区别。也许我应该再凝视一下。无论如何,我认为我需要在某处添加一个上拉/下拉电阻。
下面将被缩短或删除
#附录#
#A1。光电隔离/光电耦合器继电器模块板和示意图
光电隔离继电器模块具有一个光电耦合器,该耦合器是4针IC。下图显示了一个光电耦合器PC1(四个标记为1、2、3、4的绿色引脚)和一个晶体管Q1。IC并非总是带有标记。在此图中,PC1是EL354,而Q1是8050。
图表链接