GPIO推挽输出和开漏输出详解

open-drain与push-pull】
GPIO的功能,简单说就是可以根据自己的需要去配置为输入或输出。但是在配置GPIO管脚的时候,常会见到两种模式:开漏(open-drain,漏极开路)和推挽(push-pull)。
对此两种模式,有何区别和联系,下面整理了一些资料,来详细解释一下:

图表 1 Push-Pull对比Open-Drain

  Push-Pull推挽输出 Open-Drain开漏输出
原理 输出的器件是指输出脚内部集成有一对互补的MOSFET,当Q1导通、Q2截止时输出高电平;而当Q1截止导通、Q2导通时输出低电平 .25pt;border:solid #E3EDF5 1.0pt;mso-border-alt: solid #E3EDF5 .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt‘>

输出的器件是指输出脚内部集成有一对互补的MOSFET,当Q1导通、Q2截止时输出高电平;而当Q1截止导通、Q2导通时输出低电平

开漏电路就是指以MOSFET的漏极为输出的电路。指内部输出和地之间有个N沟道的MOSFET(Q1),这些器件可以用于电平转换的应用。输出电压由Vcc‘决定。Vcc‘可以大于输入高电平电压VCC(up-translate)也可以低于输入高电平电压VCC(down-translate)。
某老外的更加透彻的解释 Push-pull输出,实际上内部是用了两个晶体管(transistor),此处分别称为top transistor和bottom transistor。通过开关对应的晶体管,输出对应的电平。top transistor打开(bottom transistor关闭),输出为高电平;bottom transistor打开(top transistor关闭),输出低电平。Push-pull即能够漏电流(sink current),又可以集电流(source current)。其也许有,也许没有另外一个状态:高阻抗(high impedance)状态。除非Push-pull需要支持额外的高阻抗状态,否则不需要额外的上拉电阻。 Open-drain输出,则是比push-pull少了个top transistor,只有那个bottom transistor。(就像push-pull中的那样)当bottom transistor关闭,则输出为高电平。此处没法输出高电平,想要输出高电平,必须外部再接一个上拉电阻(pull-up resistor)。Open-drain只能够漏电流(sink current),如果想要集电流(source current),则需要加一个上拉电阻。 ??出低电平

  常见的GPIO的模式可以配置为open-drain或push-pull,具体实现上,常为通过配置对应的寄存器的某些位来配置为open-drain或是push-pull。当我们通过CPU去设置那些GPIO的配置寄存器的某位(bit)的时候,其GPIO硬件IC内部的实现是,会去打开或关闭对应的top transistor。相应地,如果设置为了open-d模式的话,是需要上拉电阻才能实现,也能够输出高电平的。因此,如果硬件内部(internal)本身包含了对应的上拉电阻的话,此时会去关闭或打开对应的上拉电阻。如果GPIO硬件IC内部没有对应的上拉电阻的话,那么你的硬件电路中,必须自己提供对应的外部(external)的上拉电阻。而push-pull输出的优势是速度快,因为线路(line)是以两种方式驱动的。而带了上拉电阻的线路,即使以最快的速度去提升电压,最快也要一个常量的R×C的时间。其中R是电阻,C是寄生电容(parasitic capacitance),包括了pin脚的电容和板子的电容。但是,push-pull相对的缺点是往往需要消耗更多的电流,即功耗相对大。而open-drain所消耗的电流相对较小,由电阻R所限制,而R不能太小,因为当输出为低电平的时候,需要sink更低的transistor,这意味着更高的功耗。(此段原文:because the lower transistor has to sink that current when the output is low; that means higher power consumption.)而open-drain的好处之一是,允许你cshort(?)多个open-drain的电路,公用一个上拉电阻,此种做法称为wired-OR连接,此时可以通过拉低任何一个IO的pin脚使得输出为低电平。为了输出高电平,则所有的都输出高电平。此种逻辑,就是“线与”的功能,可以不需要额外的门(gate)电路来实现此部分逻辑。
原理图


图表 2 push-pull原理图 须外部再接一个上拉电阻(pull-up resistor)。Open-drain只能够漏电流(sink current),如果想要集电流(source current),则需要加一个上拉电阻。 ??出低电平


图表 3 open-drain原理图 ??外部再接一个上拉电阻(pull-up resistor)。Open-drain只能够漏电流(sink current),如果想要集电流(source current),则需要加一个上拉电阻。 ??出低电平

图表 4 open-drain“线与”功能 ?需要加一个上拉电阻。 ??出低电平

优点  (1)可以吸电流,也可以贯电流;(2)和开漏输出相比,push-pull的高低电平由IC的电源低定,不能简单的做逻辑操作等。
(1)
对于各种电压节点间的电平转换非常有用,可以用于各种电压节点的Up-translate和down-translate转换
(2)可以将多个开漏输出的Pin脚,连接到一条线上,形成“与逻辑”关系,即“线与”功能,任意一个变低后,开漏线上的逻辑就为0了。这也是I2C,SMBus等总线判断总线占用状态的原理。(3)利用 外部电路的驱动能力,减少IC内部的驱动。当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up ,MOSFET到GND。IC内部仅需很下的栅极驱动电流。(4)可以利用改变上拉电源的电压,改变传输电平:图表 5 open-drain输出电平的原理

lang=EN-US>R不能太小,因为当输出为低电平的时候,需要sink更低的transistor,这意味着更高的功耗。(此段原文:because the lower
transistor has to sink that current when the output is low; that means higher
power consumption.)而open-drain的好处之一是,允许你cshort(?)多个open-drain的电路,公用一个上拉电阻,此种做法称为wired-OR连接,此时可以通过拉低任何一个IO的pin脚使得输出为低电平。为了输出高电平,则所有的都输出高电平。此种逻辑,就是“线与”的功能,可以不需要额外的门(gate)电路来实现此部分逻辑。

IC的逻辑电平由电源Vcc1决定,而输出高电平则由Vcc2决定。这样我们就可以用低电平逻辑控制输出高电平逻辑了。

缺点   一条总线上只能有一个push-pull输出的器件; :"Times New Roman";color:#444444;mso-ansi-language:EN-US; mso-fareast-language:ZH-CN;mso-bidi-language:AR-SA‘>的逻辑电平由电源Vcc1决定,而输出高电平则由Vcc2决定。这样我们就可以用低电平逻辑控制输出高电平逻辑了。  开漏Pin不连接外部的上拉电阻,则只能输出低电平。当输出电平为低时,N沟道三极管是导通的,这样在Vcc‘和GND之间有一个持续的电流流过上拉电阻R和三极管Q1。这会影响整个系统的功耗。采用较大值的上拉电阻可以减小电流。但是,但是大的阻值会使输出信号的上升时间变慢。即上拉电阻R pull-up的阻值 决定了逻辑电平转换的沿的速度
。阻值越大,速度越低功耗越小。反之亦然。

ine-height:115%;font-family:"Verdana","sans-serif";
mso-fareast-font-family:"Times New Roman";mso-bidi-font-family:"Times New Roman";
color:#444444;mso-ansi-language:EN-US;mso-fareast-language:ZH-CN;mso-bidi-language:
AR-SA‘>“线与”功能,任意一个变低后,开漏线上的逻辑就为0了。这也是I2C,SMBus等总线判断总线占用状态的原理。(3)利用 外部电路的驱动能力,减少IC内部的驱动。当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up ,MOSFET到GND。IC内部仅需很下的栅极驱动电流。(4)可以利用改变上拉电源的电压,改变传输电平:图表 5 open-drain输出电平的原理

lang=EN-US>R不能太小,因为当输出为低电平的时候,需要sink更低的transistor,这意味着更高的功耗。(此段原文:because the lower
transistor has to sink that current when the output is low; that means higher
power consumption.)而open-drain的好处之一是,允许你cshort(?)多个open-drain的电路,公用一个上拉电阻,此种做法称为wired-OR连接,此时可以通过拉低任何一个IO的pin脚使得输出为低电平。为了输出高电平,则所有的都输出高电平。此种逻辑,就是“线与”的功能,可以不需要额外的门(gate)电路来实现此部分逻辑。

特点   在CMOS电路里面应该叫CMOS输出更合适,因为在CMOS里面的push-pull输出能力不可能做得双极那么大。输出能力看IC内部输出极N管P管的面积。push-pull是现在CMOS电路里面用得最多的输出级设计方式。  
     
     

【open-drain和push-pull的总结】
对于GPIO的模式的设置,在不考虑是否需要额外的上拉电阻的情况下,是设置为open-drain还是push-pull,说到底,还是个权衡的问题:
如果你想要电平转换速度快的话,那么就选push-pull,但是缺点是功耗相对会大些。
如果你想要功耗低,且同时具有“线与”的功能,那么就用open-drain的模式。(同时注意GPIO硬件模块内部是否有上拉电阻,如果没有,需要硬件电路上

添加额外的上拉电阻)
正所谓,转换速度与功耗,是鱼与熊掌,二则不可兼得焉。

ze:9.0pt;line-height:115%;font-family:"微软雅黑","sans-serif";
mso-bidi-font-family:"Times New Roman";color:#444444;mso-ansi-language:EN-US;
mso-fareast-language:ZH-CN;mso-bidi-language:AR-SA‘>功能,任意一个变低后,开漏线上的逻辑就为0了。这也是I2C,SMBus等总线判断总线占用状态的原理。(3)利用 外部电路的驱动能力,减少IC内部的驱动。当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up ,MOSFET到GND。IC内部仅需很下的栅极驱动电流。(4)可以利用改变上拉电源的电压,改变传输电平:图表 5 open-drain输出电平的原理

lang=EN-US>R不能太小,因为当输出为低电平的时候,需要sink更低的transistor,这意味着更高的功耗。(此段原文:because the lower
transistor has to sink that current when the output is low; that means higher
power consumption.)而open-drain的好处之一是,允许你cshort(?)多个open-drain的电路,公用一个上拉电阻,此种做法称为wired-OR连接,此时可以通过拉低任何一个IO的pin脚使得输出为低电平。为了输出高电平,则所有的都输出高电平。此种逻辑,就是“线与”的功能,可以不需要额外的门(gate)电路来实现此部分逻辑。

时间: 2024-10-11 16:36:05

GPIO推挽输出和开漏输出详解的相关文章

单片机I/O口推挽与开漏输出详解

推挽输出:可以输出高,低电平,连接数字器件;推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止. 开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内). 我们先来说说集电极开路输出的结构.集电极开路输出的结构如图1所示,右边的那个三极管集电极什么都不接,所以叫做集电极开路(左边的三极管为反相之用,使输入为"0"时,输出也为"0").对于图1,当

推挽输出、开漏输出、上拉输入区分与总结

推挽输出:可以输出高,低电平,连接数字器件; 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止.高低电平由IC的电源低定. 推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小.效率高.输出既可以向负载灌电流,也可以从负载抽取电流.推拉式输出级既提高电路的负载能力,又提高开关速度. 详细理解: 如图所示,推挽放大器的输出级有两个"臂"(两

上拉输入、下了输入、推挽输出、开漏输出、复用开漏输出、复用推挽输出以及、浮空输入、模拟输入

转载地址:http://blog.csdn.net/bailyzheng/article/details/8071864 有关上拉输入.下了输入.推挽输出.开漏输出.复用开漏输出.复用推挽输出以及.浮空输入.模拟输入区别          最近在网上看见一些人对STM32的八种方式的解释,说了一大堆,最后看完了 也不知道讲了什么,为了方便大家一目了然,本人总结如下,希望对大家有帮助. 1.上拉输入:上拉就是把电位拉高,比如拉到Vcc.上拉就是将不确定的信号通过一个电阻嵌位在高电平!电阻同时起限流

推挽输出与开漏输出的区别

推挽输出:可以输出高,低电平,连接数字器件,驱动能力低. 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止.这种结构一般不需要接上拉和下拉电阻. 开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要外电路接上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强.上拉电阻的阻值决定饿了逻辑电平转换沿的速度.阻值越大速度越低功耗越小. 版权声明:本文为博主原创文章,未经博主允许不得转载.

推挽输出与开漏输出

下面介绍一下开漏输出与推挽输出的结构原理: 推挽输出:可以输出高,低电平,连接数字器件; 开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内).推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止.要实现“线与”需要用OC(open collector)门电路.是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务.电路工作时,两只对称的功

准双向口、开漏输出、推挽输出结构介绍

最近画的一块板子中用到了六路同相门芯片74HC07作为电平转换,将FPGA产生的3.3V信号转换为5V,但是没有注意到74HC07的输出是开漏结构(以为给74HC07一个5V电源就可以将输入的3.3V电平转换为5V电平输出--囧--,好吧我承认我是菜鸟),结果可想而知,板子拿回来完全不能用,只好用飞线给74HC07的几个输出口接了1K的上拉电阻,这样板子才正常工作了,但是板子上接了一堆的飞线,怎么看都觉得不爽,哎,都是这个开漏结构给害的-- 于是乎,在做下一版之前,我仔细研究了一下这个开漏输出结

开漏输出、推挽输出的区别

推挽输出:可以输出高,低电平,连接数字器件. 输出 0 时,N-MOS 导通,P-MOS 高阻,输出0. 输出 1 时,N-MOS 高阻,P-MOS 导通,输出1(不需要外部上拉电路). 开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内). 输出 0 时,N-MOS 导通,P-MOS 不被激活,输出0. 输出 1 时,N-MOS 高阻, P-MOS 不被激活,输出1(需要外部上拉电路):可以读IO输入电平变

GPIO 配置之ODR, BSRR, BRR 详解

STM32 GPIO 配置之ODR, BSRR, BRR 详解 用stm32 的配置GPIO 来控制LED 显示状态,可用ODR,BSRR,BRR 直接来控制引脚输出状态. ODR寄存器可读可写:既能控制管脚为高电平,也能控制管脚为低电平. 管脚对于位写1 gpio 管脚为高电平,写 0 为低电平 BSRR 只写寄存器:[color=Red]既能控制管脚为高电平,也能控制管脚为低电平.对寄存器高 16bit 写1 对应管脚为低电平,对寄存器低16bit写1对应管脚为高电平.写 0 ,无动作 BR

开漏输出

http://blog.chinaunix.net/uid-23065002-id-3885199.html STM32配置为开漏输出(上图)时:输出0,N-MOS导通,IO引脚是低电平:输出1,N-MOS不导通,IO引脚是高阻态(P-MOS从不被激活). 所以配置为开漏模式时要想IO引脚输出0和1,必须外加上拉电阻. 1.可以将多个开漏输出的Pin,连接到一条线上.形成 "与逻辑" 关系. 2.可以利用改变上拉电源的电压,改变传输电平.如图2, IC的逻辑电平由电源Vcc1决定,而输