1. 为什么还要用TTL电路搭半加器
半加器这个名词,很多人在数字电路课本上见过,但真正拿74系列芯片在面包板上把它搭出来的人并不多。我最初接触这个实验,是因为带新人时发现一个普遍现象:大家能用Verilog写出半加器,也能在仿真软件里跑出波形,但一旦面对真实的芯片、电阻、LED和示波器,就完全不知道从哪下手。TTL电路搭建半加器实验,恰好是打通“逻辑表达式”和“物理实现”之间那堵墙的最佳入口。
这个实验的核心目标很明确:用TTL逻辑门芯片实现两个1位二进制数的加法,输出“和”与“进位”两个结果。说人话就是,你手里有两个开关,分别代表两个加数,拨动开关后,电路自动告诉你相加的结果是0还是1,以及有没有进位。听起来简单,但它涵盖了数字电路最基础的几个能力:真值表到逻辑表达式的转换、逻辑门选型、芯片供电与去耦、信号电平观测、故障排查。
适合谁来参考?如果你是电子类专业的学生,正在做数字电路实验,这篇内容可以直接当操作手册用。如果你是嵌入式开发者,平时只写代码不碰硬件,想补一补底层电路的知识,这个实验成本低、周期短,一个下午就能搞定。如果你只是对逻辑门好奇,想亲手验证一下“异或门到底是不是加法器”,那也完全可以跟着做。
我用的核心芯片是74LS08和74LS86,前者是四路二输入与门,后者是四路二输入异或门。半加器的逻辑很简单:和位用异或,进位用与门。所以理论上只需要这两颗芯片就够了。但实际搭建时,你会遇到供电、去耦、LED限流、开关消抖等一系列课本上不会细讲的问题,这些才是这篇博文真正要分享的东西。
2. 半加器的逻辑拆解与芯片选型思路
2.1 从真值表到逻辑表达式,别跳步
半加器的输入是两个1位二进制数A和B,输出是Sum和Carry。真值表如下:
| A | B | Sum | Carry |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
观察Sum列,它在A和B不同时为1,相同时为0,这正是异或逻辑。Carry列只有在A和B同时为1时才为1,这是与逻辑。所以:
- Sum = A ⊕ B
- Carry = A · B
这个推导过程看起来简单,但我建议你亲手在纸上写一遍。很多新手直接背结论,结果到了用与非门搭建的时候完全不知道怎么转换。理解“异或就是不进位的加法”这个直觉,比记住公式重要得多。
2.2 为什么选74LS08和74LS86
74系列TTL芯片里,与门和异或门有很多型号。74LS08是四路二输入与门,74LS86是四路二输入异或门,两者都是14脚DIP封装,供电范围4.75V到5.25V,典型工作电压5V。选它们的原因有三个:
第一,功能刚好匹配。半加器需要两个输入信号做异或和与运算,74LS86提供异或,74LS08提供与,各用一路就够了,剩下的门可以留着扩展全加器。
第二,LS系列功耗低。相比74系列标准型,74LS的输入电流更小,功耗更低,适合面包板实验。如果你手头只有74HC系列,也能用,但要注意HC是CMOS工艺,输入不能悬空,否则会乱跳。
第三,价格便宜且容易买到。这两颗芯片在电子市场或者线上平台都是几毛钱到一块多一颗,坏了也不心疼。
注意:74LS08和74LS86的引脚排列不同,插芯片前一定要查数据手册确认VCC和GND的位置。接反电源是烧芯片最快的方式,我见过不止一个新手把芯片插反后通电,结果芯片直接发烫冒烟。
2.3 电源与去耦,最容易被忽略的环节
TTL电路对电源噪声比较敏感,尤其是面包板上的接触电阻和导线电感,容易在开关动作时产生毛刺。我的习惯是在每颗芯片的VCC和GND之间并一颗0.1μF的陶瓷电容,位置尽量靠近芯片电源引脚。这个电容叫去耦电容,作用是给芯片提供瞬态电流,同时滤掉电源上的高频噪声。
面包板的电源轨也要注意,不要只用一根跳线从电源模块引到面包板一端。我通常会在面包板的两侧电源轨都接上电源和地,并且用粗一点的导线。如果电源轨中间有断开,记得用跳线短接。
3. 面包板实操:从零搭出半加器
3.1 物料准备与工具清单
动手之前,先把东西备齐。缺一个元件就要停下来找,很影响节奏。
- 74LS08 一颗
- 74LS86 一颗
- 面包板 一块,建议至少400孔
- 5V电源模块 一个,或者用USB供电的5V稳压模块
- LED 两颗,建议红色和绿色各一,分别表示Sum和Carry
- 限流电阻 两颗,220Ω到1kΩ都可以,我常用470Ω
- 拨动开关 两个,或者用杜邦线手动接VCC和GND
- 杜邦线 若干,建议公对公和公对母都准备一些
- 万用表 一个,用来测电平和通断
- 逻辑笔 可选,有的话观测更方便
提示:LED限流电阻的计算很简单。TTL输出高电平典型值3.4V左右,LED正向压降约1.8V到2.2V,取2V计算,电流想控制在10mA左右,电阻就是(3.4-2)/0.01=140Ω。用470Ω的话电流约3mA,亮度足够,也更安全。
3.2 芯片插装与电源连接
先把74LS08和74LS86插到面包板上,两颗芯片之间留出至少一排孔的距离,方便走线。芯片的缺口朝左,引脚编号从左上角开始逆时针数。74LS08的14脚是VCC,7脚是GND;74LS86也是14脚VCC,7脚GND。
连接电源时,我习惯先用万用表确认电源模块输出确实是5V,然后再接到面包板电源轨。接好后,用跳线把两颗芯片的14脚接到正电源轨,7脚接到负电源轨。每颗芯片旁边并一颗0.1μF电容,电容一脚接VCC,一脚接GND。
注意:插芯片时不要用力过猛,DIP封装的引脚很容易弯。如果引脚有点歪,先用镊子轻轻掰正再插。拔芯片时用专用起拔器,或者用小一字螺丝刀从两端交替撬起,不要直接用手抠。
3.3 输入开关与信号线布置
两个输入A和B,我用两个拨动开关来实现。开关的一端接VCC,另一端通过一个10kΩ电阻接地,同时引出信号线到芯片输入。这样开关拨到VCC时输入为高电平,拨到地时输入为低电平。10kΩ电阻的作用是确保开关断开时输入不会悬空。
如果你没有拨动开关,也可以用杜邦线直接插到VCC或GND来模拟输入。但这样操作时手会抖,容易碰到其他线,所以我更推荐用开关。
信号线布置有个小技巧:用不同颜色的线区分A和B。比如A用黄色,B用蓝色,Sum用绿色,Carry用红色。这样排查问题时一眼就能看出哪根线对应哪个信号,不用反复查图。
3.4 异或门和与门的接线细节
74LS86内部有四个异或门,我们只用其中一个。以第一个门为例,输入是1脚和2脚,输出是3脚。把A接到1脚,B接到2脚,3脚就是Sum输出。
74LS08内部有四个与门,同样用一个。第一个门输入是1脚和2脚,输出是3脚。把A接到1脚,B接到2脚,3脚就是Carry输出。
接线时注意不要跨芯片乱接。我见过有人把A接到74LS86的1脚后,又用一根很长的线绕到面包板另一头接74LS08的1脚,结果线太长引入干扰,输出不稳定。正确做法是让两颗芯片尽量靠近,A和B的信号线先分别引到两颗芯片附近,再用短跳线连接。
3.5 输出指示与限流电阻
Sum和Carry输出分别接LED。LED正极接芯片输出,负极通过限流电阻接地。这样输出高电平时LED亮,低电平时灭。
这里有个细节:TTL输出高电平时是拉电流能力较弱,低电平时灌电流能力较强。所以用LED从输出到地的方式,高电平亮,是拉电流模式,74LS系列高电平输出电流典型值只有0.4mA左右,可能亮度很暗。更好的做法是LED正极接VCC,负极通过电阻接芯片输出,这样低电平时LED亮,利用的是灌电流能力,74LS灌电流可以到8mA,亮度明显更好。
但这样逻辑就反了:输出低电平时LED亮。如果你不介意反逻辑,可以用这种方式。如果希望高电平亮,可以在输出和LED之间加一个三极管驱动,或者直接用逻辑笔。我为了直观,通常用灌电流方式,然后在标签上写清楚“LED亮表示低电平”。
4. 上电测试与波形观测
4.1 静态测试:拨开关看LED
接好线后,先不要急着上电。用万用表蜂鸣档测一下VCC和GND之间有没有短路,确认没有短路再通电。
通电后,按真值表依次拨动开关:
- A=0,B=0:Sum灭,Carry灭
- A=0,B=1:Sum亮,Carry灭
- A=1,B=0:Sum亮,Carry灭
- A=1,B=1:Sum灭,Carry亮
如果结果符合,说明逻辑正确。如果不符合,先检查芯片电源是否正常,再检查输入信号是否真的到了芯片引脚。用万用表测芯片输入引脚电压,高电平应该在2.7V以上,低电平在0.8V以下。
4.2 动态测试:用示波器看延迟
静态测试通过后,如果你有示波器,可以进一步观测异或门的传输延迟。把A输入接一个方波信号,频率1kHz左右,B接低电平,观察Sum输出。你会看到Sum跟随A变化,但上升沿和下降沿相对于输入有几十纳秒的延迟。74LS86的典型传输延迟约15ns到20ns,这个延迟在低速电路中无所谓,但在高频电路中必须考虑。
如果没有示波器,也可以用逻辑分析仪,或者用单片机产生方波并读取输出。我最初就是用Arduino产生1kHz方波,然后用数字引脚读Sum,统计高低电平持续时间,间接验证逻辑功能。
4.3 电平兼容性与负载问题
TTL输出接LED时,要注意负载不要超过芯片驱动能力。74LS08和74LS86每个输出最多驱动10个LS系列输入,或者8mA灌电流。两颗LED加电阻的电流在3mA到10mA之间,单路输出驱动一个LED没问题,但不要同时驱动多个大电流负载。
另外,如果你要把这个半加器级联成全加器,下一级的输入会消耗前一级的输出电流。LS系列输入低电平时每个输入约0.4mA,高电平时约20μA。一个输出驱动两个输入完全没问题,但驱动太多就要算扇出。
5. 常见故障与排查速查表
5.1 上电后芯片发烫
这是最危险的情况,立刻断电。原因通常是电源接反、VCC和GND短路、或者芯片已经损坏。用万用表测VCC和GND之间电阻,正常应该在几百欧以上。如果接近0,检查电源轨有没有短路,芯片有没有插反。
5.2 LED不亮或常亮
先测芯片输出引脚电压。如果输出高电平但LED不亮,检查LED极性是否接反,限流电阻是否太大。如果输出低电平但LED常亮,检查是否用了灌电流接法而逻辑搞反了。如果输出引脚电压在1V到2V之间,可能是输出过载或者芯片损坏。
5.3 逻辑结果随机跳变
输入悬空是常见原因。TTL输入不能悬空,悬空时会被当作高电平,但容易受干扰。确保每个输入都有明确的拉高或拉低路径。开关消抖也要考虑,机械开关在拨动瞬间会产生多个脉冲,如果后级有计数器,会误计数。可以在开关两端并一个0.1μF电容,或者用施密特触发器整形。
5.4 排查流程表
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| 芯片发烫 | 电源接反或短路 | 断电测VCC-GND电阻 |
| LED不亮 | 极性反、电阻大、输出低 | 测输出引脚电压 |
| 逻辑错误 | 输入悬空、接线错 | 对照真值表逐脚测电平 |
| 输出跳变 | 电源噪声、开关抖动 | 加去耦电容、加消抖电容 |
| 级联失败 | 扇出不够、电平不匹配 | 查数据手册算扇出 |
提示:排查时不要同时改多个地方。一次只改一个变量,改完测一次,否则你永远不知道是哪个改动起了作用。这是我踩过很多次坑之后养成的习惯。
6. 从半加器到全加器的扩展思路
半加器只能处理两个1位数的加法,没有考虑低位进位。实际加法器需要全加器,输入是A、B和Cin,输出是Sum和Cout。全加器的逻辑是:
- Sum = A ⊕ B ⊕ Cin
- Cout = A·B + Cin·(A ⊕ B)
用74LS86和74LS08可以搭出来:两个异或门串联得到Sum,两个与门和一个或门得到Cout。74LS08只有与门,还需要一颗74LS32或门。或者用74LS00与非门和74LS10三输入与非门来等效实现。
我建议你先把这个半加器搭稳,确认每个环节都理解透了,再扩展全加器。半加器是地基,地基不稳,全加器只会让你更迷糊。
7. 我踩过的坑和实测心得
第一个坑是芯片插反。有一次赶时间,74LS86的缺口朝右插进去了,通电后芯片烫得不敢碰,赶紧断电,芯片已经废了。后来我养成习惯,插芯片前先看缺口,再用万用表测VCC和GND引脚确认没有短路。
第二个坑是面包板电源轨中间断开。有些面包板的电源轨不是整条连通的,中间有断点。我一开始不知道,把电源接在一端,芯片接在另一端,结果芯片根本没供电。后来用万用表蜂鸣档测了一下,才发现电源轨中间不通。现在我用面包板之前都会先测电源轨通断。
第三个坑是LED限流电阻用太小。有次手边没有470Ω,用了100Ω,LED特别亮,芯片输出电流超标,用了一会儿芯片就烫了。后来老老实实按计算值选电阻,再也不敢随便拿一个就用。
第四个坑是输入开关没消抖。用拨动开关做输入时,如果后级接计数器,拨一次开关计数器会跳好几个数。后来在开关两端并了0.1μF电容,问题解决。这个电容和开关构成RC低通,把抖动滤掉了。
实测下来,整个半加器从插芯片到验证通过,熟练的话半小时以内能完成。新手第一次做,建议留出两小时,包括查手册、测通断、排查问题的时间。不要追求一次成功,把每次故障当成学习机会,收获比顺顺利利搭完更大。
最后分享一个小技巧:搭完电路后,用手机拍一张清晰的照片,标注好每根线的颜色和对应信号。下次再搭或者给别人讲的时候,直接看照片就能复现,不用重新查图。这个习惯帮我省了很多重复劳动的时间。