Open drain & push pull 原理(转)

最近在写GPIO的driver, 在配置GPIO管脚时,看见了感觉熟悉的两个名词:Open Drain and Push Pull。可是一时对它们的原理及区别有感觉很模糊,故上网收集了一些资料复习一下。      所谓开漏电路概念中提到的“漏”就是指MOSFET的漏极。同理,开集电路中的“集”就是指三极管的集电极。开漏电路就是指以MOSFET的漏极为输出的电路。一般的用法是会在漏极外部的电路添加上拉电阻。完整的开漏电路应该由开漏器件和开漏上拉电阻组成。如图1所示:

组成开漏形式的电路有以下几个特点:
1. 利用 外部电路的驱动能力,减少IC内部的驱动。当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up ,MOSFET到GND。IC内部仅需很下的栅极驱动电流。如图1。
2. 可以将多个开漏输出的Pin,连接到一条线上。形成 “与逻辑” 关系。如图1,当PIN_A、PIN_B、PIN_C任意一个变低后,开漏线上的逻辑就为0了。这也是I2C,SMBus等总线判断总线占用状态的原理。
3. 可以利用改变上拉电源的电压,改变传输电平。如图2, IC的逻辑电平由电源Vcc1决定,而输出高电平则由Vcc2决定。这样我们就可以用低电平逻辑控制输出高电平逻辑了。
4. 开漏Pin不连接外部的上拉电阻,则只能输出低电平(因此对于经典的51单片机的P0口而言,要想做输入输出功能必须加外部上拉电阻,否则无法输出高电平逻辑)。
5. 标准的开漏脚一般只有输出的能力。添加其它的判断电路,才能具备双向输入、输出的能力。

应用中需注意:
1.   开漏和开集的原理类似,在许多应用中我们利用开集电路代替开漏电路。例如,某输入Pin要求由开漏电路驱动。则我们常见的驱动方式是利用一个三极管组成开集电路来驱动它,即方便又节省成本。如图3。
2.  上拉电阻R pull-up的  阻值  决定了  逻辑电平转换的沿的速度  。阻值越大,速度越低功耗越小。反之亦然。

                                                                     图 3
Push-Pull输出就是一般所说的推挽输出,在CMOS电路里面应该较CMOS输出更合适,应为在CMOS里面的push-pull输出能力不可能做得双极那么大。输出能力看IC内部输出极N管P管的面积。和开漏输出相比,push-pull的高低电平由IC的电源低定,不能简单的做逻辑操作等。push-pull是现在CMOS电路里面用得最多的输出级设计方式。

 

Open Drain与push/pull
在大部分的单片机的GPIO的设置中,都会有两种不同的输出方式提供选择,一种是开漏极(open drain)输出,另外一种是推挽(push/pull)的输出方式,那么这两种输出方式到底有什么不同以及在使用过程中又应该如何选择?

开漏极(open drain)输出
首先需要当使用开漏级输出的时候,需要使用上拉电阻
1:图1中,当输入为0的时候,Q1工作在截至状态,Q2工作做导通,当没有上拉电阻的时候,此时输出管脚处于悬空状态,没有办法控制输出电压。
2:图1中,当输入为1的时候,Q1工作在导通状态,此时Q2的基极与发射极无法导通,所以Q2工作在截至状态,可以把Q2想象成一个断路了,当没有上拉电阻的时候,输出管脚依然是悬空的状态。
当加上上拉电阻的时候,一切都不一样了。
3:在图1中,输入为0的时候,Q1截至,Q2导通,此时可以想象Q2是一根导线直接接地,此时的输出当然为0了,电流都会通过Q2流向接地端
4:在图1中,输入为1的时候,Q1导通,Q2截至,此时想象Q2为断路状态,此时的电流通过上拉电阻继续流向外部的负载了,此时的输出电压需要根据负载电阻的大小来计算了,但所有的一切都是可控的了。
图3就是所有的简化版,当开关断开的时候,电流通过上拉电阻流向输出端。当开关导通时候,输出为0。

推挽(push/pull)输出:
推挽输出可以将图三的电阻换成一个开关即可。两个开关永远有一个导通。
 

 

 

 

发布了36 篇原创文章 · 获赞 145 · 访问量 66万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览