推挽输出与开漏输出
文章目录
- 推挽输出与开漏输出
- 前言
- 一、推挽输出
- 二、开漏输出
- 总结
前言
在使用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才会是高电平,处于一种“线与”状态
总结
推挽输出:真正的高电平有驱动能力,无需上拉电阻,电平跳转快,不可“线与”,不可电平转换
开漏输出:虚假的高电平无驱动能力,需要上拉电阻,电平跳转慢,可以“线与”,可以电平转换