大约在2016年的时候,我接了一个私活,做快递柜的开锁控制方案,柜锁的数量没有明确要求,但是要求可扩展可配置。正巧,这两天又有网友咨询单片机控制多个继电器的控制方案。顺带着再介绍一下我常用的扩展方案以及信号继电器(小功率)的控制方法。
如果单片机的引脚比较多,GPIO数量足够用的情况下,那么可以直接用单片机的GPIO口来驱动。但是如果单片机的GPIO口比较少,那么就需要考虑采用扩展芯片来扩展GPIO了。
1 单片机驱动继电器
单片机GPIO口的驱动能力有限,无法直接驱动继电器,需要用三极管或者MOS管来驱动,以NPN三极管为例设计的继电器驱动电路如下图所示。
三极管的基极通过电阻和单片机的GPIO口来连接,继电器接在三极管的集电极上,并在线圈的两端连接了一个反向的续流二极管。当GPIO输出高电平时,NPN三极管导通,继电器动作;当GPIO口输出低电平时,NPN截止,继电器复位。由此即可实现单片机控制继电器的作用。如果单片机的GPIO口足够,重复设计以上电路即可。如果GPIO口不够的话就要设计扩展电路了。继电器的控制最常用的方案就是用三极管或者MOS管来驱动,如果控制数量较多的话可以考虑芯片,如用做电机驱动的ULN2003、L298N等,这个需要根据被控继电器的控制电压、功率来选型。我比较喜欢用74HC595来扩展单片机的GPIO,用在数码管驱动、继电器驱动电路中。该芯片是传入并处带有所存功能的移位寄存器,具有级联引脚,可以实现多片芯片的级联,只需要用到单片机的3个GPIO口。即三个GPIO口就能扩展出8/16/32等GPIO口。如果是32位的单片机可以将4片74HC595作为一组,用三个GPIO口扩展出32个GPIO,那么只需要3组9个单片机引脚就能扩出96个GPIO。下图是595部分的C语言程序。点阵显示屏比较常见,并且可以扩展,这其中比较常用的方案就是74HC164和74HC595用来进行行、列的控制。74HC495最好用的地方就是带有锁存功能。除了使用这类移位寄存器外,还可以使用IIC扩展器件,单片机与扩展器件通过IIC来通讯,但是这类芯片的价格要比74HC595贵很多,如果成本预算比较松的话,可以参考一下这类芯片。比如PCF8574。这类芯片和单片机是通过IIC接口连接的,具有8个扩展口、3个地址输入端,使用单片机的6个GPIO口就能实现8片PCF8574的控制,能扩展出64个GPIO口。但是这类芯片的价格稍贵。最后需要注意的是:要控制多路继电器,就需要考虑功耗问题。好在快递柜设置了柜门的输入检测功能,在使用时不允许多个柜门同时打开。如果网友所咨询的多个继电器存在同时动作的情况,则需要考虑功耗问题。