系统提示 // 建议使用电脑访问,桌面模式效果最佳

电气隔离与 GPIO 驱动:MOS管 三极管 继电器 光耦

芯片的引脚只能给出几毫安,而灯带或电机要的是安培。这篇讲三极管、继电器和光耦各自怎么让一个小信号去开关大电流。

年份

2026年8月

类型

note

分类

电子学

工具

电路设计 · 功率电子学

#电子学#MOSFET#电路保护#光耦隔离#功率驱动

MOSFET开关

看完这篇你会明白:芯片的引脚为什么没法自己开关一盏灯。答案是一小块额外电路,它让微弱的信号能控制大东西。

单片机(跑你项目的那块小电脑)的引脚只会说“高”或“低”。LED 灯板、电机、电磁阀要的是完全不同的电压,还有几十倍的电流。夹在中间做翻译的那部分电路,叫驱动电路。

GPIO 的本质

GPIO 是“通用输入输出”的缩写,指芯片上一个既能当输入、也能当输出的引脚。当输入就用来读外面的电压,当输出就往外送高或低电平。高电平大约 3.3V,低电平大约 0V。

要注意的是电流。GPIO 送的是信号,不是电力,大概只能给出 20mA。

MOSFET 本质:电压控制型电子开关

MOSFET 是一个有三个引脚、没有活动部件的开关。你不用给它灌电流,只要在其中一个引脚上加电压,开关就通了。这个引脚叫栅极,也就是 Gate。

单片机之所以能直接驱动它,就是因为只需要给电压。电流由另外一路电源提供:从漏极 Drain 进来,穿过负载,从源极 Source 出去。

所以控制信号和负载电流走的是两条路,它们在源极汇合,而源极和单片机共用同一个地。这不等于隔离。正因为共地,3.3V 的信号才能控制这个开关。真正的隔离要靠光耦或者继电器,后面会讲。

三个引脚分别做什么

引脚 名称 作用
G Gate 控制输入,几乎无持续电流
D Drain 接负载,承载工作电流
S Source 电流返回端(NMOS通常接GND)

记住这三个名字就够了:你控制的是栅极,干活的是漏极到源极这条通路。

为什么 MCU 不能直接驱动 LED?

12V 的灯板要 24W,也就是 2A。而 GPIO 只有 3.3V 下的 20mA,电流差一百倍,电压也不对。

把灯板直接接到引脚上,引脚就撑不住电平,电压会被拉垮,芯片发热。所以要把活分开干:MCU 决定什么时候开关,另一路电源出电流,MOSFET 负责把两边接起来。

NMOS 与 PMOS

MOSFET 有两种极性,这两个名字只是在说开关放在电路的哪一侧。

NMOS:开关放在地这一侧

12V
 │
LED
 │
NMOS
 │
GND

NMOS 接在负载和地之间。它的栅极以地为参考,正好和单片机用的是同一个地,所以 3.3V 的引脚就能直接把它打开。

PMOS:开关放在电源这一侧

12V
 │
PMOS
 │
LED
 │
GND

PMOS 接在电源和负载之间。要打开它,栅极得被拉到比电源更低,也就是要升到接近 12V,3.3V 的引脚够不着。所以我一开始不推荐用它。

PWM 调光

PWM 是“脉冲宽度调制”的缩写。它不改变电压,而是让负载飞快地全开、全关,再改变每次“开”持续多久。平均功率跟着这个比例走,灯看起来就亮一些或者暗一些。

切换速度必须快过眼睛的反应。每秒大约 200 次以上,LED 看上去就是稳定发光的,Arduino 默认的每秒 490 次远在这之上。

太慢会看到闪烁,或者听到电机啸叫。太快则 MOSFET 每个周期有一段时间停在半开状态,这些会变成热。

为什么需要续流二极管?

这一节说的是任何带线圈的东西:电机、风扇、电磁阀、继电器线圈。

线圈通电时会把能量存在磁场里。MOSFET 一关断,磁场就塌缩,反着推出一记电压尖峰,可以是电源电压的好几倍,足以打坏 MOSFET。

办法是在线圈两端并一颗二极管。二极管是电流的单向阀。平时它挡住,只在尖峰来时导通。储存的能量就顺着这条回路放掉。

LED 不是线圈,所以不需要这一颗。

MOS vs 三极管(NPN/PNP)

项目 BJT(NPN/PNP) MOSFET
控制方式 电流控制 电压控制
输入阻抗 低 极高
GPIO持续供电 需要 几乎不需要
发热 较高 较低
高频PWM 一般 非常适合
大电流 一般 优秀

三极管是更老的一种晶体管,它靠电流开关,不靠电压。只要你想让它保持导通,就得一直往基极灌电流,这部分电流最后变成热。NPN 和 PNP 就是它的两种极性。

MOSFET 靠电压开关。栅极充好电之后几乎不吃电流,所以单片机几乎不花代价就能让它一直开着。三极管在模拟电路里还有位置,那里电流特性正是它要的东西。

继电器 vs MOS

MOS 继电器
无机械触点 有机械触点
可PWM 不可PWM
高速 较慢
寿命长 有机械寿命
静音 有吸合声
适合DC AC/DC均可

继电器不是半导体,而是一个机械开关:一小段线圈把一个金属触点吸合。所以它既能开关直流也能开关交流,而且断开时中间是真正的物理间隙,电流漏不过去。

要开关市电交流、要那个物理间隙、或者两侧必须完全分开时,我用继电器。要开关 LED、电机、风扇这类直流负载,并且想要快速、安静、能 PWM 时,我用 MOSFET。

光耦:需要真正的电气隔离时用

光耦用光来传信号。里面一颗小 LED 和一颗光敏元件隔空相对,两侧之间没有任何导线相连。

这就是它在市电旁边安全的原因。3.3V 的单片机可以开关市电设备,而市电那一侧没有导电通路能回到单片机。两侧也就不会共用一个地。

常见的链路是:MCU 引脚、限流电阻、光耦、驱动级,最后是市电负载。

工业产品应用:分析框架

拆开一个产品、想看懂它的功率部分时,我按这个顺序看:

  1. 电源从哪里进入?
  2. 哪些是大功率负载?
  3. 谁负责驱动(MOS/继电器)?
  4. MCU 如何控制(GPIO/PWM)?
  5. 有没有保护(续流二极管、电压钳位、保险丝、光耦)?

LED 灯、RGB 灯带、风扇、水泵,基本都是这个套路。

设计注意事项:我踩过的坑

选一个在 3.3V 下就能完全导通的 MOSFET。 很多管子是按 10V 控制信号设计的,3.3V 下只开一半。半开的开关就相当于一个电阻,而电阻上过 2A 会发烫。你要的那种,市面上叫“逻辑电平”。

不要让栅极悬空。 在栅极和地之间接一颗 10kΩ 电阻。否则单片机不驱动它的时候,栅极电压是不确定的,开关可能半开,白白发热。

在栅极前面串一颗小电阻,10~100Ω。 栅极有点像一个小电容,每次翻转都会涌一股电流,这颗电阻把那股电流挡在引脚之外。

感性负载必须加续流二极管。 见上面那节,不能省。

把地接在一起。 单片机的地和电源的地必须直接相连。没有共同参考点,栅极电压就无从谈起,开关根本不会通。这是新手最容易栽的地方。真需要两侧完全分开,就用光耦。

下面这些等你熟练之后再看:

  • 选 MOSFET 主要是比数据手册上的四个数:栅极阈值电压、导通电阻、最大电流、最大耐压。
  • 续流二极管,小继电器线圈用 1N4148,电流大就用 SS14。

MOSFET示意图1 MOSFET示意图2