ARTICLE DETAIL

资讯详情

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

基于74LS74的三人抢答器设计:Multisim仿真与电路实现

基于74LS74的三人抢答器设计:Multisim仿真与电路实现 做数字电路课程设计或者动手搭小项目的时候抢答器基本是绕不开的一个经典题目。网上一搜全是成品方案但很多要么逻辑乱、要么元件一堆、要么根本仿真跑不通。这次我把用Multisim 14配合两片74LS74 D触发器做三人抢答器的完整过程写下来从需求分析到原理图连线再到仿真踩坑一步不落。只要你有点数电基础或者刚学完触发器章节照着这篇就能自己拉出一套能用的三人抢答器电路。1. 为什么用74LS74搭抢答器需求拆解与器件选型逻辑1.1 抢答器的本质是先到先锁抢答器和普通按键电路最大的区别在于它不是一个简单的按下就有输出的电路。抢答器的核心需求有两个第一三个人各自有一个按键谁先按下谁对应的输出指示灯就亮第二一旦某个人的灯亮了其他人的按键必须失效不能出现后按的人把先按的人的灯顶掉的情况。这听起来简单但用纯组合逻辑电路做很麻烦。纯组合逻辑是输入一变输出就变没有办法记住谁先按这个状态。所以抢答器的本质是一个顺序逻辑电路必须要有记忆元件。D触发器就是干这个事的——它可以在时钟边沿把输入数据锁存住并且在没有新的时钟信号时保持输出不变。1.2 为什么选74LS74而不是其他芯片市面上做抢答器常见的方案有几种用CC4013双D触发器、用74LS74双D触发器、用锁存器74LS373甚至用单片机。我要选74LS74理由很直接。第一74LS74是TTL双D触发器一片里面集成了两个独立的D触发器做三人抢答器需要三路锁存两片就够还余一路备用。第二74LS74带有异步置位端和异步复位端这两个引脚在抢答器电路里是核心——复位端用来清零所有输出置位端在某些改版设计里可以用于特殊控制。第三Multisim 14的元件库里74LS74是现成的仿真模型非常成熟不用自己建模型拿出来就能用。相比CC4013CMOS工艺74LS74在Multisim里的仿真速度和兼容性都更好不容易因为电平不匹配出现奇怪的仿真错误。相比74LS373锁存器方案D触发器的时序逻辑更贴合数字电路课程里触发器章节的知识点做完这个项目你顺带把D触发器的特性表、时序图、异步端用法全复习了一遍。2. 锁存优先级的核心原理从时序图到电路行为2.1 74LS74的引脚功能与真值表先把74LS74的引脚摸清楚。74LS74是14脚双列直插14脚接VCC5V7脚接GND。每一路D触发器有六个端子端子功能说明/PRPreset异步置位低电平有效置为1/CLRClear异步复位低电平有效置为0D数据输入时钟边沿采样的数据CLK时钟输入上升沿触发Q输出主输出/Q反相输出与Q相反这里必须注意74LS74是上升沿触发也就是CLK从0跳到1的瞬间输出Q才会采D的值。其他时候D怎么变都不影响Q。这是整个抢答器锁存的基础。异步复位/CLR和异步置位/PR的优先级比时钟更高也就是说不管CLK是什么状态只要/CLR给低电平Q马上变成0。抢答器里的裁判清零按键接的就是/CLR。2.2 从竞争到锁存判断谁先按的关键一帧三人抢答器的核心问题变成三个按键都接在D触发器上怎么保证只有第一个触发器的CLK能采到数据这里有一个非常关键的设计技巧把按键信号接在CLK端而D端固定接高电平。仔细推演一下。假设三个人的D端都接VCC逻辑1CLK端分别接各自的按键。初始化时先给所有/CLR加一个低电平脉冲把三个Q全部清零指示灯全灭。现在选手A先按下按键A的CLK产生一个上升沿从0跳到1因为A的D端是1所以A的Q变成1指示灯亮。与此同时A的Q1这一个信号要反过来把B和C的时钟通路封死。这就是接线时最关键的仲裁逻辑A的Q接到B和C的D触发器的CLK控制线上利用Q的高电平把后面的边沿屏蔽掉。具体怎么接可以把A的Q接到一个与非门或者直接利用B/C触发器自己的使能机制。不过74LS74没有时钟使能端所以常用的做法是把A的Q接到B和C触发器的D端而不是CLK端同时把B/C的CLK接成一个公共的锁定时钟。但这样一来主时钟怎么来按键怎么参与我实际调试多次后觉得最稳妥、最符合Multisim仿真习惯的接法是**次级时钟封锁法**。详细连线逻辑如下A的D端接VCCCLK接按键A经过整形电路输出上升沿。B的D端接VCCCLK接按键B但B的CLK信号先经过一个与非门与非门的一个输入是按键B另一个输入是A的Q反相信号。C同理CLK信号经过与非门一个输入是按键C另一个输入是A的Q反相信号。同时B的Q也要去封C的CLKC的Q也要去封A的B的CLK。这种接法能够实现只要有人抢先按下他的Q变成1其反相端/Q变成0这个0送到其他人的与非门输入端把其他人的CLK上升沿与掉。也就是说后面的人再怎么按他的CLK端都不会出现有效的0到1跳变数据自然进不去。如果你觉得这片逻辑烧脑Multisim里Probe探针可以帮你看到每个节点的电平变化后面第三部分会详细演示。2.3 为什么必须加启动/清零按钮抢答器必须有一个裁判/主持人控制的复位功能否则上一轮的结果会一直锁存到下一轮。清零按钮接法是把74LS74的/CLR端通过一个按键接到GND平时按钮不按/CLR通过上拉电阻接VCC保持高电平按下清零按钮时/CLR接地为低电平Q全部变0。这里有个很容易踩的坑**如果/CLR没有上拉电阻悬空状态TTL输入会等效为高电平吗**TTL芯片悬空输入确实多数情况下等效高电平但悬空带来的噪声容限很差Multisim里可能表现不明显实际搭面包板时极其容易出现误复位。所以无论仿真还是实物都建议加上10kΩ上拉电阻。另外一个细节是按键按下和松开时会产生机械抖动在Multisim里如果使用交互式按键不会模拟抖动但如果你用信号发生器代替按键或者用脉冲源模拟就要考虑抖动问题。抢答器这种电路抖动可能导致一个按键按下时CLK端出现多个上升沿但由于D端固定接1即使多次触发输出也只会是1不会出现逻辑错乱。这就是D端固定接高电平的额外好处天然免疫按键抖动的影响。3. Multisim 14实操从元件库取件到完整连线3.1 新建工程与元件放置打开Multisim 14新建一个设计文件。正式连线之前先思考一下面板布局。抢答器电路包含以下元件两片74LS74三个按键建议用按键J1、J2、J3命名对应选手A/B/C一个复位按键可用按键J4命名三个指示灯用红色LED或者逻辑探针都行若干10kΩ上拉电阻、1kΩ限流电阻一个5V电源和接地符号从元件库取件的路径是点击菜单栏的放置-元件弹出元件选择窗口。Group选择TTLFamily选择74LS然后在Component里搜74LS74。需要特别提醒Multisim的74LS74可能会有不同封装型号比如74LS74D、74LS74N仿真行为基本一致选哪个都行。我一般选74LS74N选完点击确定元件会跟随鼠标放到合适位置即可。3.2 完整的按键输入整形电路如果是实物电路按键直接接CLK端有一个问题按键按下时CLK端从0变为VCC看似是一个上升沿但如果按键引脚悬空没有上下拉未按下时电位不定Multisim仿真里可能显示为高阻态。为了确保未按下时CLK是确定的低电平按下时才跳变到高电平每个按键都接一个下拉电阻到地按键另一端接VCC。在Multisim里我用的是10kΩ下拉电阻。接法如下把5V电源正极接到按键的一个端子。按键的另一个端子作为信号输出端接到CLK信号通路。信号输出端同时接一个10kΩ电阻到地。这样未按下时信号输出端通过下拉电阻接地电平为0按下时VCC直接连通信号输出端电平变成5V产生一个清晰的上升沿。这里值得多讲一句Multisim仿真是理想化的电源和模型实际TTL电路输入端内部有电流方向下拉电阻阻值太大可能无法把电平拉到可靠的低电平阻值太小又会造成不必要的功耗。10kΩ对TTL来说是常用折中值如果你做到实物建议改成4.7kΩ到1kΩ之间。仿真阶段用10kΩ完全没问题。3.3 三人锁存仲裁网络的具体连线这是整个电路图的核心区。假设U1是74LS74的第一路和第二路U2是第二片74LS74我按以下方式连线先接D端U1A的D、U1B的D、U2A的D全部接VCC5V。再接CLR复位端U1A的/CLR、U1B的/CLR、U2A的/CLR并联在一起连接到复位按键信号线。信号线通过10kΩ电阻上拉至VCC复位按键另一端接地。按下复位键该点变低电平所有Q清零。再接按键到CLK按键A输出 - U1A的CLK。按键B输出 - 接一个74LS00与非门或者用74LS08与门反相器的一个输入端与非门输出接到U1B的CLK与非门另一个输入端接一个封锁线A。按键C输出 - 接另一个与非门的一个输入端与非门输出接到U2A的CLK与非门另一个输入端接封锁线B。封锁线来源U1A的/Q接到封锁线A即B通道与非门的第二输入端。U1B的/Q接到封锁线B即C通道与非门的第二输入端。U2A的/Q接到A通道的封锁逻辑。这里就是嵌套互锁。当A抢到U1A的Q为1、/Q为0B的与非门被锁死B无论怎么按CLK都不产生上升沿B抢到之后U1B的Q1、/Q0C的与非门被锁死C抢到之后U2A的Q1、/Q0把A的与非门锁死。**为什么第三个人C抢到后要锁A**因为这是一个循环互锁结构任何一个人抢答成功都要让其他两个人的CLK通路失效。如果不锁A下一轮A再按A的CLK直接由按键驱动不受任何约束就会出现已经有人抢答后A还能继续触发的情况。我强烈建议你在Multisim里给每个D触发器的Q输出接上逻辑探针Probe这样锁存状态一眼可见。3.4 输出指示与限流电阻每个触发器的Q端接一个LED指示灯。LED不能直接接在Q端和三极管之间需要串联一个限流电阻。Multisim里的LED模型比较硬理论工作电流20mA左右TTL的Q端高电平输出能力有限典型值400µA左右直接驱动LED可能会掉电压。实际中我习惯给Q端后面加一个ULN2003达林顿驱动或者三极管但在仿真里为了简单直接用逻辑探针代替LED即可。如果一定要用LED我给出的参数是限流电阻330ΩLED接在Q和电源之间Q为0时LED亮还是接在Q和地之间Q为1时LED亮取决于你希望哪个状态亮。我建议Q端输出直接给LEDLED另一端接一个470Ω电阻到地这样Q为1时LED亮更直观。3.5 电源与共地TTL74LS系列芯片供电是5V注意Multisim里有两个电源符号一个图标是VCC一个图标是5V。我在仿真时习惯用5V电源符号因为更直观不用特意设置电源电压。VCC符号的话需要双击修改电压值到5V否则默认12V会把74LS74烧掉仿真里表现为逻辑电平异常。共地原则所有电阻、电源负极、按键参考地、74LS74的GND脚必须连到同一地网络。Multisim里放置电源地符号时注意选GROUND而不是EARTH前者是电路参考地后者是机壳地连到EARTH上仿真会出现浮地错误。4. 仿真运行与踩坑实录4.1 启动仿真与基本功能验证连线完成后点击Multisim右上角的运行按钮绿色三角仿真开始。此时电路处于初始状态你可能看到某个指示灯微亮或者全灭——这取决于你给/CLR的初始电平。如果复位键还没有按下触发器的初始状态是不确定态x态Multisim里通常显示为0但建议先按一下复位键确保所有Q输出清0。然后模拟抢答按键A单击一下相当于选手A按下观察U1A的Q探针是否变成1指示灯亮。此时再单击按键B、按键C观察探针有没有变化。正常情况下B和C的Q仍为0。按下复位键所有输出清零然后再测试B先按、C先按等不同顺序。我用不同顺序测试过十几次互锁逻辑稳定。4.2 常见问题一按下复位键后输出没有全部清零这个问题大概率出在/CLR连线。Multisim里触发器的/CLR是低电平有效复位键一端接GND一端接/CLR平时/CLR必须有上拉电阻到VCC。如果你把复位键一端接VCC一端接/CLR那按下时/CLR变成高电平复位无效。还有一种情况按键的常开/常闭选反了。Multisim的按键符号默认是常开按下闭合双击按键可以选NO常开和NC常闭。如果选的是常闭那按下的瞬间不是接通而是断开逻辑正好相反也会导致复位失败。4.3 常见问题二某一路按键按下后自己的指示灯不亮先别急着查74LS74先查按键信号处理。用示波器Multisim右侧仪器工具栏里的示波器挂到该按键的输出端单击按键看波形有没有一个干净的0到5V跳变。如果波形一直在0附近说明下拉电阻没接好或者按键电源端没接如果波形一直是高电平说明下拉电阻阻值太大或者接线短路。还需要检查该触发器D端是不是真的接了高电平。D端悬空时TTL输入等效为高在仿真里也可能正常但一旦加了上拉电阻网络或者逻辑门驱动力不足悬空D端会变成不定态导致锁存错误。所以务必显式把D端接到VCC。4.4 常见问题三仲裁失败后按的人也能亮仲裁失败的原因大概率是互锁逻辑接到了Q而不是/Q。仔细想一想A抢答后A的Q1B的封锁端需要的是禁止信号也就是高电平对应禁止还是低电平对应禁止这取决于你用的是与非门还是与门。如果你用与非门实现封锁那封锁信号必须是0用/Q如果用与门实现封锁信号应该是0用/Q然后后面加反相器或者直接用/Q给与门输入——总之核心是把先按者的高电平Q转换成0电平来封后按者的CLK通路。我用Probe探针在Multisim里追踪过整个信号链A按下后A的/Q确实是0这个0送到与非门输入端与非门输出恒为1。注意如果B的CLK端接的是与非门的输出那与非门输出为高电平1时B按下时与非门的输出根本不会发生变化因为一个输入已被钳制为0所以B的CLK永远等不到上升沿。这个逻辑我一开始因为忘了在CLK通路中间加一个反相器导致B按下时CLK产生了一个1到0的下降沿——而74LS74是上升沿触发下降沿不生效所以B看起来被锁住了但实际上如果把B的D端接1并且在CLK下降沿到来时不会锁存这只是侥幸。严谨的接法是确保封锁时后按者的CLK端要么保持恒定0、要么保持恒定1总之不能有任何边沿。用封锁线为0-与非门输出恒定1这种模式后按者按下时按键从0到1会使与非门另一输入从0到1但由于封锁端是0与非门输出始终为1没有任何沿所以确实被锁死。4.5 常见问题四Multisim提示Timestep too small或收敛错误这个报错在数字电路仿真里很常见特别是电路中出现反馈回路时。74LS74互锁电路天然就是带反馈的Multisim的SPICE引擎混合仿真时可能因为时间步长太小导致不收敛。几个行之有效的解决办法在仿真-混合模式仿真设置里把仿真模式切换为数字模式不要用模拟/数字混合因为74LS74是TTL数字器件纯数字模式跑得又快又稳。如果必须启用混合模式把模拟时间步长增大默认1e-5可以改到1e-4或1e-3。检查是否有电源/地漏接悬空的输入引脚在混合模式下最容易导致收敛问题。所有未用的74LS74输入端比如U2B的D、CLK、/PR必须接确定的电平不能悬空。你可以把不用的D和CLK接地/PR和/CLR接VCC保证芯片不会产生不稳定状态。4.6 实测波形用示波器看清时序Multisim里接上四通道示波器可以同时观察A的按键信号、A的Q输出、B的CLK信号、B的Q输出。我当时用这个办法确认了互锁时序A按键上升沿之后A的Q立刻变为高经过几纳秒传播延迟。B的CLK信号此时被钳制为恒定高电平再按BB的CLK没有任何边沿变化。B的Q一直保持0。如果看到的波形和上述不一致就把鼠标移到每个节点上用Multisim的电压探针点击右侧探针工具逐点检查。这种逐级排查的方式比闷头改线快得多。5. 电路扩展与进阶优化5.1 增加蜂鸣器提示实际抢答场景中指示灯还不够最好有人抢答时蜂鸣器响一声。这需要在任一D触发器的Q端检测到上升沿时触发单稳态电路输出一个短脉冲给蜂鸣器。最省事的做法是在任一触发器的Q端加一个或逻辑三个Q接入74LS32四输入或门的三个输入或者用倍位扩展或门输出接蜂鸣器。抢答瞬间有人Q变1或门输出变1蜂鸣器响。只要没人复位蜂鸣器就一直响这和响一声需求有差异。如果只要响一声得用单稳态触发器比如74LS123或者让蜂鸣器驱动电路加一个RC微分电路把持续高电平变成窄脉冲。Multisim里模拟蜂鸣器可以直接用压控振荡器接一个扬声器但更简洁的是用逻辑探测器里带声音的那款SOUND探针当输入为1时发出声音。我偷懒时的做法三个Q接到一个或门或门输出接一个带声音的逻辑探针这样抢答瞬间就能听到反应复位后声音停止。虽然响的时间长了一点但作为功能验证完全够用。5.2 显示选手编号数码管扩展如果要显示谁抢到了可以在三个Q输出后接一个编码器74LS148优先编码器或者用74LS48驱动共阴极数码管。74LS148是8线-3线优先编码器用其中三个输入输出三位二进制编码再接74LS48和共阴数码管就能显示1、2、3。不过要注意到这里74LS74互锁电路已经能保证只有一个Q为1所以编码器输入不会出现同时多个有效的情况。即使出现74LS148本身的优先级仲裁也能兜底。这个扩展是课程设计里常见的加分项。5.3 换成CC4013或74HC74的差异很多人会问能不能用74HC74或者CC4013当然可以。74HC74和74LS74引脚完全兼容但74HC是CMOS工艺高电平驱动能力和输入阈值不同。Multisim里换成74HC74互锁逻辑不需要任何修改但要注意CMOS输入不能悬空否则逻辑不定。CC4013也是双D触发器但引脚排列和74LS74不同换用之前先查数据手册。我自己的建议是Multisim仿真主用74LS74因为模型成熟和TTL电平体系里的按键、指示灯互相匹配如果要做成实物且要求低功耗再换74HC74系列。5.4 扩展到四人或更多人抢答三人抢答器扩展到四人需要增加一片74LS74共三片。仲裁逻辑从循环互锁变成全局互锁每个人抢到后其余三人的封锁线全部激活。最简单可靠的扩展方式是引入一个公共的允许时钟三个及以上触发器的D端都接VCC。CLK端都接一个共同的CLK总线。每个人按键后产生一个锁存脉冲到公共CLK同时把自己的Q反馈到一个组合逻辑网络一旦有任一Q为1立即禁止公共CLK继续产生脉冲。这种方案用74LS00加74LS32搭一个锁存使能电路并把首次有效信号反馈到使能端。Multisim里用数字时钟逻辑门模拟按键时序可以在几分钟内验证任意人数扩展。6. 从仿真到实物的关键提醒Multisim仿真跑通之后千万别以为面包板就能一次点亮。我踩过几个坑写在这里供参考TTL芯片上电顺序很敏感。先接电源和地确认电压在4.75V到5.25V之间再接入信号。如果电源电压超过7V74LS74会冒烟。面包板上建议用一个7805线性稳压器把电源适配器电压降到5V并在电源入口并联一个100µF电解电容和一个0.1µF陶瓷电容。按键消抖在实物中必须认真对待。虽然D端接1的方案能规避多次触发导致的数据错乱但机械抖动产生的多次上升沿会消耗额外的时钟周期虽然结果不变但会出现指示灯闪一下的小毛刺。稳妥的做法是按键输出加一个RC低通滤波器比如10kΩ电阻1µF电容时间常数10ms或者用施密特触发器74LS14整形。74LS74的输出驱动能力有限一个输出脚最多驱动10个74LS系列输入驱动LED时需要串联限流电阻但Q端高电平电压会被拉低。要用三极管比如S8050做开关来驱动LED或者蜂鸣器不要直接用Q端驱动大电流负载。我最早做实物时用Q端直接驱动了一个有源蜂鸣器结果Q端电压被拉到2V左右逻辑都乱了后来加了NPN三极管才解决。最终做出来的电路板我习惯把74LS74芯片座倒着装方便手势调整。抢答器这类课程设计最忌讳能亮就交如果能顺手加上蜂鸣器、数码管编号显示再用示波器把你的时序抓图贴在报告里拿高分基本十拿九稳。
返回列表