ARTICLE DETAIL

资讯详情

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

74LS194实现环形计数器:从独热码原理到Multisim仿真实战

74LS194实现环形计数器:从独热码原理到Multisim仿真实战 先回答你一个很直白的问题为什么不是用二进制计数器去做循环而是专门拉一个“环形计数器”出来讲因为环形计数器有一种二进制计数器给不了的东西——输出天然是独热码One-Hot。你不需要再接一个译码器去把二进制码翻译成顺序脉冲它的输出本身就按位依次拉高这在顺序控制、流水灯、步进电机换相、状态机设计中都是极其省事的。你见过很多项目里“用一个计数器加38译码器实现扫描”本质上就是用译码器把环形计数器的效果模拟出来但那样白白多了一块芯片、多了一套布线、多了一堆故障点。直接用74LS194做环形计数器一根反馈线就解决问题这部分逻辑干净利落。这篇文章我会把一个完整可用的环形计数器从原理、连线、初始化到波形验证全部拆开讲中间用Multisim仿真为主去做演示面包板实测的逻辑完全一致。所有脚位、电容电阻取值、初始化时序我都会直接给出来你可以照着搭不用再去翻数据手册。1. 环形计数器到底在解决什么问题1.1 环形计数器的状态本质转圈圈的独热码先说清楚“环形计数器”这个叫法。它本质上是一个移位寄存器把最后一位的输出反馈到第一位的输入相当于把一串数据首尾相接形成一个环。时钟脉冲打一拍环里的数据就整体移动一位。如果我们事先在环里只放进一个“1”那么随着时钟不断推进这个“1”就会沿着寄存器一个位置一个位置地转圈其他位置全是“0”。一个4位环形计数器用74LS194来实现它的状态序列长这样时钟节拍Q3 Q2 Q1 Q0最高位对应的十进制初始1 0 0 08第1拍0 1 0 04第2拍0 0 1 02第3拍0 0 0 11第4拍1 0 0 08这里注意如果是在右移模式下Q0是最低位Q3是最高位反馈是从Q0接到右移串行输入端那状态的方向会相反是0001→1000→0100→0010这样流过去。具体是哪种排列取决于你选左移还是右移不影响原理只影响状态的流转方向。很多教程不把左移右移两种模式区分清楚初学者照着接发现灯走得方向不对就容易怀疑人生。我下面会把两种接法都讲清楚。1.2 为什么独热码在顺序控制里这么受欢迎有些人会问二进制计数器加译码器不香吗4位二进制计数器有16个状态用74LS138三-八译码器两片组合也能搞出8路顺序脉冲为什么还要专门搞环形计数器答案有三个层面。第一省译码逻辑。环形计数器的输出端本身就是一个周期性的高电平脉冲序列每一时刻只有一个输出为高直接拿去控制执行机构就行不需要任何译码。你做流水灯、做步进电机四相驱动、做多工位顺序检测接上就能用。第二状态安全。二进制计数器的问题是在计数过程中可能瞬间出现两个输出同时为1的情况——因为多位二进制加法器存在竞争冒险。当然清零和时钟同步能缓解但状态切换瞬间毛刺多少还会存在。环形计数器不存在这个问题它每一步只有一位在变而且还是同步沿触发的输出毛刺概率极低。对工业顺序控制场景这个差别很要命一个毛刺可能让电磁阀误动作。第三分频比灵活。二进制计数器的分频比是2的幂次4位只能做2、4、8、16分频。环形计数器的分频比就是位数n4位就是4分频5位就是5分频你想做6分频、10分频直接串级或者扩展位数就行不需要改反馈网络的计算公式。1.3 74LS194在这里扮演的角色可控的移位寄存器74LS194是一块4位双向移位寄存器它的核心能力概括起来就两句话能并行置数能左移右移还能保持。这三个能力对环形计数器来说一个都不能少。并行置数用来给计数器装入初始状态也就是把那个唯一的“1”放到第一位上去。移位每次时钟沿到来把Q0或Q3的数据挪到下一级实现循环。保持不需要计数时把时钟停掉或者屏蔽模式信号输出维持原状这在总线式控制里很实用。74LS194的数据手册里有一个模式控制表那两个模式选择引脚S0和S1决定了芯片的行为。把这个表记熟了74LS194你就用掉了一大半。表格长这样S1S0工作模式说明00保持输出不随时钟变化01右移Q0→Q1→Q2→Q3数据从右移串行输入DSR进入10左移Q3→Q2→Q1→Q0数据从左移串行输入DSL进入11并行置数把D0~D3上的数据装入Q0~Q32. 74LS194的引脚布局和数据手册里不好好说的细节2.1 引脚功能速查74LS194通常有DIP-16和SOP-16两种封装面包板实验用DIP-16最顺手。各引脚功能如下引脚编号符号功能1CLR异步清零低电平有效清完Q0~Q3全为02DSR右移串行数据输入3D0并行数据输入04D1并行数据输入15D2并行数据输入26D3并行数据输入37DSL左移串行数据输入8GND地9S0模式选择010S1模式选择111CLK时钟输入数据在上升沿锁存12Q0输出013Q1输出114Q2输出215Q3输出316VCC正电源典型值5V请把CLR这个引脚圈起来它是异步清零跟时钟没有关系一旦拉低不管时钟状态如何输出立刻全部归零。这意味着上电瞬间你如果不处理CLR芯片可能跑进一个非法的初始状态——比如四个输出全是1那环形计数器就转不起来了因为环里塞了两个“1”的话你看到的现象就是灯每次亮两个。2.2 时钟沿的陷阱为什么必须在上升沿判断数据74LS194是正沿触发上升沿触发的。也就是说在CLK从低电平跳变到高电平的那一瞬间芯片采样DSR/DSL输入端和模式控制端S0/S1的状态然后把结果锁存到输出。最容易踩的坑是很多人觉得“我在时钟高电平期间改输入数据就会进去”其实不一定。只有在时钟上升沿到来之前输入已经稳定数据才会被正确锁存。如果你在上升沿附近去动数据就会产生建立时间违例导致锁存进去的值不确定仿真里可能看不出来但真实芯片上今天跑得通明天跑不通就是这个原因。在实验里你可能会用按键手动产生时钟。按键按下和松开的瞬间触点会弹跳几十毫秒产生一连串不规则的脉冲等效于连续打了几十个时钟于是计数器一个按键下去跳了好几位。这个问题的解法后面讲初始化电路的时候一并讲因为所有人都绕不过这道坎。2.3 LS系列和HC系列该怎么选74LS194是TTL工艺74HC194是CMOS工艺双排引脚功能完全兼容。做环形计数器我建议优先选74LS194原因有三74LS194跟大多数教材、参考书和课设模板吻合你查资料不容易遇到版本差异的困扰。LS系列的输出驱动能力比普通HC强驱动LED直接灌电流串联一个几百欧电阻就能点亮。LS系列的输入高电平阈值是2.0V对5V TTL信号很友好跟51单片机、FPGA开发板的IO电平都能匹配。如果手里只有74HC194也没问题接线换一下VCC范围2V~6V都行实验逻辑完全一样。只是要注意HC系列在5V下输入阈值是3.15V如果前面用STM32的3.3V推挽输出驱动电平上会有点紧张最好加电平转换或者换开漏上拉。3. 手把手搭一个可复现的4位环形计数器从面包板到仿真3.1 用到的元器件和为什么是这些取值搭一个最标准的右移环形计数器所需清单如下元器件数量作用74LS1941片核心移位寄存器555定时器NE5551片产生连续时钟脉冲10kΩ电阻2个555振荡定时电阻1kΩ电阻4个LED限流电阻100nF陶瓷电容2个555电源去耦/振荡电容10μF电解电容1个按键消抖/上电复位延时4.7kΩ电阻2个上拉电阻用于模式控制和清零复位轻触按键2个手动复位和手动置数发光二极管4个指示Q0~Q3状态面包板、跳线若干-结构件555这块我说一下取值逻辑。上图用的是经典的无稳态多谐振荡器接法VCC通过两个电阻给电容充电放电只通过其中一个电阻进行。充电时间约0.693×(R1R2)×C放电时间约0.693×R2×C合起来一个周期的总时间就是两者相加频率的倒数。我做演示用的是R11kΩR210kΩC10μF算出来频率大概在6.5Hz左右。这个频率下肉眼观察LED闪烁节奏非常舒适四个灯轮流亮每次停留约150ms人能清楚看见“转圈”的效果又不至于等得无聊。如果你给555换上R1470ΩR24.7kΩC100nF频率能到1kHz以上那就要用示波器看了。3.2 上电初始化的完整时序清零、置数缺一不可这是整篇文章最容易被跳过但最关键的环节。74LS194当环形计数器用的时候你不可能让它任意状态下自己跑出正确的循环来。如果上电后寄存器里的数据是0000那么环里没有“1”无论时钟怎么走输出永远是0000如果上电数据是1100环里塞了两个“1”计数器会进入非法状态序列。所以必须主动给计数器装入一个确定的初始状态比如1000。初始化时序必须是先清零后置数。正确的做法是上电时把CLR拉低一小段时间让所有输出归零然后CLR释放回高电平紧接着把S1S0放到11并行置数D3D2D1D0放成1000打一个时钟上升沿数据1000被装入随后S1S0切换到01右移此后每来一个时钟这个“1”就沿Q3→Q2→Q1→Q0的方向移动Q0又通过DSR反馈回Q3形成环。很多人问能不能跳过清零直接置数理论上并行置数会把D端数据直接覆盖进去不清零也可以。但在实际芯片上上电后输出状态不可预知如果CLR一直悬空内部触发器可能在亚稳态附近徘徊置数沿到来时采样到的数据不一定可靠。先清后置这多出来的一小步能省掉后面无数排查时间这是我在实验室里踩出来的结论。我推荐的上电复位电路长这样CLR引脚接一个4.7kΩ上拉电阻到VCC同时接一个10μF电解电容到GND。上电瞬间电容尚未充电相当于把CLR拉低芯片清零几毫秒后电容充满CLR被上拉电阻拉到高电平清零释放。手动复位按键可以并联在这个电容两端按下按键强制清零。这个电路的好处是不需要单独的复位IC成本几毛钱效果可靠。如果手里有RC电路很建议按这个方式接而不是把CLR直接接VCC了事。3.3 完整连线表照着接就不会乱我用Multisim里搭建好的原理图为基准把每个连接点整理成连线表。DIP-16封装的芯片面向自己1脚在左上角16脚在右上角8脚在左下角9脚在右下角这是最常用的摆放方向。芯片引脚连接到说明1CLR4.7kΩ上拉到VCC10μF电容到GND按键到GND上电自动清零按键手动清零2DSR连接到Q012脚右移环形反馈线这一根是整个电路的关键3D0GND并行置数时置04D1GND并行置数时置05D2GND并行置数时置06D3VCC并行置数时置1构造10007DSLGND或悬空右移模式用不到建议接GND避免悬空8GND电源地9S01kΩ下拉到GND通过按钮接VCC按下按钮时S01进入并行置数模式10S11kΩ下拉到GND两模式共用一个开关开关共用见下方说明11CLK555的3脚输出时钟源12Q0LED0经1kΩ电阻和DSR同时作为反馈源和指示13Q1LED1经1kΩ电阻指示14Q2LED2经1kΩ电阻指示15Q3LED3经1kΩ电阻指示16VCC5V电源模式选择很关键这里多啰嗦两句。S0和S1用了两个1kΩ下拉电阻平时都是低电平芯片处于保持状态。你要初始化时让S1和S0同时变高具体做法是S1通过一个开关接VCCS0也通过同一个开关接VCC或者用一个双刀开关。这样按一下开关S11、S01芯片进入并行置数同时再给CLK来一个脉冲数据就装进去了。装完把开关松开S1S0回到00芯片保持随后你要让计数器跑起来就把S1S0切到01右移模式。更简单的连线方式把S1直接固定接高电平S0通过按钮接高电平加下拉电阻。这样平时S1S010是左移模式按按钮时S1S011是并行置数。如果你用左移模式做环形计数器反馈线应当把Q3接到DSL。我上面的表格是右移模式S1S0应该平时是01S1接GNDS0通过按钮接VCC加下拉。两种都可以关键是“并行置数”和“开始移位”的模式选择要能切换得过来。3.4 用Multisim做仿真时这几个点必须设置对Multisim 14.0以上版本自带的74LS194D模型都挺好用但仿真图容易犯的错我列一下555定时器电源NE555的VCC8脚和复位端4脚都要接5V4脚悬空会导致555内部复位输出永远是低电平。这是数字仿真里最常见的“莫名其妙没输出”。时钟类型如果你不想用555直接用一个Clock源或脉冲源接到CLK这样更干净调试方便。把Clock源的频率设为1HzV10VV25V上升沿和下降沿各设成1ns即可。逻辑探头在Q0~Q3上各接一个Probe仿真时能直观看到状态变化。如果用虚拟LED那加一个200Ω限流电阻可以看到亮度变化。操作步骤仿真开始后先把S1S0设成11CLK来一个脉冲让芯片置入1000再把S1S0设成01开始跑。你会看到红绿灯依次亮起循环往复。Multisim里的开关切换是个麻烦点我一般用“Space”键绑定一个单刀双掷开关这样运行仿真的过程中就可以实时切换不需要停下来改线。4. 波形实测与功能验证怎么确定计数器真的“转”起来了4.1 手动时钟模式下的逐拍验证如果你没有示波器只有万用表和LED也没关系用手动时钟逐拍检查是最可靠的验证方式。把CLK从555的输出断开改接一个轻触按键按键一端接VCC另一端接到CLK引脚同时CLK到GND接一个10kΩ下拉电阻。每次按键松开按键从按下到松开的上升沿会触发一次移位。这时候你每按一下LED的状态就变一次可以完全按自己的节奏核对状态表。比如初始置成1000后按一次应该变成0100再按一次0010再按一次0001再按一次回到1000。如果按了两下输出变了两位不要怀疑芯片坏了先去查按键弹跳。这也侧面说明我前面强调按键消抖有多重要。手动时钟的好处是你能在任意时刻“冻结”状态拿起万用表量每个脚的电平和理论值一条条对比。检查逻辑按这个顺序芯片有没有供电16脚对8脚电压是不是4.8V以上。清零是否释放1脚是否接近VCC。模式是否正确9脚S0和10脚S1电压是否符合预期。反馈是否接对DSR2脚和Q012脚是否连通。时钟是否到位CLK11脚有没有脉冲输入按按键时电压有没有跳变。这五步查完基本能定位99%的问题。4.2 555连续时钟模式下的波形图像接入555连续时钟后用示波器同时测Q0和Q1两个输出理想波形特征如下Q0到Q3四个波形形状一样频率是时钟的4分频。各相邻输出之间的相位差正好是90度一个时钟周期。每个输出高电平持续时间为一个完整的时钟周期之后等待三个周期才再次拉高。如果测到Q0和Q1出现同时为高的重叠立刻检查反馈线和置数初值。只要反馈正确、初值正确这个同时为高的现象不可能出现。同理如果四个灯全灭了说明环里可能变成了全0相当于计数器“死机”需要重新复位再置数。4.3 用逻辑分析仪看一眼环里的数据流如果你手头有逻辑分析仪把四个通道夹在Q0~Q3上抓一段时序是最直观的。你会看到一串这样的序列CLK: _-_-_-_-_-_-_-_-_- Q0 : ____------------__ Q1 : ______----------__ Q2 : ________--------__ Q3 : __________------__注意Q0高电平结束后Q1才拉高Q1结束Q2拉高。这就是“一个1在环里转圈”的波形表现。逻辑分析仪还能顺便检查时钟的占空比和上升沿的毛刺比示波器好用一些。5. 搭建中容易踩的坑和完整的排查链路5.1 坑位一反馈线接错位置导致状态链断掉右移模式下反馈线必须从Q0接到DSR。如果你错接成从Q3接到DSR那芯片的行为就不是“循环右移”而是变成“补零右移”每一拍进来的是0Q3上的1在三个时钟后移出芯片就消失环里就没有1了。表现出来就是上电后灯亮了一轮就全灭再也不动。这个错误特别隐蔽因为仿真里你拖一根线过去网络名不仔细看看不出来。我建议接完线之后用万用表蜂鸣档测一遍2脚和12脚的导通性一分钟的事能省一小时。5.2 坑位二CLR悬空导致的状态乱跳74LS194的CLR是异步清零低电平有效。很多第一次用的人觉得“我不需要清零”就把1脚悬空不管了。TTL芯片输入悬空时电平不确定内部可能把它读成低电平结果是芯片时不时被清零环里的数据总是莫名其妙丢失。正确的做法是如果不用手动清零CLR也必须通过电阻上拉到VCC。我见过太多人问“芯片为什么跑着跑着自己复位了”查到最后就是CLR没接。这在面包板上尤其容易发生因为1脚和2脚相邻跳线稍一松动就会碰到。5.3 坑位三按键弹跳导致一次按下跳了好几位前面提过按键弹跳的问题这里详细说。机械按键的触点从断开到闭合不是一次性完成而是在几十毫秒内反复接通断开几次这个过程就是“抖动”。如果你用按键直接做时钟源按键按一下CLK端收到一堆脉冲74LS194就会按这一堆脉冲移位多次于是出现“我按了一下灯却跳了两三个位置”的现象。解决抖动的常用方法有三种用555做一个单稳态整形电路把按键信号送进555的触发端555输出一个宽度可调的干净脉冲再加到CLK上。用RC低通滤波加施密特触发器按键点接RC滤波转折频率设在几百赫兹以下再接74HC14整形。软件/仿真层面直接忽略只在硬件实验时处理Multisim仿真里按键是理想器件不弹跳但实物必须处理。5.4 坑位四给芯片供电时没加去耦电容面包板上的电源线很长线路电感和电源内阻会让芯片在时钟跳变时产生电源毛刺。特别是LED轮流点亮时每路LED电流变化会产生地弹噪声严重时会让芯片误翻转计数器出现跳态。解决办法是在芯片电源引脚附近放一个100nF陶瓷电容引脚尽量短一端接16脚VCC一端接8脚GND。有条件的话再并联一个10μF电解电容。这个习惯我每次搭数字电路都会养成属于“成本最低、收益最大”的可靠性措施。5.5 完整排查链路当计数器不工作时按什么顺序找问题如果把这篇文章压缩成一段可以贴在实验台上的排查流程是下面这个顺序看电源万用表量16脚和8脚之间电压5V是否到位方向不要反。看清零量1脚电平是不是接近VCC。如果接近0V检查上拉电阻和电容是否接对。看模式量9脚、10脚电压。如果你确认当前应该是移位模式S1S0应该是01如果是别的值先查开关和上下拉。看反馈断电量2脚和12脚之间通断确认DSR和Q0是连通的。看时钟接入555后用示波器量11脚有没有脉冲如果没有去查555的4脚复位端有没有接高7脚放电和6脚阈值那两条RC网络有没有接反。看输出四个LED是否按预期顺序亮。如果全灭基本可以判定环里是0重新执行一次清零置数流程。按这个顺序走一遍我还没见过修不起来的环形计数器。6. 一个原理解读为什么环形计数器天然抗毛刺以及它的局限性6.1 从亚稳态角度谈单bit翻转的优势数字电路里有个概念叫“亚稳态”metastability简单说就是触发器在时钟沿采样的瞬间如果输入数据正好跳变触发器可能无法立即确定自己是0还是1输出会在中间电平附近徘徊一小段时间然后才稳定到某个值。二进制计数器因为多位同时跳变比如从0111变成1000四位同时翻转每一位的翻转延迟有微小差异输出端就可能出现瞬间的过渡态。环形计数器每次移位只有一位发生状态转移整个寄存器里只有一位在动而且按照移位寄存器的工作方式每个触发器要么保持原值要么接收前一级的值不存在多位同时翻转的竞争场景。这是它在信号完整性上的一种“先天优势”。6.2 局限一状态利用率低4位环形计数器只有4个有效状态其余12个状态全是非法状态。如果芯片上电后意外进入非法状态比如环里出现了两个1或者全是0那么这个状态会永远循环下去无法自恢复。这就是为什么初始化必须是“先清零、再置数”不能图省事让上电自己碰运气。如果你做的系统对可靠性要求高还得加一个“非法状态检测电路”用逻辑门检测Q0~Q3中1的个数如果不等于1就强制清零重来。这个题外话很多人用状态机实现不过那是另一个话题了。6.3 局限二分频比受位数限制n位环形计数器的分频比是n而n位二进制计数器可以达到2^n分频。8位环形计数器只能8分频但8位二进制计数器能256分频。所以在做频率分频的场合环形计数器只适合小分频比的简单需求大分频比还是老老实实用计数器芯片、或者用CPLD/FPGA内部逻辑实现。不过环形计数器的优势在于频率同步性每一位输出的延迟完全相同都是从同一个时钟沿触发的触发器输出多路顺序脉冲的相位精度极高这对步进电机细分的应用场景来说价值很大。7. 从4位到8位多片级联时反馈怎么接当你需要8位环形计数器8个顺序脉冲时可以用两片74LS194级联。级联方法和教科书上写的移位寄存器扩展方式一样把第一片的Q3接到第二片的DSR把第二片的Q3接到第一片的DSR——等一下这里要停一下如果你要把两片做成一个整体8位移位寄存器反馈线应该从最后一片的Q3接回第一片的DSR中间那片Q3接到最后一片的DSR才行。实际操作中两片级联的接线如下第一片的DSR接到第二片的Q3因为数据从第一片移入第二片。第二片的DSR接到第一片的Q3形成环形反馈。两片共用同一时钟、同一清零、同一模式控制。初始置数时把D3~D0和D7~D4分别设成1000_0000也就是最高位为1其余为0。这里有一个容易绕晕的点级联后形成了8位移位寄存器但两片74LS194的DSR方向都是从DSR进、往Q3方向移。所以正确接法是第一片Q3→第二片DSR第二片Q3→第一片DSR。只要记住“数据流从哪边进反馈就从最终输出端回到起始输入端”这个原则就不会接反。8位环形计数器的状态序列就是初始只有Q71然后依次Q6、Q5……一直移到Q0再回到Q7一个循环8个节拍。这种8路顺序脉冲在单片机管脚不够、要实现8个工位扫描的场合非常好用。8. 环形计数器的进阶玩法扭环计数器、倍频与多相时钟8.1 扭环计数器约翰逊计数器是怎样把状态利用率翻倍的单纯环形计数器的状态利用率太低4位只有4个有效状态。一个经典的改进方法是做扭环计数器也叫约翰逊计数器反馈线不是把Q0直接接到DSR而是把Q0取反后接到DSR或者右移模式下把Q3取反反馈回DSR取决于移位方向。这样4位扭环计数器的工作状态变成节拍Q3 Q2 Q1 Q000 0 0 011 0 0 021 1 0 031 1 1 041 1 1 150 1 1 160 0 1 170 0 0 180 0 0 0可以看到状态从全0逐渐填1到全1再从全1逐渐清0到全0一个周期有8个状态正好是2n状态利用率翻倍。关键是这个序列每一位的变化依然是每次只翻转一次没有毛刺而且不需要译码器就能得到8个相位等间距的信号。你只需要在反馈环里加一个反相器普通74LS04或74HC04都行就能把一个4位环形计数器升级成8分频的扭环计数器。扭环计数器的输出波形和环形计数器的区别是环形计数器每个输出一个周期内只高1个节拍扭环计数器每个输出高半周期、低半周期占空比50%。这在需要精确等占比的时钟分频、多相时钟产生的场合更实用。8.2 用环形计数器给步进电机做四相驱动信号四相步进电机A、B、C、D四相的常规驱动方式是四拍或八拍换相。最简单的四拍单四拍方式就是A→B→C→D→A这不正好就是4位环形计数器的输出吗把74LS194的Q0、Q1、Q2、Q3分别接到四相驱动电路建议加三极管或MOS管放大不能直接带电机线圈用环形计数器产生循环的换相信号。因为输出本来就是独热码天然满足了单四拍换相逻辑不需要任何额外译码。时钟频率决定电机转速你调555的电阻就能调速。这里注意一个细节如果想做八拍A→AB→B→BC→C→CD→D→DA→A那就需要2n8个状态得用4位扭环计数器来做或者用8位环形计数器。这也是为什么我说扭环计数器是环形计数器的天然扩展方案。8.3 顺序脉冲发生器和多相时钟环形计数器的老本行把74LS194做成环形计数器再加一个555时钟源你实际上就拥有了一个最基础的多相时钟发生器。四路输出相位相差90度每路都是周期性脉冲。这种信号在很多老式数字系统里用作时序控制的核心比如让ADC依次采样四个通道、让LED显示屏逐行扫描、让交通灯控制器按相位切换。如果你有FPGA完全可以把这个思路用Verilog/VHDL重新实现一遍——一个参数化移位寄存器加反馈逻辑十几行代码就写完。反过来如果你在FPGA面试里遇到“用移位寄存器实现分配器”这种题本质上就是在考环形计数器的思想。理解了74LS194这个硬件原型代码写起来只是换个载体而已。8.4 级联扩展后的自启动问题多片级联的环形计数器还有一个坑初始置数只能保证最高位是1但如果上电瞬间芯片状态乱套环里可能同时出现好几个1或者全0系统就卡在非法状态里。解决办法之一是加自启动反馈逻辑用逻辑门检测输出中“1的个数”不是1就自动纠正。更简单粗糙的办法是加一个上电延迟复位让CLR在上电后稳定下来前一直保持低电平确保所有触发器都回到0然后再置数。这样至少能保证每次上电都进入确定的初始状态。对实验演示来说上电延迟复位已经够用对可靠性要求高的产品再上状态检测。9. 我踩过的几个坑和最终建议74LS194搭环形计数器这件事我最早是在大二的数字电路课设里接触的当时被CLR悬空坑了一晚上四个LED想亮就亮、想灭就灭完全不受控制。后来把CLR上拉接好现象瞬间就正常了。从那以后我养成了一个习惯任何不用的TTL输入端不是接高就是接地绝不悬空。这条规矩救了我不止一次。另一个建议是调试时一定要“先手后自动”。我第一次做的时候直接上555频率调到几百赫兹用肉眼看LED花成一片完全不知道计数器在干嘛。后来换成手动按键、一拍一拍地走才理顺了状态转移。灯按一下就挪一位那才是真正把原理吃透的时刻。等你手动逐拍确认了逻辑再接上555让它连续跑就只是锦上添花了。如果你想把这块电路做成一个能长期用的调试工具可以在输出端加一个74LS244做缓冲驱动再接上功率三极管带继电器或者小电机。74LS194的扇出能力大概能直接带10个TTL负载但带LED串1k电阻没问题带功率器件一定要加驱动级别直接用芯片去推。最后送你一个参数速查表方便你重新搭的时候不用翻文章参数典型值工作电压5VLS/ 2V~6VHC时钟频率手动调试1Hz左右时钟频率555演示0.5Hz ~ 10Hz555振荡定时电容C10μF555振荡定时电阻R1/R21kΩ / 10kΩLED限流电阻330Ω ~ 1kΩCLR上拉电阻4.7kΩ上电复位电容10μF去耦电容100nFVCC-GND从清零到置数从右移到反馈把每一步都想明白74LS194在你手里就不再是芯片手册上冷冰冰的框图而是一个能按你的命令转圈、分频、出波形的伙伴。环形计数器这个结构小小的四颗灯转起来之后你会看到数字逻辑里最直观的“时间”长什么样。
返回列表