从MOS管到逻辑门:手把手搭建与或非门电路实战
1. 从一颗MOS管开始理解逻辑门很多人学数字电路一上来就被“与门”“或门”“非门”的真值表灌了一脑袋考试能默写但真拿几颗管子摆在面前反而不知道怎么下手。我当年也是这样直到有一次为了验证一个译码电路硬是用分立MOS管搭了一遍与或非门才发现这里面藏着不少书本上不会讲的细节。这篇内容就是把我从选管、搭电路、测波形到排查问题的完整过程整理出来适合刚接触数字电路的学生、想带学生做实验的老师以及需要用手搭逻辑验证想法的硬件工程师。核心关键词MOS管、与或非门、真值表、CMOS、逻辑门会贯穿始终读完你至少能自己独立搭出一套能跑通的逻辑门电路并且知道波形不对时该从哪里查。先说清楚一件事用MOS管搭逻辑门本质上是在用开关实现布尔运算。MOS管在这里扮演的是一个受电压控制的开关栅极电压决定源漏之间是否导通。NMOS在高电平时导通PMOS在低电平时导通这个互补特性就是CMOS逻辑门的根基。你不需要一上来就背复杂的版图先把“开关”这个直觉建立起来后面的一切都会顺理成章。2. 搭建前的整体设计与选型思路2.1 为什么优先选CMOS结构而不是电阻负载用MOS管搭逻辑门常见的有三种路子电阻负载NMOS、饱和负载NMOS、以及CMOS互补结构。我强烈建议新手直接从CMOS入手原因很实在。电阻负载结构虽然简单但输出高电平会被电阻和导通管分压拉低驱动能力差静态功耗还大饱和负载结构稍微好点但输出摆幅依然不理想。CMOS结构用一对互补管输出高电平接近电源电压低电平接近地静态时几乎不耗电这也是为什么现代芯片几乎全是CMOS工艺。具体到与门、或门、非门非门是最基础的一颗PMOS加一颗NMOS就能搞定与非门和或非门是在非门基础上做串并联扩展而真正的与门和或门通常是在与非门或或非门后面再挂一级反相器。这个层级关系你得先理清楚不然搭到后面会乱。2.2 MOS管选型的关键参数怎么看选管不是随便抓一颗就行。我踩过的第一个坑就是拿功率MOS管搭逻辑门结果栅极电容太大波形上升沿惨不忍睹。逻辑门应用要关注这几个参数阈值电压VthNMOS的Vth通常为正PMOS为负。Vth决定了管子什么时候开始导通直接影响逻辑阈值。一般逻辑电平应用选Vth在0.5V到1.5V之间的管子比较合适。导通电阻Rds(on)越小越好但逻辑门里更看重的是开关速度Rds(on)只要保证输出能拉到轨即可。栅极电容Ciss这个参数决定了开关速度。小信号MOS管如2N7002、BSS138的Ciss在几十pF量级适合逻辑应用功率管的Ciss可能到nF级搭逻辑门就是灾难。封装与配对最好选互补对管比如CD4007这种芯片内部就集成了多组互补MOS参数一致性好搭起来省心。我实测下来2N7002配BSS84是一套很顺手的组合前者是NMOS后者是PMOS阈值和电容都比较匹配面包板上就能跑。2.3 供电电压与逻辑电平的匹配供电电压的选择直接决定电路能不能正常工作。CMOS逻辑门的供电范围通常很宽但你要保证电源电压大于NMOS的Vth加上PMOS的|Vth|否则管子推不到位。比如Vth都是1V那供电至少2V以上才靠谱。我一般用5V或3.3V做实验这两个电压下大部分小信号MOS管都能很好地工作在开关状态。还有一个容易忽略的点输入逻辑电平的幅度要和供电匹配。如果你用3.3V的单片机去驱动5V供电的CMOS门高电平可能只有3.3VPMOS关不彻底会有直通电流。反过来5V驱动3.3V的门可能超过栅极耐压。所以供电和驱动电平最好统一。3. 非门、与非门、或非门的核心原理拆解3.1 CMOS反相器一切逻辑门的起点CMOS反相器的结构简单到极致一颗PMOS和一颗NMOS栅极连在一起做输入漏极连在一起做输出PMOS源极接电源NMOS源极接地。输入低电平时PMOS导通、NMOS截止输出被拉到电源是高电平输入高电平时PMOS截止、NMOS导通输出被拉到地是低电平。这就是非门的全部逻辑。这里有个关键点必须理解PMOS和NMOS的栅极是连在一起的所以同一时刻只有一个管子导通另一个截止不存在直通。这也是CMOS静态功耗极低的原因。但如果你在输入跳变过程中观察会有一小段时间两个管子同时半导通产生瞬态直通电流这就是为什么CMOS电路在高频工作时功耗会上升。3.2 与非门串联NMOS加并联PMOS与非门的结构是在反相器基础上扩展两个NMOS串联在下面两个PMOS并联在上面。输入A和B分别控制一对管子。只有当A和B都为高时两个串联的NMOS都导通输出才被拉到地即低电平其他任何情况至少有一个PMOS导通输出被拉到高电平。这就是“全高出低否则出高”的与非逻辑。串联NMOS有个细节两个管子串联后导通电阻加倍输出低电平会比单管时略高一点。如果你对低电平要求很严可以选Rds(on)更小的管子或者适当提高供电电压。并联PMOS则相反导通电阻减半拉高能力更强。3.3 或非门并联NMOS加串联PMOS或非门和与非门是对偶关系两个NMOS并联在下面两个PMOS串联在上面。只要A或B有一个为高对应的NMOS导通输出被拉到地只有A和B都为低时两个PMOS都导通输出才被拉到高。这就是“全低出高否则出低”的或非逻辑。或非门的串联PMOS是它的软肋。PMOS本身的空穴迁移率就比NMOS的电子迁移率低导通电阻偏大再串联两个拉高能力更弱。所以实际设计中或非门的PMOS往往要做得比NMOS宽用面积换性能。分立搭电路时你可以选Rds(on)更小的PMOS来补偿。3.4 与门和或门在非门基础上加一级真正的与门和或门输出逻辑和与非门、或非门是反的。所以标准做法是在与非门后面加一级反相器得到与门在或非门后面加一级反相器得到或门。这样做的代价是增加了一级延迟和两个管子但逻辑正确性有保证。你也可以用非门加传输门的方式搭但那样结构更复杂新手容易绕晕。我建议先把与非门和或非门搭熟再在后面挂反相器一步步来。4. 手把手实操从面包板到波形验证4.1 材料准备与面包板布局我这次用的材料清单如下元件型号数量说明NMOS2N70026颗小信号逻辑管PMOSBSS846颗与2N7002互补电阻10kΩ4颗输入下拉用电阻100Ω2颗输出限流保护LED3mm红/绿2颗输出指示电源5V1路面包板电源模块万用表数字1台测电平示波器双通道1台看波形面包板布局有个技巧把PMOS放在上半区NMOS放在下半区电源轨和地轨分别走上下边缘。输入信号从左侧进输出从右侧出这样信号流向清晰排查时一眼就能看出连接关系。我习惯用不同颜色的跳线区分电源、地和信号红色走电源黑色走地黄色走信号这样即使电路复杂也不容易接错。4.2 先搭一颗反相器验证基础不要一上来就搭复杂的与非门先用一颗PMOS加一颗NMOS搭反相器。连接步骤PMOS源极接5V电源轨栅极接输入信号漏极接输出节点。NMOS漏极接输出节点栅极接输入信号源极接地轨。输入节点接一个10kΩ下拉电阻到地保证悬空时为低电平。输出节点接一个LED串联100Ω电阻到地做视觉指示。上电后输入接低电平LED应该亮输入接高电平LED应该灭。如果反了说明PMOS和NMOS的位置搞混了或者管子引脚认错了。2N7002的引脚是栅极在左、源极在中、漏极在右面对印字面BSS84的引脚排列类似但极性相反一定要查数据手册确认。4.3 扩展成与非门并测真值表反相器验证通过后把它扩展成与非门下面用两颗2N7002串联第一颗的漏极接输出节点源极接第二颗的漏极第二颗的源极接地。上面用两颗BSS84并联两颗的源极都接5V漏极都接输出节点。输入A接第一颗NMOS和第一颗PMOS的栅极输入B接第二颗NMOS和第二颗PMOS的栅极。接好后按真值表逐项测试AB输出LED状态001灭011灭101灭110亮如果某一项不对先查对应管子的栅极有没有接对再查串联NMOS的中间节点有没有虚接。面包板用久了簧片会松我遇到过好几次中间节点接触不良导致逻辑错乱的情况换一个孔位就好了。4.4 或非门与完整与或非门的搭建或非门的搭法是把与非门上下对调下面两颗NMOS并联上面两颗PMOS串联。输入A接第一对管子输入B接第二对管子。真值表如下AB输出LED状态001灭010亮100亮110亮要得到与门就在与非门输出后面再挂一级反相器要得到或门就在或非门输出后面挂一级反相器。这样你手里就有了完整的与、或、非三种门。我建议把三种门都搭在同一块面包板上输入信号用跳线切换这样对比测试非常方便。4.5 用示波器看波形而不是只看LEDLED只能告诉你稳态逻辑对不对看不出延迟和毛刺。用示波器双通道一个通道看输入一个通道看输出你能看到传播延迟输入跳变到输出跳变之间的时间差分立管搭的逻辑门通常在几十到几百纳秒。上升沿和下降沿CMOS输出摆幅应该接近满幅如果上升沿缓慢说明PMOS拉高能力不足或负载电容太大。毛刺在输入跳变瞬间输出可能出现短暂尖峰这是两个管子同时半导通造成的属于正常现象但如果毛刺幅度大到能触发下一级就要加滤波或施密特触发器。我实测2N7002加BSS84在5V供电下带一个LED负载传播延迟大约80ns上升沿约120ns下降沿约60ns。这个数据供你参考实际会因布局和管子批次有差异。5. 真值表调试技巧与常见问题排查5.1 真值表逐项测试的标准流程调试逻辑门最忌讳跳着测。我的标准流程是先把所有输入组合列成真值表从全0开始每次只改变一个输入观察输出是否符合预期。这样做的好处是一旦出错你能立刻定位到是哪个输入路径的问题。具体操作时输入不要悬空一定要用电阻下拉或上拉到确定电平。悬空的MOS栅极是高阻抗节点手一碰就可能改变状态测出来的结果毫无意义。我一般用10kΩ下拉电阻需要高电平时用跳线短接到5V。5.2 输出电平不对的五大原因现象可能原因排查方法输出始终高NMOS没导通或PMOS常通测NMOS栅极电压查PMOS是否装反输出始终低PMOS没导通或NMOS常通测PMOS栅极电压查NMOS是否装反输出高电平偏低PMOS导通电阻大或负载重换Rds(on)更小的PMOS减小负载输出低电平偏高NMOS导通电阻大或串联管太多换Rds(on)更小的NMOS检查串联连接输出抖动输入悬空或电源不稳加下拉电阻电源并滤波电容这里重点说“输出始终高”这个坑。我第一次搭与非门时输出一直是高查了半天发现是PMOS的源极和漏极接反了。MOS管的源漏在结构上是对称的但实际封装里源极通常和衬底相连接反了体二极管会导通逻辑就乱了。所以焊接或插线前一定确认引脚定义。5.3 输入悬空导致的逻辑混乱MOS管的栅极输入阻抗极高悬空时电荷无处泄放电压可能停在任意值导致输出随机。这是新手最容易忽略的问题。解决办法很简单每个输入节点都接一个10kΩ到100kΩ的电阻到地需要高电平时再用跳线接电源。电阻值不用太精确10kΩ是通用选择太小会增加驱动负担太大抗干扰能力弱。5.4 电源噪声与去耦电容的放置CMOS逻辑门在开关瞬间会从电源抽取瞬态电流如果电源走线长、内阻大就会产生噪声导致逻辑误翻转。我在面包板电源入口处并了一颗100μF电解电容和一颗0.1μF陶瓷电容前者滤低频波动后者滤高频噪声。每个逻辑门附近再放一颗0.1μF效果更好。别小看这颗电容我遇到过好几次逻辑随机出错加了去耦电容就稳了。5.5 用温度计译码真值表做综合验证如果你想把与或非门用到一个实际场景里温度计译码是个很好的练手项目。温度计码是一种每个位代表一个温度阈值的编码方式比如4位温度计码0001表示温度超过第一个阈值0011表示超过第二个0111表示超过第三个1111表示超过第四个。用与门和或门可以把温度计码转换成二进制码这个过程会用到大量与或非门正好检验你搭的门是否可靠。具体做法把温度计码的每一位接到与门的不同输入组合上通过真值表推导出每个二进制位对应的逻辑表达式然后用你搭的与门、或门、非门实现。这个项目不大但能把逻辑门的级联、扇出、延迟累积等问题都暴露出来比单纯测单个门有价值得多。6. 从分立电路到CMOS集成电路的认知延伸6.1 版图与截面图里藏着什么分立搭完逻辑门后如果你对CMOS集成电路感兴趣可以进一步看版图和截面图。版图是芯片制造用的几何图形截面图是沿着某条线切开后的物理结构。在CMOS反相器的截面图里你能看到PMOS做在N阱里NMOS做在P型衬底上两者之间用场氧化层隔离。栅极下面是薄栅氧化层源漏区是重掺杂区。这些结构决定了管子的阈值电压、导通电阻和寄生电容。理解截面图的一个好处是你能明白为什么PMOS的导通电阻比NMOS大PMOS的导电沟道是空穴空穴迁移率大约只有电子的一半所以同样尺寸下PMOS的驱动能力弱。这也是为什么实际芯片里PMOS的沟道宽度通常做得比NMOS宽。6.2 寄生电容与米勒效应的影响MOS管不是理想开关栅极和沟道之间有电容栅极和漏极之间有电容这些寄生电容会影响开关速度。其中栅漏电容Cgd会在输入跳变时通过米勒效应等效放大让输入电容看起来比实际大得多。这就是米勒效应。在逻辑门里米勒效应会导致传播延迟增加尤其是在高频工作时。分立搭电路时你可以通过选Ciss小的管子来缓解集成电路设计里则通过优化版图减小Cgd。如果你用LTspice做CMOS反相器后仿真可以明显看到米勒平台输入跳变时输出先快速变化一段然后进入一个平台期最后再快速变化。这个平台就是米勒效应造成的。6.3 锁存器真值表与逻辑门的记忆能力与或非门是组合逻辑输出只取决于当前输入。如果把逻辑门的输出反馈到输入就能构成锁存器具有记忆能力。锁存器的真值表比组合逻辑复杂因为它有“保持”状态。用两个或非门交叉耦合可以构成基本RS锁存器这是时序逻辑的起点。我建议在搭完组合逻辑门后试着用两个或非门交叉耦合搭一个RS锁存器感受一下反馈带来的状态保持。注意交叉耦合时输入不能同时为高否则输出会进入不确定状态这是RS锁存器的禁忌条件。6.4 电平转换与驱动电路的注意事项实际系统中逻辑门经常需要和不同电压的电路接口这就涉及电平转换。MOS管可以做简单的电平转换用一颗NMOS栅极接固定偏置源极接低压侧信号漏极接高压侧并通过上拉电阻拉到高压。低压侧高电平时NMOS导通漏极被拉到低低压侧低电平时NMOS截止漏极被上拉到高。这样就实现了低压到高压的转换。但要注意电平转换电路的上升沿依赖上拉电阻和负载电容的RC时间常数速度不会太快。如果信号频率高还是要用专用的电平转换芯片。另外驱动大负载时逻辑门的输出电流有限需要加驱动级比如用MOS管搭推挽输出或者直接用驱动芯片。7. 我踩过的坑与实测经验汇总搭逻辑门这件事看电路图觉得简单真动手才知道细节多。我把自己踩过的坑列出来你对照着避一避。第一个坑是MOS管引脚认错。2N7002和BSS84的封装都是SOT-23引脚排列看起来一样但极性不同。2N7002是NMOS栅极在1脚源极在2脚漏极在3脚BSS84是PMOS栅极在1脚源极在2脚漏极在3脚但源漏的极性定义相反。我一开始没查手册凭感觉插结果PMOS的体二极管一直导通输出永远是高。后来养成习惯每颗管子插之前先查数据手册的引脚图再也没犯过这个错。第二个坑是面包板接触不良。面包板用久了簧片会失去弹性尤其是插过粗引脚元件后。我遇到过与非门某一项真值表不对查了半天电路连接没问题最后换了一个孔位就好了。所以调试时如果逻辑时对时错先怀疑接触问题用万用表蜂鸣档测通断。第三个坑是忽略去耦电容。有一次搭了一个三级级联的逻辑电路单独测每级都正常级联后输出乱跳。后来在每级电源脚并了0.1μF电容问题消失。CMOS电路对电源噪声很敏感去耦电容不是可选项是必选项。第四个坑是输入悬空。这个前面说过但值得再强调一次。MOS栅极悬空时输入电压不确定输出就随机。我现在的习惯是只要电路上有MOS管所有输入节点一律加下拉电阻需要高电平再短接绝不悬空。第五个坑是负载太重。逻辑门输出直接驱动LED时LED的工作电流可能超过MOS管的额定电流导致输出低电平偏高。我后来在LED前串了100Ω电阻既限流又不影响逻辑电平判断。如果要驱动更大负载一定要加缓冲级。实测下来用2N7002和BSS84搭的CMOS逻辑门在5V供电、1MHz输入频率下输出波形干净传播延迟在100ns以内完全能满足一般实验和低速逻辑验证的需求。如果你要跑更高频率建议换Ciss更小的管子或者直接上专用逻辑芯片。最后分享一个小技巧搭复杂逻辑电路时先用LTspice仿真一遍。LTspice里有现成的CMOS反相器模型你可以搭好电路跑瞬态分析看波形和真值表是否一致。仿真通过后再动手搭能省下大量排查时间。仿真时注意设置合理的上升下降时间太陡的边沿会掩盖米勒效应太缓的边沿又看不出真实延迟。一般设1ns到10ns比较接近实际。这个内容后续还可以这样扩展把搭好的逻辑门做成一个小型ALU的雏形用拨码开关输入操作数用LED显示结果再加一个时钟做同步。这样你就能从组合逻辑自然过渡到时序逻辑对整个数字系统的理解会更完整。