GPIO开漏输出和推挽输出有什么区别

摘要:推挽输出和开漏输出是两种常见的数字输出模式。推挽输出由互补MOSFET组成,具有高速切换和强驱动能力,适用于SPI、PWM等应用,但不能并联使用。开漏输出仅包含下拉MOSFET,需外接上拉电阻,支持电平转换和多机"线与"连接,适用于I2C总线等场景。推挽输出在高低电平切换时功耗低,而开漏输出在高电平时存在上拉电阻功耗。两种模式各有特点:推挽适合高速驱动应用,开漏则更适合需要电平兼容和多机通信的场合。

目录

[一. 推挽输出 (Push-Pull)](#一. 推挽输出 (Push-Pull))

(1)工作原理:

(2)优点:

(3)缺点:

(4)输出电压:

[二. 开漏输出 (Open-Drain)](#二. 开漏输出 (Open-Drain))

三、开漏和推挽对比图

四、开漏和推挽输出分别应用场景

[1. 推挽输出 (Push-Pull) 的典型应用](#1. 推挽输出 (Push-Pull) 的典型应用)

[2. 开漏输出 (Open-Drain) 的典型应用](#2. 开漏输出 (Open-Drain) 的典型应用)


一. 推挽输出 (Push-Pull)

它的输出级由两个互补的晶体管(通常是 MOSFET)组成,一个连接到电源(VCC),一个连接到地(GND)。

(1)工作原理:

当输出高电平时,上面的管子导通,把电压"推"向高位;当输出低电平时,下面的管子导通,把电流"拉"向地。

(2)优点:

a.速度快: 电平切换迅速。

b.驱动能力强: 可以直接驱动 LED 等负载。

(3)缺点:

不可并联。 如果两个推挽输出接在一起,一个输出高,一个输出低,会造成电源短路(烧毁芯片)。

(4)输出电压

只有3V3,没办法输出5V

如果 I2C 使用推挽输出,不仅会导致通信失败,还极有可能物理损坏MCU(烧毁引脚)。

假设主设备想要发送"高电平(1)",其内部的上管导通,将 SDA 拉向 VCC;与此同时,从设备想要应答"低电平(0)",其内部的下管导通,将 SDA 拉向 GND。

后果: 此时 VCC 和 GND 通过两个 MOSFET 直接连通。由于 MOSFET 的导通电阻极小,电路中会产生巨大的电流。


二. 开漏输出 (Open-Drain)

在这种模式下,内部晶体管只负责"接地"。

  • 工作原理: 内部只有一个连接到 GND 的管子。当输出"低"时,管子闭合,输出接地;当输出"高"时,管子断开,输出端处于高阻态(悬空)

  • 核心要求: 必须外接一个上拉电阻连接到电源,才能输出高电平。

  • 优点: 电平转换: 可以通过调节上拉电阻的电压,实现 3.3V 芯片驱动 5V 设备。

    线与(Wired-AND): 多个开漏引脚可以接在一起。只要有一个引脚输出低,整个线路就是低。这在 I2C 总线中非常关键。

  • 缺点: * 上升沿慢: 依靠电阻充电,电平由低变高的速度比推挽慢。

  • 输出电压:可以输出3V3和5V

开漏输出没法靠自己(推电流)点亮 LED,但它却是最适合"吸电流"点亮 LED 的模式。

  • 推挽模式下: 引脚输出高电平时,内部 MOSFET 把电流"推"给 LED,LED 亮。

  • 开漏模式下: 引脚输出高电平时,内部是**断开(高阻态)**的,没有任何电流流出

原理图

三、开漏和推挽对比图

特性 推挽输出 (Push-Pull) 开漏输出 (Open-Drain)
高电平驱动 内部 MOSFET 直接驱动 依靠外部上拉电阻
输出速度 较慢(受限于上拉电阻)
功耗 低电平切换时功耗低 高电平时在上拉电阻上有功耗
多机连接 不允许(会短路) 允许(线与逻辑)
典型应用 SPI 总线、PWM、通用 LED 驱动 I2C 总线、电平转换、多机通信

四、开漏和推挽输出分别应用场景

1. 推挽输出 (Push-Pull) 的典型应用

推挽输出的主要特点是速度快、波形方正、驱动能力强

  • 高速数据总线(SPI, UART): SPI 通信频率通常很高(可达几十 MHz)。推挽输出能让电平在极短时间内完成 0 到 1 的跳变,保证了信号的边缘非常锐利。

  • PWM 驱动(电机、亮度调节): 在控制电机或 LED 调光时,需要高频切换。推挽输出能够快速充放电,减少在开关切换瞬间的功耗(因为切换过程越慢,发热越多)。

  • 推喇叭/蜂鸣器: 直接驱动音频元件需要电流在正负方向上都有较好的表现,推挽输出结构天然适合这种推拉动作。


2. 开漏输出 (Open-Drain) 的典型应用

开漏输出的核心优势在于"电平兼容""多机共连"**。

  • **多机通信与仲裁(I2C, SMBus):**利用"线与"特性,多个设备挂在同一根线上。如果两个设备同时说话,谁输出"0"谁就占主导,系统不会损坏。

  • 电平转换(Level Shifting): 当你有一个 3.3V 的 MCU,但需要向 5V 的传感器发送信号时,使用开漏输出,外接一个上拉到 5V 的电阻。这样高电平就是 5V,低电平是 0V,完美兼容。

  • 热插拔与中断请求(IRQ): 许多外设的中断引脚(Interrupt Pin)是开漏的。多个外设的中断线可以全部连在一起,通过一个上拉电阻接到 MCU。只要有一个外设发出中断(拉低总线),MCU 就能感知到。

  • 电池管理与复位电路(Reset): 许多芯片的复位引脚(RESET)是开漏的,这样多个复位源(按键、看门狗、上电检测)都能独立地拉低复位线,而互不干扰。

相关推荐
17(无规则自律)17 分钟前
【Linux驱动实战】:标准的按键控制LED驱动写法
linux·驱动开发·嵌入式硬件
森利威尔电子-2 小时前
森利威尔SL3180替换LM5013 100V降压3.3V 5V 12V恒压芯片
单片机·嵌入式硬件·集成电路·芯片·电源芯片
Net_Walke2 小时前
ESP32开发:5分钟之内添加ST7735驱动构建LVGL模板工程
单片机·物联网·iot
qq_401700414 小时前
5V防过压电路
单片机·硬件
小昭在路上……5 小时前
AHB和APB总线概念
单片机·嵌入式硬件
学嵌入式的小杨同学6 小时前
STM32 进阶封神之路(三十):IIC 通信深度实战 —— 软件模拟 IIC + 光照传感器(BH1750)全解析(底层时序 + 代码落地)
stm32·单片机·嵌入式硬件·mcu·硬件架构·硬件工程·智能硬件
Zarek枫煜6 小时前
zig与C3的算法 -- 桶排序
c语言·嵌入式硬件·算法
我是一个对称矩阵8 小时前
Ubuntu安装WIFI适配器驱动
stm32·单片机·ubuntu
光子物联单片机8 小时前
STM32传感器模块编程实践(十九) 光子物联北斗GPS定位模块简介及驱动源码
stm32·单片机·嵌入式硬件·mcu
可乐鸡翅好好吃8 小时前
协议栈烧录问题
单片机·嵌入式硬件