ARTICLE DETAIL

资讯详情

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

Multisim仿真61进制计数器:74LS160+74LS161级联与复位逻辑设计

Multisim仿真61进制计数器:74LS160+74LS161级联与复位逻辑设计 做数字电路课设或者自己动手玩逻辑芯片时计数器基本是绕不开的入门项目。但一说到非整数进制比如“61进制”很多人就犯难两片74LS160级联默认是00-99的十进制要变成计数到60就回0的循环光靠芯片本身的“满十进位”是不够的必须额外设计一套复位反馈逻辑。这篇博文就带你在Multisim 14.0里用一片74LS160和一片74LS161把61进制计数器完整搭出来并给出可以直接照抄的接线表和复位逻辑推导。选这个组合的原因也很实际个位用十进制芯片、高位用十六进制芯片能一次讲清楚两类常用TTL同步计数器的级联方法同时把“任意模数计数器”的反馈设计思路覆盖到后面你要做37进制、83进制换个数重算就行。1. 整体设计思路拆解1.1 61进制到底是什么应用在哪些场景先理清概念。61进制计数器指的是计数状态从0开始依次走到1、2、3……一直到60共61个有效状态然后回到0重新循环。和二进制、十进制计数器的区别在于它不是靠芯片自带的“模10”或“模16”特性直接得到的而是必须通过外部逻辑在某个特定状态触发清零或预置把计数范围截断。这种非整数进制计数器在工程里很常见。比如某些工业仪表需要对脉冲分频要求每收到61个脉冲输出一个进位信号再比如频率合成器里的分频器参考频率和输出频率的比例不是整数就需要这种任意模数计数。做课程设计时老师也特别喜欢拿这类题目来考察学生对芯片功能的理解深度——不是简单把芯片连起来而是要看你会不会利用LOAD端、RCO端做反馈。从数理上看61可以拆成“6×101”。也就是说个位要经历0-9的完整十进制循环十位在0-6之间变化其中十位等于6时个位只走到1就触发复位。这个结构决定了我们的硬件选型个位直接交给74LS160它是十进制同步计数器十位需要0-6共7个状态用74LS161这种4位二进制计数器来改造最顺手。1.2 为什么选74LS160和74LS161这个组合而不是两片相同的芯片有人会问个位和十位都用74LS160不就行了确实可以。两片74LS160级联做成60进制甚至61进制都成立网上也有不少这种方案。但用“74LS16074LS161”的组合有它独特的价值74LS161是十六进制同步计数器它本身计数到15通过反馈逻辑截断到6这样一个16进制芯片被“驯化”成6进制和74LS160天生就是10进制的特性形成对比你会更直观地理解“芯片原始模数”和“电路实际模数”的区别。另外这类组合还能让你熟悉两类芯片引脚定义的微小差异。74LS160和74LS161的引脚排列几乎完全一样CLR、LOAD、ENP、ENT、RCO这些控制端名字和位置全部相同唯一的区别在于74LS160的Q端只能表示0-9而74LS161的Q端能表示0-15。正因为引脚兼容我们在设计时才能把它们插在同一个逻辑框架下只不过对高位的复位条件要单独计算。从资源角度看74LS160负责个位天然合适因为它到9后自动回0不需要额外判断“9的下一个状态是0”74LS161负责十位用3输入与非门检测“6”即可。整个设计只需要一片74LS10三输入与非门做反馈电路规模很小很适合在Multisim里快速验证再转成面包板或PCB。1.3 系统结构状态转移图与分块方案整个61进制计数器可以分成三个功能块计数主体、级联链路、复位反馈。计数主体由U174LS160和U274LS161组成。U1的时钟接系统时钟每个上升沿加1U2的时钟也接同一个系统时钟但它是否加1要看U1的RCO输出是否给了使能信号。这就是“同步级联”U2和U1永远在同一时刻翻转不会出现高位先走或后走的毛刺状态。级联链路使用的信号是U1的RCO。74LS160的RCO进位输出在计数到9且ENT为高时输出高电平。把RCO接给U2的ENP和ENTU1等于9时U2的使能端全部打开下一个时钟上升沿到来时U1从9跳回0U2同时加1。这正好实现了“每10个脉冲十位加一次”的效果。复位反馈是设计的灵魂。正常级联只能做到00-99我们必须让它在“61”这个状态出现时强制跳回“00”。这里的实现方式是利用74LS160/74LS161的LOAD端当LOAD为低电平时输出端会异步预置为D0-D3输入的数据我们将D0-D3全部接地所以LOAD一拉低计数立刻回到0。反馈逻辑要做的就是精确识别“61”这个状态把LOAD端拉低一瞬间。2. 芯片基础与关键参数细节2.1 74LS160和74LS161的引脚功能对照这两款芯片都是16脚DIP封装同步计数器带异步清零和异步预置功能。先看一张引脚对照表后面所有接线都以这张表为准引脚号引脚名74LS160含义74LS161含义本次电路接法1CLR清零低有效清零低有效接VCC不用清零2CLK时钟上升沿计数时钟上升沿计数接系统时钟3AD0预置数据位0预置数据位0接GND4BD1预置数据位1预置数据位1接GND5CD2预置数据位2预置数据位2接GND6DD3预置数据位3预置数据位3接GND7ENP计数使能P计数使能P见级联说明8GND地地接GND9LOAD预置低有效预置低有效接复位逻辑输出10ENT计数使能T计数使能T见级联说明11QD输出位3输出位3接显示/检测12QC输出位2输出位2接显示/检测13QB输出位1输出位1接显示/检测14QA输出位0输出位0接显示/检测15RCO进位输出进位输出接高位使能16VCC电源正电源正接5V这里要特别提一下LOAD端和CLR端的区别。CLR是异步清零只要CLR为低不管时钟是什么状态输出立刻归零不需要等时钟沿。LOAD是异步预置只要LOAD为低输出立刻变成D0-D3的数据也不管时钟。两类操作都是“异步”的这在做复位反馈时很有用因为61状态出现的那一刻反馈逻辑不需要等待下一个时钟沿就能立刻把计数器拉回0反应速度主要由门电路延迟决定。还有一个容易混淆的概念ENP和ENT。74LS160和74LS161只有在ENP和ENT同时为高的时候时钟上升沿才能让计数器加1。RCO的输出条件是ENT为高且计数器状态达到最大值160是9161是15。所以级联时低位的RCO通常同时接到高位的ENP和ENT这样高位才能真正被使能。2.2 同步级联与纹波级联的区别级联计数器有两种常见方式纹波级联和同步级联。纹波级联是把低位的RCO直接接到高位的CLK端用低位的进位脉冲作为高位的时钟。这种方式结构简单但有个致命缺点高位的变化滞后于低位而且会出现非常窄的毛刺。比如个位从9变0时RCO产生一个下降沿如果直接接高位时钟这个下降沿触发高位加1但RCO的脉宽受芯片内部逻辑影响不太稳定后续电路很容易误触发。同步级联是把低位的RCO接到高位的ENP、ENT使能端高位的CLK和低位共用一个系统时钟。这样当低位计数到9时高位使能端打开但是高位并不会立刻加1要等到下一个公共时钟上升沿才动作。这个上升沿到来时低位从9跳回0高位同时加1两个芯片在同一时刻完成状态切换没有先后之分。同步级联的时序干净也不容易出现毛刺是设计中的优先选择。本次设计采用同步级联系统时钟同时进入U1的CLK和U2的CLKU1的RCO接到U2的ENP和ENT。U1的ENT和ENP接高电平保证U1在时钟到来时一定计数。U2只有在U1等于9时使能才能被打开。2.3 状态61的编码与复位条件推导设计复位逻辑前必须先清楚“61”在硬件上的表现形式。U1是74LS160它的4个输出QD、QC、QB、QA代表个位。数字1的二进制是0001所以QA为1QD、QC、QB都为0。U2是74LS161它的4个输出QD、QC、QB、QA代表十位。数字6的二进制是0110所以QC为1、QB为1、QD为0、QA为0。因此状态61联合起来看就是十位0110、个位0001。复位检测电路要做的就是在“U2的QC为1、U2的QB为1、U1的QA为1”同时成立的瞬间输出一个低电平到LOAD端。这里有个工程上的取舍。理论上严谨的做法是检测全部8个输出位也就是把QD为0、QA为0、U1的其他位为0都检查进去这样能确保只有“61”这一个状态触发复位。但在本设计中U2正常工作时最大只会到6根本走不到14、15这样的状态U1在U2等于6的时候又因为在个位等于1时就立即复位永远不会出现个位等于3、5、7、9的情况。所以用三输入与非门检测关键的三位已经足够可靠。这个“部分译码”的技巧在工程中很常见目的是用最小逻辑实现目标同时对芯片的工作范围有清晰认知。我还见过有人把检测条件反过来做检测“60”而不是“61”也就是等计数器已经数到60后再期待下一个时钟自动跳回0。这种思路是同步复位思想需要额外时钟沿配合而利用74LS160/74LS161的异步LOAD端检测61反应更快也更容易在Multisim里观察到明显波形。3. Multisim 14.0中的完整搭建过程3.1 元件库加载与初始环境设置打开Multisim 14.0之后先建立一个新设计文件。建议把图纸命名为“61_counter.ms14”方便后面保存和二次修改。放置元件时在主菜单点击“放置→元件”或者直接用快捷键CtrlW调出元件选择窗口。在元件库里搜索74LS160注意选择带DIP封装或D后缀的型号例如74LS160D放置到图纸左侧。继续搜索74LS161选择74LS161D放在160右侧一段距离。再搜索74LS10这是三输入与非门选择74LS10D放在两个计数器下方。然后放置电源和地。从“放置→元件”里搜索VCC放到图纸上方搜索GROUND或DGND放到图纸下方。Multisim里的TTL芯片虽然可以在仿真时自动连接隐藏电源但为了让原理图规范也更接近实物建议显式接VCC和GND。仿真时钟源有多种选择可以用“放置→信号源→电源→数字时钟”设置频率为5Hz、幅度为5V也可以用一个交互式数字开关手动按空格键产生单脉冲方便一步一步观察计数状态。为了快速验证功能先用数字时钟跑自动仿真等确认逻辑正确后再换成交互式开关做单步调试。3.2 U174LS160完整接线明细U1作为个位计数器接法很明确第1脚CLR接VCCCLR低有效不需要异步清零所以保持高电平让芯片能正常计数。第2脚CLK接系统时钟所有计数的基本节拍都由它提供。第3、4、5、6脚D0-D3全部接GNDD0-D3是预置数据输入因为我们要让复位回到0所以预置值全部为0。第7脚ENP接VCCENP高电平U1允许计数。第8脚GND接地。第9脚LOAD接U374LS10的输出这是复位信号入口低电平时U1回到0。第10脚ENT接VCCENT高电平配合ENP使U1在时钟上升沿计数。第11脚QD、第12脚QC、第13脚QB、第14脚QA分别接显示器的D、C、B、A输入端。第15脚RCO接U2的ENP和ENT这是级联的关键路径。第16脚VCC接5V。对于显示部分我建议直接在Multisim里使用十六进制显示器HEX Display这样4个输出位QD、QC、QB、QA接上去后能直接显示0-F的十六进制字符。个位因为最大为9显示会是0-9十位最大到6显示0-6。整条计数过程很直观。3.3 U274LS161完整接线明细U2作为十位计数器大部分引脚与U1相同区别在于使能端和检测位第1脚CLR接VCC不用清零功能。第2脚CLK接系统时钟和U1的CLK连到同一条时钟线上保证同步。第3、4、5、6脚D0-D3接GND预置0。第7脚ENP接U1的RCO由低位进位控制。第8脚GND接地。第9脚LOAD接U3的输出与U1的LOAD共用复位信号。第10脚ENT接U1的RCO同样由低位进位控制。第11脚QD接十位显示器D输入。第12脚QC接十位显示器C输入同时引出一根线到U3的B输入。第13脚QB接十位显示器B输入同时引出一根线到U3的A输入。第14脚QA接十位显示器A输入。第15脚RCO悬空这里不需要U2再往上级联悬空即可但在仿真中悬空可能会被当作高阻所以如果不想留空可以接一个上拉电阻到VCC但这不影响功能。第16脚VCC接5V。3.4 复位反馈电路U374LS10的接法74LS10是一片三输入与非门内含三个独立的与非门。我们使用其中一个门即可其他门做固定处理。以第一个门为例它的引脚对应关系为第1脚1A输入、第2脚1B输入、第13脚1C输入、第12脚1Y输出。将U2的QB第13脚接到U3的第1脚将U2的QC第12脚接到U3的第2脚将U1的QA第14脚接到U3的第13脚。U3的第12脚输出作为复位信号接到U1的LOAD和U2的LOAD。其余两个门要避免输入端悬空。Multisim仿真中悬空输入有时候会被当作高电平但为了规范把第3、4、5脚接地第6脚悬空第9、10、11脚接地第8脚悬空。可以额外利用第二个门做一个复位指示电路方便观察复位是否生效把第3、4、5脚全部接到U3的第12脚第6脚输出经过一个发光二极管和限流电阻接GND复位发生时第12脚变低第6脚输出变高LED点亮或熄灭的状态变化能直观显示复位触发点。3.5 完整电路图与仿真运行结果把上述接线整理成一张连接关系图等效于下面的框图VCC │ 时钟 ───────┬──────┤ │ ▼ │ ┌────────────┐ │ │ U1 74LS160 │ U1.RCO(15) ──┬──► U2.ENP(7) ▼ │ ENP(7)VCC │ └──► U2.ENT(10) ┌──────────┤ │ ENT(10)VCC │ │ │ │ Q0-Q3(14-11)│──► 个位显示 │ │ │ LOAD(9) │◄──────────┐ │ │ └────────────┘ │ │ │ │ │ │ ┌────────────┐ │ │ │ │ U2 74LS161 │ │ │ │ │ ENP(7)RCO │ │ │ │ │ ENT(10)RCO │ │ │ │ │ Q0-Q3(14-11)│──► 十位显示 │ │ │ LOAD(9) │◄───────┐ │ │ │ └────────────┘ │ │ │ │ │ │ │ │ ┌────────────┐ │ │ │ │ │ U3 74LS10 │ │ │ │ └──►│ A(1)U2.QB │ │ │ │ │ B(2)U2.QC │ │ │ │ │ C(13)U1.QA│ │ │ │ │ Y(12)──────┴─────────┴─┼──► U1.LOAD(9) │ └────────────┘ └──► U2.LOAD(9) └────────────────────────────────────────────────► 所有GND接地点连接完成后点击工具栏的“仿真运行”按钮。如果一切正常个位显示器会从0走到9然后回到0十位显示器在个位完成一次0-9循环后加1。当十位显示器显示6、个位显示器显示1的瞬间复位信号生效两个显示器立刻回到00开始下一轮循环。用示波器观察波形时建议同时接上U1的QA、U2的QB、U2的QC和U2的LOAD可以看到三个检测位都为高时LOAD端出现一个低电平窄脉冲这就是复位动作。4. 常见问题与排查技巧实录4.1 仿真运行后计数器完全不计数出现这种情况优先检查时钟和电源。Multisim里的数字时钟需要设置幅度如果幅度设成0V芯片自然没有触发沿。通常把数字时钟幅度设为5V、频率设为1-5Hz比较合适。再看VCC和GND是否连接正确。很多初学者在Multisim中放置芯片后以为芯片自动接了电源其实很多TTL库元件虽然没有画出VCC和GND引脚但仿真时依赖全局电源符号如果没有放置VCC电源元件芯片可能无法工作。标准做法是在图纸上放置VCC元件和DGND元件。还要检查U1的ENP和ENT是不是都接了高电平。74LS160的使能端必须同时为高计数才会动作。任何一个悬空或被误接地计数器都会停在那里不动。4.2 计数器能计数但到不了61就提前复位如果发现计数到某个状态提前跳回0十有八九是复位反馈接线接错了检测位。例如把U2的QC、QB和U1的QA这三位连接正确是必须的一旦把U2的QD接到了与非门就可能把状态14误判成复位触发点。建议对照前面给出的74LS10引脚表逐脚核对。还要注意74LS10的输入输出关系。74LS10是三输入与非门输出等于输入逻辑与后取反。我们要的是“三个检测位都为1时输出低电平”所以必须接与非门如果误接成与门74LS11输出会反相效果完全不同会导致大部分时间LOAD一直为低计数器根本走不动。4.3 仿真波形中LOAD端出现不明毛刺或反复触发复位信号本身就是一个窄脉冲这是正常的。但要区分正常复位脉冲和异常毛刺。如果LOAD端长时间为低或者频繁抖动多半是检测条件过宽把多个状态都识别成了复位状态。一个简单排查方法是在Multisim中加一个逻辑分析仪观察U2的QB和QC、U1的QA是否只有“61”这一个组合同时为高。如果还有其他组合就要收紧检测条件。还有一种情况是Multisim的数字仿真精度不够导致波形看起来不干净。可以在菜单“仿真→数字仿真设置”里把仿真模式从“理想”切换成“实际”或“带时序”这样更接近真实门电路的延迟特性但仿真速度会变慢。对于观察整体功能理想模式已经够用对于研究毛刺建议切成实际模式。4.4 从仿真原理图转实物焊接时的几个提醒仿真成功后转到实物最大的坑是电源去耦。74LS160和74LS161在状态翻转瞬间会产生电流尖峰尤其是两片计数器同时翻转时电源线上的噪声会非常大。建议每个芯片的VCC和GND之间就近焊接一个0.1μF的陶瓷电容电源入口再并联一个10μF或100μF的电解电容做储能。时钟信号在面包板上容易被干扰。如果用手动按键产生单脉冲要加RC消抖电路否则一次按键可能被识别成多次计数。最简单的消抖方案是按键并联一个0.1μF电容或者用555定时器搭一个无抖动时钟源。我在实际搭电路时试过用按键直接接计数器时钟结果按一下有时跳两三个数后来加了消抖电容才稳定。复位反馈中的74LS10最好靠近两个计数器的LOAD端放置。因为LOAD是异步低有效信号任何外部噪声都可能在错误时刻触发复位。连线过长会增加寄生电容和天线效应让复位变得不可控。这是实操中容易被忽略的细节。4.5 遇到计数结果和显示不一致时怎么查如果计数器的输出波形正确但显示器显示异常问题通常出在显示设备本身。Multisim里的HEX显示是16进制显示它直接把4位输入转换成0-F字符。个位虽然只到9但中间状态会短暂出现不过因为速度太快人眼看不到。十位在6之后会变成7、8、9、A、B、C、D、E、F吗不会因为复位已经在61触发所以十位最高只到6正常显示没问题。如果使用段码显示器必须外接BCD转七段译码器比如74LS47不能把计数器Q端直接接到数码管。74LS160和74LS161输出的是BCD码或二进制码不是段码。接错后会看到数字乱跳或亮度不均。我见过不少同学在这个环节浪费了很久时间。4.6 做扩展轻松改成其他任意进制搭好61进制后再回头看一下原理复位检测的本质是“识别目标状态的特征位”。假如要改成37进制37的二进制是0010 0101即十位20010、个位70111那就去检测U2的QB十位第二位和U1的QC、QB、QA把74LS10换成合适的逻辑门如果特征位数超过3个可以多接一个74LS08或74LS11把条件合并。依此类推任意M进制的计数器都能用这套“计数主体固定复位逻辑替换”的思路快速实现。5. 实操心得与几个必须记住的细节我前前后后用Multisim 14.0搭过很多计数器电路这次61进制的项目给我的最大感受是设计阶段多花十分钟做状态编码卡诺化简比在仿真里反复改线更省时间。拿到题目先不要急着放芯片先在纸上画出状态转移图从00写到61再把61这个状态拆成二进制位最后看哪些位与非门组合能刚好匹配。对于61关键三位是U1的QA、U2的QB、U2的QC这个结论推导过程只有几行但能让整个接线目标非常明确。Multisim里还有一个实用小技巧仿真之前把所有芯片的电源和地通过导线明确连到VCC、DGND电源符号上。虽然有些芯片封装在仿真中不暴露VCC引脚但当你把原理图输出到PCB或转换成实物接线图时这一步骤能避免大量低级错误。调试时建议使用单步模式给一个脉冲停下来看一次显示结果。Multisim的交互式数字开关每次按空格键会产生上升沿非常适合验证复位点。我习惯每5个脉冲检查一次状态重点看17、37、57、60、61这五个关键点确认十位进位和复位动作无误后再切换到连续时钟跑完整周期。最后再分享一个经验把74LS10的第三个空余门接成反相器用于驱动LED显示复位信号不但在调试时能直观看到复位脉冲后续接入更复杂的控制电路时也省掉了一个反相器。这种“把空余门物尽其用”的思维方式在真实项目里非常常见因为多一片逻辑芯片就意味着多一份成本和故障点。
返回列表