ARTICLE DETAIL

资讯详情

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

74LS90七进制计数器设计:从内部结构到面包板调试全解析

74LS90七进制计数器设计:从内部结构到面包板调试全解析 第一次在面包板上认真调74LS90时我犯过一个特别典型的错误觉得七进制嘛数到7就清零7的二进制是0111把MR1接QC、MR2接QB不就行了结果一通电LED老老实实从0000走到0110然后直接跳回0000中间那个“0111”死活不出现。查了半天才发现6的二进制是0110QC和QB早就同时为1了而74LS90的复位端是异步电平触发——它根本不在乎你“本来想数到几”只要条件满足就立刻清零。这篇实战记录就把74LS90内部结构、七进制复位条件推导、完整状态图和面包板调试踩过坑一次性讲清楚正在做数字电路课程设计、或者想亲手把时序逻辑电路状态图吃透的朋友可以直接照着搭。1. 为什么偏偏是74LS90先把芯片内部结构摸清楚1.1 拆开74LS90一个芯片里住着两个计数器74LS90是一颗经典的TTL中规模异步计数器很多人只记得它“能数到9”但真正理解它内部结构的人其实不多。它里面住着两个互相独立的计数器一个是1位的模2计数器输出只有QA由CLKA引脚驱动另一个是3位的模5计数器输出是QD QC QB由CLKB引脚驱动。这两个计数器共用电源和地但时钟完全独立可以单独使用也可以通过外接引脚组合起来。为什么要拆成模2和模5因为102×5。74LS90的设计哲学就是把十进制“分解质因数”让用户自己决定怎么把这8位计数资源组合起来。如果你只需要一个二分频器可以直接从CLKA进去、QA出来如果你需要五分频器就从CLKB进去、QDQCQB出来。这种模块化设计在几十年前算非常聪明的做法哪怕放到今天的实验课上用来讲“计数器本质是状态机”也依然顺手。1.2 BCD计数是怎么连出来的QA和CLKB之间那根线74LS90变成十进制计数器的关键在于一根飞线把QA接到CLKB时钟信号从CLKA输入。原理是这样的CLKA每来一个下降沿QA翻转一次所以QA输出的是输入时钟的二分频方波QA的下降沿频率正好是输入时钟频率的1/2这个下降沿又去驱动CLKB让QDQCQB每两个输入脉冲进一位。这样一来整体输出就形成了8421码。注意读数的顺序QD是最高位权重8QC权重4QB权重2QA是最低位权重1所以输出应按QD QC QB QA的顺序从左往右写。比如计数值5对应二进制0101实际输出是QD0、QC1、QB0、QA1。数字电路实验里犯的错误有一大半都是因为把输出顺序读反了。1.3 两个控制口复位端与置9端都是“双保险”74LS90有两个控制端口这是做任意模值计数的关键。引脚名称作用14脚CLKA时钟A下降沿触发QA翻转1脚CLKB时钟B下降沿触发QD QC QB计数11脚QA输出权重110脚QB输出权重29脚QC输出权重48脚QD输出权重82脚MR1复位端1与MR2同时为高时清零3脚MR2复位端26脚R9A置9端1与R9B同时为高时置10017脚R9B置9端25脚VCC接5V12脚GND接地4、13脚NC空脚不接两个复位端MR1和MR2必须同时为高四个输出才会异步清零两个置9端R9A和R9B必须同时为高输出才会被置成1001。注意“异步”两个字复位动作不等待时钟边沿只要电平条件满足立刻产生。这个特性既是74LS90做模N计数器方便的原因也是很多翻车现场的来源。还有一个TTL常识必须记住输入端悬空时TTL芯片会把它当作高电平。所以R9A、R9B在不使用时要接地不能悬空否则芯片可能莫名其妙被置成9。2. 七进制设计的真正难点如何抓住“7”这个瞬间2.1 “数到7就清零”为什么不能直接实现七进制计数器的目标状态是0000、0001、0010、0011、0100、0101、0110共7个稳定状态下一个状态应该是0000。很多人的第一反应是“让芯片数到7再清零”但74LS90本身没有“我数到了7”的判断能力——它只是一个内置模10的异步计数器给它10个脉冲它会自动从1001回到0000但它不知道7对你有什么特殊意义。所以我们必须用外部组合逻辑去检测“当前状态是0111”一旦检测到就立刻产生一个复位信号送到MR1和MR2。设计任务于是变成了找出一个逻辑表达式F使得F只在状态0111时为1在其他所有状态为0。这个表达式就是整个设计最核心的部分。2.2 教科书不会主动讲的翻车接法MR1QC、MR2QB我开头说的接法——MR1直接接QC、MR2直接接QB——是很多初学者第一反应会试的方案。理由是7的二进制0111里QC1、QB1那正好两个复位端都满足高电平芯片自然清零。看起来天衣无缝实际上一上电就翻车。把0到9的BCD编码列出来看就明白了6的编码是0110在这个状态里QC1、QB1。MR1QC、MR2QB时6状态下两个复位端已经同时为高了。由于复位是异步的芯片根本走不到7在6状态就被立刻清零。所以这个接法实际做出来的是六进制计数器循环范围是0到5。这里有个反直觉的知识点6和7的二进制编码共享了QC1、QB1这个特征只用两位输出无法区分它们。要让计数器准确停在7再复位必须找到一个“只在7成立、在0到6都不成立”的组合特征。2.3 正确复位条件三输入与门QC·QB·QA我们把0到9每个状态的QD QC QB QA逐一代入表达式QC·QB·QA看它什么时候为1。计数值QDQCQBQAQC·QB·QA000000100010200100300110401000501010601100701111810000910010结果很清楚QC·QB·QA只有在7时才是1。于是复位逻辑确定为用一个三输入与门把QC、QB、QA送进去输出端接MR1和MR2。当第7个脉冲到来QA由0变1三输入与门输出立刻变高芯片异步清零回到0000清零后QA变0与门输出又变低完成一次完整的“检测-复位-撤销”循环。这个设计比MR1QC、MR2QB多了一个输入项QA多了一条门电路但正是QA把6和7区分开了。很多教材直接给结论“用三输入与门”但很少解释为什么不是两输入——原因就在这里。3. 原理图落上面包板两种接线方案任选3.1 方案一74LS11三输入与门最干净利落推荐先备齐以下元件74LS90一片74LS11三输入与门一片NE555一片做1Hz左右时钟也可以用信号发生器代替LED四个、330Ω电阻四个100nF陶瓷电容两个、10uF电解电容一个面包板、跳线若干、5V电源接线步骤如下把74LS90的QA11脚接到CLKB1脚构成BCD计数模式。时钟信号NE555的3脚输出或信号发生器接到74LS90的CLKA14脚。74LS90的QC9脚、QB10脚、QA11脚分别接到74LS11三输入与门的1A1脚、1B2脚、1C13脚。74LS11的1Y12脚接到74LS90的MR12脚和MR23脚这两脚并联。74LS90的R9A6脚、R9B7脚接地防止误置9。74LS90的QD8脚、QC9脚、QB10脚、QA11脚分别接LED做状态显示。每个IC的VCC与GND之间并一个100nF陶瓷电容电源入口再并10uF电解电容。74LS11一共有三个三输入与门我们只用第一个。需要注意74LS11多余输入不能悬空要么接高电平要么接到某个确定信号上否则TTL悬空输入会被当成高电平输出逻辑完全不可控。3.2 方案二一块74LS00搭出三输入与门如果手边没有74LS11只有更常见的74LS00四重二输入与非门也可以搭。核心逻辑是把QC·QB·QA这个三输入与用与非门变换出来先用两个与非门做一个与门得到QC·QB再用另外两个与非门把这个中间结果与QA相与。总共消耗74LS00里的4个与非门正好一块芯片。接线对应关系以74LS00标准引脚排列为例1脚接QC、2脚接QB3脚输出NOT(QC·QB)。4脚和5脚短接后接3脚6脚输出QC·QB。9脚接6脚、10脚接QA8脚输出NOT(QC·QB·QA)。12脚和13脚短接后接8脚11脚输出QC·QB·QA。把11脚接到74LS90的MR1和MR2。这个方案比74LS11多了两级门延迟复位毛刺会稍微宽一点但对几十ns的芯片反应时间来说完全够用。它更适合只想用“手边最常见芯片”做实验的场景也能顺带复习一下摩根定律怎么把与门化成与非门组合。3.3 时钟源、LED显示与电源去耦的搭配细节时钟频率建议用1Hz左右这样每个状态持续约1秒人眼可以直接跟着LED读二进制数配合状态图逐个验证。用NE555做无稳态振荡器参数取R11kΩ、R210kΩ、C100uF频率约为f1.44/((R12R2)×C)1.44/(21k×100u)≈0.69Hz大约1.45秒跳一个状态节奏很舒服。没有示波器的时候这种慢时钟是最好的调试工具。LED显示部分有一个常见误区直接把LED阳极接到74LS90输出、阴极接地结果发现灯暗得可怜。原因是TTL输出高电平时的源电流能力很弱普遍只有0.4mA左右而灌电流能力可以达到8到16mA。正确接法是LED阳极接VCC、阴极串330Ω电阻接到74LS90输出端用低电平点亮。这样输出低电平时LED亮度充足也不会拉垮输出电平。4. 状态图与状态表七个状态怎么走、怎么回到起点4.1 状态表每个CLK下降沿后输出变化全记录时序电路的本质是状态机状态表就是把状态机的所有状态和转移条件列出来。对本设计我们重点关注CLK下降沿到来时QD QC QB QA的变化。CLK序号QDQCQBQA说明00000复位后的起点10001第1个脉冲后20010第2个脉冲后30011第3个脉冲后40100第4个脉冲后50101第5个脉冲后60110第6个脉冲后70111暂态出现后被立即清零看这个表要抓住两个点一是从0000到0110这7个稳定状态正好对应七进制的一个完整计数周期二是状态0111在表中是“暂态”它存在几十纳秒就被清零LED根本来不及显示但它是整个计数循环中必不可少的一环。4.2 主循环状态图0000到0110以及看不见的0111用状态图表示主循环就是下面这个样子CLK下降沿驱动 ┌────────────────────────────────────────────────────────┐ │ │ ▼ │ 0000 → 0001 → 0010 → 0011 → 0100 → 0101 → 0110 │ │ │ │ CLK下降沿 │ ▼ │ [0111] │ │ │ │ 异步清零信号 │ ▼ │ 0000 ────────────┘每一条标着CLK下降沿的箭头都代表“一个时钟周期后进入下一个状态”这是时序逻辑的节拍。从0110到0000这个箭头比较特殊它先经过0111再由与门产生的异步清零信号立即拉回0000整个过程不等待下一个时钟。状态图里把0111用方括号标成暂态就是为了提醒看的人这个状态在时间轴上真实存在但持续时间极短。4.3 完整状态图7、8、9三个特殊状态的自校正严谨的状态图不能只画主循环还得把所有可能状态都画出来包括合法循环之外的1000和1001。因为74LS90上电瞬间输出是随机的可能落在任意状态如果某个非法状态没有出口计数器就会死锁。完整转移关系如下当前状态下一状态转移条件00000001CLK下降沿00010010CLK下降沿00100011CLK下降沿00110100CLK下降沿01000101CLK下降沿01010110CLK下降沿01100111CLK下降沿01110000与门清零信号立即生效10001001CLK下降沿10010000CLK下降沿74LS90内置模10自动回零1000经过1001再回到0000最多两个时钟就能重新进入0到6的主循环0111更是会被立刻清零。也就是说无论上电时停在哪个状态计数器都不会死锁最终必然回到七进制循环。这个特性叫自校正能力课程设计答辩时经常被问到。4.4 用示波器看“复位毛刺”这里毛刺不是bug是特性如果你有一台示波器把探头接到MR1与MR2的公共点上用单次触发去抓能看到一个宽度只有几十纳秒的正脉冲。这个脉冲就是七进制计数器的“心跳”它每7个时钟周期出现一次宽度等于门电路延迟与芯片内部复位时间的叠加。很多人在数字电路里谈毛刺色变但这里的毛刺恰恰是必须的。没有它计数器就不会从0111回到0000。理解这一点很重要毛刺本身不是问题问题是它落在哪里、被谁使用。在74LS90的异步复位端上这个窄脉冲就是标准的复位信号电平平移也完全符合TTL电平要求。5. 实测踩坑清单这些坑我调试时都撞过5.1 上电不在0000先用状态图判断能不能“自救”第一次通电LED很可能不是从0000开始而是从某个随机状态亮起这是TTL触发器上电后状态不确定的正常现象。碰到这种情况不要慌先把状态图铺开看当前状态有没有出口。按4.3的完整状态图无论从哪个状态出发最多两个时钟脉冲就能回到0000到0110主循环。如果LED显示1000那数一个脉冲到1001再数一个脉冲就回0000如果显示0111与门会立刻把它清零。如果希望系统严格从0000开始可以做一个上电复位把MR1、MR2通过一个按钮接到VCC按下瞬间完成清零。注意按钮和与门输出要加二极管隔离防止按钮接VCC时反向灌电流进与门输出级。实验演示中直接用一根杜邦线把MR1、MR2短暂碰一下VCC再松开是最省事的做法。5.2 机械按键做时钟一次按下跳了好几个数有同学觉得手动按键比NE555更灵活结果按一下LED从0000直接跳到0010甚至0011。原因很明显机械按键的触点闭合或断开时会有十几毫秒的抖动产生一串上升沿和下降沿而74LS90是边沿触发的抖一下它就记好几个脉冲。解决的思路有两个一是放弃按键用NE555或信号发生器提供干净的时钟信号这是实验课最推荐的做法二是实在要用按键按键输出先过RC低通再进CLKA取R10kΩ、C10uF时间常数约100ms远大于机械抖动时间能把毛刺吸收掉。5.3 LED与数码管的驱动差异不要直接怼74LS90输出LED直接接74LS90输出没问题但数码管就不行了。共阴数码管一个段需要10到20mA电流四位输出加上每组段驱动总电流需求远超74LS90的驱动能力。强行直连的结果是数码管亮度不足、输出电平被拉低甚至导致计数器逻辑错乱。教学演示用四个LED显示二进制就够了四个灯从高位到低位排列读的时候从左往右写二进制再心算成十进制。如果非要显示十进制数字最常见做法是加一片CD4511 BCD转七段译码器或者用ULN2003驱动数码管段脚。5.4 电源和反馈走线面包板上的“玄学”多半在这面包板调试时遇到“数到某几个数偶尔跳变”“LED亮度忽明忽暗”之类的问题九成是电源去耦和地线问题而不是逻辑错误。每个IC的电源引脚旁必须加100nF陶瓷电容位置尽量靠近VCC和GND引脚电源入口处再并一个10uF或更大的电解电容吸收低频波动。另外与门输出到MR1、MR2的反馈线尽量短。这条线传输的是复位脉冲线太长会引入额外寄生电感和电容让毛刺变宽或变形严重时会导致复位逻辑不可靠。我习惯把74LS90和74LS11放在相邻位置中间只隔一两个面包板孔位。6. 从七进制到任意N进制同一套方法直接复制6.1 改改与门输入模值就变了3/5/6/9进制速查掌握了“检测目标状态”的方法后任意模值计数器都只是换一组输入条件的问题。下面这张表是我整理出来的常用接法都是基于同一个规律找到目标BCD状态中为1的位选择合适的组合去触发复位。目标进制清零状态复位接法模30011MR1QBMR2QA模50101MR1QCMR2QA模60110MR1QCMR2QB模70111QC·QB·QA经三输入与门接MR1、MR2模91001MR1QDMR2QA注意模4和模8没法像上面这样直接用两个复位端解决因为目标状态缺少“可直接组合成双高”的特征位需要引入非门或更复杂的组合逻辑。这说明一个规律每个模值都有最适合自己的复位条件先把0到N的BCD编码表写出来再找特征位是最稳的设计路线。6.2 级联两片74LS90进位信号才是胜负手一个七进制计数器只有0到6要做大范围的计数就需要级联。以经典的模60计数器为例低位片用BCD模10即QA接CLKB、MR1和MR2接地让它自由数到9高位片需要六进制这时我们可以直接用MR1QC、MR2QB的接法——没错就是第二章那个“翻车接法”它在六进制场景下反而是最高效的。低位片的QD接到高位片的CLKA上因为低位从1001跳回0000时QD会从1变成0产生一个下降沿正好作为高位片的时钟。这里要特别提醒不要试图用七进制复位脉冲直接去驱动下一级。复位脉冲只有几十纳秒宽用它当下一级时钟非常不可靠时序裕量几乎为零。级联设计时进位信号必须来自稳定状态的变化边沿而不是来自毛刺。6.3 什么时候该换同步计数器74LS90的边界74LS90在课程设计中非常适合讲原理但它毕竟属于异步计数器复位和置数都是异步完成复位脉冲天然带毛刺。在高速系统中这种毛刺可能躲过下一级触发窗口造成偶发错误。这时候应该换用74LS160、74LS163这类同步计数器——它们的清零或预置操作只在时钟边沿生效状态转移过程干净利落不会出现“暂时进入某个中间状态再被拉回”的情况。我的建议是学习阶段一定要把74LS90玩透因为它能让你直观理解时钟边沿、异步复位、状态转移这些时序逻辑的核心概念但到了做产品级的频率计、时间计数器时直接选同步计数器不要拿74LS90硬扛高频应用。最后分享一个我自己的调试习惯拿到任意一个模N计数器设计先不做任何接线老老实实在纸上把0到N的BCD编码表列出来然后在目标状态下面画个圈写出复位条件。这个习惯帮我避免了好几次“想当然接法”导致的翻车。七进制这个题目我建议你先从五进制或六进制搭起成功后再改成三输入与门做七进制这样对状态图的理解会比直接上七进制深刻得多。调试时如果手头没有示波器把时钟降到1Hz以内用LED逐个状态核对主循环再用逻辑分析仪抓复位脉冲基本就能把整个电路的行为吃透。
返回列表