以STM32参考手册中的GPIO输出配置图为例:

看到输出驱动器虚线框中的内容,输出驱动器中的P-MOS和N-MOS两个MOS管就是实现推挽输出和开漏输出的关键。推挽输出模式下,P-MOS和N-MOS都正常工作,开漏输出模式下,只有下面的N-MOS工作,上面的P-MOS不工作。
注意:GPIO在输出模式下没有上拉下拉配置。

推挽输出(Push-Pull Output)

推挽输出的结构是由两个三极管或者MOS管受到互补信号的控制,两个管子始终保持一个处于截止,另一个处于导通的状态。电路工作时,两只对称的开关管每次只有一个导通,所以导通损耗小、效率高、既提高电路的负载能力,又提高开关速度。如图1所示:

图1 推挽输出结构

推挽输出的最大特点是可以真正能真正的输出高电平和低电平,在两种电平下都具有驱动能力。
补充说明:所谓的驱动能力,就是指输出电流的能力。对于驱动大负载(即负载内阻越小,负载越大)时,例如IO输出为5V,驱动的负载内阻为10ohm,于是根据欧姆定律可以正常情况下负载上的电流为0.5A(推算出功率为2.5W)。显然一般的IO不可能有这么大的驱动能力,也就是没有办法输出这么大的电流。于是造成的结果就是输出电压会被拉下来,达不到标称的5V。当然如果只是数字信号的传递,下一级的输入阻抗理论上最好是高阻,也就是只需要传电压,基本没有电流,也就没有功率,于是就不需要很大的驱动能力。

对于推挽输出,输出高、低电平时电流的流向如图 2所示。所以相比于后面介绍的开漏输出,输出高电平时的驱动能力强很多。

图2 灌电流与拉电流
但推挽输出的一个缺点是,如果当两个或多个推挽输出结构的GPIO相连在一起,一个输出高电平,即上面的MOS导通,下面的MOS闭合时;同时另一个输出低电平,即上面的MOS闭合,下面的MOS导通时。电流会从第一个引脚的VCC通过上端MOS再经过第二个引脚的下端MOS直接流向GND。整个通路上电阻很小,相当于发生短路,进而可能造成端口的损害。这也是为什么推挽输出不能实现" 线与"的原因。

开漏输出(Open Drain Output)

常说的与推挽输出相对的就是开漏输出,对于开漏输出和推挽输出的区别最普遍的说法就是开漏输出无法真正输出高电平,即高电平时没有驱动能力,需要借助外部上拉电阻完成对外驱动。下面就从内部结构和原理上说明为什么开漏输出输出高电平时没有驱动能力,以及进一步比较与推挽输出的区别。

首先需要介绍一些开漏输出和开集输出。这两种输出的原理和特性基本是类似的,区别在于一个是使用MOS管,其中的"漏"指的就是MOS管的漏极;另一个使用三极管,其中的"集"指的就是MOS三极管的集电极。这两者其实都是和推挽输出相对应的输出模式,由于使用MOS管的情况较多,很多时候就用"开漏输出"这个词代替了开漏输出和开集输出。

介绍就先从开集输出开始,其原理电路结如图 3所示。


图3 OC开集

图 3左边的电路是开集(OC)输出最基本的电路,当输入为高电平时,NPN三极管导通,Output被拉到GND,输出为低电平;当输入为低电平时,NPN三极管闭合,Output相当于开路(输出高阻)。高电平时输出高阻(高阻、三态以及floating说的都是一个意思),此时对外没有任何的驱动能力。这就是开漏和开集输出最大的特点,如何利用该特点完成各种功能稍后介绍。这个电路虽然完成了开集输出的功能,但是会出现input为高,输出为低;input为低,输出为高的情况。

图 3右边的电路中多使用了一个三极管完成了"反相"。当输入为高电平时,第一个三极管导通,此时第二个三极管的输入端会被拉到GND,于是第二个三极管闭合,输出高阻;当输入为低电平时,第一个三极管闭合,此时第二个三极管的输入端会被上拉电阻拉到高电平,于是第二个三极管导通,输出被拉到GND。这样,这个电路的输入与输出是同相的了。

接下来介绍开漏输出的电路,如图 4所示。原理与开集输出基本相同,只是将三极管换成了MOS而已。**图4的开漏输出电路相当于图3中的右图。**MOS管不会导致电平反相。

图4 OD开漏
接着说说开漏、开集输出的特点以及应用,由于两者相似,后文中若无特殊说明,则用开漏表示开漏和开集输出电路。

开漏输出最主要的特性就是高电平没有驱动能力,需要借助外部上拉电阻才能真正输出高电平,其电路如图 5所示。

图5 OD门上拉
当MOS管闭合时,开漏输出电路输出高电平,且连接着负载时,电流流向是从外部电源,流经上拉电阻RPU,流进负载,最后进入GND。

开漏输出的这一特性一个明显的优势就是可以很方便的调节输出的电平,因为输出电平完全由上拉电阻连接的电源电平决定。所以在需要进行电平转换的地方,非常适合使用开漏输出。
开漏输出的这一特性另一个好处在于可以实现"线与"功能,所谓的"线与"指的是多个信号线直接连接在一起,只有当所有信号全部为高电平时,合在一起的总线为高电平;只要有任意一个或者多个信号为低电平,则总线为低电平。而推挽输出就不行,如果高电平和低电平连在一起,会出现短路电流倒灌,损坏器件。

总结

开漏形式的电路有以下几个特点:

1、利用外部电路的驱动能力,减少IC内部的驱动。当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up ,MOSFET到GND。IC内部仅需很下的栅极驱动电流。

2、一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。比如加上上拉电阻就可以提供TTL/CMOS电平输出等。(上拉电阻的阻值决定了逻辑电平转换的沿的速度 。阻值越大,速度越低功耗越小,所以负载电阻的选择要兼顾功耗和速度。)
比如STM32用3.3V供电,将GPIO设置为开漏输出模式,同时引脚外部接上拉电阻到5V,则高电平时可以拉到5V,不需要接特殊的电平转换电路或芯片,即用一个电阻实现了3.3V转5V,当然上升沿速度受电阻大小影响。(理论成立,没有进行验证)

3、OPEN-DRAIN提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。

4、可以将多个开漏输出的Pin,连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系。这也是I2C,SMBus等总线判断总线占用状态的原理。
补充:什么是“线与”?:
在一个结点(线)上, 连接一个上拉电阻到电源 VCC 或 VDD 和 n 个 NPN 或 NMOS 晶体管的集电极 C 或漏极 D, 这些晶体管的发射极 E 或源极 S 都接到地线上, 只要有一个晶体管饱和, 这个结点(线)就被拉到地线电平上。 因为这些晶体管的基极注入电流(NPN)或栅极加上高电平(NMOS),晶体管就会饱和, 所以这些基极或栅极对这个结点(线)的关系是或非 NOR 逻辑。 如果这个结点后面加一个反相器, 就是或 OR 逻辑。

其实可以简单的理解为:在所有引脚连在一起时,外接一上拉电阻,如果有一个引脚输出为逻辑0,相当于接地,与之并联的回路“相当于被一根导线短路”,所以外电路逻辑电平便为0,只有都为高电平时,与的结果才为逻辑1。

关于准双向IO,实际上结构类似于开漏输出,只不过是把上拉电阻集成到了单片机内部。(跟开漏输出有点关系,顺带放这)
如51单片机的P1 ~ P3端口

参考:
https://blog.csdn.net/techexchangeischeap/article/details/72569999
http://www.360doc.com/content/15/0113/16/20337528_440450286.shtml
https://zhuanlan.zhihu.com/p/41942876
https://blog.csdn.net/xiaoweiboy/article/details/6714199

GPIO推挽输出和开漏输出模式区别详解相关推荐

  1. STM32外设之GPIO的推挽输出和开漏输出模式详解

    文章目录 1 GPIO结构框图 2 推挽输出模式 3 开漏输出模式 1 GPIO结构框图 先来看一下GPIO输出的部分: 2 推挽输出模式 所谓的推挽输出模式,是根据这两个 MOS管的工作方式来命名的 ...

  2. STM32:GPIO的8种输入输出模式深入详解

    STM32的8种GPIO输入输出模式深入详解 输入模式 -输入浮空(GPIO_Mode_IN_FLOATING) -输入上拉(GPIO_Mode_IPU) -输入下拉(GPIO_Mode_IPD) - ...

  3. STM32之的GPIO推挽输出与开漏输出的区别

    首先看以下STM32的GPIO的原理图如下: 当端口配置为输出时: 开漏模式:输出0 时,N-MOS 导通,P-MOS 不被激活,输出0. 输出1 时,N-MOS 高阻, P-MOS 不被激活,输出1 ...

  4. 推挽输出和开漏输出区别

    近期看到常用的IIC的GPIO用到了开漏输出的配置,总结下推挽和开漏输出让自己记得更清楚. 推挽输出(Push-Pull Output) 推挽输出结构是由两个MOS或者三极管收到互补控制的信号控制,两 ...

  5. 有关推挽输出、开漏输出、复用开漏输出、复用推挽输出以及上拉输入、下拉输入、浮空输入、模拟输入区别

    转自:http://www.cnblogs.com/Jezze/archive/2011/12/23/2299857.html 以及上拉输入.下拉输入.浮空输入.模拟输入的区别 最近在看数据手册的时候 ...

  6. 有关上拉输入、下了输入、推挽输出、开漏输出、复用开漏输出、复用推挽输出以及、浮空输入、模拟输入区别

    有关上拉输入.下了输入.推挽输出.开漏输出.复用开漏输出.复用推挽输出以及.浮空输入.模拟输入区别          最近在网上看见一些人对STM32的八种方式的解释,说了一大堆,最后看完了 也不知道 ...

  7. (转载)有关推挽输出、开漏输出、复用开漏输出、复用推挽输出以及上拉输入、下拉输入、浮空输入、模拟输入区别...

    以及上拉输入.下拉输入.浮空输入.模拟输入的区别 最近在看数据手册的时候,发现在Cortex-M3里,对于GPIO的配置种类有8种之多: (1)GPIO_Mode_AIN 模拟输入 (2)GPIO_M ...

  8. STM32初学篇-推挽输出、开漏输出、复用开漏输出、复用推挽输出以及上拉输入、下拉输入、浮空输入、模拟输入区别

    有关推挽输出.开漏输出.复用开漏输出.复用推挽输出以及上拉输入.下拉输入.浮空输入.模拟输入的区别 最近在看数据手册的时候,发现在Cortex-M3里,对于GPIO的配置种类有8种之多: (1)GPI ...

  9. 推挽输出和开漏输出_关于51单片机IO口的输出模式结构

    单片机种类繁多今天主要谈谈51单片机,在stm32单片机中IO(GPIO)输出模式有很多种.如 模拟输入 .浮空输入.下拉输入.上拉输入.开漏输出.推挽输出等很多种,不同的输入输出有不同的功能,实现不 ...

  10. 模拟IIC——关于模拟IIC的IO口的配置选取推挽输出还是开漏输出,以及是否需要更改IO口输入输出模式和是否需要对IO配置上拉

    在使用模拟IIC的时候,观看别人的程序的时候发现了程序之间的一些不一样的地方 ----------------------------------代码1------------------------ ...

最新文章

  1. 入职培训笔记记录--day2续(1、运算符 2、数据的输入与输出 3、控制语句)
  2. SQL SERVER 分区表的总结--一些疑问的总结
  3. 驰骋工作流程底层的API开发接口-重要的
  4. Delphi编码规范
  5. JPA(三)之实体关系一对多(多对一)
  6. GID绘图和CDC类
  7. ORACLE中null的排序问题
  8. CF 964C Alternating Sum
  9. 每日算法系列【LeetCode 927】三等分
  10. IOS SDWebImage实现原理详解
  11. Spring入门学习推荐
  12. python--leetcode448. Find All Numbers Disappeared in an Array
  13. 搜狗站长html标签验证,教你把企业网站添加到搜狗站长平台
  14. CentOS8桌面图标不显示
  15. bzoj 4134: ljw和lzr的hack比赛 sg函数+字典树
  16. linux下vi编辑器方向键变成字母的解决方法
  17. Frontiers | 北林邬荣领/何晓青-网络作图揭示拟南芥与叶际微生物组互作机制
  18. 超宽带定位中的TOA/TDOA两种最常用算法介绍
  19. NBUT 1225 NEW RDSP MODE I
  20. 无人机姿态表示方法及相互转换(欧拉角、方向余弦矩阵、四元数)

热门文章

  1. Linux 配置 VNC 远程桌面
  2. Gosn解决在集合中int自动转换为duble类型
  3. java数据类型之间的转换_Java数据类型之间的转换(转)
  4. CST材料库相关问题
  5. Android仿网易云项目代码,Android项目实战教程之高仿网易云音乐启动页实例代码...
  6. 制作u盘启动盘对u盘有什么影响
  7. 野火STM32F429学习笔记
  8. php 微信支付跳不出来的,微信公众号 微信支付跳转空白
  9. 利用nat123解决微信公众号对接服务器必须为80端口的问题
  10. 100~200以内素数