1、推挽输出和开漏输出
STM32 GPIO的输出模式有四种,推挽输出、开漏输出,以及复用推挽输出和复用开漏输出。暂时不考虑两种复用模式(引脚复用见下一篇帖子),讲一下推挽输出和开漏输出的关系。
根据stm32f10xxx参考手册,stm32的GPIO口的输出模式的硬件结构下图输出驱动器所示。输出驱动器中存在PMOS和NMOS两个MOS管,PMOS连接至高电平VDD,NMOS连接至低电平VSS。对应于两个MOS管的导通和关断,GPIO口存在以下四种可能状态:
(1)PMOS导通,NMOS关断:引脚输出高电平;
(2)PMOS关断,NMOS导通:引脚输出低电平;
(3)PMOS和NMOS全部关断:引脚处于高阻态;
(4)PMOS和NMOS全部导通:两个管子会形成通路,造成两个管子短路烧毁,因此这种状态是被禁止的。
对于推挽输出,同时具备高电平、低电平和高阻态三种工作状态。推挽输出同时具有较强的高电平和低电平驱动能力。
对于开漏输出,PMOS管常闭,只有低电平和高阻态两种工作状态。这时为了输出高电平,需要再外接一个上拉电阻。开漏输出只具有较强的低电平驱动能力,高电平驱动能力较弱,这一点后文再解释。
2、开漏输出+上拉电阻输出模式的线与特性
前边讲到,开漏输出需要外接上拉电阻以输出高电平。这种做法使得开漏输出具有线与特性,正是这个特性,使得开漏输出具有特殊的应用价值。
线与特性在通信协议中有十分重要的应用,比如用于I2C总线多主机模式下的总线仲裁。所谓线与特性,是指总线中只要有一个设备输出低电平(逻辑0),总线就呈现低电平状态(逻辑1)。在空闲状态时,总线由上拉电阻上拉至高电平。
3、开漏输出+上拉电阻输出模式的工作原理
首先明确,实际的元件和线路都会有寄生电容。因为电容模型可以简单地理解为两个相互靠近的导体,中间有介质填充,就能形成一个电容。
GPIO的输出电平正是由这个寄生电容充放电决定的,GPIO高低电平的交替过程就是由这个寄生电容反复充放电的交替过程。GPIO口由低电平跳变至高电平时(上升沿),VCC通过上拉电阻给电容充电,GPIO口电压逐渐上升至高电平,电容充电的速度决定了上升沿跳变的速度;GPIO口由高电平跳变至低电平时(下降沿),电容迅速放电,GPIO口迅速跳变为低电平。因此,电容充放电的速度会影响高低电平的转换速度,也就是上升沿和下降的跳变速度。
寄生电容和上拉电阻形成RC并联电路,时间常数为τ=RC。因此,上拉电阻越大,时间常数τ越大,电容充电的时间就越长,于是上升沿跳变的时间就越长。而对于下降沿,由于不存在上拉电阻,所以电阻很小,时间常数很小,电平迅速跳变。这也就是为什么开漏输出的低电平驱动能力较强,而高电平驱动能力较弱。
注:此图来自文末链接,并非原创。
4、上拉电阻的大小选择
由上文分析可知,上拉电阻影响GPIO口上升沿的跳变速度和高电平驱动能力,上拉电阻越大,GPIO的跳变速度和高电平驱动能力越差。因此,上拉电阻应该尽可能选择小一点。
但是上拉电阻也不能太小,上拉电阻如果太小,存在导致NMOS管被烧毁的风险。因为上拉电阻太小的话,VCC和NMOS(NMOS是接地的)会形成通路,产生大电流有可能会烧毁NMOS。也就是说,上拉电阻在这里有作为限流电阻的作用。
综合两方面分析,一般上拉电阻的取值这样考虑即可:
(1)对于GPIO口驱动能力有要求的负载,比如用于I2C通信等,一般选择小一点的电阻,1kΩ~10kΩ;
(2)对于对驱动能力要求不高的负载,电阻可以选择稍微大一点,10kΩ~100kΩ。
5、思考延伸:stm32的复位电路
smt32的复位电路结构其实和开漏输出和上拉电阻的工作模式很像。stm32的复位引脚也是低电平复位,也存在上拉电阻和电容之间的充放电过程:按下复位按键,引脚接地,电容放电至低电平;松开按键,电容通过上拉电阻接至VCC,电容充电,引脚变为高电平。
6、附录
本文部分内容参考自以下链接
推挽 开漏 高阻 这都是谁想出来的词??_哔哩哔哩_bilibili
单片机的上拉电阻 到底在拉什么?_哔哩哔哩_bilibili
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/hccgso1212/article/details/141094238
|