推挽输出与开漏输出

推挽输出与开漏输出



前言

在使用GPIO口时,会遇到两种配置,一种叫推挽输出,一种叫开漏输出,今天就简聊一聊这两种模式的差异和选择。


一、推挽输出

如图所示,以STM32的GPIO输出端口结构为例,开漏与推挽电路主要由一个PMOS和一个NMOS组成,两个MOS相互配合实现推挽电路。
如下图:当Q1导通,Q2截至时,电流经红色路径,将右侧MOS导通,扩音器运作。整个过程电流由内向外,类似将电流推出去。
在这里插入图片描述
如图:当Q2导通,Q1截至时,电流经红色路径,右侧MOS截至,扩音器停止。整个过程通过GND将外部电流拉进来,类似将电流挽回去。
在这里插入图片描述

如上所述,两个过程一推一挽,两种结果,描述了GPIO输出高低电平时电流的一个动作,就是常说推挽。
特点:推挽输出的最大特点是可以真正能真正的输出高电平和低电平,在两种电平下都具有驱动能力

二、开漏输出

简单总结一下Q1和Q2对于GPIO输出状态的影响,其真值表如表:

Q1状态 Q2状态 GPIO的输出状态
导通 导通 VCC直接对地短路,烧毁MOS管,错误状态
导通 关断 输出接VCC,输出高电平
关断 导通 输出接地,输出低电平
关断 关断 输出浮空,相对与其它点的电阻无穷大,呈现高阻态

在第3种和第4种情况下Q1均为关断状态,此时可将Q1看成是不存在的,此时Q2的漏极啥也没接,处于浮空状态,我们称之为开漏。
如果此时在右侧给他接一个芯片的EN脚,假设EN脚为低电平失能高电平使能,但是此时的漏极只能是高阻态和低电平,没有对芯片EN使能和失能的功能。
在这里插入图片描述
那么怎么才能使用漏极拥有失能和失能的能力呢?
如果在其中接入一个上拉电阻,这是的情况会如何

在这里插入图片描述
如果Q1导通,GND接入,电流通过红色路径到地,EN等效为GND此时也处于低电平,
如果Q1断开,GND断开,电流通过绿色路径到EN,EN被上拉此时处于高电平状态,
在这里插入图片描述

那么此时就有聪明的小伙伴就要问了,推挽电路可以输出高低电平,直接使用推挽电路直接输出高低电平控制EN,岂不快哉?
我觉得是可以的,但有一个问题就是,GPIO输出的电压基本是恒定的,而不同芯片的EN电压又是不一样的,比如常见的STM32的GPIO输出一般是3.3v,有的MCU的EN使能是5v,有的又是1v。不可能针对每个芯片再转一遍电压吧!这就体现了开漏电路的重要性了,只需根据需要的电压配个上拉电阻就OK了!

特点:开漏输出最主要的特性就是高电平没有驱动能力,需要借助外部上拉电阻才能真正输出高电平,其电平跳转速度也上拉电阻决定

在使用多个GPIO控制EN的话,如果使用推挽电路会出现这样一种情况,如图
当Q1打开,Q2关闭,那么Vout1输出高电平,
当Q3关闭,Q4打开,那么Vout2输出低电平
这种情况下,电路等效为真值表的第一种情况,MOS,VCC通过MOS直接接地MOS烧毁,不能进行“线与”

在这里插入图片描述
如果使用开漏,模式就不会出现这样一种情况,如图
只有当Vout1和Vout2都输出高电平时,EN才会是高电平,处于一种“线与”状态

在这里插入图片描述


总结

推挽输出:真正的高电平有驱动能力,无需上拉电阻,电平跳转快,不可“线与”,不可电平转换

开漏输出:虚假的高电平无驱动能力,需要上拉电阻,电平跳转慢,可以“线与”,可以电平转换

相关推荐

  1. Golang 输入输出

    2024-04-01 00:06:08       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-01 00:06:08       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-01 00:06:08       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-01 00:06:08       82 阅读
  4. Python语言-面向对象

    2024-04-01 00:06:08       91 阅读

热门阅读

  1. 每日一题 --- 四数之和[力扣][Go]

    2024-04-01 00:06:08       45 阅读
  2. 解锁背包问题:C++实现指南

    2024-04-01 00:06:08       48 阅读
  3. 每日一题 第五十七期 洛谷 统计子矩阵

    2024-04-01 00:06:08       39 阅读
  4. macbook pro 2018 T2 芯片安装 archlinux 双系统

    2024-04-01 00:06:08       61 阅读
  5. 带头循环双向链表的实现

    2024-04-01 00:06:08       46 阅读
  6. 《堕落的审判》吵架台词

    2024-04-01 00:06:08       29 阅读
  7. 算法设计-杨辉三角

    2024-04-01 00:06:08       40 阅读
  8. 记 SpringBoot 使用@RequestBody 接收不到参数

    2024-04-01 00:06:08       34 阅读