Open-Drain&Push-Pull

在配置GPIO(General Purpose Input Output)管脚的时候,常会见到两种模式:开漏(open-drain,漏极开路)和推挽(push-pull)。对此两种模式,有何区别和联系,下面整理了一些资料,来详细解释一下:

一、Push-Pull推挽输出

1、原理

输出的器件是指输出脚内部集成有一对互补的MOSFET:

  当Q1导通、Q2截止时输出高电平;

  而当Q1截止导通、Q2导通时输出低电平。

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需要支持额外的高阻抗状态,否则不需要额外的上拉电阻。

2、优点

(1)可以吸电流,也可以贯电流;

(2)push-pull输出的优势是速度快,因为线路是以两种方式驱动的;

(3)和开漏输出相比,push-pull的高低电平由IC的电源决定,不能简单的做逻辑操作等。

3、缺点

(1)一条总线上只能有一个push-pull输出的器件;

(2)push-pull往往需要消耗更多的电流,即功耗相对大。

二、Open-Drain开漏输出

1、原理

开漏电路是指以MOSFET的漏极为输出的电路,

在内部输出和地之间有个N沟道的MOSFET(Q1),这些器件可以用于电平转换的应用。输出电压由Vcc决定。

  Vcc可以大于输入高电平电压VCC (call UP-Translate),

  也可以低于输入高电平电压VCC(call Down-Translate),

Open-Drain比push-pull少了个top transistor,只有bottom transistor。

就像push-pull中那样,当bottom transistor关闭,则输出为高电平,但此处没法输出高电平。

想要输出高电平,必须外部再接一个上拉电阻(pull-up resistor)。

Open-drain只能够漏电流(sink current),如果想要集电流(source current),则需要加一个上拉电阻。

2、优点

(1)对于各种电压节点间的电平转换非常有用,可以用于各种电压节点的Up-translate和Down-translate转换

(2)可以将多个开漏输出的Pin脚,连接到一条线上,形成“与逻辑”关系,即“线与”功能,任意一个变低后,开漏线上的逻辑就为0了。这也是I2C,SMBus等总线判断总线占用状态的原理。

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

(4)可以改变上拉电源的电压,改变传输电平,如图所示,IC的逻辑电平由电源Vcc1决定,而输出高电平则由Vcc2决定。这样我们就可以用低电平逻辑控制输出高电平逻辑了。

            OD输出电平的原理

3、缺点

(1)开漏Pin不连接外部的上拉电阻,则只能输出低电平,如果要输出高电平,必需加上拉电阻。

(2)带了上拉电阻的线路,即使以最快的速度去提升电压,最快也要一个常量的R×C的时间。其中R是电阻,C是寄生电容(parasitic capacitance),包括了pin脚的电容和板子的电容。

(3)当输出电平为低时,N沟道三极管是导通的,这样在Vcc和GND之间有一个持续的电流流过上拉电阻R和三极管Q1,这会影响整个系统的功耗。采用较大值的上拉电阻可以减小电流。但是大的阻值会使输出信号的上升时间变慢,即上拉电阻的阻值决定了逻辑电平转换的沿的速度。阻值越大,速度越低功耗越小,反之亦然。但上拉电阻不能太小,因为当输出为低电平的时候,需要sink更低的transistor,这意味着更高的功耗。

三、open-drain和push-pull的总结

对于GPIO的模式的设置,在不考虑是否需要额外的上拉电阻的情况下,是设置为open-drain还是push-pull?

说到底,还是个权衡的问题:

如果你想要电平转换速度快的话,那么就选push-pull,但是缺点是功耗相对会大些。

  如果你想要功耗低,且同时具有“线与”的功能,那么就用open-drain的模式。

(同时注意GPIO硬件模块内部是否有上拉电阻,如果没有,需要硬件电路上添加额外的上拉电阻)

正所谓,转换速度与功耗,是鱼与熊掌,二则不可兼得焉。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张伟博客

netsh命令实现计算机本地端口转发(端口映射)

1884
来自专栏深度学习之tensorflow实战篇

linux (ubantu)安装最新版python3.6,以及直接安装anaconda

用Linux自带的下载工具wget下载(当前的最新版本python3.6.0),进入个人用户下面的Downloads下 cd ~/tmp/ wget https...

3435
来自专栏Python与爬虫

如何获取小程序的源代码

准备工作 手机已经root adb.exe 已经放到了系统环境变量,也就是打开cmd 后输入 adb不会报错,如下图 ? 手机能连上电脑,并且手机开启us...

1.1K14
来自专栏数据库

浅谈MySQL数据库的备份与还原

之前用过很长时间的Oracle 11gR2,数据还原备份这种操作经常遇到,操作起来略显蛋疼,几乎都要有阴影了。今天体验了一下MySQL的备份与还原,感觉简单多了...

2359
来自专栏Angular&服务

解决mac上出现包损坏等情况,不能打开软件

846
来自专栏java架构师

java基础-servlet-1

servlet,是运行于服务器端的小程序。它既可以运行在http服务器端,也可以运行在mail等其他服务器端。我是这样理解,tomcat把接收到的客户端请求,转...

2626
来自专栏IT开发技术与工作效率

Eclipse Alt+/插入自定义代码段教程

1092
来自专栏salesforce零基础学习

salesforce 零基础学习(三十)工具篇:Debug Log小工具

开发中查看log日志是必不可少的,salesforce自带的效果显示效果不佳,大概显示效果如下所示: ? chrome商城提供了apex debug log良好...

1975
来自专栏L宝宝聊IT

esxi网络中虚拟机的相关操作

1754
来自专栏编程思想之路

ubuntu系统上配置git

1,首先第一步检查一下本机是否已经安装了git 随便到一个git目录下执行git status或者其他git命令,如果本机没有安装,则会提示你去安装,ubunt...

1937

扫码关注云+社区