ARTICLE DETAIL

资讯详情

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

用MOS管在面包板上亲手搭建7种基础逻辑门电路

用MOS管在面包板上亲手搭建7种基础逻辑门电路 如果你玩过单片机肯定写过类似if (button_pressed !lock_out)这种代码。可你有没有在写完的一瞬间想过芯片里那个“与门”、那个“非门”到底是用什么电路做出来的答案不是什么玄学就是把一堆MOS管按一定规则串起来、并起来。这篇文章我想带你从面包板开始亲手用MOS管搭建7种最基础逻辑门电路分别是非门、与非门、或非门、与门、或门、异或门、同或门每搭一个都给出完整真值表和电路连接方式顺带把背后“为什么这么接”的原理讲透。如果你是电子爱好者、刚学数电的学生或者玩了不少Arduino/STM32但一直想往底层再走一步这篇内容应该正好对胃口。读完你不仅能搭出这些门还能掌握一种“看真值表就能自己设计CMOS门电路”的思路以后看芯片手册里的内部框图和版图心里会踏实很多。1. 在面包板上复刻芯片内部为什么要用MOS管搭建逻辑门1.1 芯片内部其实就是海量MOS管的互连很多朋友第一次看到芯片内部照片或者版图会觉得那是一片密密麻麻的“马赛克”完全不知道从哪看起。实际上数字芯片的核心逻辑区域就是由不计其数的MOS管和金属连线组成的。一个基本的CMOS反相器在版图上就是一对PMOS和NMOS上下叠放然后无数个这样的小单元被金属线连来连去构成寄存器、加法器、存储器。所以如果你想真正理解芯片内部那些“格子”是什么意思最好的方式不是去背版图而是先在面包板上亲手搭一个MOS管级别的逻辑门。当你亲眼看到输入一个高电平、输出就变成低电平的那个瞬间芯片里反相器的原理对你来说就不再是抽象符号而是一个“亲眼见过、亲手接过的电路”。这是从“用芯片”到“懂芯片”转变的关键一步。1.2 7种基础逻辑门分别能干什么逻辑门是数字电路的最小功能单元。所有复杂的CPU、单片机底层都是靠这几类门组合出来的。这里先把7种门的逻辑表达式和用途列成一张表后面逐个拆解。名称逻辑表达式一句话用途非门 NOTY !A输入取反与非门 NANDY !(A·B)两个条件同时满足时不成立或非门 NORY !(AB)两个条件都不满足时成立与门 ANDY A·B两个条件同时满足时成立或门 ORY AB至少一个条件满足即成立异或门 XORY A⊕B两个输入不同时为1同或门 XNORY A⊙B两个输入相同时为1你可能注意到与门、或门、与非门、或非门这四者之间有天然联系与门就是在与非门后面加一级反相或门就是在或非门后面加一级反相。这个“反相关系”不是凑巧而是CMOS结构本身的特性后面第二部分会详细讲。1.3 搭建前需要准备的工具和元件既然是“从零开始”我按最省事的方案列一份清单。建议不要直接在洞洞板上焊先用面包板做验证改线方便也避免焊错后拆零件折腾。面包板一块830孔那种就够用NMOS管若干推荐2N7000TO-92直插封装便宜好买PMOS管若干推荐BS250P或ZVP3306A同样TO-92封装电阻10k欧姆若干输入下拉用、1k欧姆若干LED限流用LED两个颜色无所谓用来观察输出轻触开关若干或者直接拿杜邦线跳线模拟输入高/低电平稳压电源或者电池盒输出5V或3.3V直流电万用表一台测电压、通断可选Multisim、LTspice做仿真验证建议实物和仿真搭配着来先别急着买一堆管子。2N7000和BS250P这类小信号MOS管一对也就几毛钱各买10个足够折腾很久。注意不要拿IRF540这种功率MOS管去搭逻辑门因为功率管的栅极阈值电压高、栅极电容大用单片机IO口或者开关直接驱动很容易出现导通不彻底、波形畸变的问题。逻辑电路要的是快速开关的小管子不是大电流的功率管。2. 动手前的第一课NMOS、PMOS的导通条件与CMOS互补结构2.1 三个极与导通条件栅极就是水龙头把手MOS管三个极是栅极G、漏极D、源极S。和普通三极管不同MOS管是电压控制器件栅极和源极之间的电压Vgs控制漏源之间的导通状态。你可以把栅极想象成水龙头把手Vgs超过一定阈值水管就通Vgs不够水管就关死。对于增强型NMOSN沟道当Vgs大于阈值电压Vth比如2N7000的Vth大约0.6V到2.1V之间时漏源导通Vgs为0或者低于阈值管子截止。电流方向通常是D极流向S极。 对于增强型PMOSP沟道情况和NMOS相反它需要Vgs小于负的阈值电压也就是栅极电压要比源极电压低到一定程度才导通。PMOS的电流方向通常是S极流向D极也就是从电源端流向输出端。这里有无数新手第一课栽跟头的点PMOS的导通条件是“栅极电压比源极低”而不是“栅极电压比漏极低”。很多人在面包板上一接PMOS就发现输出电平不对十有八九就是源极和漏极接反然后管子要么不导通要么靠寄生体二极管工作。2.2 为什么CMOS结构必须是NMOS在下、PMOS在上CMOS叫“互补金属氧化物半导体”核心就是一对互补管上面PMOS负责把输出拉到高电平下面NMOS负责把输出拉到低电平。典型接法是PMOS接在VDD和输出Y之间NMOS接在输出Y和GND之间两个栅极并在一起接输入A。这样设计有两个原因。第一导通条件刚好互补输入为高电平时NMOS的Vgs为正导通PMOS的Vgs为0截止。输入为低电平时NMOS的Vgs为0截止PMOS的Vgs为负导通。第二这种结构在静态时不会形成VDD到GND的低阻通路因为任何时候上拉和下拉网络中至少有一路是截止的所以静态功耗几乎为零。后面的与非门、或非门也是一样的思想用PMOS管网络当上拉、NMOS管网络当下拉两个网络互补导通。这个“上P下N、互补导通”的框架是后面所有逻辑门的总纲。只要把这一点吃透后面搭任何门心里都有底。2.3 源漏是相对的体二极管是怎么回事另一个让人懵的点是MOS管的源极和漏极不是“物理上固定”的而是根据实际电压高低来决定的。对NMOS源极是电位较低的那一端对PMOS源极是电位较高的那一端。在逻辑门电路里因为连接关系固定比如NMOS一端接地、PMOS一端接VDD所以源漏也就相对固定了。MOS管内部还有一个寄生体二极管。NMOS的体二极管是从S指向DPMOS的体二极管是从D指向S。正常逻辑状态下这个二极管是反偏或者不起作用的但如果把D、S接反体二极管就可能正向导通输出就会被不明不白地钳位到某个电压上导致逻辑电平错误。排查的时候如果发现输出端电压“不高不低”先怀疑是不是管子接反了。3. 第1个门反相器NOT也是后面所有门的地基3.1 电路结构一个N管加一个P管就够了反相器是最简单的CMOS门也是后续所有门的基础。我先把连接方式写清楚你照着在面包板上接。电路连接如下VDD接5VGND接0V输入A输出YPMOS管源极S接VDD漏极D接输出Y栅极G接输入ANMOS管漏极D接输出Y源极S接GND栅极G接输入A也就是说PMOS和NMOS的栅极并在一起当输入两者的漏极并在一起当输出PMOS的源极接电源NMOS的源极接地。这个结构务必记牢因为后面搭与门、或门、与非门时输出端的“上P下N”结构主体不变变的只是输入管的数量和组织方式。3.2 高低电平下的工作过程当输入A为低电平0时NMOS栅极为0VVgs0截止PMOS栅极也是0V但因为PMOS源极接VDDVgs0-VDD-5V远小于负阈值电压PMOS导通。于是输出Y通过PMOS被上拉到VDD输出高电平1。当输入A为高电平1时NMOS栅极为5VVgs5V导通PMOS栅极也是5VVgs5V-5V0V截止。于是输出Y通过NMOS被拉到GND输出低电平0。真值表如下输入A输出Y0110这个电路静态时无论输入是高还是低VDD到GND之间都不会有直流通路所以不消耗什么电流。这也是CMOS门功耗低的核心原因。3.3 为什么芯片里的PMOS通常比NMOS宽如果你看过CMOS反相器的版图可能会注意到PMOS那一块往往比NMOS大一圈。原因在于半导体物理PMOS里导电的是空穴NMOS里导电的是电子空穴的迁移率大约是电子的三分之一到二分之一。为了让两者在同样的栅极电压下导通电阻接近、上升时间和下降时间接近芯片设计时通常会把PMOS做得比NMOS宽2到3倍。在面包板上用分立管子搭电路我们不用纠结宽长比知道这个背景就行。但以后你要是用Multisim做仿真可以试着把PMOS的W设成NMOS的两倍再对比一下输出波形上升沿和下降沿的差异会非常有感觉。3.4 一个反相器引出的重要概念CMOS天然反向这里要敲黑板CMOS电路天然是反向的。因为逻辑1是通过PMOS上拉网络“拉上去”逻辑0是通过NMOS下拉网络“拉下来”而这两个网络的导通条件天然互补所以实现“与”逻辑时直出只能得到“与非”实现“或”逻辑时直出只能得到“或非”。想要同相的与门、或门最简单的方式就是在输出端再加一级反相器。这个方法后面马上要用到。4. 串并联搭出NAND和NOR再补一级反相得到AND和OR4.1 与非门NAND下拉串联、上拉并联与非门逻辑是Y!(A·B)。用CMOS搭的时候思路是想让输出为0就得给NMOS网络创造一条到地的通路的“条件”。Y为0的条件是A、B都为1所以下拉网络要用两个NMOS串联在一起只有两个管子都导通输出才被拉到地。上拉网络则反过来只要A或B任意一个为0输出就要被拉到高电平所以PMOS要并联。完整接线描述如下VDD5VGND0V输出YPMOS1S接VDDD接YG接APMOS2S接VDDD接YG接BNMOS1D接YS接NMOS2的DG接ANMOS2D接NMOS1的SS接GNDG接B你把两个PMOS的漏极并在一起接输出两个NMOS串在输出和地之间一共四个管子。验证一下四种输入组合A1、B1时两个NMOS都导通两个PMOS都截止Y被拉到0其余三种组合至少有一个NMOS截止同时至少有一个PMOS导通Y被拉到1。真值表和74LS00这类与非门芯片完全一致输入A输入B输出Y001011101110这里有经验的点在于NMOS串联时中间节点悬空不要紧因为一旦有一个管子截止整条到地通路就被切断。面包板上连线最怕的是把两个NMOS的源漏顺序搞反其实串联顺序不影响逻辑功能但会影响走线顺不顺。4.2 或非门NOR下拉并联、上拉串联或非门逻辑是Y!(AB)。Y为0的条件是A、B中只要有一个为1所以下拉网络用两个NMOS并联任何一个导通都能把输出拉低。上拉网络则是对偶结构Y为1的条件是A、B都为0所以两个PMOS必须串联只有两个都导通输出才能被拉到VDD。接线方式如下PMOS1S接VDDD接PMOS2的SG接APMOS2S接PMOS1的DD接YG接BNMOS1D接YS接GNDG接ANMOS2D接YS接GNDG接B验证四种输入A0、B0时两个NMOS都截止两个PMOS串联导通Y1A1时对应的NMOS把Y拉到0同时串联PMOS中至少有一个截止Y0。真值表如下输入A输入B输出Y0010101001104.3 与门AND、或门ORNAND/NOR加一级反相器前面反复提到CMOS直出天然反向所以最省脑子、也最符合芯片设计习惯的做法是拿已经搭好的NAND或NOR门再在输出端接一个反相器。以与门为例逻辑就是YA·B等价于先算NAND的Y!(A·B)再反相得到Y!!(A·B)A·B。相当于用6个MOS管搭一个与门NAND用4个输出反相器用2个。或门的做法完全一样把NOR的输出再接一级NOT即可。可能有人会问能不能用更少的管子直接搭AND或OR当然可以标准CMOS库里就有复合门结构比如用复合门搭AND能省管子。但对面包板实践来说模块化拼装才是最容易验证的方法。你手里已经有独立的NOT、NAND、NOR三个模块把它们用杜邦线一前一后串起来这就是数字电路“组合逻辑”的开始。这种模块化思维比单纯背电路图重要得多。4.4 关键规律看到真值表能反推MOS管网络搭完这四个门你应该能总结出一个规律。看真值表找“输出为0”的条件用NMOS实现这个条件条件里的“与”就是NMOS串联“或”就是NMOS并联。然后PMOS网络不用费劲想直接按NMOS网络的对偶来NMOS串联处PMOS就并联NMOS并联处PMOS就串联。因为CMOS要求上拉网络和下拉网络互补这样才能保证输出永远被稳定拉到VDD或者GND而不是悬空。举个例子你想搭一个“三输入与非门”输出为0的条件是“A、B、C全部为1”那就把三个NMOS串联再把三个PMOS并联前后逻辑完全一致。以后再看到一个陌生的真值表可以先写出布尔表达式用同样的套路设计MOS管网络。这是这门手艺最值钱的地方。5. 稍微升级用传输门搭XOR和XNOR5.1 为什么XOR不能简单串并联搞定异或门逻辑是YA⊕B也就是两个输入不同时输出1。有人尝试直接用CMOS串并联网络搭会发现这个逻辑没想象中好处理。因为输出为0的条件是“A0且B0”或者“A1且B1”这两个条件一个需要输入为0的NMOS一个需要输入为1的NMOS直接搭下拉网络会需要同时拿到A的反相信号结构复杂还不符合最基本的串并联规律。所以实际工程里异或门很少直接用纯串并联网络实现而是用另一种基础结构传输门。传输门是CMOS电路里的“双向开关”很多复杂逻辑、锁存器、触发器里都会用到现在正好借XOR门把这个重要概念讲明白。5.2 传输门的结构和工作原理传输门由一个NMOS和一个PMOS并联组成。两个管子源极、漏极分别并在一起形成两个端口输入端和输出端。控制信号C接NMOS的栅极控制信号的反相信号!C接PMOS的栅极。当C1、!C0时NMOS和PMOS同时导通输入端信号可以直接传送到输出端双向都可以通。当C0、!C1时两个管子同时截止输入和输出完全隔离。这就像一个受控的开关C为1时开关闭合C为0时开关断开。关键细节传输门能双向传输信号而且无论是传0还是传1都能传得比较“干净”。只用单个NMOS传信号时高电平会有阈值损失传不出来完整的VDD只用单个PMOS传信号时低电平会有损失。一N一P并联正好互补把两边的问题都解决了。5.3 用两个传输门加反相器搭出XOR搭XOR的思路可以这样想当A0时输出等于输入B本身当A1时输出等于B的反相。所以我们需要一个由A控制的二选一选择器A0时把B送出去A1时把!B送出去。整个电路只需要一个反相器生成!A来作为互补控制一个反相器生成!B作为备选数据再加两个传输门做选择。结构如下反相器1输入A输出!A反相器2输入B输出!B传输门TG1NMOS栅极接!APMOS栅极接A输入接B输出接Y传输门TG2NMOS栅极接APMOS栅极接!A输入接!B输出接Y当A0时TG1导通、TG2截止YB当A1时TG1截止、TG2导通Y!B。把这个关系和真值表比对一下刚好就是异或门逻辑。输入A输入B输出Y000B0011B1101!B1110!B0这个方案一共用了8个MOS管。如果你用两个NAND门拼XOR反而需要16个管效率明显低。芯片里的异或门普遍用传输门或类似复合结构实现就是这个原因。5.4 XNOR只需要把两个传输门的输入对调同或门是异或门的反相逻辑为A⊙B!(A⊕B)两个输入相同时输出1。搭法非常巧妙把上一节电路里TG1的输入从B改成!B、TG2的输入从!B改成B即可。验证一下A0时TG1导通输出Y!BA1时TG2导通输出YB。对照真值表当A0、B0时Y1A0、B1时Y0A1、B0时Y0A1、B1时Y1正好是同或门。不加任何一个管子只改两根输入连线就实现了XOR到XNOR的切换。这就是逻辑电路有意思的地方同样的硬件框架通过改变信号的走向能得到完全不同但又互为镜像的逻辑功能。6. 面包板实战元件选型、接线与测量6.1 MOS管选型与引脚确认市面上常见的小信号NMOS2N7000和PMOSBS250P、ZVP3306A都有TO-92直插封装面包板友好。但这里要特别提醒不同品牌、不同批次的TO-92封装引脚排序并不完全一致。比如2N7000有的批次从左到右是S-D-G有的则是G-D-SBS250P也有多种引脚定义。网上很多教程直接画一个引脚图让你照着插结果你买到的管子引脚顺序对不上就白白浪费时间。最稳妥的方法是养成看数据手册的习惯或者在接线前用万用表确认引脚。用万用表二极管档测三个引脚两两之间的导通性因为MOS管体二极管的存在D-S之间会有一个类似二极管的单向导通特性而G极和任何其他引脚之间都是绝缘的。先找出栅极再通过二极管方向判断D、S和管子是N沟道还是P沟道。这一步虽然多花几分钟但能帮你避开大量“照着教程接却不工作”的坑。6.2 栅极悬空是大忌输入必须接确定电平MOS管的栅极输入阻抗极高正常工作时栅极几乎不取电流但这也带来一个麻烦如果输入悬空栅极上的电压会受周围电场、手指静电、杜邦线串扰影响处于一个不确定的中间电平。这时管子可能处于半导通状态输出既不是干净的高电平也不是干净的低电平逻辑乱跳。所以不管搭哪个门所有输入都必须被确定地接到VDD或GND上。最简单的做法是输入A和输入B各接一个10k欧姆下拉电阻到GND默认是低电平0然后用杜邦线把输入端和VDD短接就代表输入1断开就回复到0。如果用轻触开关一端接VDD、另一端接输入端同样要保留那个下拉电阻。不要试探“不接会不会也行”CMOS电路悬空输入是绝对禁忌。6.3 LED加限流电阻观察输出再用万用表复核电平输出观察最简单的方式是LED。LED正极接VDD负极串一个1k欧姆限流电阻然后接到电路输出Y。当Y为低电平时LED亮起Y为高电平时LED熄灭。这种接法适合逻辑门输出为0时点亮比较直观。需要注意的是LED串在VDD和输出之间时输出低电平会让LED电流从VDD流向Y这个电流会经过NMOS的导通沟道。2N7000在这种小电流下完全没有问题但如果同时带好几个LED或者蜂鸣器就要考虑输出端的驱动能力。看完LED再用万用表测一下Y和GND之间的电压确定高电平接近VDD、低电平接近0V而不是一个中间值。真值表逐项验证时按00、01、10、11四种组合依次输入对照LED状态和前面列出的真值表。如果你有示波器可以试试用单片机的GPIO输出一个1Hz左右的方波作为输入A用另一个GPIO输出不同的信号作为输入B观察输出波形。面包板寄生电容比较大波形边沿会变缓但只要逻辑电平正确就能直观看到门电路“输入输出之间的反相/同相”关系。7. 踩坑记录与进阶建议从逻辑门到芯片的一小步7.1 三个常见坑栅极悬空、PMOS接反、中间电平第一类坑是栅极悬空。表现为输入什么都没接输出却偶尔自己跳变或者用手靠近电路时LED亮度变化。这是因为CMOS栅极阻抗极高空间中的感应电荷就能改变栅极电位。解决办法就是前面提到的输入下拉/上拉电阻让输入永远有确定状态。第二类坑是PMOS的源漏接反。这种坑表现很隐蔽电路逻辑“大体正确”但输出高电平偏低或者某个输入组合下输出异常。原因在于PMOS源极应该是电位较高的一端接反后体二极管可能参与导电形成意外的漏电路径。排查时可以对照第2节的原则重新确认每个PMOS的S极是不是接VDD或者靠近VDD的方向。第三类坑是输出出现中间电平。比如理论应该输出5V实测只有2V多。这通常说明上拉网络和下拉网络同时有导通趋势两个管子都在半导通状态输出被分压了。最常见的原因是输入电压落在阈值附近比如用3.3V单片机IO去驱动一个阈值偏高一点的PMOSPMOS关不彻底。遇到这种情况先把输入电压拉满到VDD再测如果问题消失说明是电平兼容问题如果还有再去查管子是否接反。7.2 高频率输入下的米勒效应如果用一定频率的方波信号驱动这些门布线稍长就会发现输出波形边沿出现台阶甚至振铃。这里牵扯到MOS管的寄生电容特别是栅极和漏极之间的米勒电容。输入翻转时米勒电容会把这个跳变耦合到输出端形成尖峰。在纯手工面包板验证阶段工作频率很低米勒效应影响不明显但只要你想把这个电路往更高频率推比如接单片机时钟信号就一定要意识到面包板的寄生电容和MOS管栅极电容的影响。想看到米勒效应可以把输入方波频率调到几百kHz用示波器同时看输入和输出波形在输出跳变瞬间会看到输入波形被“啄”出一个台阶。这是理解MOS管开关特性的一个好实验也为以后学习栅极驱动电路设计打了基础。7.3 下一步可以玩的扩展方向搭完这7种门你已经拥有了数字电路的最小积木。接下来有几个很有价值的扩展方向我个人强烈推荐逐个试一遍。第一搭一个半加器。用XOR门算加法位用AND门算进位位两个门一组合就是最简单的运算器。第二用两个NAND门交叉反馈搭一个RS锁存器。你会第一次感受到“记忆”是怎么在无时钟电路里产生的。第三再往后可以搭D触发器那时你对时序逻辑的理解会完全上一个台阶。等这些都能不看教程搭出来之后你再看那些芯片内部框图、CMOS版图就不会觉得那是天书了。它们本质上就是“PMOS一丛、NMOS一丛、中间用金属线按真值表连起来”的东西只是数量多了几个数量级而已。我个人始终觉得理解数字电路最扎实的路径就是动手从反相器开始一个门一个门地搭一个真值表一个真值表地验证。这个过程会逼你把“导通条件”“上拉网络”“下拉网络”“传输门”这些词变成手指上的记忆。等你再把这一套东西和Verilog里的逻辑表达式对应起来硬件和代码之间的那层纸也就彻底捅破了。
返回列表