FROM:https://blog.csdn.net/qq_39560607/article/details/81714120

在配置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-DrainPush-Pull相关推荐

  1. GitHub 中 Merge pull request 的 3 中选项说明

    Merge pull request 提供了 3 种 merge 方法: Create a merge commit:GitHub 的底层操作是 git merge --no-ff.feature 分 ...

  2. Git 常用操作(5)- git clone/git checkout -b/git diff/git push/git pull

    1. git clone--获取远程仓库 当 git fetch 命令从服务器上抓取本地没有的数据时,它并不会修改工作目录中的内容.它只会获取数据然后 让你自己合并. 然而,有一个命令叫作 git p ...

  3. IDEA : Git Pull Failed 解决(IDEA中使用stash功能)

    一.问题: 本地要commit代码,commit之前需pull代码,但pull提示冲突.如下 Git Pull Failed Your local changes would be overwritt ...

  4. 解决每次git pull需要不用输入用户名信息

    问题描述 在服务器上每次执行git pull,都提示输入用户名和密码 现象分析 我们在git clone工程时有2中形式 https 和git@git.当你使用前者拉取工程时每次都需要输入用户名和密码 ...

  5. git init 会不会清空_Git命令:git pull amp; git fetch

    前言 本地仓库需要获取远程仓库中的更新,需要用到Git命令pull或fetch,这两个命令在实际使用时有何区别,下面详细介绍下. 使用工具 Git v2.29.2.2 TortoiseGit v2.4 ...

  6. Git fetch和git pull的区别

    原文:http://www.tech126.com/git-fetch-pull/ Git中从远程的分支获取最新的版本到本地有这样2个命令: 1. git fetch:相当于是从远程获取最新版本到本地 ...

  7. git pull出现There is no tracking information for the current branch

    使用git pull 或者 git push 的时候报错 gitThere is no tracking information for the current branch. Please spec ...

  8. Android XML pull 解析器

    Android 并未提供对 Java StAX API 的支持.但是,Android 确实附带了一个 pull 解析器,其工作方式类似于 StAX.它允许您的应用程序代码从解析器中获取事件,这与 SA ...

  9. Git Fetch vs Pull:Git Fetch和Git Pull命令之间有什么区别?

    Git pull and fetch are two commands that are regularly used by Git users. Let's see the difference b ...

  10. 用PULL解析器解析XML文件

    第一种方式(简洁,直接用pullparser.nextText()来返回下一个String类型的值): 1 package lee.service; 2 3 import java.io.InputS ...

最新文章

  1. 2018-2019-1 20165214 《信息安全系统设计基础》第六周学习总结
  2. 【leetcode】Linked List Cycle I II
  3. Java多线程之线程通信之生产者消费者阻塞队列版
  4. 常用数据库的分页实现
  5. ubuntu18.04 本地源制作
  6. [51nod]2128 前缀异或【数学题】
  7. 全栈创建一个小程序(mpvue+nodejs+mysql)---(一)--本地开发
  8. 王道考研计算机网络笔记目录
  9. android TextWatcher 学习
  10. matlab轴向柱塞泵动力学仿真,基于ADAMS柔性模型的轴向柱塞泵动力学仿真
  11. 在腾讯云 EMR 上使用 GooseFS 加速大数据计算服务
  12. 微信表情包储服务器,微信表情包不用收藏,只需打开这个设置,再也不担心斗图了...
  13. Zabbix调优不完全指南
  14. HDMI以及HDCP之间的关系介绍
  15. 常用Elasticsearch语句
  16. 使用mac制作linux启动盘与恢复U盘(dd命令制作U盘启动盘后怎么恢复U盘)
  17. 为什么http请求会缓存?显示from disk cache?
  18. 29转换为8位二进制的转换过程
  19. 当try_files遇上gateway是如何产生火花的
  20. 用户与计算机的交互界面是什么,一文解读:什么是用户界面设计?

热门文章

  1. 计算机专业笔记本电脑华为,大学生不知道买什么电脑?来看这款华为荣耀极致性价比笔记本!...
  2. 用Python画出奥运五环图 (Python经典编程案例)
  3. uva10066-双塔
  4. Mongodb实战:豆瓣电影排行榜分析及结果展示设计
  5. 自制的Arduino多级菜单类
  6. 常见系统故障修复(一)——修复MBR扇区故障
  7. 《2022 中国开源贡献度报告》首次发布!
  8. win7系统配置ntp服务器,技术员教你解决win7系统NTP时间服务器设置的设置方法
  9. python 删除指定目录_删除Python中除一个子目录外的目录
  10. C++输入大写字母转小写字母