推挽输出和开漏输出

输出控制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、芯片甚至电源

  • 💥 不一定立即炸,但反复开关损伤寿命

②为什么开漏适合总线共享?因为多个设备只会主动输出低电平,不会冲突;不拉低就由电阻维持高电平。

posted @ 2025-07-27 22:03  叉叉星  阅读(331)  评论(0)    收藏  举报