ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

数据选择器实战:74LS153与74LS151从真值表到16选1扩展避坑指南

数据选择器实战:74LS153与74LS151从真值表到16选1扩展避坑指南 做过多路信号切换项目的人应该都体会过那种“线多到怀疑人生”的感觉。我之前搭一个16路传感器采集电路一开始用继电器体积大、功耗高切换的时候还“咔咔”响后来换模拟开关CD4066七拼八凑总算能用但通道一多布线就乱成一锅粥。直到翻开数字电路课本重新把74LS153和74LS151这两颗经典数据选择器捡起来才发现很多问题本来就不该那么复杂。这篇文章不打算讲太多玄乎的理论就干三件事把74LS153和74LS151的真值表彻底掰开揉碎让你一眼看明白它们内部在干什么然后演示从4选1、8选1到16选1扩展的完整接法包括输出合并的几种方案和延迟估算最后把我实际踩过的坑全部倒出来——使能端极性搞反、输入引脚悬空、图腾柱输出直接并联、HC和LS混用翻车每一件都是拿时间换来的教训。1. 数据选择器能解决什么问题从多路抢答到传感器切换数据选择器这东西在没有实际项目需求之前躺在课本里就是一张让人犯困的真值表。但只要你有过一次“很多路信号每次只需要取其中一路送到后面去处理”的需求就会立刻意识到它的价值。我最早对数据选择器产生好感是在做一个教室抢答器的项目时。8个工位每个工位一个按键主持人那边需要知道“谁先按的”。最笨的办法是8根线直接拉到单片机8个I/O口上每个口配一个上拉电阻程序里轮询。但如果是16个工位、32个工位呢I/O口不够用轮询时间也变长而且线束整理起来非常痛苦。数据选择器的思路完全不一样所有按键信号进选择器的数据输入单片机只需要输出几位地址码就能在任意时刻选中任意一路信号。几根地址线代替了一大把并行输入线这就是多路复用的核心意义。74LS153和74LS151这两颗芯片是TTL系列里最常用的数据选择器没有之一。74LS153是“双4选1”一颗芯片里封装了两个独立的4选1选择器选择端共用使能端分开74LS151是“8选1”一颗芯片搞定8路输入还额外带一个反相输出端。选择器的工作方式用生活中的例子特别好理解就像火车站的道岔很多条铁轨数据输入汇聚到一个道岔口扳道工地址选择端决定当前哪条轨道上的列车数据通过道岔进入主路输出。道岔本身不产生任何新东西只是把某条输入“接通”到输出上。74LS153和74LS151干的就是这个活只不过它切换的不是列车是电平信号。什么时候用153什么时候用151我的习惯是4路以下优先用153因为它一颗芯片有两个独立选择器可以同时处理两路信号8路到16路用151因为151本身带互补输出和大选择范围级联扩展更方便。至于16路以上就要在这个基础上加译码器做片选了这个后面会详细讲。2. 真值表不是背出来的153和151的最低层逻辑拆解很多初学者一看到真值表就头大觉得是一堆0和1要死记硬背。实际上数据选择器的真值表是整个数字电路里最“像程序”的一张表——每一行就是一个if判断读懂了它整个芯片的行为逻辑就全通了。2.1 74LS153真值表使能优先选择次之74LS153包含两个独立的4选1每个都有4个数据输入I0~I3、一个输出Y、一个低电平有效的使能端G两个选择端A、B是共用的。先看单组的真值表使能GBA输出Y1XX0000I0001I1010I2011I3这个表要分两层读。第一层看使能端GG是低电平有效所以当G1时不管A、B是什么输出直接是0。这相当于一个总开关开关关掉后面所有逻辑都不起作用。第二层再看A、B组合当G0时A、B组成一个2位二进制数00选I001选I110选I211选I3输出就等于被选中的那一路输入。用代码的逻辑翻译一遍就是if (G 1) { Y 0; } else if (A 0 B 0) { Y I0; } else if (A 1 B 0) { Y I1; } else if (A 0 B 1) { Y I2; } else if (A 1 B 1) { Y I3; }这么一写就清楚了真值表不是让你背的是让你看“优先级”的。使能端优先级最高选择端次之数据输入是最后一个被考虑的因素。2.2 74LS151真值表8选1与互补输出的意义74LS151是8选1三个选择端A、B、C组成3位地址对应8个数据输入D0~D7。它的特别之处是有两个输出Y是原码输出W是反相输出两者互补。使能GCBA输出Y输出W1XXX010000D0~D00001D1~D10010D2~D20011D3~D30100D4~D40101D5~D50110D6~D60111D7~D7注意A是低位LSBC是高位MSB这个顺序在接线时最容易搞错后面避坑部分会专门说。这里必须啰嗦一下W这个反相输出。很多初学者觉得W就是“多余的一个反相器”其实它在级联扩展里是个宝贝。因为当使能端G1芯片被禁止时Y0而W1这个“被禁止时输出高电平”的特性后面会用来做输出合并比多接一个反相器省事得多。2.3 数据选择器真值表和其他芯片真值表的读法差异学数字电路最怕的就是把各种真值表的读法混在一起。74LS138译码器的真值表是给一个地址唯一一个输出有效其他输出全部无效属于“独热”逻辑74LS373锁存器的真值表看的不是地址而是时钟边沿和数据建立时间属于时序逻辑而74LS153和74LS151的数据选择器真值表核心是“地址决定哪一路输入被搬到输出上”输入信号本身可以是任意电平不是固定的0/1组合。我见过有人把数据选择器的真值表当成译码器来理解硬记“000对应D0”这种组合结果一换芯片型号就懵了。正确的理解方式是地址是索引数据是被索引的内容。就像数组下标是A、B、C数组元素是D0~D7输出Y就是data[address]。温度计译码器的真值表和选择器也完全不是一个路子温度计码的特点是高或低电平连续出现比如00001111这种主要用于ADC和DAC的内部结构里它的真值表强调的是“连续有效区间”而不是“单路选通”。把这个区别搞清楚你就不会再对着74LS151的真值表问“为什么输出只有一个有效通道”这种问题了。3. 74LS153实战双4选1的最小系统和8选1拼装先说结论74LS153这颗芯片最舒服的用法是拿来当“双路二选一”或者“一路四选一”用两套选择器互相独立适合同时处理两路不同信号。但如果只把它当4选1用有点浪费它还能拼出8选1。3.1 最小系统接线双路二选一最简单的用法是做一个“双路二选一”。把两组数据输入的I0和I1分别接两个信号源I2和I3不用就接地或者接固定电平A端作为选择控制B端接地。当A0时两组输出分别输出第一路信号当A1时输出第二路信号。这样一个芯片就能同时切换两路信号特别适合做立体声音频的通道切换、双通道数据分配之类的场景。如果在实际项目里用记得把不用的I2、I3引脚接固定电平不能悬空。TTL芯片的悬空输入会表现为高电平但抗干扰能力极差手指一碰或者旁边有继电器动作输出就会乱跳。这是个老生常谈但永远有人踩的坑。3.2 用一片74LS153拼出8选174LS153是两个4选1两个选择端共用但使能端分开。利用这两个独立的使能端可以把它拼成一个8选1第一组4选1处理D0~D3接到1I0~1I3输出1Y。第二组4选1处理D4~D7接到2I0~2I3输出2Y。A0、A1并联接到两组共用的选择端A、B。A2作为片选信号接反相器后分别接到1G和2GA20时第一组工作A21时第二组工作。1Y和2Y不能直接连在一起需要过一个或门74LS32合并输出。为什么不能直接连在一起这涉及TTL图腾柱输出的原理后面避坑部分会认真说。这里先记住两个输出端并联大概率会冒烟或者出现逻辑混乱。用4选1拼8选1本质上就是在“地址多了一位”之后把原来两组选择器分别使能。地址从2位变成3位最高位决定用哪一组低两位决定组内的哪一路。这个思想就是后面16选1扩展的雏形先搞清楚它后面就顺理成章了。3.3 一个153实际应用案例并行数据转串行发送说一个我实际做过的场景。当时要采集8个按键状态用单片机串行发送给上位机。最省I/O的方案是8个按键信号分别接到153拼出的8选1的D0~D7单片机用3个I/O输出地址A0、A1、A2输出端Y接单片机的外部中断或者普通I/O。程序里将地址从000循环加到111每次读一次Y8次循环就能拿到8个按键状态。这样做的好处是单片机只需要4个I/O3个地址1个数据就能采集8路信号而且扩展性强16路也就是再加一个片选位的事。要注意的是按键是机械开关按下和释放时会有抖动如果数据选择器后面直接接单片机的中断脚需要在程序里做消抖处理或者硬件上在Y输出端加一个RC低通滤波。4. 74LS151实战8选1的正确打开方式74LS151是我用得更多的芯片因为它一颗就是8选1拿来就是干活的不像153还需要拼。而且它的互补输出W在级联扩展时候能玩出不少花样。4.1 引脚功能和接线要点74LS151有8个数据输入D0~D73个地址选择端A、B、C一个低有效使能端G输出Y和反相输出W。D0~D7对应的地址是A为最低位C为最高位。接线时最容易犯的错误就是把A、B、C的顺序接反——地址线反接不会烧芯片但选出来的通道完全对不上你以为是D3实际输出的是D6排查起来非常恼火。供电方面16脚接VCC5V8脚接地。TTL芯片的电源引脚旁边要放一个0.1μF的陶瓷去耦电容最好紧贴芯片电源引脚放置。很多面包板项目出现“莫名其妙的逻辑错误”不是芯片问题是电源噪声太大去耦电容一加问题立刻消失。4.2 用151实现任意三变量逻辑函数这是个课本上会讲、但实际设计时经常忘记的技巧任何一个三变量组合逻辑函数都可以用一个74LS151实现。做法是把函数的真值表列出来三变量共有8种组合每种组合对应的函数输出值接到151的D0~D7上选择端A、B、C接三个变量即可。函数的输出就是151的Y。举例实现一个三人多数表决器三人A、B、C投票两人及以上同意则输出1。函数真值表如下CBA输出00000010010001111000101111011111对应D00、D10、D20、D31、D40、D51、D61、D71把这8个值接到数据输入A、B、C接三个变量Y就是表决结果。这样做的好处是省掉了一堆与门和或门而且函数逻辑写死在硬件里修改逻辑只需要换接线不需要改电路结构。4.3 注意事项数据输入的驱动能力和上拉电阻74LS151的数据输入是标准TTL输入对高电平的拉电流需求很小但要注意输入引脚不能悬空。在实际工程项目里数据输入往往来自开关、传感器输出或者前级芯片要确保这些信号源的输出电平在TTL的阈值范围内高电平要高于2.0V低电平要低于0.8V。如果信号源是OC门集电极开路输出必须在输出端加上拉电阻到VCC否则高电平状态无法建立选择器会把悬空的高电平当成不确定状态处理。5. 16选1扩展完整方案片选划分、输出合并与延迟预算这是整篇文章的重头戏。从8选1到16选1核心思想很简单用两片74LS151每片处理8路再用最高位地址作为片选信号决定哪一片工作。但具体落地时输出怎么合并、片选信号怎么接、延迟怎么算都有讲究。5.1 整体架构两片151 地址划分总体思路是这样的第一片U1处理D0~D7数据输入分别接U1的D0~D7。第二片U2处理D8~D15数据输入分别接U2的D0~D7对U2来说这8路就是它自己的D0~D7。低三位地址S0、S1、S2并联接到两片的A、B、C。最高位地址S3作为片选信号控制两片的使能端GS30时U1工作G10U2禁止G21。S31时U1禁止G11U2工作G20。两片输出合并成一路最终输出Z。地址映射关系如下表所示S3S2S1S0选中通道工作的芯片最终输出0000D0U1D00001D1U1D10111D7U1D71000D8U2D81001D9U2D91111D15U2D155.2 输出合并的三种接法两片151的输出不能直接并联必须经过额外的逻辑合并。这里给出三种我实际用过的方案。方案A或门合并74LS32这是最直观的方案。因为被禁止的芯片输出Y0被使能的芯片Y等于选中的数据所以Z Y1 Y2用一个二输入或门就能完成合并。工作状态Y1Y2ZY1Y2S30U1工作D_i0D_iS31U2工作0D_iD_i接线U1的Y输出接74LS32的1脚U2的Y输出接74LS32的2脚3脚输出就是16选1的结果。这个方案最直接手头有或门芯片的话首选。方案B与非门反相输出合并74LS00W输出这个方案玩的是151的W输出。当芯片被禁止时W1被使能时W等于数据输入的反相。把两片的W输出送到一个与非门Z ~(W1 · W2)推算一下S30时W1~D_iW21所以W1·W2~D_i再取反得到D_i输出正确S31时同理。这个方案的好处是74LS00是最常见的与非门芯片几乎每个数字电路工具箱里都有比专门找或门芯片更方便。方案C用74LS153做输出二选一这个方案多用一个153但好处是输出经过了一级选择器缓冲带负载能力更强。把U1的Y接153第1组数据输入的I0U2的Y接同一个组的I1S3接153的选择端A153的1G接地始终有效则153的1Y就是16选1的输出。三种方案对比方案合并方式额外芯片输出延迟适用场景A或门74LS321颗约10ns手头有或门追求简单直接B与非门74LS001颗约10ns只有与非门想省芯片种类C74LS153二选一1颗约20ns需要输出缓冲、后级负载较重5.3 片选信号的反相问题与延迟预算刚才方案A/B/C的片选逻辑里S3要同时控制两个G端而且是反相关系S30时U1的G0S31时U2的G0。所以S3必须先经过一个反相器一个直接接U2的G反相后接U1的G或者反过来。这个反相器可以用74LS04也可以用74LS00搭一个。这里有个工程细节容易忽略地址线A、B、C是直接到两片151的选择端的而S3要额外经过反相器才能到G端。反相器有传输延迟大约10ns左右这就导致一个瞬间S3已经切换了但G端的电平还没到位两片芯片可能短暂地同时处于“使能”状态或者同时处于“禁止”状态。对于低速信号几十kHz以下这个10ns的毛刺对后级几乎没影响。但如果你的信号频率比较高几MHz以上或者后级有对毛刺敏感的时序电路比如计数器、触发器就必须处理。最简单的处理办法是在输出端加一个RC低通滤波截止频率根据信号频率调整比如信号是1MHzRC取10ns~20ns的时间常数就比较合适。5.4 扩展思路从16选1到32选1、64选116选1只是开始。如果通道数继续增加可以按同样的思路“树形”扩展32选1用4片151地址增加到5位高两位S3、S4接一个74LS139双2-4译码器译码器的4个输出分别接4片151的G端。这样任意一个时间点只有一片151被使能输出合并依然用或门。64选1用8片151地址增加到6位高三位S3、S4、S5接一个74LS1383-8译码器8个输出分别接8片151的G端。更大规模考虑改用多级选择树或者直接用CPLD/FPGA因为超过几十路之后分立芯片的布线复杂度和延迟控制就变得非常痛苦。这个扩展思路的关键在于片选信号用译码器生成后每片的G端都能被精确、互斥地控制输出合并逻辑不用变仍然是把所有Y送进一个多输入或门或者用多级或门级联。6. 踩坑实录使能极性、悬空引脚、图腾柱并联与假芯片这一章是全文最有价值的部分全部来自实际项目中的血泪教训。希望你看完能少走弯路至少别在同一类问题上重复交学费。6.1 使能端极性搞反输出为什么一直是0第一次用74LS151时我想当然地认为“使能”就是高电平有效直接把G接到了VCC上。结果无论地址怎么变Y输出永远是0。当时还以为是芯片坏了换了一片还是一样。最后翻数据手册看到G端画的那个小圆圈才反应过来——低电平有效。这个错犯得很低级但也很典型。74LS系列几乎所有使能端、片选端都是低电平有效引脚名带横线或者带“G”的大概率都是低有效。用之前先看清数据手册别凭直觉接线。如果手头没有手册教大家一个土办法看芯片内部逻辑图使能端进与非门的地方通常就是低有效。6.2 未用输入引脚悬空数据选择器“随机输出”之谜有一次我把74LS153拼成8选18路输入有几路没接信号源直接悬空。上电测试地址切到悬空那一路时输出有时是0有时是1还时不时跳一下。用万用表量输入引脚电压在1V到2V之间飘忽不定典型的悬空输入。TTL芯片的输入悬空时内部上拉结构会让它呈现高电平的趋势但外部噪声很容易把它拉低导致输入电平处于不确定状态。数据选择器的输入是不允许悬空的不用的数据输入必须接固定电平。接地是最省事的接VCC也可以通过一个1kΩ~10kΩ的电阻但直接接VCC也没问题因为输入是高阻态的。6.3 图腾柱输出直接并联差点烧掉一片151这个是仅次于使能极性的第二大坑。两片151做16选1时我想当然把Y1和Y2直接接在一起想着“反正只有一个会输出”结果一上电Y点电压既不是高电平也不是低电平而是约1.5V的中间电平后级单片机读到的信号乱七八糟。原因很简单74LS151的输出是图腾柱结构内部是两个晶体管推挽输出。当一个输出为高、另一个输出为低时两个输出端直接并联高电平那个晶体管的拉电流和低电平那个晶体管的灌电流会形成一条低阻通路轻则逻辑混乱重则烧毁芯片。这就是为什么必须用或门、与非门或者选择器来合并输出不能直接“线或”。顺便说一句TTL的图腾柱输出和OC门不同OC门如74LS06才能直接并联实现“线与”普通推挽输出不能。6.4 LS与HC混用电平标准不一致导致的“静默故障”我在一块实验板上用了74LS151后级接了一块74HC32做或门合并结果12路信号的切换都正常唯独其中一路信号输出恒为0。查了半天发现74LS151输出的高电平在2.7V左右而74HC32的高电平输入阈值要求达到3.5V5V供电时这个2.7V对LS来说是妥妥的高电平对HC来说却是“不确定区域”有的芯片可能识别成低电平。这是个典型的TTL和CMOS混用问题。74LS系列输出高电平最低保证是2.7V74HC系列输入高电平最低要求是3.5V接口不匹配。解决办法有几种一是尽量同系列芯片混用LS配LSHC配HC二是在LS输出和HC输入之间加一个上拉电阻到VCC比如4.7kΩ把高电平抬高三是用74HCT系列做桥梁HCT系列的输入阈值兼容TTL电平是专门为这种混用场景设计的。6.5 假芯片和翻新片如何识别问题不在你而在芯片电子元器件市场水很深74LS系列这种老芯片市面上大量存在翻新片和打磨片。我曾经买过一批“全新原装”的74LS151结果10片里有3片工作不正常要么个别通道输出错误要么功耗异常发烫。后来用万用表测发现这批芯片的静态电源电流比正常值大了近一倍明显是翻新片内部有损伤。识别翻新片有几个土办法看丝印是否清晰、有无打磨痕迹看引脚是否有二次浸锡的痕迹上电后摸芯片温度是否异常正常74LS系列静态功耗约几十毫瓦微温或不发热。最靠谱的还是从正规渠道购买贵一点但省心。我做项目买到过几次问题芯片之后现在基本只从信誉好的分销商拿货不再贪便宜。6.6 地址切换瞬间的毛刺一个反相器的延迟引发的“幽灵信号”16选1做好之后我用单片机的定时器不断切换地址从D0扫到D15再循环。示波器接在输出端看到大部分时候输出是干净的数据波形但每次S3从0跳到1或者从1跳到0的瞬间输出会冒出一个窄毛刺宽度约20ns。这个毛刺就是前面5.3节说的片选延迟问题。S0~S2直接到选择端传输路径短S3要经过反相器再到G端路径长于是S3切换时两片151有两三个纳秒的时间处于“都禁止”或“都使能”的错误状态。解决方案是在输出端加一个RC低通滤波或者改用施密特触发器对毛刺不敏感的后级电路。如果信号频率不高其实不处理也没事但知道这个原理以后遇到类似问题就有排查方向了。6.7 用万用表和逻辑笔快速定位故障的方法最后分享一个实用的排障流程。遇到数据选择器电路不工作先别急着拆芯片按以下顺序来确认电源VCC和GND是否接对电压是否5V±0.25V芯片是否发烫。确认使能端用万用表量G端的电平是否和设计一致。确认地址线手动给地址端加固定高/低电平量芯片对应数据输入的引脚电压再量Y输出看是否等于选中输入。确认输出合并级把或门输入拆开分别量两片151的Y看哪个不对。确认负载输出端是否短路后级输入是否过载。逻辑笔在这种场景比示波器好用因为它能快速显示电平状态和脉冲信号几十块钱一支建议备着。写在最后的两个实操心得做数据选择器项目这些年最深的体会是用这类看似“老掉牙”的TTL芯片其实特别锻炼人对数字电路底层逻辑的理解。74LS153、74LS151这种芯片不涉及单片机、不涉及软件一切行为都摆在明面上真值表是什么样电路就是什么样出问题也能顺着逻辑链一路查下去。如果让我重新做一次16路采集项目我会在画原理图时就把三类问题提前规避一是所有使能端极性标得清清楚楚用斜杠加小圆圈标注低有效二是不用的输入引脚全部接固定电平不在原理图上留悬空网络三是输出合并提前规定用什么芯片留好布线位置。这三件事做到了95%的坑都可以在设计阶段填平。最后再分享一个小技巧如果你手头只有一个万用表没有示波器也可以验证16选1电路是否正常。把16路输入分别接不同的固定电平比如偶数为高、奇数为低然后手动切换S0~S3的跳线每切换一个地址量一次输出Y。如果输出和设计一致说明电路逻辑完全正确如果不一致就按地址线和使能端的顺序逐个排查很快就能定位问题。这个方法虽然土但特别有效值得一试。
返回列表