目录
0- 概述
在嵌入式CPU中,GPIO口都是可以设置成多种模式的,比如STM32的芯片 GPIO端口可以由软件配置成多种模式:
对于 输入模式和复用功能模式,都是比较容易理解的,但是 输出 推免输出和开漏输出,理解起来确实有些难度, 如果不理解这两种模式,那么对于这两种模式的应用场景,也是难以很好的理解的,接下来,我们就以STM32的 GPIO口的 结构为例,从电路的角度,分析 一下 推免和开漏 两种输出的原理,先看下STM32 的GPIO 输出部分结构,如下图:
接下来,我们在仿真软件里,分析一下 输出 电路, 仿真电路如下:
这个电路由 一个P-MOS管和一个N-MOS管组成,关于MOS管的 应用 原理,可以参考之前的文章:
STM32中,对于推免和开漏输出模式的切换,是通过这两个MOS管的控制来实现的。
1、推挽输出电路分析
在推挽输出模式下,P-MOS管和N-MOS管同时工作,通过对两个MOS管的导通控制,实现控制输出高低电平,
1.1 推挽输出 高电平 1
此时P-MOS管导通,N-MOS管截止,输出高电平。
1.2 推挽输出 低电平 0
此时P-MOS管截止,N-MOS管导通,输出低电平 0.
1.3 推挽输出 小结
在 推挽输出模式下,GPIO口是可以直接输出 高低电平的,不需要额外的 上来或下拉 辅助电路。这里 说一下,很多文章提到 推挽输出的 驱动能力比较大,这个 其实完全没必要,这个 驱动能力只是相对的,真正在做硬件设计的时候,顶多也就是驱动个 LED灯, 不要尝试着驱动功率稍微大一点的 负载。
2 开漏输出 电路分析
在开漏输出模式下,P-MOS管是不工作的, 只有N-MOS 管工作。
2.1 开漏输出 高电平1
P-MOS管截止,N-MOS管也截止,输出的高电平是外部上拉电源的电平。
2.2 开漏输出 低电平 0
P-MOS管截止,N-MOS管导通,输出低电平。
2.3 开漏输出 小结
开漏输出模式下,必须要有外部上拉电阻,如果没有外部上拉电源,输出的信号只有 低电平,没有高电平。
3. 推挽输出应用 场景
由于推挽输出模式可以不需要外部辅助电路就可以直接输出高低电平,所以可以用于直接控制数字电路,比如我们可以通过CPU的IO口,直接控制一些数字芯片,ADC、DAC、触发器、锁存器、三极管控制引脚等等。但是要特别注意,推挽输出的电平是CPU的逻辑电平,所以电压值是固定的。
4、开漏输出的应用场景
开漏输出必须要经过外部辅助电路,才能输出相应的高低电平,可能会有人疑问,这样 岂不是有点麻烦?其实不尽然,因为CPU的设计要考虑兼容性,推免输出虽然不需要额外的辅助电路,但是输出的电平是固定的,开漏输出模式下,通过外部 上来电源实现 高低电平,这个外部电源不需要跟CPU的电平完全一致,比如STM32的CPU电源是3.3V,开漏模式下,完全可以使用上拉5V,这样的话,就可以实现 5V的电平 了,对于一些外围器件,如果外围器件的电平与CPU不同,只需要上拉对应的电平电源就可以了。所以开漏的应用场景会更多,更杂,我们常见的 I2C总线就是用开漏输出。除了这些场景,还有:
① 利用外部电路的驱动能力,减少IC内部的驱动。当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up ,MOSFET到GND。IC内部仅需很小的栅极驱动电流。
② 一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。比如加上上拉电阻就可以提供TTL/CMOS电平输出(VCC=3.3V、5V)等。(上拉电阻的阻值决定了逻辑电平转换的沿的速度 。阻值越大,速度越低功耗越小,所以负载电阻的选择要兼顾功耗和速度。)
③ 提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。
④ 可以将多个开漏输出的Pin,连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系。当多个引脚任意一个变低后,开漏线上的逻辑就为0了。这也是I2C,SMBus等总线判断总线占用状态的原理。
5、小结
为了便于记忆,我们可以这么理解这两种模式,推挽输出就是CPU 能够 直接 推动输出 电平。开漏输出就是 断开 漏极,需要外接辅助上拉电阻。
转载:https://blog.csdn.net/u012351051/article/details/104409272