上拉电阻

介绍

  上拉电阻在使用微控制器(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对电压进行分压,R2的电压需要足够高从而使输入引脚读取高电平状态。

  举个例子,如果使用1MΩ电阻作为上拉电阻R1,输入引脚的阻抗R2为1MΩ(形成分压器),输入引脚的电压将为VCC的一半左右,微控制器可能不会将引脚注册为处于高电平状态。在5V系统上,如果电压为2.5V,微控制器在输入引脚上读取的是什么?是高还是低?微控制器无法判断。 所以10k-100kΩ的上拉电阻可以避免大多数问题。

  由于上拉电阻是如此常见,所以许多微控制器,如Arduino平台上的ATmega328微控制器,具有可以使能和禁止的内部上拉电阻。 要在Arduino上启用内部上拉电阻,可以在setup()函数中输入以下代码行:

  pinMode(5, INPUT_PULLUP); // Enable internal pull-up resistor on pin 5

  另一个要指出的是,上拉电阻越大,引脚响应电压变化的速度越慢。 这是因为,馈送输入引脚的系统本质上是与上拉电阻耦合的电容,从而形成RC滤波器,而RC滤波器需要一些时间来充电和放电。 如果你有一个真正快速变化的信号(如USB),高值上拉电阻可以限制引脚,从而   限制改变状态的速度。 这就是为什么你会经常看到USB信号线上1k到4.7KΩ的电阻。

  所有这些因素都决定了上拉电阻的阻值。

计算上拉电阻阻值

  假设您想在上述电路中,使得按下按钮时,电流限制为约1mA,其中Vcc = 5V。 你应该选择阻值为多少的电阻?

  很显然应该使用欧姆定律计算上拉电阻:

  根据上面的示意图,欧姆定律现在应变形为:

  将方程再次变形并带入数值,求解电阻:

  记住在计算前将所有单位转换为伏特,安培和欧姆(例如1mA = 0.001安培)。 最后解答可知,应当选择5kΩ的上拉电阻电阻。

  现在你应该知道什么是上拉电阻以及它是如何工作的了吧。


cc

原始文章采用CC BY-SA 4.0,您可以自由地:

  • 演绎 — 修改、转换或以本作品为基础进行创作
  • 在任何用途下,甚至商业目的。
  • 只要你遵守许可协议条款,许可人就无法收回你的这些权利。

本文由翻译美国开源硬件厂商Sparkfun(火花快乐)的相关教程翻译,原始教程采用同样的CC BY-SA 4.0协议,为便于理解和方便读者学习使用,部分内容为适应国内使用场景稍有删改或整合,这些行为都是协议允许并鼓励的。

原始文章及相关素材链接:

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