ARTICLE DETAIL

资讯详情

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

用74LS194移位寄存器搭建环形计数器:原理、电路与实操指南

用74LS194移位寄存器搭建环形计数器:原理、电路与实操指南 搞数字电路的朋友一定绕不开计数器和移位寄存器这两类基础器件。今天聊的这个电路就是把它们俩放在一起用拿一块74LS194四位移位寄存器搭一个环形计数器让一个“1”在四个输出端之间顺序循环。相比4518、4017这类专用计数芯片用74LS194搭环形计数器有个天然优势——状态输出是充分展开的每一位对应一个独立输出端不用额外译码直接就能驱动流水灯、步进电机四相时序脉冲或者做一个数字系统的节拍发生器。这篇文章从原理、引脚一路讲到完整电路图和实操步骤照着做就能跑起来。适合刚学完时序逻辑、想动手搭电路的电子爱好者也适合做数字电路课程设计的同学参考。1. 整体设计与思路拆解1.1 为什么选74LS194而不是4017很多人一听到“环形计数器”第一反应是用CD4017或者直接上单片机。CD4017是自带译码的十进制计数器十个输出端分别对应0~9拿来跑流水灯确实方便。但如果你想控制一个四相步进电机或者做一个四拍节拍发生器CD4017的十路输出反而是浪费而且它的内部结构是约翰逊计数器加译码网络并不是真正意义上的移位型计数器。74LS194则完全是另一种路子。它是4位双向通用移位寄存器既能右移、左移又能并行装载数据还能保持当前状态。用一片74LS194通过简单的反馈接线就能做出任意长度、任意初始状态的环形计数器。而4017的状态数是固定的、译码是固定的灵活性差了不少。更关键的是74LS194是TTL家族里的“钉子户”价格便宜、库存遍地都是DIP封装往面包板上一插就能调试实测下来非常适合教学演示和课设。另外如果你以后想扩展成8位、16位的环形计数器74LS194可以直接级联一片接一片串行输入串行输出逻辑非常干净。4017想级联就要处理进位和译码麻烦得多。1.2 环形计数器到底是怎么“转”起来的移位寄存器的核心动作很简单每个时钟上升沿数据往指定方向挪一位。以右移为例数据从DSR脚进入Q0原来的Q0跑到Q1Q1跑到Q2Q2跑到Q3Q3的数据则会被“挤出去”。如果在芯片外面把Q3接回到DSR那被挤出去的数据又会绕一圈回到Q0——这就成了一个环。所以环形计数器本质上就是一个“自己给自己喂数据”的移位寄存器。给寄存器预先装载1000那么时钟依次到来后状态就是1000 → 0100 → 0010 → 0001 → 1000四个状态反复循环。每个状态下只有一个输出端为1也就是常说的“one-hot”编码。用一句话概括普通移位寄存器是直线流水线把Q3接回输入端之后流水线变成了环形传送带。就像四个人排队只有一个人手里举着旗子每吹一次哨旗子往右传一个人传到队尾后再传回队头循环往复。1.3 方案选型移位方向、初值加载和反馈策略搭这个电路之前有三件事要先定下来第一移位方向。我用右移因为Q0是第一位观察起来最直观。右移时串行输入端口叫DSR反馈线要把Q3接到DSR上。如果你偏爱左移那就把Q0接到DSL上效果和右移是对称的。第二初始值怎么进去。移位寄存器本身不会自己变成1000上电瞬间寄存器里的四个触发器可能随机出现任何状态。所以必须先“装载”一次让S1S01芯片进入并行装载模式此时D0接高电平D1~D3接地再给一个时钟上升沿1000就被锁进寄存器了。第三反馈策略。最简单的反馈是Q3直接接DSR但这有个坑如果寄存器被清成0000那DSR永远是0整个计数器会锁死在0000。后面的“问题排查”部分我会讲怎么用一片74LS27做自启动改造让电路从任何状态都能自动收敛到正常循环。2. 核心细节解析与实操要点2.1 74LS194引脚16个脚各有各的活74LS194是16脚DIP封装面包板上很好认芯片缺口朝上左下角是1脚逆时针绕一圈到左上角是16脚。引脚功能我整理成了表格接线之前最好先对照看一遍。引脚名称类型功能说明1S1输入模式控制位1配合S0选择工作模式2D0输入并行数据输入第0位3D1输入并行数据输入第1位4D2输入并行数据输入第2位5D3输入并行数据输入第3位6Q0输出寄存器输出第0位7Q1输出寄存器输出第1位8GND电源接地9Q2输出寄存器输出第2位10Q3输出寄存器输出第3位11CP输入时钟输入上升沿触发12S0输入模式控制位013MR输入异步清零低电平有效优先级别最高14DSR输入右移串行数据输入15DSL输入左移串行数据输入16VCC电源接5V这16个脚里最容易踩坑的是两个串行输入DSR和DSL。如果只用右移DSL绝对不能悬空必须接到GND或者VCC。TTL芯片的悬空输入会像一根天线把空间噪声耦合进来导致寄存器莫名其妙多翻转一下。我见过有人做实验时状态乱跳查了半天最后发现就是DSL悬空惹的祸。2.2 模式控制表别看只有几个状态决定所有行为S1和S0组合起来用芯片就变成了一个“可以编程的寄存器”。这张表是整个电路的控制核心MRS1S0操作0任意任意清零Q0~Q3全部变0100保持输出不变101右移DSR→Q0Q0→Q1Q1→Q2Q2→Q3110左移DSL→Q3Q3→Q2Q2→Q1Q1→Q0111并行装载D0→Q0D1→Q1D2→Q2D3→Q3搭建环形计数器时我建议把S0直接接高电平这样整个电路只需要控制S1一个脚S1为1时处于并行装载模式S1为0时处于右移模式。开关拨到装载档给一个时钟初值进去了再拨到运行档计数器就开始循环。这个简化方法是我实际搭电路时验证过的比两路控制都走开关省事也减少接错线的概率。还要提醒一句模式信号和并行数据必须在时钟上升沿之前稳定下来这就是时序电路里的建立时间概念。实际操作中先拨好S1再按时钟按钮顺序不要反。2.3 反馈接线DSR接Q3这是环形计数器的灵魂没有反馈的移位寄存器只是一个数据延迟链有了反馈才变成计数器。在右移模式下Q3是队伍的最后一棒它必须把手中的数据交还给队首所以Q3接到DSR是整条反馈链路的关键一步。接好反馈之后再看看整个循环的状态表时钟序号Q3Q2Q1Q00000110010201003100040001看到规律了吗单个“1”从右往左平移到了最左边又跳回最右边。4位移位寄存器对应4个有效状态这就是4位环形计数器的全部秘密。如果你把反馈改成Q3取反后再接回DSR就变成了约翰逊计数器也叫扭环计数器。4位的约翰逊计数器有8个有效状态输出波形像蛇一样扭动适合做8步顺序控制。这块内容在后面扩展部分我再展开现在先把最基本的环形计数器搭出来。3. 实操过程与完整电路图3.1 完整电路图与面包板连接清单mock测试的时候很多人问我要“完整电路图”其实数字电路这东西一张引脚级连接清单比什么都管用。下面是完整的面包板接线表照着逐脚接基本一次成功。74LS194引脚接法16VCC5V并在VCC与GND之间就近接0.1μF去耦电容8GND电源地11CP时钟源输出555电路或手动单步信号13MR10kΩ电阻上拉到5V再并一个按键到GND实现复位12S0直接接5V1S1接单刀双掷开关LOAD档接5VRUN档接GND2D0接5V装载初值“1”3D1接GND4D2接GND5D3接GND14DSR接Q3第10脚这是反馈线15DSL接GND不用的串行输入必须接地6Q0经330Ω电阻接LED0LED另一头接5V7Q1经330Ω电阻接LED1LED另一头接5V9Q2经330Ω电阻接LED2LED另一头接5V10Q3经330Ω电阻接LED3LED另一头接5V同时引线到DSR这里有一个很重要的接线细节LED必须是“5V → 电阻 → LED → Q输出”这种接法而不是大多数人习惯的“Q输出 → 电阻 → LED → GND”。原因是74LS系列芯片的低电平灌电流能力强约8mA高电平拉电流能力却很弱只有0.4mA左右。接成第一种方式输出为低电平时LED才会亮如果接成第二种方式LED会非常暗甚至完全不亮。至于S1的模式切换如果手头没有单刀双掷开关也可以用两根跳线手动实现一根跳线把S1接到5V是装载拔掉改接GND就是运行。只是操作起来麻烦一点实验效果一模一样。3.2 时钟源555自激振荡和手动单步两种方案环形计数器必须有时钟才能动。我强烈建议你在面包板上同时准备两种时钟一种用555搭自动脉冲另一种用手动按键单步触发。自动脉冲用来观察连续循环效果手动单步用来检查每一个状态的转移是否正确。555自动脉冲电路很经典。取R11kΩ、R210kΩ、C1100μF输出频率约为0.7Hz也就是大概1.5秒翻一次LED的移动效果非常清楚。频率计算公式是f 1.44 / ((R1 2×R2) × C1)把数值代进去1.44 / ((1kΩ 20kΩ) × 100μF) ≈ 0.69Hz。如果你想更快或更慢把R2换成10kΩ电位器就行边调边看效果。手动单步时钟的核心是去抖。按键是机械触点按下瞬间会来回弹跳几十毫秒如果直接接到74LS194的CP脚一次按键可能触发好几个时钟状态一下就跳飞了。解决办法是用一个RC低通滤波器加施密特触发器按键一端接5V另一端经过10kΩ下拉电阻到地并在该节点接0.1μF电容到地产生的信号再经过74HC14的反相器整形后接到CP脚。这样按一下只会产生一个干净利落的上升沿。如果你没有74HC14也可以用常见的555单稳态电路代替但RC加施密特触发器是最省器件的方案。实际测下来74LS194对时钟上升沿的宽度要求不高施密特整形后的信号完全够用。3.3 实操步骤从上电到看到循环效果接线完毕之后按下面的顺序操作基本不会迷路第一步检查电源。用万用表确认芯片第16脚是5V第8脚是0V。这一步看着简单但电源接反烧芯片的惨案我见过太多次了。第二步把S1拨到LOAD档S0保持高电平。此时芯片处于并行装载模式D0上的“1”已经等在门口了。第三步按一次手动时钟按钮。在时钟上升沿瞬间D0~D3的数据被锁存Q0变成1Q1~Q3变成0。如果LED是低电平点亮接法你会看到Q1、Q2、Q3对应的三盏灯亮Q0那盏灭。第四步把S1拨到RUN档芯片进入右移模式。这时候再按时钟按钮那盏“灭”的灯会依次往Q1、Q2、Q3移动然后再绕回Q0。看到这个循环说明环形计数器已经工作正常了。很多第一次搭这个电路的人会困惑为什么一开始有三盏灯亮只有一盏灭这就是LS系列LED低电平点亮的代价——你看到的其实是“0”在跑而不是“1”在跑。如果你更希望看到单灯跑的效果可以换成74HC194HC系列高电平驱动能力强或者用逻辑取反电路把Q输出翻转一下。但从工作原理上说两种现象是等价的。如果你用的是555自动时钟上电后不需要手动按键也会自动循环。但第一次调试我建议手动单步一步一停方便观察和排错。4. 常见问题与排查技巧实录4.1 上电后不走、卡死在全0或者乱码我自己带学生做实验时这个电路的故障基本集中在三种现象上。现象一上电后四个LED全灭或者全亮但没有反应。先别怀疑芯片烧了大概率是MR被拉低了。MR是异步清零端低电平有效如果这个脚直接接地芯片就会一直处于清零状态任何时钟都没用。正确接法是MR通过10kΩ电阻上拉到5V需要清零时才按键接地。现象二状态乱跳不是1000→0100→0010→0001的顺序。这种十有八九是初值没装载成功。可能是S1没拨到LOAD位置就按了时钟也可能是D0~D3的接线松了。把模式开关拨到LOAD再按一次时钟确认Q0为高后再切换到RUN。现象三卡在0000完全不动。如果反馈线Q3→DSR接好了但寄存器一开始是0000那么DSR永远是0数据永远进不来计数器就锁死了。解决方法是重新装载初值如果想让电路一上电就自动恢复正常可以试试后面说的自启动改造。排查这类数字电路问题我习惯按“电源→地→复位→模式→时钟→反馈→初值”这个顺序来从“芯片能不能活”查到“数据往哪走”基本能覆盖90%的故障点。4.2 抖动、毛刺、电源噪声这些看不见的敌人手动按键不接去抖电路一次按键跳好几个状态这是新手最头疼的问题。RC去抖的原理很简单按键抖动产生的毛刺被电容吸收施密特触发器再把缓慢变化的电压整形为陡峭的边沿。电容取0.1μF、电阻取10kΩ时时间常数约1ms对付机械按键几十毫秒的抖动足够。555自动时钟模式下如果LED干扰明显或者状态偶尔跳变多半是电源没处理好。TTL芯片对电源纹波比较敏感我建议在面包板的电源轨和芯片电源脚附近都加上0.1μF去耦电容。有些人不加这个电容也能跑但加了之后稳定性明显提升尤其是周围还有继电器、电机等大功率器件时这个电容几乎就是救命稻草。还有一点要特别提醒CP时钟线尽量短不要和LED的驱动线并排走太长距离。面包板上的长飞线之间会形成寄生电容和互感时钟信号被污染后寄存器会在错误的时刻采样。遇到这种问题时把时钟线换成跳线帽那样的短连线或者把反馈线和时钟线拉开距离症状往往就消失了。4.3 扩展玩法8位环形计数器与自启动改造电路跑通后可以往三个方向扩展每一个都很有价值。方向一级联成8位环形计数器。两片74LS194的时钟CP并联第一片的Q3接到第二片的DSR第二片的Q3反馈回第一片的DSR。装载初值时两片都要进入LOAD模式给其中一片的对应数据位装1其他位装0。级联之后那盏灭的灯会在8个LED之间循环移动效果非常壮观。方向二改成约翰逊计数器。把反馈线从Q3直接接到DSR改成Q3取反后接DSR就变成了扭环结构。4位的约翰逊计数器有8个有效状态输出变化更丰富步进电机八拍驱动正好用到这个逻辑。取反可以用一个反相器比如74LS04或74HC04非常方便。方向三自启动改造。为了解决0000锁死问题我推荐用一片74LS27三输入或非门把Q0、Q1、Q2接到或非门的三个输入输出接到DSR。这个逻辑的意思是只要Q0~Q2不全为0DSR就是0只有它们全为0时DSR才为1。这样寄存器从任何状态出发经过几个时钟都会自动收敛到正常的单灯循环。这个方法是教科书上自校正环形计数器的标准做法我实际焊板子验证过效果稳定、成本极低强烈建议试试。实际操作中自启动电路有奇效。有一次我做演示前忘记手动装载初值一上电就乱了但因为提前改了NOR反馈两三拍之后自己就恢复正常循环。台下观众还以为是程序故意设计成自动校正的其实是硬件电路自己“修”回来的。这个内容后续还可以这样扩展把74LS194的输出Q0~Q3接到ULN2003达林顿管阵列直接驱动四相六线步进电机一个环形计数器就变成了完整的步进电机驱动器。或者把时钟换成传感器脉冲做成分拣传送带的循环工位信号。74LS194这类老芯片虽然看起来“过时”但它在顺序控制上依然是教科书写进骨子里的可靠方案。
返回列表