使用上拉电阻

来源:互联网 发布:圆方家居设计软件 编辑:程序博客网 时间:2024/06/08 14:01

英文原文地址:

https://learn.sparkfun.com/tutorials/pull-up-resistors/introduction

 

介绍:


上拉电阻在使用微控制器(MCUs)或者其他数字逻辑器件的时候很常见。本教程会解释什么时候和什么地方会用到上拉电阻,然后我们会通过一个简单的计算来展示为什么上拉电阻很重要。

 

什么是上拉电阻

我们设想你有一个MCU,它有一个配置成输入的引脚。如果没有东西连接在该引脚上,并且你的程序要读这个引脚的状态,这个状态是高(拉到VCC)还是低(接地)?这很难说。这种情况叫做悬空。为了防止这种未知状态,就需要一个上拉或者下拉电阻来保证引脚处于高电平还是低电平状态,同时需要流过少部分电流。

       简单起见,我们将把注意力放在上拉电阻上,因为它们比下拉电阻更常见。它们使用相同的概念,除了上拉电阻连接到高电平(通常3.3V或者5V,并且作为VCC),而下拉电阻连接到地。

上拉电阻经常和按键以及开关在一起使用。

       通过使用上拉电阻,输入引脚将在按键按下时读到高电平。换句话说,VCC和输入引脚(不是和地)之间会有小电流流过,输入引脚读出的电压接近VCC。按键按下时,输入引脚直接接地。电流通过电阻流入地,输入引脚读出低电平。记住,如果这里没有这个电阻,你的按键将使VCC接地,这是很糟糕的,就是我们说的短路。

       那么怎么选择电阻值呢?

简短的答案就是你需要一个近似10kΩ的电阻来上拉。

小电阻值叫做强上拉(更多电流),高电阻值叫做弱上拉(小电流)。

选择上拉电阻的阻值需要满足两个条件:

1、按键按下,引脚电平拉低。R1的阻值控制你希望VCC流出多少电流通过按键到地。

2、按键未按下,引脚电平拉高。上拉电阻控制引脚的电平。

对于条件1,你不希望电阻值过低。电阻值越低,按键按下的时候就会消耗更多的能量。一般你希望电阻值稍大一些(10KΩ),但是你不希望阻值过大,以免和条件2冲突。一个4MΩ的电阻可以作为上拉电阻,但是它的阻值太大(太弱)以至于不能在所有情况下正常工作。

条件2的一般规则是使用一个近似小于输入引脚阻抗(R2)1/10数量级的上拉电阻(R1)。微控制器的输入引脚阻抗范围在100K-1MΩ。这里,阻抗只是电阻值的另一种说法,在上图中用R2表示。因为,按键按下时,小电流就会从VCC流过R1进入引脚。上拉电阻R1和输入引脚阻抗R2分得电压,这个电压需要足够高来使得输入引脚读出高电平状态。

举个例子,如果你使用一个1MΩ的电阻来上拉,输入引脚阻抗约为1MΩ(构成一个分压器),输入引脚上的电压将是VCC的一半,微控制器引脚可能不是高电平状态。在一个5V系统中,MCU读出引脚状态电压是2.5V会是什么状况?是高还是低?MCU不知道结果,你可能读出高或者低状态。而10K到100KΩ可以避免大部分的问题。

既然上拉电阻需求这么广泛,很多MCU,比如Arduino平台上的ATmega328 微控制器,有可以开启和禁用的内部上拉电阻。启用Arduino的内部上拉电阻,你可以在你的setup函数中使用下面一行代码:

[cpp] view plain copy
print?
  1. pinMode(5,INPUT_PULLUP); // Enable internal pull-up resistor on pin 5  
pinMode(5,INPUT_PULLUP); // Enable internal pull-up resistor on pin 5


       需要指出的另外一点事上拉电阻阻值越大,引脚响应电压变化也就越慢。这是因为系统提供的引脚实际上是一个电容和一个上拉电阻的组合,因此组成一个RC滤波器,并且RC滤波器需要时间充电和放电。如果你有一个快速变化的信号(比如USB),高阻值上拉电阻可能限制引脚真实的状态转变速度。这就是为什么你经常看到USB信号线上电阻值为1K到4.7KΩ的原因。

       所有这些因素都会影响决定使用多大的上拉电阻。

 

计算上拉电阻阻值

      

       我们考虑你在上面的电路中按键按下时,希望限制电流到1mA左右。其中Vcc=5V,你需要使用多大的电阻。

       使用欧姆定理很容易计算上拉电阻的阻值:

       根据上面的电路图,欧姆定理公式变成:

       整理上面的方程并求解电阻值:

记住在计算前将所有单位转换成伏特、安培和欧姆(比如1mA=0.001A),接出电阻为5KΩ

原创粉丝点击