从硬件方面理解GPIO的开漏输出和推挽输出

最近在学STM32,看正点原子视频中对开漏输出和推挽输出的讲解视频时,发现原子哥对电路的讲解有一些错误,主要说关于MOS管的开关问题,查了一晚上资料,终于想明白了,特意发个文章分享一下。
这是STM32F4XX中文参考手册中GPIO口的结构图。输出部分的电路是在下方。

先简单介绍一下MOS管吧。MOS管其实是和三极管差不多的,有三个极:栅极(G),源极(S)和漏极(D)。三极管通过放大基极的电流变化来控制集电极的电流输出,而MOS管通过栅极和漏极的电压控制电流。MOS管是通过场效应实现这种控制的,实际没有电流通过,因此不会被烧坏,而且输入阻抗也比较大。

MOS管可以分为PMOS管和NMOS管。简单来说,当用作开关电路时,对于PMOS管,当Ug < Us并且电压差达到阈值的时候,PMOS管就是导通的,对于NMOS管,当Ug > Us并且电压差达到阈值的时候,NMOS管就是导通的

该电路图中,PMOS管源极接Vdd,应此当珊极给低电平时,Ug < Us,PMOS管导通,漏极与源极与Vdd接通,输出高电平,当栅极给高电平时,PMOS管关闭。NMOS管源极接地,应此当栅极给高电平时,Ug > Us,NMOS管导通,漏极与源极与Vss接通,输出低电平;当栅极给低电平时,NMOS管关闭。

需要注意的是这个输出控制器,内部电路也没有给,如果输入是1,输出不一定是1的,原子哥就是这里讲错了,导致后面的PMOS管,NMOS管的导通条件都对不上。

开漏输出时,PMOS管是开路的状态,也就是说只用到NMOS管。如果寄存器给到输入0,通过输出控制器,输出到NMOS管的栅极为1,此时NMOS管导通,IO口输出为0;如果寄存器给到输入1,通过输出控制器,输出到NMOS管的栅极为0,此时NMOS管关闭,IO口的输出取决于接上拉电阻还是下拉电阻。开漏输出以MOS管的漏极为输出,所以叫开漏输出。

推挽输出时,PMOS管和NMOS管都会用到。如果寄存器给到输入0,通过输出控制器,输出到PMOS管的栅极为1,输出到NMOS管的栅极为1,此时PMOS管关闭,NMOS管导通,IO口输出为0;如果寄存器给到输入1,通过输出控制器,输出到PMOS管的栅极为0,输出到NMOS管为0,此时PMOS管导通,NMOS管关闭,IO口输出为1。

关于推挽输出,个人是这样理解的(看看就行,大概率是不对的…)可以看到,两个MOS管只有一个是导通的,另一个则是高阻抗的关闭状态。当PMOS管导通,NMOS管关闭的时候是这样的:相当于"推"
在这里插入图片描述
当NMOS管导通,PMOS管关闭的时候,则是这样的,相当于“挽”:
在这里插入图片描述
这里插一个眼,是我看到一个博主通过三极管来解释推挽和开漏的,至于MOS管嘛…我这个小白也不是很懂。

https://blog.csdn.net/lostand/article/details/70052918

可以看到推挽输出的时候,寄存器设为0就输出0,寄存器设为1就输出1,很适合做数字的输入输出,一般我用推挽输出用的也比较多开漏输出寄存器设为0是输出0,寄存器设为1的话,输出不一定是1,还要取决于外面接了上拉电阻还是下拉电阻,相当于是一般只能输出低电平吧。开漏输出没怎么用过,不过据说驱动能力比较强,可能是因为高电平时通过外部的上拉电阻实现的,拉电流可能相对内部驱动的电流会大一点?

总结一下就是这个表:

输出类型 寄存器输入 PMOS管栅极输入 NMOS管栅极输入 PMOS管状态 NMOS管状态 最终输出
开漏输出 0 开路 1 未使用 导通 0
开漏输出 1 开路 0 未使用 高阻抗 1
推挽输出 0 1 1 高阻抗 导通 0
推挽输出 1 0 0 导通 高阻抗 1

翘了fb课来写的这篇博文,码字不易,转载请注明出处!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章