Open-DrainPush-Pull
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相关推荐
- GitHub 中 Merge pull request 的 3 中选项说明
Merge pull request 提供了 3 种 merge 方法: Create a merge commit:GitHub 的底层操作是 git merge --no-ff.feature 分 ...
- Git 常用操作(5)- git clone/git checkout -b/git diff/git push/git pull
1. git clone--获取远程仓库 当 git fetch 命令从服务器上抓取本地没有的数据时,它并不会修改工作目录中的内容.它只会获取数据然后 让你自己合并. 然而,有一个命令叫作 git p ...
- IDEA : Git Pull Failed 解决(IDEA中使用stash功能)
一.问题: 本地要commit代码,commit之前需pull代码,但pull提示冲突.如下 Git Pull Failed Your local changes would be overwritt ...
- 解决每次git pull需要不用输入用户名信息
问题描述 在服务器上每次执行git pull,都提示输入用户名和密码 现象分析 我们在git clone工程时有2中形式 https 和git@git.当你使用前者拉取工程时每次都需要输入用户名和密码 ...
- git init 会不会清空_Git命令:git pull amp; git fetch
前言 本地仓库需要获取远程仓库中的更新,需要用到Git命令pull或fetch,这两个命令在实际使用时有何区别,下面详细介绍下. 使用工具 Git v2.29.2.2 TortoiseGit v2.4 ...
- Git fetch和git pull的区别
原文:http://www.tech126.com/git-fetch-pull/ Git中从远程的分支获取最新的版本到本地有这样2个命令: 1. git fetch:相当于是从远程获取最新版本到本地 ...
- 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 ...
- Android XML pull 解析器
Android 并未提供对 Java StAX API 的支持.但是,Android 确实附带了一个 pull 解析器,其工作方式类似于 StAX.它允许您的应用程序代码从解析器中获取事件,这与 SA ...
- 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 ...
- 用PULL解析器解析XML文件
第一种方式(简洁,直接用pullparser.nextText()来返回下一个String类型的值): 1 package lee.service; 2 3 import java.io.InputS ...
最新文章
- 2018-2019-1 20165214 《信息安全系统设计基础》第六周学习总结
- 【leetcode】Linked List Cycle I II
- Java多线程之线程通信之生产者消费者阻塞队列版
- 常用数据库的分页实现
- ubuntu18.04 本地源制作
- [51nod]2128 前缀异或【数学题】
- 全栈创建一个小程序(mpvue+nodejs+mysql)---(一)--本地开发
- 王道考研计算机网络笔记目录
- android TextWatcher 学习
- matlab轴向柱塞泵动力学仿真,基于ADAMS柔性模型的轴向柱塞泵动力学仿真
- 在腾讯云 EMR 上使用 GooseFS 加速大数据计算服务
- 微信表情包储服务器,微信表情包不用收藏,只需打开这个设置,再也不担心斗图了...
- Zabbix调优不完全指南
- HDMI以及HDCP之间的关系介绍
- 常用Elasticsearch语句
- 使用mac制作linux启动盘与恢复U盘(dd命令制作U盘启动盘后怎么恢复U盘)
- 为什么http请求会缓存?显示from disk cache?
- 29转换为8位二进制的转换过程
- 当try_files遇上gateway是如何产生火花的
- 用户与计算机的交互界面是什么,一文解读:什么是用户界面设计?
热门文章
- 计算机专业笔记本电脑华为,大学生不知道买什么电脑?来看这款华为荣耀极致性价比笔记本!...
- 用Python画出奥运五环图 (Python经典编程案例)
- uva10066-双塔
- Mongodb实战:豆瓣电影排行榜分析及结果展示设计
- 自制的Arduino多级菜单类
- 常见系统故障修复(一)——修复MBR扇区故障
- 《2022 中国开源贡献度报告》首次发布!
- win7系统配置ntp服务器,技术员教你解决win7系统NTP时间服务器设置的设置方法
- python 删除指定目录_删除Python中除一个子目录外的目录
- C++输入大写字母转小写字母