ARTICLE DETAIL

资讯详情

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

Multisim 14.0中用74LS160/161搭建61进制计数器完整指南

Multisim 14.0中用74LS160/161搭建61进制计数器完整指南 上周有位学弟拿着数字电路课设题来问在Multisim 14.0里用74LS160和74LS161搭一个61进制计数器怎么总是出不来效果。他按网上的电路连了一遍仿真一运行两个数码管不是从乱码开始跳就是一路冲到99。我相信很多人拿到这个题目也是类似状态原理好像都明白一个芯片计数、两个芯片级联、到某个数清零可真在Multisim里把芯片摆上去、把线连对还得让输出干干净净地从00走到60再归零中间全是可以踩的坑。今天这篇文章就把这道经典题完整拆开讲从芯片差异、计数原理到Multisim 14.0的连线步骤和仿真调试最后附一张按线号逐一对应的完整接线表照着连就能跑起来。1. 先弄清74LS160和74LS161到底差在哪1.1 同一家族的两位邻居计数模值完全不同74LS160和74LS161都是TTL 74LS系列的中规模同步计数器都是16脚DIP封装引脚排列几乎完全一致也都有异步清零和同步预置功能。最容易让人混淆的一点是两者长相一样但“数数范围”不一样。74LS160是同步十进制计数器输出按BCD码从0000计数到10010到9再回到000074LS161是同步4位二进制计数器输出从0000计数到11110到15再回到0000。一个模10一个模16这就是它们最本质的差异。可以打个比方160是十进制算盘满十进一161是十六进制算盘满十六进一。级联方式、清零方式的思考方法都一样区别只在“几进制”。这里还要特别注意虽然两者都有CLR和LOAD引脚但CLR是异步清零不需要时钟沿只要拉低立刻清零LOAD是同步预置必须等到时钟上升沿才把数据装入。这一点在后面反馈清零电路里非常关键很多仿真不成功就是没分清“异步清零”和“同步预置”的区别。两个芯片的共同点列出来方便对照功能74LS16074LS161计数规律0000→0001→…→1001→00000000→0001→…→1111→0000模值1016输出编码BCD8421码二进制异步清零CLR低电平有效低电平有效同步预置LOAD低电平有效低电平有效使能ENP/ENT高电平有效高电平有效进位输出RCO计数到9且ENT1时输出1计数到15且ENT1时输出1典型用途十进制个位计数二进制/多位计数1.2 为什么个位放160、十位放16161进制计数器需要“个位”和“十位”两个计数级。个位每计满10个脉冲就要给十位送一次进位并且个位输出必须是BCD码0000~1001这样显示才能是0~9。所以个位必须用74LS160。如果用74LS161当个位个位会从0数到15中间出现A、B、C、D、E、F这些非十进制状态显示和进位逻辑都要额外处理纯属给自己找麻烦。十位的情况不一样。61进制时十位只需要出现0、1、2、3、4、5、6这七个值虽然74LS161是十六进制计数器但在这个电路里它被限制在0到6之间工作完全不会暴露“能数到15”的特性。用161当十位反而能和个位的160形成互补这也是很多课程设计喜欢“160161”组合的原因同一个引脚定义不同的模值考察你能不能根据需求正确选型。这里有个容易钻牛角尖的问题161不是十进制做十位会不会错答案是不会。决定“几进制”的是整个电路的反馈清零/置数逻辑不是芯片自身的计数模值。只要在计数到61时把CLR拉低整个电路就是61进制161自身的0到15计数范围会被清零逻辑牢牢限制在0到6以内。2. 61进制的计数规律从哪来2.1 把61个状态拆开看“61进制”不是“数到61就结束”而是计数器一共有61个稳定状态。按我们熟悉的数值排列就是从00数到60共61个状态。它们的分布其实很有规律十位二进制十位数值个位覆盖对应状态000000~900~09000110~910~19001020~920~29001130~930~39010040~940~49010150~950~59011060~160、61十位从0到5这段每个十位值对应完整的10个个位状态一共60个走到十位为6以后个位只走0和1两个状态其中60是正常显示状态61是触发清零的瞬态。所以宏观上看到的循环是00、01、02、…、59、60、00正好61个稳定状态。这个分布也解释了一个关键事实十位计数器在正常工作中永远走不到7到15。因为一到61整个计数器就被清了。这也让后面的清零检测逻辑可以做得非常简单十位的高位QD在0到6之间永远是0根本不用管它。2.2 反馈清零法把“61”变成复位信号实现61进制最简单的方法是反馈清零法也叫反馈复位法。思路很直白设计一个组合逻辑电路实时监视两片计数器的输出。当检测到“十位6且个位1”这个状态时立刻输出低电平分别接到74LS160和74LS161的CLR端。由于这两个芯片的CLR是异步清零低电平一出现不管有没有时钟计数器马上回到0000 0000。所以从宏观上看计数器只在00到60之间循环61这个状态只存在几十纳秒肉眼和数码管都捕捉不到。为什么检测61而不是60因为清零法的逻辑是“数到模值才复位”61是第一个不允许停留的状态一旦出现就立刻消灭。这种方式电路简单一个74LS00就能完成检测代价是会产生一个极窄的复位脉冲。在Multisim纯数字仿真里这个窄脉冲几乎无感但如果你将来要把这个电路接到单片机或其他对边沿敏感的负载上就要留意它。2.3 如果追求更干净的时序反馈置数法比清零法更稳的常见做法叫反馈置数法也叫反馈预置法。它检测的不是61而是60当计数器走到60十位6、个位0时让LOAD端变低同时把两片芯片的预置数输入ABCD全部接成0000。下一个时钟上升沿到来时计数器被同步装入0000跳回00。因为装载动作发生在时钟沿上61这个状态根本不会出现整个循环非常干净。两种方法的对比如下方法检测状态复位方式优点缺点反馈清零法61十位6、个位1异步CLR电路简单少一组预置数连线有窄脉冲毛刺反馈置数法60十位6、个位0同步LOAD无毛刺时序干净多一组预置数连线本文后面Multisim的接线我按多数课程默认的反馈清零法来讲想尝试置数法的朋友我在第4章最后专门给一个改造说明。3. Multisim 14.0搭建步骤与完整电路连接3.1 元件清单少一个都跑不起来在Multisim 14.0中元件放置通过Place Component菜单或者直接按快捷键CtrlW打开。本电路需要以下元件元件型号在Multisim中的位置用途U174LS160DGroup: TTL, Family: 74LS个位计数U274LS161DGroup: TTL, Family: 74LS十位计数U374LS00DGroup: TTL, Family: 74LS反馈清零逻辑X1DCD_HEXGroup: Indicators, Family: HEX_DISPLAY个位显示X2DCD_HEXGroup: Indicators, Family: HEX_DISPLAY十位显示V1DIGITAL_CLOCKGroup: Sources, Family: SIGNAL_VOLTAGE_SOURCES1Hz时钟VCC/DGND电源符号Group: Sources, Family: POWER_SOURCES5V电源和地一个使用细节在元件搜索框输入74LS160D时列表里可能同时出现74LS160D、74LS160N等不同后缀它们的功能和引脚完全一样只是封装描述不同选一个能正常放置的即可。DCD_HEX是Multisim自带的BCD输入数码管输入0000~1001显示0~9输入1010~1111显示A~F。本电路用到的数字不会超过9所以显示不会出现A到F很合适。这里还要提醒一下74LS00D一个封装内包含4个独立的2输入与非门。Multisim放置多门封装元件时会默认放置A门你需要在放置对话框的Gate栏里分别选择A、B、C或者直接连续拖放三份软件会把它们归到同一个U3封装下。后文说的U3A、U3B、U3C就分别指的这三个与非门。3.2 先认识引脚再动手连线74LS160和74LS161都是16脚芯片Multisim原理图上的引脚名称一般直接标在符号上。对照一下引脚名称说明1~CLR异步清零低有效2CLK时钟上升沿触发3A预置数据输入bit04B预置数据输入bit15C预置数据输入bit26D预置数据输入bit37ENP计数使能高有效8GND地9~LOAD同步预置低有效10ENT计数使能同时控制进位高有效11QD输出最高位权重812QC输出权重413QB输出权重214QA输出最低位权重115RCO进位输出16VCC电源Multisim里低有效的引脚名上会带一个小圆圈或“~”符号比如~CLR、~LOAD。这里有个新手最容易忽略的点QA是bit0权重1QD是bit3权重8。接数码管时如果顺序接反显示的数字会完全对不上。电源方面Multisim默认把74LS系列芯片的VCC和GND引脚隐藏统一连接到名为VCC和DGND的全局网络上。你只要在原理图空白处放置一个VCC符号和一个DGND符号所有芯片就自动供电了。如果自己想看引脚可以在芯片属性里勾选显示电源引脚两种方式对仿真结果没有影响。3.3 从时钟到级联一步一步接线具体接线按下面的顺序来不容易漏放好U1、U2、U3、X1、X2并放一个VCC、一个DGND电源符号。双击DIGITAL_CLOCK把Frequency设为1单位HzDuty Cycle保持默认50%。1Hz意味着每秒跳一个数观察最舒服。连接时钟V1的输出引脚同时接到U1的CLK和U2的CLK。由于U1、U2是同步级联两片芯片共用同一个时钟源在同一个上升沿动作。连接个位使能U1的ENP和ENT都接VCC让个位在每个时钟沿都允许计数。连接级联进位U1的RCO接到U2的ENT。这根线是全电路的关键。74LS160的RCO在“个位9且ENT1”时输出高电平并且这个高电平会保持到下一个时钟沿所以当个位从9变回0时十位会在这个时钟沿正确加1。U2的ENP也接VCC。把U1、U2的LOAD都接VCC预置输入A/B/C/D接到DGND。这样同步预置功能被禁用芯片只依赖CLR清零。反馈清零部分可以按3.4的接线表直接连也可以等第4章看完原理再连。连接显示把U1的QA、QB、QC、QD分别接到X1的A、B、C、D把U2的QA、QB、QC、QD接到X2的A、B、C、D。DCD_HEX的A是最低位对应QAD是最高位对应QD。3.4 完整接线表每一根线都写清楚下面是这个电路的完整接线表每一行都是一条导线或一个网络关系。按这张表连出来就等价于标题里说的“完整电路图”。编号起点终点说明1V1.OUTU1.CLK时钟到个位2V1.OUTU2.CLK时钟到十位3U1.RCOU2.ENT个位向十位进位4U1.ENPVCC个位使能15U1.ENTVCC个位使能26U2.ENPVCC十位使能17U1.LOADVCC禁用同步预置8U2.LOADVCC禁用同步预置9U1.QAX1.A个位显示bit010U1.QBX1.B个位显示bit111U1.QCX1.C个位显示bit212U1.QDX1.D个位显示bit313U2.QAX2.A十位显示bit014U2.QBX2.B十位显示bit115U2.QCX2.C十位显示bit216U2.QDX2.D十位显示bit317U2.QCU3A.A十位6检测A18U2.QBU3A.B十位6检测B19U3A.YU3B.A反相输入20U3A.YU3B.B反相输入并联21U3B.YU3C.A十位6高电平有效信号22U1.QAU3C.B个位1检测23U3C.YU1.CLR反馈复位到个位24U3C.YU2.CLR反馈复位到十位25VCC符号全局VCC网络芯片自动供电26DGND符号全局DGND网络芯片自动接地表中的U3A、U3B、U3C是74LS00内部的三个与非门。U3A对应第一个门输入A、B输出YU3B对应第二个门输入都接U3A.YU3C对应第三个门。4. 反馈清零的与非门逻辑三个门把“61”抓出来4.1 清零条件怎么拆解要让电路在61时清零本质是搭建一个组合逻辑让它输出满足CLR NOT( 十位等于6 且 个位等于1 )当输出为0时强制两片芯片异步清零。十位等于6时74LS161的输出是0110也就是QD0、QC1、QB1、QA0。QC的权重是4QB的权重是242正好是6。在61进制电路中十位正常计数范围只有0到6QD在0到6之间永远是0所以判断“十位是不是6”只需要看QC和QB是不是都为1QD和QA都不用管。个位等于1更简单74LS160输出0001只需要看QA是不是1。于是清零条件收缩成三个信号十位的QC 1十位的QB 1个位的QA 1这三路信号同时为1时就是61状态必须把CLR拉低。4.2 三个与非门的完整推导74LS00只有2输入与非门不能直接同时检测三路信号。一个常见的错误接法是把三个条件直接串两个与非门U3ANAND(QC, QB)U3BNAND(U3A, QA)。这种接法在Multisim里一试就会发现61根本不清零因为当十位等于6时U3A输出已经变成00再和QA做与非结果永远是1CLR拉不低。正确做法是先把“十位等于6”这个条件恢复成高电平再和“个位等于1”做与非。完整逻辑如下U3A NAND(U2.QC, U2.QB) // 十位6 时U3A.Y0其他时候为1 U3B NAND(U3A.Y, U3A.Y) // 用与非门当反相器十位6 时U3B.Y1 U3C NAND(U3B.Y, U1.QA) // 当十位6 且 个位1 时U3C.Y0 U3C.Y - U1.CLR, U2.CLR验证一下几个典型状态计数状态十位QC/QBU3A.YU3B.Y个位QAU3C.YCLR是否复位591/01011否601/10101否611/10110是230/11011否可以看到只有十位QC1、QB1且个位QA1的那个状态也就是61CLR才会拉低其余状态都不受影响。4.3 几个必须避开的接线误区第一U3B在这里是纯反相器两个输入必须短接在同一个节点上也就是都接U3A.Y。如果把U3B的两个输入分别接U3A.Y和某个别的信号逻辑就会完全变味。第二CLR信号要同时送给U1和U2不能只清个位或只清十位否则会出现十位已经回到0、个位还在9的错位状态。第三检测用的输出端别接错U2.QC和U2.QB是十位的高两位如果接成U2.QA和U2.QB61的清零条件就永远等不到了。如果想把电路改成反馈置数法改动其实很小把U1、U2的LOAD从VCC改接U3B.Y预置输入U1.A~D、U2.A~D全部接DGND清零条件改成检测60也就是只保留“十位6”的判断用U3B.Y直接送LOAD。这样在60状态LOAD低电平下一个时钟沿来临时同步装入0000整体功能不变但不再有61态的窄脉冲实际焊板更推荐这种做法。5. 仿真运行、上电乱码与Multisim里的常见坑5.1 启动后不是00先别怀疑电路Multisim里数字IC在仿真启动时输出状态有时并不是确定的0。这里比较推荐的做法在U1.CLR和U2.CLR所在的复位线上额外放一个SPST开关Group: Basic, Family: SWITCH, Component: SPST开关一端接CLR节点另一端接DGND。仿真开始后如果发现数码管显示乱了先按一下空格或点击开关让CLR短暂为低计数器回到00然后把开关断开再继续观察。这个步骤在第一次仿真时几乎是必做的因为很多版本的Multisim在启动瞬间并不会自动给计数器复位。不过要注意这是仿真环境下的做法。如果将来做真实硬件不要用SPST直接短接74LS00推挽输出的CLR节点到地因为当与非门输出高电平时开关闭合等于把TTL输出短路可能损坏芯片。真硬件要么用RC上电复位电路要么用集电极开路或缓冲门的方式组合复位信号。5.2 显示不对、计数乱跳优先查级联和显示位序如果数码管不是按00到60循环而是乱跳按下面的顺序排查确认U1.RCO接的是U2.ENT不是U2.CLK也不是悬空。有些教程把十位时钟直接接在个位RCO上做成异步级联也能工作但U1.RCO到U2.ENT的同步级联更稳定也更好理解。确认U2.ENT确实有信号。Multisim中如果某个使能引脚悬空有些仿真模型会当成高电平有些不会不要依赖悬空行为。确认显示接线按QA到A、QB到B、QC到C、QD到D的顺序。接反一位显示就会乱。比如个位实际是9显示却可能像6。确认CLR节点确实连到了U3C的输出。可以放一个逻辑探针在CLR节点上每个循环的61时刻它应该出现一个低电平。不过61态极短肉眼看不清用Multisim的Logic Analyzer接到CLR节点能看到一个清晰的窄负脉冲这是判断反馈电路是否生效最直接的办法。5.3 数据库访问报错、仿真太慢两个高频使用问题不少人在Multisim里一打开元件库就弹“Master Database cannot be accessed”之类的错误通常和安装路径、权限或之前残留的数据库文件有关。可以先试以管理员身份运行Multisim打开Options Global Preferences确认数据库路径指向安装目录下的database文件夹如果之前装过其他版本检查是否有残留的数据库文件损坏。实在不行卸载干净后重装装完第一件事先用管理员身份打开一次把数据库路径确认好再继续画图。仿真速度方面如果觉得数字电路跑得“拖泥带水”往往不是Multisim本身慢而是时钟频率太高、显示刷新跟不上。1Hz的数字时钟配两个DCD_HEX仿真几乎是实时的反应很跟手。如果电路复杂、需要跑长仿真可以在Simulate Interactive Simulation Settings里调整最大仿真步长Maximum time step把最大步长调大一些能明显加速代价是波形精度下降。像61进制计数器这种低频数字电路用默认设置就够了不需要特意去改。5.4 从仿真到实物两处必须改的设计如果这个61进制计数器下一步要焊成实物有两点建议一是复位方式。仿真里61态窄脉冲无所谓但实物里这个纳秒级的低脉冲容易让后面的电路误触发。稳妥起见改用反馈置数法或者将清零信号先用D触发器同步一下再送CLR避免毛刺问题。二是显示部分。仿真里用DCD_HEX非常省事实物里74LS160/161输出的是BCD码不能直接驱动7段数码管需要加74LS47共阳数码管或74LS48共阴数码管做译码驱动还要根据数码管的共阳共阴类型选对型号最好串220Ω左右的限流电阻。1Hz时钟在实物里可以用NE555搭一个可调方波发生器或者直接用函数信号发生器。我在Multisim里第一次跑通这个电路其实不是因为原理难而是被两个小问题卡了半天一个是把QB和QC接反了另一个是忘了在CLR上接复位开关导致仿真启动后从乱码开始跳。后来我总结出一个很笨但很有效的习惯连接任何计数器电路之前先拿一张纸把两个芯片的引脚表抄一遍再对照接线表一根一根连清零逻辑一定先在纸上推一遍真值表再动手接线。Multisim的好处是改线非常快出现错误也不会烧东西所以大胆多试几遍。现在再看这类题目无论是61进制还是任意模值计数器核心就三件事芯片选型、级联方式、反馈逻辑。把这三件事捋顺基本就不会出大问题。
返回列表