ARTICLE DETAIL

资讯详情

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

基于74HC74与74HC86的同步模4可逆计数器实战

基于74HC74与74HC86的同步模4可逆计数器实战 从标题里的两个芯片型号就能看出这是一个非常经典的数字电路入门实战项目用74HC74双D触发器和74HC86四异或门搭一个同步模4可逆计数器。说是“入门”但这个电路把D触发器、异或门、同步时序逻辑、加减控制全部揉在了一起学完它你对数字电路里“时序逻辑”和“组合逻辑”怎么配合会有一个非常直观的认识。这篇文章我会从芯片引脚讲起一步步推导状态方程再给出一套能在面包板上实际搭出来的接线方案最后附上仿真验证和常见故障排查思路。适合正在学数电的学生、准备电子设计竞赛的爱好者或者纯粹想动手焊一块逻辑电路板的朋友。1. 项目概述与设计目标1.1 什么是同步模4可逆计数器先拆解几个词。《计数器》就是按照一定规律累加或递减数字状态的电路。模4指的是计数容量为4也就是0、1、2、3四个状态循环对应两位二进制数Q1Q0。可逆的意思是既能正向加1也能反向减1由一个控制信号决定方向。同步则是所有触发器在同一个时钟边沿动作和异步计数器那种“连锁翻转”的方式完全不同。同步的好处是输出延迟基本一致没有异步计数器那种逐级传播的毛刺问题在需要干净时序的场合非常关键。模4可逆计数器之所以经典是因为它把两位触发器的状态转移画出来正好是一个闭合的环加计数时沿00→01→10→11→00转减计数时沿00→11→10→01→00转。这个环看起来简单但设计逻辑却覆盖了时序电路的核心方法。1.2 为什么选择74HC74和74HC86这是最顺手的一套组合。74HC74内部有两个独立的D触发器还带异步置位和异步清零端做双位计数器刚好够用。74HC86是四路异或门用在这里既可以产生触发器的下一状态信号又能实现加减控制的逻辑切换。相比用一片74LS74加74LS86的TTL方案HC系列是CMOS工艺功耗低电源范围宽从3V到6V都能工作兼容性更好而且和TTL电平基本可以直接互联。还有一个现实原因这两种芯片都是非常常见的74系列逻辑门市面上几乎每个电子元件店都有价格便宜面包板实践很难踩“买不到芯片”的坑。如果你手里只有CD4013和CD4070也能替换但引脚排列不同下面讲的接线表就不能直接照抄了。2. 核心芯片引脚与工作原理2.1 74HC74 双D触发器74HC74是DIP-14封装14个引脚。它的核心是一个边沿触发的D触发器在时钟CLK的上升沿到来瞬间输入引脚D的电平被锁存到输出Q反向输出/Q与Q相反。关键特性是自带异步置位SD低有效和异步清零CD低有效这两条线优先级高于时钟只要拉低输出立刻被强制置1或清0。引脚分配不能记错不然接线会一团糟。以标准DIP-14封装为例1脚是1Q2脚是1/Q3脚是1CLK4脚是1SD5脚是1D6脚是1CD7脚是地8脚是2CD9脚是2D10脚是2SD11脚是2CLK12脚是2/Q13脚是2Q14脚是VCC。我们设计中使用两个触发器分别作为低位Q0和高位Q1。使用时有几个细节需要注意。第一SD和CD都是低有效正常计数时必须把这两个脚接高电平不能悬空CMOS电路的悬空输入很容易受干扰产生误动作。第二D触发器的输出不仅看D端还看时钟边沿所以设计组合逻辑时所有D端信号必须在时钟沿之前稳定下来也就是要满足建立时间要求74HC74的建立时间大约在十几纳秒级别对于低速手动按键演示完全没问题。2.2 74HC86 四异或门74HC86也是DIP-14封装内部有四个独立的二输入异或门输入输出逻辑为Y A XOR B。异或门的特性是人见人爱当一个输入是0时输出等于另一个输入当一个输入是1时输出等于另一个输入取反。这个“可控反相器”特性在本设计里是最关键的工具。引脚分布1A、1B是门1输入1Y是门1输出然后依次是2A、2B、2Y3A、3B、3Y4A、4B、4Y7脚GND14脚VCC。具体到我们的电路需要用到其中三个或四个异或门。如果只做核心逻辑三个就够一个给D0两个给D1如果想让加减控制逻辑更清晰第四个门可以用来做D0的翻转控制不过直接用D触发器的/Q反馈更简单。74HC86的驱动能力有限但驱动同系列74HC74的输入绰绰有余。要注意的是HC系列的输出高电平不会完全拉到VCC在静态时输出高电平约等于VCC带负载时会有一定压降所以在面包板实验中LED指示灯最好串一个几百欧电阻再接输出避免拉低逻辑电平。3. 同步模4可逆计数器设计思路3.1 状态定义与真值表先定义两个触发器输出Q0是低位的D触发器输出Q1是高位的D触发器输出所以计数器数值是Q1Q0的二进制组合00代表001代表110代表211代表3。控制信号U/D表示加减方向这里约定U/D0为加计数U/D1为减计数。加计数的状态转移为00→01→10→11→00减计数的状态转移为00→11→10→01→00。画出真值表时需要列出当前状态Q1、Q0控制输入U/D以及下一个状态Q1_next、Q0_next。以加计数为例当前00时下一个状态是01当前01时下一个状态是10当前10时下一个状态是11当前11时下一个状态是00。减计数类似当前00时下一个状态是11当前11时下一个状态是10当前10时下一个状态是01当前01时下一个状态是00。根据真值表可以观察出规律Q0_next始终等于Q0取反和加减控制无关因为无论加还是减每来一个时钟Q0都要翻转一次。Q1_next则不然加计数时只有Q0为1时Q1翻转减计数时只有Q0为0时Q1翻转。如果规定U/D0为加、U/D1为减那么Q1的翻转条件可统一写成“Q0 XOR U/D 1”。验证一下加计数U/D0时Q0 XOR 0 Q0所以Q0为1时翻转减计数U/D1时Q0 XOR 1 /Q0所以Q0为0时翻转。这就得到了核心公式。3.2 D触发器与异或门的逻辑推导D触发器的工作方式是Q_next D所以要让计数器完成状态转移就得让D端输入等于我们希望的下一个状态。结合3.1的结论可以得到完整的状态方程组D0 /Q0即Q0_next /Q0。D1 Q1 XOR (Q0 XOR U/D)。第一个式子的实现方式有两种一是直接把74HC74的/Q接到本级的D端利用触发器自带的反相输出省一个异或门二是用74HC86门4把Q0和固定高电平接进异或门输出D0因为任何数与1异或都等于取反。两种都正确但推荐用/Q反馈这样74HC86的三个门刚好完成D1的两个异或运算剩下一个门可以作为备用或者扩展使用。D1的表达式用两个异或门级联实现先将Q0和U/D送入第一个异或门得到M Q0 XOR U/D再把Q1和M送入第二个异或门得到D1 Q1 XOR M。这样设计的好处是延时可预测两级异或门的传输延迟大约在几十纳秒对于最高几千赫兹的时钟完全足够。3.3 为什么异步清零和同步时钟要分开处理很多初学者容易把“同步计数器”和“异步清零”搞混。同步指的是所有触发器共用同一个时钟在同一个边沿更新输出异步清零则是清零信号直接作用于触发器的CD端不需要等时钟边沿。我们的电路里CLR信号接的是74HC74的CD端一旦按下清零按钮输出立即变成00这和时钟信号是异步关系。这个功能很适合用在演示场景比如一键回到初始状态。真正要避免的是把清零信号接到时钟上或者用组合逻辑的毛刺去触发清零否则会出现“刚清零又马上计数”的怪现象。在设计PCB或者面包板连线时清零按钮最好加一个RC去抖或者直接用一个单刀双掷开关控制CD端的高电平和低电平避开机械按键的抖动。4. 手把手搭建电路4.1 元器件清单与工具准备在动手之前先把东西备齐。核心芯片是74HC74和74HC86各一片建议买DIP封装方便插面包板。辅助元件包括面包板一块杜邦线若干5V稳压电源或者3节5号电池盒一个按键开关作为手动时钟源一个拨动开关作为U/D控制两个LED以及两个220Ω限流电阻作为输出指示灯还有几根短接跳线。如果想做自动计数可以用NE555输出脉冲或者直接用信号发生器输出TTL方波时钟频率建议先调到1Hz以下方便肉眼观察。面包板接线时注意芯片方向芯片缺口朝上左上角第一个引脚是1脚从上往下数是左侧引脚从下往上数是右侧引脚。74HC74和74HC86的引脚图一定要打印出来放在旁边每接一根线核对一遍这是减少错误最有效的方式。4.2 电源与芯片初始化接线先把两片芯片的电源接好74HC74的14脚接VCC7脚接GND74HC86的14脚接VCC7脚接GND。注意不要接反HC系列接反会立刻烧芯片。然后处理74HC74的置位和清零端4脚和10脚是1SD和2SD6脚和8脚是1CD和2CD这四个脚全部接高电平也就是接到VCC。如果打算用手动清零可以在CD端再接一个按键到GND但为了简化第一步先全部接高电平演示完再考虑清零功能。74HC86没有置位端不需要额外处理。接好电源后最好用万用表测一下VCC和GND之间的电阻确认没有短路再加电。我第一次搭这个电路时就是因为芯片方向的粗心上电一瞬间两片芯片全烫手检查才发现14脚和7脚接反了。4.3 核心逻辑接线详解下面按照从低到高的顺序逐一接线。先把74HC74的第一组触发器当做低位Q0将1脚1Q定义为Q02脚1/Q接到5脚1D这样形成Q0翻转环路。然后把时钟信号同时接到1CLK3脚和2CLK11脚这就是同步时钟的关键一步。手动按键的时钟产生电路可以这样搭按键一端接5V另一端先接一个10kΩ下拉电阻到地同时按键的这一端引出信号到两个CLK脚再用一个0.1uF电容并联在按键两端消除抖动。按下按键时CLK从低电平跳变到高电平产生一个上升沿。接着处理高位Q1。将74HC74的第二个触发器定义为Q113脚2Q作为Q112脚2/Q暂时不用。现在用74HC86来产生D1信号。将74HC86的1A接Q01B接U/D信号1Y输出到2A将2B接Q12Y输出到9脚1D也就是第一个触发器的5脚已经用了这里应该接第二个触发器的D端即74HC74的9脚2D。注意别搞错第二个触发器的D端是9脚输出是13脚2Q。顺便约定U/D信号当U/D0时加计数U/D1时减计数。U/D信号可以用拨动开关实现一端接GND另一端接VCC中间抽头接74HC86的1B。如果U/D悬空CMOS输入会随机触发这是必须避免的。完整接线汇总如下表信号名源端目标端说明VCC电源5V74HC74脚14、74HC86脚14供电GND电源地74HC74脚7、74HC86脚7接地CLK按键输出74HC74脚3、脚11同步时钟上升沿触发Q074HC74脚174HC86脚1A、LED低位输出/Q074HC74脚274HC74脚5形成D0反反馈D1_逻辑74HC86脚1Y74HC86脚2A中间节点MD174HC86脚2Y74HC74脚9高位D输入Q174HC74脚1374HC86脚2B、LED高位输出U/D拨动开关74HC86脚1B加/减控制4.4 输出显示与手工验证把Q0、Q1分别接到两个LED的正极LED负极串联220Ω限流电阻后接到GND。这样Q0为1时LED0亮Q1为1时LED1亮。两个LED的组合显示当前计数状态00是都不亮01是只有LED0亮10是只有LED1亮11是两个都亮。上电后的初始状态不确定可能落在任意状态。先按一次清零按钮让计数器回到00。如果没接清零可以手动把CD端瞬时接地再松开或者直接调整U/D开关看看状态变化规律。加计数模式下每按一次按键状态按00→01→10→11→00变化减计数模式下每按一次按键状态按00→11→10→01→00变化。看到这个循环说明核心逻辑没有接错。4.5 电路图的绘制方法“附完整电路图”并不只是拍张面包板的照片最好用专业软件画一张原理图。推荐两个工具一个是老牌的Multisim适合仿真和教学另一个是KiCad免费开源画出来可以直接做PCB。如果你只是快速验证用在线工具CircuitJS也行但它的74系列模型不全。画原理图时按照信号流向从左到右排布最左边是电源和时钟输入、U/D控制开关中间画74HC86的三个异或门从上到下依次是1A、1B、1Y2A、2B、2Y右边画74HC74的两个D触发器每个触发器画出D、CLK、SD、CD、Q、/Q引脚。连线时注意交叉节点要打点同一网络用同一名字标注比如把Q0网络标注为“Q0”而不是用重复的线条绕来绕去。5. 仿真验证与现象分析5.1 在Multisim里搭仿真电路Multisim操作起来很直接从元件库拖出74HC74和74HC86注意选择带有“_N”后缀的仿真模型否则可能报错。再拖两个探针或者虚拟LED以及一个时钟源和逻辑电平开关。仿真前把仪表设置为数字仿真模式时间步长不要设太大建议最大步长10ns否则可能漏掉触发器的建立时间细节。连接完电路后用时钟源输出1Hz方波或者干脆用“交互式数字常量”手动切换时钟电平每次从0到1跳变就相当于一个上升沿。在Multisim里观察波形可以把Q0和Q1接到逻辑分析仪上这样能清楚看到在每个时钟上升沿后状态是否按照预设方向跳变。如果发现状态跳变不符合真值表先检查U/D信号是否反了再检查异或门的输入是否接反。5.2 用逻辑分析仪观察时序关系没有Multisim也可以用逻辑分析仪直接抓面包板上的真实信号。把通道0接CLK通道1接Q0通道2接Q1。在加计数模式下可以看到Q0每来个上升沿都翻转Q1则是在Q0为高时的下一个上升沿翻转。这里特别注意Q1不是在Q0下降沿翻转而是在下一个CLK上升沿翻转这正是同步计数器的特点输出变化滞后于触发器采样但所有输出在同一时刻更新。减计数模式下Q1的翻转条件变成Q0为低时的下一个上升沿也就是Q0为0时Q1翻转。如果逻辑分析仪采样率不够比如只有1MHz而时钟频率很高容易产生混叠建议时钟频率保持在10Hz以下放慢观察。5.3 不同输入频率下的表现手动按键最高只能到每秒十几次再快就有抖动和误触发了。要测高频特性可以用NE555产生几kHz到几十kHz的方波。74HC74最高工作频率通常在几十兆赫兹以上但74HC86的传输延迟会限制同步时钟上限。按照每级异或门延迟约10ns计算两级异或门大约20ns加上触发器的建立时间时钟周期必须大于约70ns对应频率大约14MHz。实际使用中建议不要超过1MHz稳定性和抗干扰都更好。如果你以后要做模8或模16可逆计数器这个思路可以直接扩展用三个D触发器构成8状态计数器高位翻转条件需要更多的异或门组合但原理完全一致都是从状态转移真值表推出下一状态的逻辑表达式。6. 常见问题与故障排查6.1 计数器完全不动这是最常见的故障原因十有八九是时钟信号没到或者芯片没上电。先检查电源引脚电压再用示波器或万用表测CLK引脚手动按键时CLK应当出现0到VCC的跳变。如果CLK一直为低可能是按键接错如果一直为高可能是下拉电阻没接或断路。另一个隐蔽问题是74HC74的置位和清零端没接高电平悬空的SD/CD会被干扰拉低导致输出被强制复位或者置位计数器自然不动。6.2 状态乱跳不受控制这个现象通常是按键抖动造成的。手动按键在按下和释放瞬间会产生多次机械抖动如果直接触发时钟一次按键可能产生多个上升沿状态就会连续跳好几个数。解决办法是在按键输出端加一个RC低通滤波典型值R10kΩC100nF或者用专门的按键防抖电路。更简单的方法是先在仿真软件中测试逻辑确认代码无误后再处理硬件抖动。6.3 加减功能没效果拨动U/D开关时计数方向不变或者状态乱掉一般是U/D信号接错或者悬空。74HC86的1B脚输入必须是确定的低电平或高电平不能接一个小电容之类的浮空网络。检查拨动开关的公共端是否接了74HC86的1B另外一端接VCC或GND。还有一个容易忽略的问题异或门的输入相位搞反把Q0和U/D接反了导致M信号变成U/D XOR Q0从结果上看和正确电路只是差一个取反但和Q1的组合就会导致加减逻辑混乱。6.4 故障排查速查表现象可能原因排查方法输出一直00CD低有效复位测74HC74的1CD和2CD电压输出一直11SD低有效置位测74HC74的1SD和2SD电压状态跳变乱的惊人CLK抖动加RC滤波或使用信号发生器只有低位翻转Q1的D端没接对检查74HC86输出到74HC74的9脚两个LED都不亮电源或LED限流问题测量VCC检查LED极性加减拨动时无反应U/D输入悬空或接错测74HC86的1B电压6.5 芯片发烫的紧急处理一旦上电发现芯片烫手先断电再检查电源极性、芯片方向、VCC和GND是否被杜邦线短接。如果在面包板上插错位经常会出现相邻引脚短接的情况。特别注意74HC74的7脚是GND14脚是VCC如果芯片方向放反7和14就会调换芯片必烧。所以插芯片之前一定要辨认缺口和引脚号不要凭感觉。7. 实操心得与扩展思路做这个电路的体会是看起来简单的两个芯片实际接线时能遇到各种小坑。我踩过最深的坑是“同步”两个字一开始总习惯把高位触发器的时钟接在低位Q上结果做成了异步计数器输出虽然也有00到11的变化但高位翻转有明显的延迟波形对比一看就不对。换成同步时钟后两个触发器的输出严格在同一时刻更新后面接数码管驱动或者状态机时完全不用考虑毛刺问题。如果想让这个项目更完整可以再加一片CD4511把Q0Q1翻译成数码管的0到3会直观很多。或者把U/D信号改成正负脉冲控制做自动正反转计数。再进一步可以试试把两个模4计数器级联成模16计数器注意不是简单把第一级的Q1接到第二级的时钟那样会变成异步计数器正确的同步级联方式需要额外的门控逻辑。总的来看这套设计是理解时序逻辑非常好的跳板做完它再看74163、74HC193这类集成计数器你就能从复位、使能、预置这些引脚反推内部结构了。
返回列表