【open-drain与push-pull】
GPIO的功能,简单说就是可以根据自己的需要去配置为输入或输出。但是在配置GPIO管脚的时候,常会见到两种模式:开漏(open-drain,漏极开路)和推挽(push-pull)。
对此两种模式,有何区别和联系,下面整理了一些资料,来详细解释一下:
图表 1 Push-Pull对比Open-Drain
|
Push-Pull推挽输出 |
Open-Drain开漏输出 |
原理 |
输出的器件是指输出脚内部集成有一对互补的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原理图
|
图表 3 open-drain原理图
图表 4 open-drain“线与”功能
|
优点 |
(1)可以吸电流,也可以贯电流; (2)和开漏输出相比,push-pull的高低电平由IC的电源低定,不能简单的做逻辑操作等。 |
(1) 对于各种电压节点间的电平转换非常有用,可以用于各种电压节点的Up-translate和down-translate转换 (3)利用 外部电路的驱动能力,减少IC内部的驱动。当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up ,MOSFET到GND。IC内部仅需很下的栅极驱动电流。 (4)可以利用改变上拉电源的电压,改变传输电平: 图表 5 open-drain输出电平的原理
IC的逻辑电平由电源Vcc1决定,而输出高电平则由Vcc2决定。这样我们就可以用低电平逻辑控制输出高电平逻辑了。 |
缺点 |
一条总线上只能有一个push-pull输出的器件; |
开漏Pin不连接外部的上拉电阻,则只能输出低电平。
当输出电平为低时,N沟道三极管是导通的,这样在Vcc'和GND之间有一个持续的电流流过上拉电阻R和三极管Q1。这会影响整个系统的功耗。采用较大值的上拉电阻可以减小电流。但是,但是大的阻值会使输出信号的上升时间变慢。即上拉电阻R pull-up的阻值 决定了逻辑电平转换的沿的速度 。阻值越大,速度越低功耗越小。反之亦然。 |
特点 |
在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硬件模块内部是否有上拉电阻,如果没有,需要硬件电路上添加额外的上拉电阻)
正所谓,转换速度与功耗,是鱼与熊掌,二则不可兼得焉。
【MOS管的分类】
图表 6 MOS管分类
MOS管 |
JFET (结型场效应管) |
|
|
MOSFET (金属绝缘栅型场效应管)
|
N(Negative) 沟道 |
增强型 |
|
耗尽型 |
|||
P(Positive) 沟道 |
增强型 |
||
耗尽型 |
MOSFET是在JFET基础上发展起来的,两者结构上存在一些差异,但使用方法和特点基本类似。
【MOS管和三极管的比较】
图表 7 MOS管和三极管的比较
|
MOS管 |
三极管 |
|||
控制方式 |
电压控制器件 |
电流控制器件 |
|||
输入阻抗 |
特别高 |
相对小 |
|||
输出电阻 |
小 |
驱动能力强 |
相对大 |
||
截止频率 |
高 |
低 |
|||
通过电流能力 |
强 |
功率大,要找一个小电流的MOS很不容易 |
弱 |
||
稳定性 |
好 |
可以工作在极高的频率下 |
相对不好 |
||
击穿电压 |
低 |
非常容易受静电影响,管脚不用的话一定要接地或者接电源。 |
高 |
有些管脚不用的话,把脚悬空都问题不大 |
|
易用性 |
不好 |
用法要稍微复杂一点,比如P沟道的MOS管,需要负电压来控制,相对三极管中的PNP管,明显要复杂得多。 |
好 |
电子初学者中熟悉三极管用过三极管的要远远多于熟悉MOS管的,小功率塑封三极管比如9000系列,8050,8550之类的非常容易买到,而且价格便宜,在信号放大和简单开关方面都用得很多,也非常方便。 |
|
总结 |
现在的集成电路多半使用MOS为基础 |
|
|||
【三极管,PNP,NPN】
P是positive阳极,N是negative阴极;
P极中空穴多显正极性,N极中电子多显负极性;
PNP和NPN就是三级管的叠放次序,P和N靠在一起会形成PN结,所以三极管中会有两个PN结,所以又称为双极结晶体管。
【场效应管与三极管】
场效应管和三极管的功能、作用一样,可以用于放大、振荡、开关电路。
N沟道场效应管和NPN三极管类似,工作条件是在栅极加正向极性控制电压,在漏极加正极性电源电压,改变栅极电压就可以改变漏极与源极之间的电流大小。
P沟道场效应管和PNP三极管类似,工作条件是在栅极加负极性控制电压,在漏极加负向极性电源电压,改变栅极电压就可以改变漏极与源极之间的电流大小。
目前应用比较广泛的是N沟道场效应管,就像三极管NPN型应用比较多一样。
转自
http://againinput4.blog.163.com/blog/static/17279949120117691951970/