在配置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硬件模块内部是否有上拉电阻,如果没有,需要硬件电路上添加额外的上拉电阻)

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

Open-Drain&Push-Pull的更多相关文章

  1. Push pull, open drain circuit, pull up, pull down resistor

    Push pull 就以下面這個 電路來說, 因為沒有 pull up resistor, 所以 output voltage 由 low 往 high 的速度會較快. 有兩個電晶體,一個on,一個 ...

  2. 理解bootstrap的列偏移offset 和 推拉push/pull的区别?

    参考: http://www.cnblogs.com/jnslove/p/5430481.html & https://blog.csdn.net/hly_coder/article/deta ...

  3. MongoDB之$关键字及$修改器$set $inc $push $pull $pop

    一.查询中常见的  等于   大于  小于  大于等于  小于等于 等于:用':' 大于:用'$gt' 小于:用'$lt' 大于等于:用'$gte' 小于等于:用'$lte' MongoDB的操作就是 ...

  4. MongoDB 之 $关键字 及 $修改器 $set $inc $push $pull $pop MongoDB - 4

    我们在之前的 MongoDB 之 手把手教你增删改查 MongoDB - 2 中提到过 $set 这个系统关键字,用来修改值的对吧 但是MongoDB中类似这样的关键字有很多, $lt $gt $lt ...

  5. git push/pull时总需要输入用户名密码的解决方案

    在提交项目代码或者拉代码的时候,git会让你输入用户名密码,解决方案:(我们公司用的是gitlab) 执行git config --global credential.helper store命令 然 ...

  6. 4,MongoDB 之 $关键字 及 $修改器 $set $inc $push $pull $pop MongoDB

    MongoDB中的关键字有很多, $lt $gt $lte $gte 等等,这么多我们也不方便记,这里我们说说几个比较常见的 一.查询中常见的 等于 大于 小于 大于等于 小于等于 等于 : 在Mon ...

  7. MongoDB之$关键字,以及$修饰器$set,$inc,$push,$pull,$pop

    一.查询中常见的 等于 大于 小于 大于等于 小于等于 等于:在MongoDB中,什么字段等于什么值就是" : ",比如 "name":"路飞学城&q ...

  8. 2.每人自己建立一个HelloWorld项目,练习使用git的add/commit/push/pull/fetch/clone等基本命令。比较项目的新旧版本的差别。答题人:张立鹏

    第1步:创建SSH Key.在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步.如果没有,打开Shell ...

  9. git 命令的使用(一) add commit push pull

    一. commit 和 push 的区别 git作为支持分布式版本管理的工具,它管理的库(repository)分为本地库.远程库.git commit操作的是本地库,git push操作的是远程库. ...

  10. [转] 消息系统该Push/Pull模式分析

    信息推拉技术简介 “智能信息推拉(IIPP)技术”是在网上信息获取技术中加入了智能成份,从而有助于用户在海量信息中高效.及时地获取最新信息,提高了信 息系统主动信息服务的能力.如果引入基于IIPP的主 ...

随机推荐

  1. [转]CentOS7增加或修改SSH端口号

    前言:开启某服务或软件的端口,要从该服务或软件监听的端口(多以修改配置文件为主),SeLinux和防火墙(FireWall)的安全策略下手.如果使用阿里云,腾讯等第三方服务器还需要对管理控制台的安全组 ...

  2. December 02nd 2016 Week 49th Friday

    People will fall for its appearance while driving passionately. 观者倾心,驭者动魄. An advertisement of Merce ...

  3. November 27th 2016 Week 48th Sunday

    It is never too late to be what you might have been. 勇敢做自己,永远不嫌迟. What I might have been? Experienci ...

  4. 【笔记】select, poll, epool

    Select 系统调用: select 轮询监听多个文件描述符的数组,其原理如下(转自:这里): 从用户空间拷贝fd_set到内核空间:注册回调函数__pollwait:遍历所有fd,对全部指定设备做 ...

  5. 解决Struts2 json-plugin Date或Timestamp等日期格式带T的问题

    如果没有对日期时间对象类进行json日期格式声明,会出现类似"2013-06-18T12:08:56.23"日期,在日期中间多出一个T字母: 从通过查询数据,以及调试程序发现直到返 ...

  6. 最新版本2018.1.1webstorm安装、汉化、破解教程

    一.安装(下载与激活) 1.官网下载安装包https://www.jetbrains.com/webstorm/ 2.开始安装 3.选择安装目录,点击下一步 4.勾选64位,点击下一步 5.继续下一步 ...

  7. amcharts属性

    Amcharts的特点包含: *动画或静态 *价值轴能够扭转 *线性或对数轴的价值尺度 *提前定义或定制的子弹 *定制描写叙述不论什么数据点 *点击栏目/酒吧(可用于钻孔下来图表) *梯度弥漫 *价值 ...

  8. asp.net Web API简单的特性路由配置

    一,控制器代码: [RoutePrefix("ajilisiwei")]  //加URL前缀 (非必需)    public class ShoppingController : ...

  9. h5py

    解决办法: sudo apt-get install libhdf5-dev sudo apt-get install python-h5py

  10. vux UI 项目国际化

    第一步必须装 vux vux-loader vuex 和vuex-i18n npm i vux-loader -D npm i vuex vux vuex-i18n -S 安装完成需要配置webpac ...