74HC138是数字电路里最常用的译码器芯片之一,几乎每个用过它的人都对它的三个使能脚和八个输出脚印象深刻。它的应用场景特别广:单片机扩展IO口的时候用来做片选,存储器扩展的时候用来选地址段,LED显示驱动里用来扫描位选,继电器控制里用来选通某一路。今天把138译码器从原理到电路都讲清楚,新手也能一次看懂。
先说它是什么。74HC138是一个3-8线译码器,意思是它有3个二进制输入脚(A、B、C)和8个输出脚(Y0到Y7)。3个输入脚组合起来有8种状态(000到111),每种状态对应一个输出脚被选中(拉低),其他输出脚保持高电平。这里要特别注意:138是低电平有效输出,被选中的那个输出脚是低电平,没选中的都是高电平。这跟很多其他译码器(比如74HC238)相反,接线的时候别搞错了,把高电平有效的芯片和138的输出直接接会出问题。
再说说三个使能端G1、G2A、G2B(有的 datasheet 上叫 E1、E2、E3,是一回事)。这三个使能端是138的关键设计,不是全选的话译码器就不工作,所有输出都处于高电平的无效状态。使能条件是:G1必须等于1(高电平有效),G2A和G2B必须都等于0(低电平有效),三个条件同时满足,译码器才正常工作。这个设计非常巧妙,三个使能端可以用来做更高一级的地址译码,比如用另一个138的输出去控制这个138的G1脚,就能把3-8扩展成6-64线的译码器,实际设计中经常这么玩。
138的工作逻辑可以用真值表来描述。输入CBA从000(十进制0)到111(十进制7)变化时,对应的Y0到Y7依次被选中拉低:CBA=000时Y0=0,其他Y=1;CBA=001时Y1=0,其他Y=1;依此类推,CBA=111时Y7=0,其他Y=1。这里注意优先级是C为最高位、A为最低位,所以数值上等于二进制CBA对应的十进制数。举个具体例子:C=1、B=0、A=1就是十进制的5,所以选中Y5。如果三个使能条件不满足(比如G1=0),那不管CBA输入是什么,所有输出都保持高电平。
第一个典型应用是数码管动态扫描。8位LED数码管的位选需要8个引脚,如果直接用单片机GPIO控制要浪费8个口线。用138的话,单片机只需要3个IO脚(分别接A、B、C三个输入),再加一个IO脚控制使能端(比如接G1),总共4个脚就能驱动8位数码管位选,省了一半多的IO资源。扫描的时候依次让CBA从000变到111,每个状态保持1到5毫秒,配合段选驱动给对应位点亮需要的笔画,利用人眼的视觉暂留效应,8位数字就能稳定显示出来,一点闪烁都看不出来。
第二个常见应用是单片机片选信号扩展。比如STM32的FSMC接口扩展多个外部存储芯片时,地址线的高位(比如A18、A19、A20)接到138的A、B、C三个输入脚,138的Y0、Y1、Y2分别接三片SRAM的CS(片选)脚。当访问0x60000000到0x600FFFFF这个地址范围时,A20A19A18=000,Y0拉低,选中第一片SRAM;访问0x60100000到0x601FFFFF时,A20A19A18=001,Y1拉低,选中第二片。这样三个地址线就能扩展8个片选信号,比直接用GPIO控制高效得多,而且地址空间划分也清晰。
第三个应用是IO口扩展,特别是在控制多路继电器或LED的时候。比如要控制8路继电器,单片机直接驱动的话需要8个IO口加8个三极管。用138的话,3个地址线接A、B、C,一个使能脚接G1,一个公共数据线通过三极管驱动继电器线圈,总共5个IO口就能控制8路继电器,电路也更整洁。不过要注意138的输出电流很小(每个脚典型值只有25mA),不能直接驱动继电器线圈,中间必须加三极管或者MOS管做功率驱动,不然芯片直接烧。
选型和使用时有几个注意事项。第一个是电平兼容,74HC系列是CMOS工艺,高电平阈值比较高(3.15V,5V供电时),如果用3.3V的单片机去驱动5V供电的138,3.3V的高电平输出可能达不到HC系列的阈值,这时候要么用74LVC138(支持1.65V到5.5V宽电压,电平阈值低),要么加电平转换芯片(74LVC245)。第二个是电源去耦,VCC和GND之间一定要就近放一个0.1uF陶瓷电容滤高频噪声,同时放一个10uF电解电容滤低频干扰。第三个是输出结构,74HC138是推挽输出,能提供或吸收约25mA的电流,但所有输出加起来的总电流不能超过50mA,设计时别让多个输出同时拉着大电流。
常见的替代型号也不少。74HC138D是SOP贴片封装版本,引脚功能一样。74AHC138是高速CMOS版本,延迟更小(只有几纳秒),适合高速设计。74LVC138宽电压版本,适合跟3.3V系统配合。还有一个74HC238,功能跟138几乎一样,区别是238的输出是高电平有效,被选中的输出是高电平,需要时可以直接替换,接线时注意逻辑就行。
下一篇:没有了