从硬件方面理解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
推挽输出011高阻抗导通0
推挽输出100导通高阻抗1

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

  • 24
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值