74HC138是数字电路里最常用的译码器芯片之一,几乎每个用过它的人都对它的三个使能脚和八个输出脚印象深刻。它的应用场景特别广:单片机扩展IO口的时候用来做片选,存储器扩展的时候用来选地址段,LED显示驱动里用来扫描位选,继电器控制里用来选通某一路。今天把138译码器从原理到电路都讲清楚,新手也能一次看懂。
先说它是什么。74HC138是一个3-8线译码器,意思是它有3个输入脚(A、B、C)和8个输出脚(Y0-Y7)。3个输入脚组合起来有8种状态(000到111),每种状态对应一个输出脚拉低,其他输出脚保持高电平。这里注意:138是低电平有效输出,被选中的输出脚是低电平,没选中的是高电平。这跟很多其他译码器不一样,接线的时候别搞错了,把高电平有效的芯片和138的输出直接接会出事。
引脚功能很简单。除了3个输入(A、B、C,A是最低位)和8个输出(Y0到Y7),还有三个使能脚:E1、E2、E3。这三个使能脚是138的关键,不是全选的话译码器就不工作,所有输出都是高电平(无效状态)。使能条件是:E1=0(低电平有效)、E2=0(低电平有效)、E3=1(高电平有效),三个条件同时满足,译码器才正常工作。设计电路的时候可以用这三个使能脚来做更高一级的地址译码,比如用另一个138的输出去控制这个138的E3脚,就能把3-8扩展成6-64线译码器。
真值表要记住。输入CBA=000时Y0输出低,CBA=001时Y1低,依此类推,CBA=111时Y7低。优先级是C为最高位,A为最低位,所以数字上等于二进制CBA的数值。举个例子:C=1,B=0,A=1就是十进制的5,选中Y5。如果三个使能条件不满足(E1=1、E2=1或者E3=0),不管输入是什么,所有输出都是高电平。用的时候先确认使能脚的电平对不对,不然查了半天不知道为啥输出不对。
电平兼容问题要注意。74HC系列是CMOS工艺,电平阈值跟TTL不太一样。HC系列的高电平最小值是3.15V(5V供电时),低电平最大值是1.35V。如果用3.3V的单片机去驱动5V供电的138,3.3V的高电平输出可能达不到HC系列的3.15V阈值,这时候要么用逻辑电平转换芯片(74LVC245或者74AHC1G14),要么换成LVC系列的译码器,LVC系列支持1.65V到5.5V供电,电平阈值低很多。现在很多74HC系列的替代型号,比如74HC138D(SOP封装)、74AHC138、74LVC138,封装和引脚完全兼容,可以直接替换。
最常见的应用场景是单片机扩展片选。比如STM32的FSMC接口扩展了多个SRAM芯片,地址线A0-A17接SRAM的地址脚,地址线A18、A19、A20接到138的A、B、C三个输入脚,138的Y0-Y2分别接三个SRAM的CS(片选)脚。当地址在0x60000000-0x600FFFFF范围时A20-A18=000,Y0低,选中第一片SRAM;地址在0x60100000-0x601FFFFF时A20-A18=001,Y1低,选中第二片,以此类推。这样三个地址线就能扩展8个片选脚,比GPIO直接控制省了不少引脚资源。
另一个常见用法是做LED数码管的位选驱动。8位LED数码管的位选需要8个引脚,如果直接用GPIO控制要浪费8个口线。用138的话,单片机只需要3个IO脚(接A、B、C),再加一个IO脚控制E3使能,总共4个脚就能驱动8位数码管位选,省了一半多的IO资源。扫描的时候依次让CBA从000变到111,每个状态保持几毫秒,配合段选驱动就能动态显示8位数字。
继电器控制里也常用138做选通。比如需要控制8路继电器,单片机如果直接驱动的话,除了8个IO口还要8个三极管或者达林顿管。用138可以先选通某一路,再用一个公共的驱动信号控制继电器线圈通断。这样单片机用3个地址线加1个数据线(再加1个使能脚),共5个IO口就能控制8路继电器,电路也更整洁。注意138的输出电流只有几mA,不能直接驱动继电器线圈,中间要加三极管或者MOS管做功率驱动。
最后提醒几个注意事项。138的输出是开漏还是推挽?74HC138是推挽输出,能驱动±25mA的电流,Y0-Y7每个脚都能提供或吸收大约25mA,但总电流(所有输出加起来)不能超过50mA,设计时别让多个输出同时拉大电流。电源去耦电容必须加,在VCC和GND之间就近放一个100nF陶瓷电容,同时放一个10uF电解电容滤低频噪声。如果是长距离布线,输出线末端加匹配电阻(50-100欧姆)防止反射,或者用示波器看一下波形有没有过冲和振铃。有些便宜的山寨138芯片使能脚的阈值不对,建议用大厂货:TI的SN74HC138、NXP的74HC138、ST的M74HC138,几块钱一个但是稳定得多。
上一篇:ATmega128单片机开发入门:寄存器、外设与常见坑点
下一篇:没有了