推挽输出和开漏输出
输出控制mos管导通,实际输出就是VCC或者GND
推挽输出(Push-pull)
1、原理
推挽输出是一种主动上拉 & 主动下拉的输出结构。内部由两个晶体管组成:
+Vcc
│
[PMOS]
│
输出 ───┼───►
│
[NMOS]
│
GND
-
输出高电平:上面的晶体管导通(PMOS),下拉管关闭 → 输出连接 Vcc
-
输出低电平:下面的晶体管导通(NMOS),上拉管关闭 → 输出连接 GND
2、特点
| 特性 | 描述 |
|---|---|
| 主动输出高、低电平 | 能主动驱动负载为高或低 |
| 输出速度快 | 上下电平转换迅速 |
| 适合高速场合 | 如 SPI、UART、PWM |
| 不能多个IO并联 | 否则有电平冲突、短路风险 |
开漏输出(Open-drain / Open-collector)
1、原理开漏输出只有一个 下拉晶体管(NMOS),不负责输出高电平。输出高电平需外部上拉电阻提供。
Vcc
│
[上拉电阻]← 1kΩ ~ 10kΩ
│
输出 ──┼───►
│
[NMOS]
│
GND
-
输出低电平:下拉管导通 → 输出接地(逻辑 0)
-
输出高电平:下拉管关闭 → 输出被上拉电阻拉到高电平(逻辑 1)
"开漏" = "漏极悬空"(MOSFET 的 drain 悬空)
当 NMOS 拉低时:R 限流,电流 = Vcc / R(如 5V / 5kΩ = 1mA)
当 NMOS 关闭时:电阻把输出电压拉高(约为 Vcc)
电阻值决定了:
上升沿速度(RC 时间常数)
电流消耗
驱动能力
2、特点
| 特性 | 描述 |
|---|---|
| 只能主动输出低电平 | 高电平由外部上拉电阻决定 |
| 可多个输出口并联(线与) | 多设备共享一根线不会冲突 |
| 驱动能力受限 | 输出高电平速度慢,受上拉电阻影响 |
| 适合低速或多主通信场合 | 如 I²C 总线、GPIO 外部中断、状态输出等 |
3、应用场景举例
| 应用场景 | 推荐方式 | 原因 |
|---|---|---|
| SPI / UART / PWM | 推挽 | 高速通信,需要快速上下跳变 |
| I²C 通信(SCL/SDA) | 开漏 | 多主设备,线与结构防冲突 |
| 中断线(多个设备中断) | 开漏 | 多源共享中断线,线与输出 |
| LED 控制(低电平点亮) | 推挽 or 开漏 | 推挽提供足够电流,开漏也可控低 |
| Open-drain 输出状态标志(如 READY) | 开漏 | 控制器能读取多个从设备状态 |
| 电平兼容(不同 Vcc 之间通信) | 开漏 + 上拉电阻到目标电压 | 实现跨电压通信,如 3.3V ↔ 5V |
问题点
①开漏输出可以不加上拉电阻吗?不行
可以把开漏输出想象成下面的结构:
Vcc
│
输出点───●───► 接到下级输入
│
[NMOS]
│
GND
这等同于:你在 VCC 和地之间直接短接一个开关。
如果 NMOS 导通(输出逻辑 0):
- 开漏引脚直接被内部 MOS 管拉向 GND
- 外部你又硬连 Vcc
→ 短路
结果:
🔥 电源瞬间短路
⚡ IO 电流超标 → 烧坏 IO、芯片甚至电源
💥 不一定立即炸,但反复开关损伤寿命
②为什么开漏适合总线共享?因为多个设备只会主动输出低电平,不会冲突;不拉低就由电阻维持高电平。

浙公网安备 33010602011771号