主题1:上拉、下拉的含义,作用和分类:
1.上、下拉电阻定义
上拉电阻是把一个信号通过一个电阻接到电源(Vcc),下拉电阻是一个信号通过一个电阻接到地(GND)。
2.强上拉、弱上拉
强上拉、弱上拉的强弱只是上拉电阻的阻值不同,没有什么严格区分。例如:50Ω上拉,一般成为强上拉;100kΩ上拉则称为弱上拉。下拉也是一样的。强拉电阻的极端就是0Ω电阻,即将信号线直接与电源或低相连接。
强上拉:电阻阻值在1k-5.6k左右,电阻小,特点是流过的电流大,功耗大。
弱上拉:电阻阻值在10k及以上,电阻大,特点是流过的电流小,功耗小。
电阻大到一定程度(无穷大),相当于开路。
补充,开路和断路的区别:
开路(物理上连接),是指电路中两点间无电流通过或阻抗值 (或电阻值)非常大的导体连接时的电路状态。
断路(物理上断开),是指当电路没有闭合开关,或者导线没有连接好,或用电器烧坏或没安装好(如把电压表串联在电路中)时,即整个电路在某处断开,处在这种状态的电路叫做断路。
3.上、下拉电阻的作用
因为上下拉电阻的作用概念很宽泛,不用领域的使用方法也不同,常见使用方法整理如下:
(1)维持输入管脚是一个稳态;
(2)三极管实现电平转换电路的外围电路;
(3)OC、OD电路
在OC(Open Collector,集电极开路)和OD(Open Drain,漏极开路)电路中,上拉电阻的作用至关重要。它主要为集电极开路输出型电路提供输出电流的通道。某些芯片的输出管脚可能集成了三极管或MOSFET,但未集成上拉电阻到VCC,这样的管脚便形成了开路,因此被称为OC。根据三极管的外围电路知识,上拉电阻是不可或缺的。在原理图中,为OC、OD电路添加的上拉电阻,正是确保电路功能完整的关键要素。
(4)总线I/O接口上、下拉电阻
一些总线有输入输出接口,本质就是OC或OD的接口。I2C(Inter Intergrated Circuit,内部集成电路)总线就是典型的OD输出结构的应用,典型的I2C电路都有上拉电阻。
(5)增加输出管脚的驱动能力;
(6)电平标准匹配;
(7)增强电路抗外界电磁干扰能力;
4.吸电流、拉电流、灌电流定义
拉电流:主动输出电流,是从输出口输出电流。
灌电流:被动输入电流,是从输出端口流入吸电流。
吸电流:吸是主动吸入电流,是从输入端口流入吸电流和灌电流就是从芯片外电路通过引脚流入芯片内的电流,区别在于吸收电流是主动的,从芯片输入端流入的叫吸收电流(即吸电流)。
拉电流是数字电路输出高电平给负载提供的输出电流,灌电流时输出低电平时外部给数字电路的输入电流,它们实际就是输入、输出电流能力;吸电流是对输入端(输入端吸入)而言的,而拉电流(输出点流出)和灌电流(输出端被灌入)是相对输出端而言的。
主题2:上下拉电阻用多大的?需要看场合。
(1)、如果在手持设备或电池供电的应用中,可能上下拉电阻会更大一些,比如50K。
(2)、一般应用中上下拉电阻,10K、4.7K、5.1K都用,不过有时候还得对照外部器件手册来确定。比如COMS输入的芯片,上下拉电阻可以用大一些;如果是TTL输入的芯片,有时候用的不合适,反而起负作用。
具体用多少看对应的型号的datasheet,不过5V一般用10K,3.3用4.7多一点,具体问题具体分析。
比如说有的MCU,是5V供电,他的I0口在低电平状态时能够通过的电流为2MA,IO口的低电平是小于0.5V 。
如果你选择的是10k,当mcu为低电平时,通过的电流为0.5MA,IO口端的电压为0.1V,那么这个状态很好,满足要求。
如果选择的是1k,单片机内部是有内阻的,电阻过小,会导致通过IO口的电流过大烧坏单片机,因为单片io内部是有内阻的,电流大了分得的电压就越大,有可能导致IO口末端的电压大于0.5V,单片机认为不是低电平,数据出现错误。
总之:
上拉电阻的选择,上拉电阻选择越大,功耗越低,但是要保证通过的电流能驱动外设和IO口。
上拉电阻选择越小,功耗越大,但是要保证当为低电平时,io口端的电压要在低电平的电压值的范围之内。
经验值:一般为5.6k到10k之间,一般都不会出现太大问题。
经验黑话:
1.先看datasheet怎么说,一般都会有;
2.没有的就查datasheet自己算;
3.协议类如i2c的另外考虑;
4.我一般就算两个数,10k和4.7k,哪个能用就哪个。。。
主题3:下面说说如何看datasheet:
上拉电阻、下拉电阻的阻值选择,上拉电阻通常可以选择1k到10k数值不等。
具体应用中大多数使用为主控芯片的GPIO引脚进行上拉和下拉,对此上拉、下拉阻值的选择却说得不明不清。
上拉电阻通常可以选择1k到10k数值不等,常用4.7K,你问老硬件工程师为什么是这个值?
答:经验值(哪个怪经验值多,我也要刷)
进入正题,一下会从两部分进行讲解,1为普通MCU主控的GPIO上拉电阻,2为I2C信号的上拉电阻。
上拉电阻:
1、那么如下图MCU型号为GD32F470ZIT6(随便找的一个用过的小型处理器芯片做例子)
对于使用这颗芯片,GPIO脚上拉电阻值如何选择?看这部分写明Iio=±8和±20mA,因为我这边正常3.3V供电,所以IO也是3.3V的最大值计算得到3.3V÷8mA=412.5Ω,3.3V÷20mA=165Ω,所以其实只要大于计算得出的这两个值理论上所以也没问题,那为什么选择4.7K上拉?因为IO本身不进行上拉也可以输出,上拉的目的:
一、是确保上下电时IO的稳定状态为高;
二、是进一步提供输出能力足够(因为负载情况未知,所以负载电流不确定);
三、是某些主芯片的IO会处于开漏状态,例如FPGA(就是不上拉就没输出,具体去搜索开漏是什么含义);
为保证IO的正常工作一般选择3.3V÷4.7kΩ=0.7mA的驱动电流,与其说是选上拉电阻,你也可以理解为选驱动电流大小。
看到这里,对上拉电阻为什么选择4.7KΩ还是有点懵?
看看这个图,这个值为4.7KΩ会对图中上升和下降的曲线有一定影响,修改这个值越接近1K曲线越陡峭,越接近10K曲线斜角越大,下图示波器波形上升沿时间和下降沿时间是多少不重要,看着很方就好。
主题4:I2C上拉电阻如何选择?
1、为什么是开漏输出?
I2C协议支持多个主设备与多个从设备在一条总线上,如果不用开漏输出,而用推挽输出,会出现主设备之间短路的情况。所以总线一般会使用开漏输出。
2、为什么要接上拉电阻?
接上拉电阻是因为I2C通信需要输出高电平的能力。一般开漏输出无法输出高电平,如果在漏极接上拉电阻,则可以进行电平转换。 I2C由两条总线SDA和SCL组成。连接到总线的器件的输出级必须是漏极开路,都通过上拉电阻连接到电源,这样才能够实现“线与”功能。当总线空闲时,这两条线路都是高电平。
3、上拉电阻阻值怎么确定?
一般IO端口的驱动能力在2mA~4mA量级。
考虑到功耗问题,阻值不能过小;
如果上拉阻值过小,VDD灌入端口的电流将较大,功耗会很大,导致端口输出的低电平值增大(I2C协议规定,端口输出低电平的最高允许值为0.4V)。故通常上拉电阻应选取不低于1K的电阻(当VDD=3V时,灌入电流不超过3mA)。
考虑到速度问题,阻值不能过大;
它取决于上拉电阻和线上电容形成的RC延时,RC延时越大,波形越偏离方波趋向于正弦波,数据读写正确的概率就越低,所以上拉电阻不能过大。 I2C总线上的负载电容不能超过400pF。当I2C总线上器件逐渐增多时,总线负载电容也相应增加。当总的负载电容大于400pF时,就不能可靠的工作。这也是I2C的局限性。 建议上拉电阻可选用1.5K,2.2K,4.7K。
4、I2C总线基本操作
根据I2C总线规范,总线空闲时两根线都必须为高。假设主设备A需要启动I2C,他需要在SCL高电平时,将SDA由高电平转换为低电平作为启动信号。 主设备A在把SDA拉高后,它需要再检查一下SDA的电平。为什么? 因为线与,如果主设备A拉高SDA时,已经有其他主设备将SDA拉低了,由于 1 & 0 = 0 那么主设备A在检查SDA电平时, 会发现不是高电平,而是低电平。说明其他主设备抢占总线的时间比它早,主设备A只能放弃占用总线。如果SDA是高电平,说明主设备A可以占用总线,然后主设备A将SDA拉低,开始通信。 因此,模拟I2C一定要将GPIO端口设置为开漏输出并加上拉电阻。
主题5:下拉电阻:
使用下拉电阻范围在1k~100k,阻值范围比上拉电阻还广但使用比上拉情景要少。