【转】上拉下拉电阻、I/O输出(开漏、推挽等)
作者:BakerZhang
链接:https://www.jianshu.com/p/3ac3a29b0f58
来源:简书
感谢!
——————————————————————————————————————————————
第一部分:上拉电阻&下拉电阻
文章摘自:http://www.360doc.com/content/16/0315/06/29864439_542282998.shtml
是不是经常听别人讲,加个上拉电阻试试看,加个下拉电阻试试看,是不是还在疑惑上下拉电阻是什么,该怎么用,什么时候用,有什么用途?
1.什么是上下拉电阻
上拉电阻:把一个不确定的信号通过电阻连接到高电平,使该信号初始为高电平;
下拉电阻:把一个不确定的信号通过电阻连接到低电平,使该信号初始为低电平;
2.上下拉电阻的接线方法
上拉电阻如下图所示:

电阻R12将KEY1网络标识上拉到高电平,在按键S2没有按下的情况下KEY1将被钳制在高电平,从而避免了引脚悬空而引起的误动作;
下拉电阻如下图所示:

电阻R29将DIR网络标识下拉到低电平,在光耦没有导通的情况下DIR将被钳制在低电平,从而避免了引脚悬空而引起的误动作;
3.上下拉电阻的作用
提高电路稳定性,避免引起误动作。第一图中的按键如果不通过电阻上拉到高电平,那么在上电瞬间可能就发生误动作,因为在上电瞬间单片机的引脚电平是不确定的,上拉电阻R12的存在保证了其引脚处于高电平状态,而不会发生误动作。
提高输出管脚的带载能力。受其他外围电路的影响单片机在输出高电平时能力不足,达不到VCC状态,这会影响整个系统的正常工作,上拉电阻的存在就可以使管脚的驱动能力增强。这里特别强调如下:带片上I2C资源的单片机,其SCL和SDA引脚是开漏引脚,如果当做普通的GPIO来用的话,你会发现该引脚输出高电平极不稳定甚至因为负载的关系都无法正常输出高电平,这时候就需要在这两个引脚上加上拉电阻了。
第二部分:开漏输出、推挽输出
文章转载整理自自知乎的回答:http://www.zhihu.com/question/28512432/answer/41129662
1、一些三极管基础
要理解推挽输出,首先要理解好三极管(晶体管)的原理。下面这种三极管有三个端口,分别是基极(Base)、集电极(Collector)和发射极(Emitter)。下图是NPN型晶体管。

这种三极管是电流控制型元器件,注意关键词电流控制。意思就是说,只要基极B有输入(或输出)电流就可以对这个晶体管进行控制了。
下面请允许我换一下概念,把基极B视为控制端,集电极C视为输入端,发射极E视为输出端。这里输入输出是指电流流动的方向。

当控制端有电流输入的时候,就会有电流从输入端进入并从输出端流出。

而PNP管正好相反,当有电流从控制端流出时,就会有电流从输入端流到输出端。

2、开漏输出电路
要理解开漏,可以先理解开集。

如图,开集的意思,就是集电极C一端什么都不接,直接作为输出端口。
如果要用这种电路带一个负载,比如一个LED,必须接一个上拉电阻,就像下图这样。

当Vin没有电流,Q5断开时,LED亮。
当Vin流入电流,Q5导通时,LED灭。
开漏电路,就是把上图中的三极管换成场效应管(MOSFET)。这样集电极就变成了漏极,OC就变成了OD,原理分析是一样的。
N型场效应管各个端口的名称:

场效应管是电压控制型元器件,只要对栅极施加电压,DS就会导通。
结型场效应管有一个特性就是它的输入阻抗非常大,这意味着:没有电流从控制电路流出,也没有电流进入控制电路。没有电流流入或流出,就不会烧坏控制电路。而双极型晶体管不同,是电流控制性元器件,如果使用开集电路,可能会烧坏控制电路。这大概就是我们总是听到开漏电路而很少听到开集电路的原因吧?因为开集电路被淘汰了。
++++++++++伟大的分割线+++++++++
我们再来看一个典型的集电极开路电路:

右边的那个三极管集电极什么都不接,所以叫做集电极开路(左边的三极管为反相之用,使输入为“0”时,输出也为“0”)。
对于图1,当左端的输入为“0”时,前面的三极管截止(即集电极C跟发射极E之间相当于断开),所以5V电源通过1K电阻加到右边的三极管上,右边的三极管导通(即相当于一个开关闭合),此时输出端与地相接,电压为“0”;当左端的输入为“1”时,前面的三极管导通,此时后面的三极管输入端电压被接地,电压拉低,三极管截止了(相当于开关断开)。
我们将图1简化成图2的样子。图2中的开关受软件控制,“1”时断开,“0”时闭合。很明显可以看出,当开关闭合时,输出直接接地,所以输出电平为0。而当开关断开时,则输出端悬空了,即高阻态。这时电平状态未知,如果后面接一个电阻负载(即使很轻的负载)到地,那么输出端的电平就被这个负载拉到低电平了,所以这个电路是不能输出高电平的。
开漏电路就是指以MOSFET的漏极为输出的电路。一般的用法是会在漏极外部的电路添加上拉电阻。完整的开漏电路应该由开漏器件和开漏上拉电阻组成。如下图2-1所示:

组成开漏形式的电路有以下几个特点:
1) 利用外部电路的驱动能力,减少IC内部的驱动(或驱动比芯片电源电压高的负载)。当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up ,MOSFET到GND。IC内部仅需很下的栅极驱动电流。如图2-1。
2) 可以将多个开漏输出的Pin,连接到一条线上。形成 “与逻辑” 关系。如图2-1,当PIN_A、PIN_B、PIN_C任意一个变低后,开漏线上的逻辑就为0了。这也是I2C,SMBus等总线判断总线占用状态的原理。如果作为输出必须接上拉电阻。接容性负载时,下降延是芯片内的晶体管,是有源驱动,速度较快;上升延是无源的外接电阻,速度慢。如果要求速度高电阻选择要小,功耗会大。所以负载电阻的选择要兼顾功耗和速度。
3) 可以利用改变上拉电源的电压,改变传输电平。如图2-2, IC的逻辑电平由电源Vcc1决定,而输出高电平则由Vcc2(上拉电阻的电源电压)决定。这样我们就可以用低电平逻辑控制输出高电平逻辑了(这样你就可以进行任意电平的转换)。(例如加上上拉电阻就可以提供TTL/CMOS电平输出等。)

4) 开漏Pin不连接外部的上拉电阻,则只能输出低电平(因此对于经典的51单片机的P0口而言,要想做输入输出功能必须加外部上拉电阻,否则无法输出高电平逻辑)。一般来说,开漏是用来连接不同电平的器件,匹配电平用的。
5) 标准的开漏脚一般只有输出的能力。添加其它的判断电路,才能具备双向输入、输出的能力。
6) 正常的CMOS输出级是上、下两个管子,把上面的管子去掉就是OPEN-DRAIN了。这种输出的主要目的有两个:电平转换、线与。
7) 线与功能主要用于有多个电路对同一信号进行拉低操作的场合,如果本电路不想拉低,就输出高电平,因为OPEN-DRAIN上面的管子被拿掉,高电平是靠外接的上拉电阻实现的。(而正常的CMOS输出级,如果出现一个输出为高另外一个为低时,等于电源短路。)
8) OPEN-DRAIN提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。
应用中需注意:
1) 开漏和开集的原理类似,在许多应用中我们利用开集电路代替开漏电路。例如,某输入Pin要求由开漏电路驱动。则我们常见的驱动方式是利用一个三极管组成开集电路来驱动它,即方便又节省成本。如图2-3。

2) 上拉电阻R pull-up的阻值决定了逻辑电平转换的沿的速度。阻值越大,速度越低功耗越小。反之亦然。
3、推挽输出电路
来看一个典型的推挽输出电路:

上面的三极管是N型三极管,下面的三极管是P型三极管,请留意控制端、输入端和输出端。
当Vin电压为V+时,上面的N型三极管控制端有电流输入,Q3导通,于是电流从上往下通过,提供电流给负载。

经过上面的N型三极管提供电流给负载(Rload),这就叫「推」。
当Vin电压为V-时,下面的三极管有电流流出,Q4导通,有电流从上往下流过。

经过下面的P型三极管提供电流给负载(Rload),这就叫「挽」。
以上,这就是推挽(push-pull)电路。
4、一些总结
1) 推挽输出能够输出高或者低,而开漏输出只能输出低,或者关闭输出,因此开漏输出总是要配一个上拉电阻使用。
2) 开漏输出的上拉电阻不能太小,太小的话,当开漏输出的下管导通时,电源到地的电压在电阻上会造成很大的功耗,因此这个电阻阻值通常在10k以上,这样开漏输出在从输出低电平切换到高电平时,速度是很慢的。
3) 推挽输出任意时刻的输出要么是高,要么是低,所以不能将多个输出短接,而开漏输出可以将多个输出短接,共用一个上拉,此时这些开漏输出的驱动其实是与非的关系。
4) 推挽输出输出高时,其电压等于推挽电路的电源,通常为一个定值,而开漏输出的高取决于上拉电阻接的电压,不取决于前级电压,所以经常用来做电平转换,用低电压逻辑驱动高电压逻辑,比如3.3v带5v。
作者:BakerZhang
链接:https://www.jianshu.com/p/3ac3a29b0f58
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
【转】上拉下拉电阻、I/O输出(开漏、推挽等)的更多相关文章
- USB信号是什么类型的? 为什么在D+,D-处要接上拉下拉电阻呢,具体阻值要如何计算
USB协议要求的,1.5K上拉在D+时表示是全速设备,在D-表示不是全速设备有些方案里面(比如PNX5230)推荐D+/D-接下拉1M的电阻是为了提高数据传输稳定性的 ① usb有主从设备之分,主设 ...
- USB Host的上拉下拉电阻
关于USB的上下拉电阻,不是随便接个任意阻值的电阻就ok了. 当你的USB为主设备的时候,D+.D-上分别接一个15K的下拉电阻,这样可以使得在没有设备插入的时候,D+.D-上始终保持低电平:当为 ...
- iOS不得姐项目--精华模块上拉下拉的注意事项,日期显示,重构子控制器,计算cell的高度(只计算一次),图片帖子的显示
一.上拉下拉注意事项 使用MJRefresh中的上拉控件自动设置透明 当请求下页数据通过page的时候,注意的是上拉加载更多数据失败的问题,下拉加载数据失败了,页数应该还原.或者是请求成功的时候再将页 ...
- 练习使用XRecyclerView,可上拉下拉刷新。
package com.lixu.testxrecyclerview; import android.support.v7.app.AppCompatActivity; import android. ...
- iOS不得姐项目--推荐关注模块(一个控制器控制两个tableView),数据重复请求的问题,分页数据的加载,上拉下拉刷新(MJRefresh)
一.推荐关注模块(一个控制器控制两个tableView) -- 数据的显示 刚开始加载数据值得注意的有以下几点 导航控制器会自动调整scrollView的contentInset,最好是取消系统的设置 ...
- ListView实现上拉下拉刷新加载功能
第一步.首先在你项目中创建一个包存放支持下拉刷新和上拉加载的类:
- 解决iscroll.js上拉下拉刷新手指划出屏幕页面无法回弹问题
博客已迁移至http://zlwis.me. 使用过iscroll.js的上拉下拉刷新效果的朋友应该都碰到过这个问题:在iOS的浏览器中,上拉或下拉刷新时,当手指划出屏幕后,页面无法弹回.很多人因为解 ...
- swift实现UItableview上拉下拉刷新模块
最近用写个项目 发现上拉下拉刷新模块没找到合适的 so 自己写了一个 由于最近忙 教程就不写了 里面有 直接贴地址https://github.com/DaChengTechnology/DCRefr ...
- 打造android万能上拉下拉刷新框架——XRefreshView (二)
打造Android万能上拉下拉刷新框架--XRefreshView(一) 打造Android万能上拉下拉刷新框架--XRefreshView(三) 一.前言 自从上次发表了打造android万能上拉下 ...
随机推荐
- nyoj_448_寻求最大数_201402261424
寻找最大数 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大, 比如当n=920 ...
- N - 贪心
Have you ever heard the story of Blue.Mary, the great civil engineer? Unlike Mr. Wolowitz, Dr. Blue. ...
- F2BPM中关于工作流引擎驳回设计
1.1 关于驳回 驳回,在有的应用中叫“回退”.驳回是中国特色的一种方式,驳回在流程图上也没有迁移线的表达经常也是隐性的,比如申请经费可能由于资料不足被驳回来补充资料,像这样的例子有非常多,也很常见. ...
- DSP、Media、AdExchanger之间的关系及交互流程
广告商,如以下的樱花日语,淘宝卖家.其须要推广自己的产品. Zampdsp(晶赞) 是DSP平台.其与非常多广告商合作,广告商在平台上公布广告创意,并托付平台代为投放. tanx.com 是adExc ...
- 为datatable添加自增列
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...
- Atom编辑器折腾记_(15)JS代码片段补全(插件:javascript-snippets)
题外话 这款插件就比較重量级了-.用熟悉了写原生JS的效率要提升非常多--并且,不仅支持JS还包括了nodejs snippet javascript-snippets 插件作者: zenorocha ...
- 1215-Cannot add foreign key constraint
1.错误描写叙述 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/ ...
- android4.4的两个bug
Android4.4做了大量的改动.但也造成了非常多新的问题. 工作中碰到了几个比較有趣的bug.这两个bug在nexus 5上也有. 记录一下.以资纪念 1.Android4.4在解析jpg头的时候 ...
- 解决国内android sdk无法更新,google不能的简单办法
在国内屏蔽了很多外国站点.连google 和android都屏蔽了,做程序猿的就苦了! 只是车到山前必有路,我们也有我们的办法! 推荐一个比以下的更好的方法:红杏公益代理:http://blog.cs ...
- jabberNet 修改花名册条目的昵称
修改昵称,这么简单的功能,在jabberNet里怎么实现? 翻遍了jabberNet里的代码,jabber.client.RosterManager也,JabberClient也,似乎都没有现成的方法 ...