ARTICLE DETAIL

资讯详情

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

74LS90搭七进制计数器:反馈清零法与状态图实战解析

74LS90搭七进制计数器:反馈清零法与状态图实战解析 在数字电路实验里时序逻辑电路永远是重头戏。计数器这类电路看着简单真上手搭起来却有一堆讲究。今天我准备拿74LS90来搭一个七进制计数器顺便把状态图怎么画、怎么分析、怎么用掰开揉碎讲清楚。七进制计数器是数电课设里的常见需求也是理解“反馈清零法”最典型的例子。搭完这个电路你会对异步清零、状态转移、波形验证这些东西都有更具体的概念。这篇文章适合正在学数字电路的同学也适合想动手玩经典74系列TTL芯片的电子爱好者。为什么选74LS90因为它是很经典的TTL十进制计数器芯片直接接出来只能数0到9可实际项目偏偏要求七进制。你没法像改软件参数那样“配置”它必须通过外部逻辑把多余的状态掐掉。这个“掐”的过程正是理解时序逻辑电路设计思路的好机会。接下来我从设计思路、状态图、实际接线到调试踩坑一步步把整个项目完整还原出来。1. 设计思路拆解七进制不是“改芯片”而是“加反馈”1.1 74LS90的内部结构决定了玩法先搞清楚74LS90到底是个什么芯片。它内部其实包含了两个独立计数器一个模2计数器和一个模5计数器。模2计数器由CLK A引脚输入输出QA模5计数器由CLK B引脚输入输出QB、QC、QD。把QA接到CLK B上再从CLK A输入计数脉冲两组计数器级联起来就形成了一个标准的BCD十进制计数器输出顺序是QD最高位、QC、QB、QA最低位计数范围从0000到1001也就是0到9。这块芯片还有两组控制端R0(1)和R0(2)是异步清零端两个同时为高电平输出就立刻被清零R9(1)和R9(2)是异步置9端两个同时为高电平输出会被置成1001。清零优先级高于置9。这些控制端都是异步的意思是它们不需要等时钟沿只要电平条件满足立即生效。这个特性是后面做七进制反馈清零的基础。不少初学者会问为什么不直接用74LS90数到6就停因为这个芯片本身没有“计数上限”这个概念它只知道从0数到9然后循环。想让它变成七进制就必须在它数到某个特殊状态时主动给它一个清零信号让它提前跳回0000。这就是反馈清零法的核心思想。1.2 七进制的核心操作数到7就动手清零七进制计数器需要7个有效状态0、1、2、3、4、5、6。从0000开始每来一个时钟脉冲数值加1数到0110也就是6的时候已经用完6个脉冲了。第7个脉冲到来后计数器的输出会先变成0111也就是7。由于我们只想要0到6这7个状态所以必须在0111出现的同时立刻检测到这个状态并产生一个清零信号让计数器跳回0000。用逻辑表达式来描述就是RST QC QB QA当QC、QB、QA三个输出都为1时RST输出高电平接到74LS90的R0(1)和R0(2)上触发异步清零。这里有个关键点由于是异步清零0111这个状态实际存在的时间极短只有门电路传输延迟那么长。从宏观上看计数器好像直接从0110跳到了0000这就是“反馈清零法”做出的七进制计数器。实际做的时候你要为了避免毛刺和竞争冒险要特别注意检测信号的组合逻辑设计。但设计层面这个公式就是整个项目的灵魂。1.3 为什么选“反馈清零法”而不是别的思路有同学可能会想到置9法或者同步清零这里简单对比一下。置9法的思路是平时计数模式不变检测到某个状态后把R9端拉高让输出变成1001再利用后续逻辑跳回。但74LS90的置9端会把输出置成1001这和我们需要的任意起点状态对不上做七进制反而绕远路。同步清零法的思路则更严谨但74LS90本身没有同步清零端。它只有异步清零端所以没法像74LS161那样在时钟边沿同步复位。我们能做的就是利用异步清零端在条件满足的瞬间直接复零。这就是为什么网上的七进制、六进制、九进制计数器方案绝大多数都用异步反馈清零。相对十进制计数器而言这种“用组合逻辑检测非法状态再反馈到清零端”的设计思路几乎适用于任何模数小于10的计数器。理解了这一层后面想改成六进制、九进制就是改一条反馈线的事。2. 从状态表到状态图把电路的“行为”画清楚2.1 状态转移表怎么列时序逻辑电路设计习惯上先列状态转移表再画状态图。状态转移表描述的是当前状态在什么条件下经过一个时钟周期后变成什么状态。对于七进制计数器我先用四位输出QD QC QB QA来描述因为实际电路里可以看到四个输出引脚。表格可以这样列现态 (QD QC QB QA)次态 (QD QC QB QA)触发条件00000001CP上升沿00010010CP上升沿00100011CP上升沿00110100CP上升沿01000101CP上升沿01010110CP上升沿01100000CP上升沿检测到0111后异步清零01110000异步清零瞬态不可作为稳态10000000理论上不会出现上电误入时可能自然回归10010000理论上不会出现上电误入时可能自然回归其他不确定理论上不会出现上电误入时要靠外部复位注意我把0111单独列出来了。它不是稳定状态只是在清零信号生效前一个极短的过渡状态。画状态图时可以不把它当普通状态画但分析电路行为时必须知道它的存在。2.2 状态图怎么画圆圈、箭头和触发条件状态图是时序逻辑电路的“地图”。每一个合法状态用一个圆圈表示圆圈里写状态编码。箭头表示状态转移的方向箭头上的文字说明是在什么条件下发生转移。如果转移只发生在时钟上升沿箭头上写“CP↑”就行。七进制计数器的状态图我可以画成下面这个样子(000) --CP-- (001) --CP-- (010) --CP-- (011) ^ | | | CP↑检测到0111后RST拉高 -------------- (110) --CP-- (101) --CP-- (100)这个图表示计数器从000开始每来一个时钟脉冲状态沿箭头方向前进一路走到110。110状态收到第7个时钟脉冲后不会进入稳定的111而是触发清零逻辑回到000。整个环路包含7个状态所以叫七进制计数器。画状态图时有一个细节箭头上只标“CP↑”还不够最好把清零条件写清楚。比如从110跳到000的箭头上应该标注“CP↑且0111瞬态触发RSTQC·QB·QA”。这样看图的人才明白为什么110不是进位到111而是直接回0。这也是状态图比一堆文字描述更直观的地方。2.3 未用状态与自启动问题七进制计数器合法的状态是000到110剩下的是未用状态。对于四位输出来说未用状态包括0111、1000、1001以及其他不在正常循环里的组合。这里面有讲究。0111在正常工作中作为瞬态出现最终会被清零所以问题不大。1000和1001如果因为上电干扰进入在BCD十进制级联下它们会在接下来的时钟脉冲中自然走到0000也算一种自我恢复。但如果是其他非法状态比如1011、1100这些74LS90本身没有自启动能力计数器可能卡在非预期循环里。解决方法是设计一个“启动复位电路”上电时手动按一下复位按钮或者用一个简单的RC上电复位电路把R0端短暂拉高后再恢复低电平确保计数器从0000开始跑。做课设或面包板实验时我都会在电路里留一个复位按钮调试会省很多事。3. 完整的实操记录面包板上搭一个能跑的七进制计数器3.1 元器件清单和引脚对照先列一个用料清单每种东西干什么用我一起写清楚器件型号/参数数量用途计数器芯片74LS901片核心十进制计数器与门芯片74LS08 / 74LS111片生成清零信号74LS08为2输入与门74LS11为3输入与门发光二极管普通LED3到4个显示QA、QB、QC、QD状态限流电阻330Ω4个保护LED限制电流面包板830孔及以上1块搭建电路直流电源5V稳压电源1个给TTL芯片供电信号源按钮或方波信号发生器1个提供计数脉冲杜邦线若干——若干接线关于与门芯片我再特别说明下。74LS90的R0(1)、R0(2)是高电平有效的清零端所以需要“与门”而不是“与非门”。网上很多教程用三输入与非门直接接R0其实那是不对的。如果你手头只有与非门必须在后面再接一个反相器否则逻辑会正好反掉。用74LS08的话两个与门级联就能实现三输入与门先用一个与门把QC和QB相与再用另一个与门把这个结果和QA相与得到最终RST信号。用74LS11就一个芯片直接完事。74LS90的引脚功能我整理成一张速查表引脚号名称功能说明1CLK B模5计数器时钟输入2R0(1)异步清零端1高有效3R0(2)异步清零端2高有效4NC未连接5VCC电源正极接5V6R9(1)异步置9端1高有效7R9(2)异步置9端2高有效8QC输出位QC9QB输出位QB10GND接地11QD输出位QD12QA输出位QA13NC未连接14CLK A模2计数器时钟输入对照这个表接线不容易搞混。3.2 一步一步接线照着做就行第一步接电源。74LS90的5脚接5V正极10脚接GND。TTL芯片对电源稳定性有一定要求实验中尽量用稳压电源不要用干电池凑合否则计数会出现莫名其妙的抖动。第二步接时钟输入。把信号发生器的输出端接到14脚CLK A。如果没有信号发生器用一个常开按钮一端接5V另一端接14脚按一下产生一个上升沿也可以手动慢慢数脉冲。第三步内部级联。把12脚QA接到1脚CLK B。这一步很关键很多新手忘记接结果QA在跳后面三位却纹丝不动计数器没法变成BCD十进制。第四步搭反馈清零电路。用74LS08的话第一个与门的两个输入分别接8脚QC和9脚QB输出接到第二个与门的一个输入第二个与门的另一个输入接12脚QA输出作为RST信号。这个RST信号同时接到2脚R0(1)和3脚R0(2)。用74LS11就更直接三个输入QC、QB、QA输出就是RST。第五步处理置9端。6脚R9(1)和7脚R9(2)直接接地保证芯片不会进入置9状态。第六步接状态显示。QD11脚、QC8脚、QB9脚、QA12脚各串联一个330Ω电阻再接LED到5V。这种接法是让LED低电平点亮因为TTL输出低电平时的灌电流能力比输出高电平时的拉电流能力强LED会更亮。第七步通电前检查。重点看有没有电源接反、芯片方向是否插反、导线有没有跨接到不该碰的孔位。74LS90的电源脚在5脚和10脚不在芯片左上角和右下角这是最容易踩的坑。3.3 上电验证和波形判读接好线后先不要急着一路狂按按钮。我习惯先上电再按一下复位按钮确保计数器从0000开始。然后每按一次按钮观察LED。正常情况下QA、QB、QC依次变化QD始终是灭的因为七进制计数中QD保持为0。当你看到QC1、QB1、QA1这三个LED同时亮的瞬间其实是看不到的因为清零信号几乎同时产生。实际观察到的现象是在0110之后你再次按下按钮LED直接回到0000没有一个稳定点亮0111的过程。如果有示波器可以看看QA、QB、QC的波形。QA在一个七进制周期内翻转6次所以平均频率是输入时钟的3/7QB翻转4次平均频率2/7QC翻转2次平均频率1/7。也就是说QC的每个周期包含7个输入时钟周期这个信号很适合用来做“七进制完成”的指示信号。实际用示波器观察时你会看到QC的波形不是规则的方波占空比是3/7这是正常现象。验证通过后这个七进制计数器就算跑起来了。下一步可以试着把按钮换成1Hz方波信号让计数器自动跑观察LED按七进制规律循环。4. 调试中的坑常见问题与排查思路4.1 常见问题速查表搭电路看起来简单但实际动手调试时总会遇到一些问题。我把自己踩过、帮别人排查过的典型问题整理成了一张速查表故障现象可能原因排查方向输出还在0到9循环不是七进制反馈信号没生效检查RST是否同时接到R0(1)和R0(2)检查与门芯片是否插对方向QA正常跳QB、QC、QD不动QA到CLK B的连线断了重点检查12脚到1脚的杜邦线输出乱跳状态不稳定电源纹波大或按钮抖动换稳压电源按钮加RC消抖上电显示随机状态74LS90初始状态不确定加手动复位按钮或设计RC上电复位电路LED亮度不一致限流电阻阻值不同或LED压降差异统一用330Ω电阻尽量选同批次LED按下按钮没反应按钮接线位置有误或接触不良用万用表通断挡确认按钮引脚这些故障里超过一半其实是接线问题不是芯片问题。遇到问题别急着换芯片先用万用表顺着信号路径一步一步量。4.2 毛刺问题怎么理解、怎么处理异步清零法有个绕不开的话题毛刺。74LS90的R0端是异步清零当第7个脉冲到来输出从0110跳变到0111同时与门输出RST高电平触发了清零。由于组合逻辑存在传输延迟RST高电平维持的时间非常短可能只有几十纳秒。对于LED显示和手动按键这种低速验证场景这点毛刺根本没影响LED根本来不及亮。但如果后面接的是对时序敏感的电路比如单片机外部中断、高频计数器就可能误触发。这就像你本来只想轻轻拍一下门结果门弹回来的时候把旁边的人碰了一下小事也会变成问题。处理毛刺最常规的办法是在RST信号到R0端之间加一个RC低通滤波器把窄脉冲滤掉。但RC滤波有个副作用它会让清零信号变宽、变慢如果延时太长0111状态会被“固化”一段时间反而破坏了七进制计数的精度。所以我一般只在要求不高的场合用RC正式项目中更推荐改用带同步清零功能的计数器芯片比如74LS161从根源上规避异步清零毛刺。4.3 上电状态不确定怎么办74LS90上电后的初始状态是不确定的可能从任意状态开始跑。如果恰好从一个非法状态开始计数器就可能不在我们预设的000到110循环里。最简单粗暴的解决办法就是在RST信号上并联一个手动复位按钮。按下按钮RST拉高计数器清零松开后RST恢复低电平计数器开始正常计数。按钮一端接RST节点另一端接GND的话要注意逻辑按钮应该把RST节点拉低还是拉高如果按钮一端接5V、一端接RST节点按下时RST为高触发清零正确。如果按钮一端接GND按下时反而会把RST拉低那就错了。还可以设计一个上电自动复位电路用一个10μF电容并联在R0端到地之间同时R0端接一个10kΩ电阻到5V利用电容充电瞬间形成短暂高电平给芯片上电复位。这个电路简单可靠但计算RC时间常数时要留足余量确保5V稳定前复位已经完成。5. 玩出花样从七进制到任意模数计数器5.1 改成六进制、九进制改哪条线掌握了“检测特定状态并反馈清零”的思路后改成其他模数只是改反馈逻辑的问题。比如六进制计数器需要0到5六个状态第6个脉冲到来时输出变成0110所以检测QC和QB同时为1用二输入与门就可以RST QC QB。九进制计数器需要0到8九个状态第9个脉冲到来时输出变成1001检测QD和QA同时为1用二输入与门就行RST QD QA。五进制计数器则要稍微注意一下。第5个脉冲到来时输出是0100检测QD为1且QC和QB都为0需要与门加非门。这时候利用74LS90内部的模5计数段更省事只使用QD、QC、QB三段输出第5个状态是100检测QD为1和QC为0、QB为0同样要用非门。可以看出模数越靠近中间反馈逻辑越复杂。七进制恰好是个很舒服的情况检测QCQBQA1就够了这也是它适合做教学案例的原因之一。5.2 多片级联做更大模数单片的74LS90最多只能做十以内的模数计数器。如果你想要几十进制甚至百进制计数器就得考虑多片级联。级联的方法不复杂但要注意进位信号。以两片74LS90做一百进制为例个位片计数到9后下一个脉冲应该让十位片加1。但74LS90没有专门的进位输出端常见做法是把个位片的QD作为进位信号接到十位片的CLK A。问题是QD在4到9为高到9时QD1再来第10个脉冲QD变0产生一个下降沿而74LS90的CLK A是上升沿触发直接接会少计数一次。解决办法通常是把QD信号反相后再接下一片或者借助额外门电路把进位脉冲宽度调整好让十位片只在个位从9回到0的瞬间收到一个上升沿。这块内容展开讲又是一篇文章了。如果课设只要求七进制单片就够了如果后续要设计数字钟或者大范围计数器级联这个方向很值得深入研究。5.3 把状态图画到设计文档里状态图不只是用来分析的还是设计文档里最重要的图纸。答辩或者交课程设计报告时一张完整清晰的状态图比你用十段文字描述都有说服力。如果你不喜欢手工画可以用建模工具。PowerDesigner这类工具里有专门的状态图模块画好圆圈、箭头和触发条件还能自动排版。我个人的习惯是先用白纸快速画一遍草图确认状态转移逻辑没有遗漏再在工具里慢慢润色。画的时候记住三个要点合法状态画实线圆圈瞬态状态用虚线或注释特别标注每一个箭头都必须写明触发条件。做到这三点状态图就不会被老师挑出大毛病。另外检查状态图是否完整可以把状态转移表和状态图对照着看。状态表里每一行都应该能在状态图里找到对应的箭头状态图里每一个箭头也必须在状态表里有依据。两者完全对应设计才算闭环。最后聊一点我自己的体会。搭这类经典计数器电路最大的乐趣不是看到LED按预期闪烁而是当你真正理解了“为什么这里用与门、为什么R0端是高有效、为什么0117状态只能瞬态存在”之后再回头看任何数字电路手册都会觉得通透很多。74LS90是几十年前的芯片但反馈清零、状态分析、时序约束这些思维在现在用FPGA、写Verilog时照样管用。如果你第一次搭没成功别急着灰心对照状态转移表逐段量信号多半是某根线插错了位置。耐心一点计数器最终会按照你画的状态图转起来。
返回列表