【原创深度】上拉你的芯片管脚:如何测量上拉电阻的大小?

作者:Mike Parks

很多人在开始手工电子实践时首先要学习的课程之一就是了解上拉电阻。无论是防止微控制器I/O管脚悬空还是两个模块连接之间的开漏电路设计,上拉电阻都是一种必需的但是又很少被重视的元件。那么我们为什么要使用上拉电阻呢?难道我们不能把线路直接连接到器件的Vcc电源管脚上吗?我们应该采用多大阻值的电阻呢?

那么我们为什么要从上拉电阻开始考虑呢?假设我们有一个瞬时常开按钮,我们不希望I/O管脚悬空。为什么不直接将I/O引脚和按钮的一端直接连接到到Vcc上呢?这可以防止微控制器的I/O引脚在没有按下按钮的情况下悬空——它需要一个Vcc或者固定的高电位——然而一旦按下按钮,Vcc与地之间就会发生短路(图1),这会产生大量的热,如果系统采用的是电池供电,那么电池电量很快就会被耗尽。除了避免微控制器悬空I/O管脚的相关问题,在使用开漏拓扑电路时,上拉电阻也是必要的。我们在一篇演讲文章中详细讨论了开漏电路设计。

“”

图1:仅仅一根线路就可能发生短路(左),一个上拉电阻就可以防止输入管脚悬空,同时防止不必要短路现象的发生(来源:作者)

那么我们怎样选择合适的电阻呢?正如大多数工程的问题一样,答案取决于你的应用。首先我们以极端条件0Ω或者1mΩ为例,0Ω电阻(值越小上拉能力越强,因为它们允许通过的电流越大)我们已经讨论过,如果电阻值太小就会经过太大的电流,这可能是不安全的,或者说是效率低下的。如果我们采用1mΩ呢,这样也不安全吗?阻值大的电阻上拉能力弱,因为允许流过的电流小,因此答案是肯定的,但是这也是有代价的。在这些具体情况下需要在效率和功耗之间进行权衡处理。

我们将微控制器的I/O管脚看作是电容,电容积累的电压不能够瞬间改变,而是根据定时常熟(T)进行充放电,数学表达式为T=RC,其中R表示电阻值,C表示电容的值。当我们增加一个非常大的电阻时,这就会在现有电流大小的情况下增加了电容器的充电时间。实际上这意味单片机不能立即检测到按下的按钮,因为需要一段时间来检测到单片机规定的从LOW/OFF状态到HIGH/ON状态的变化。从用户的角度来看这样的电路性能是不可接受的,系统似乎没有及时的作出反应。对于I2C串行通信这样的开漏应用来说,时序常数比较大会对I2C总线产生负面影响,从而使其串行数据线(SDA)和串行时钟线(SCL)达到所需的波特率。

从数学上讲以下是计算电阻值的方法:

Rp(min)为可接受的最小电阻值,由下面方式计算得出:

Rp(min) = (Vcc - VOL(max) ) / IOL 其中:

● Vcc是电源电压
● VOL(max)是单片机I2C管脚检测到为低时的最大电压
● IOL是电压为VOL时的电流值

Rp(max)为可接受的最大电阻值,由下面方式计算得出:

Rp(max) = tr / (0.8473 x Cb) 其中:

● tr是SDL和SCL总线在所需波特率下可接受的上升时间,查看你所用器件的数据手册

● Cb是预计要被驱动的电容负载,附带说明一下,共享I2C总线的器件数量取决于电路板(PCB)和器件输入电容总和。根据I2C规范标准和快速操作模式,这个限制为400pF。之后需要一个I2C缓冲芯片,通常会运行很好,最大限制为112个器件以及7位可寻址的I2C实现方案。

下面是一个比较实用的经验法则,你应该考虑测试电路中的电阻值,看看是否达到了预期性能:

● 一般用于采用1kΩ到10kΩ的阻值
● 如果是低功率应用比如器件采用电池供电那么可以采用10kΩ到100kΩ的阻值

最后要考虑的是很多微控制器都有可以通过代码打开的内置上拉电阻,请务必检测器件数据手册,看看内置电阻值是否适合你的应用,如果不适合,那就不得不增加外部上拉电阻了。

原文链接:

https://www.mouser.cn/blog/pull-up-your-pins-how-to-size-pull-up-resistors

该发布文章为独家原创文章,转载请注明来源。对于未经许可的复制和不符合要求的转载我们将保留依法追究法律责任的权利。

最新文章