最近学校做硬件课程设计,又把之前玩玩的 Arduino 搬出来了。有一个一直没搞清楚的问题,为什么按钮通常需要接一个上拉或者下来电阻,否则很容易「失控」。这次认真研究了一下总算搞明白了。
如图,我们想实现一个很简单的功能,即通过判断1号口的电压来判断按钮(开关)是否接通。当接通时电压为 5v,否则电压为 0v。但是我们在接入到1号口的一段接了一个电阻并接地,这个电阻就叫下拉电阻。
下拉电阻的作用是:在确保断路电压为0的情况下避免短路。
看起来也许并没有什么问题。但前提是你认为暴露在空气中电压为0,然而事实不是这样的。如图,开关断开的情况下1号口相当于直接暴露在空中,叫做浮空状态。浮空状态的要尽量避免的,因为它的电压不是0而是未知。由于 空中有错综复杂的电磁波,以及其他各种各样的原因,1号口会收到一串噪声信号,电压像波浪一样持续变化。这样我们就很难准确判断开关的按下。
解决浮空状态很简单,直接接地就好了。这样所有干扰信号会被直接引到大地,1号口的电压始终为0。那如果开关闭合呢?恩,好像5v和大地短接了。不能用事小,烧板子事大啊。所以必须加上一个限流电阻,就作为下拉电阻啦。
那么为什么叫下拉呢?
首先我们需要知道2个事实:
根据串联分压原理可以很简单地得出:\frac{U_{r}}{U_{R}} = \frac{r}{R}URUr=Rr,1口得到的就是 A 点的电位,A 点电位就是 R 上分得的电压。不难看出 r 越小,A 测得的电压越小,越接近0。就好像 R 在把 A 的电位往下拉,所以就叫下拉电阻啦。
为了让电压接近0,R 要尽可能小,但太小又失去了意义。所以需要找一个平衡点,一般来说都采用 10k 的电阻。
类似下拉电阻,如果把电阻接到一个电源,开关另一端接地,那么就叫上拉电阻啦。
上拉电阻可以将不确定的信号固定在高电平。此时逻辑与正常情况下是相反的,开关断开时1口得到是 5v,闭合时是0v。