最新消息:

Arduino菜鸟通俗版解读系列(9)下拉电阻的作用

Arduino 少儿编程 2437浏览 0评论

大家好,快一个月没更新文章了,最近在捣鼓无人机,遇到了问题所以想搞完了有些心得了再写些干货文章,其中很重要的是PID控制,所以后面想详细讲讲PID控制。不过这一篇我想讲一下“下拉电阻”,为什么?其实我原本没打算写下拉电阻的,因为以为没什么可说的,而且又是比较常见的东西,可能大家都比较懂,所以想着不要班门弄斧了。不过最近看帖子发现有网友在问,所以我想把我对于下拉电阻的理解写一写,所以接下来请大家一起和我来认识一下这个“下拉电阻”吧。

“下拉电阻”是什么呢?请看图1。

Arduino菜鸟通俗版解读系列(9)下拉电阻的作用
图1

图1中这个电路图是想实现这样一个功能:当开关闭合时,3号数字接口获取5V的电压;当开关断开的时候,3号数字接口获得0V的电压。图中的那个电阻R我们就称为下拉电阻。好的,通过图1,我们知道了什么是下拉电阻,接下来我们就要开始细细讲解了。我会从以下几个思维步骤入手,来引导你们进入我的思维:

1.故事的起因:在Arduino上实现“两种状态的判断”功能;

2.故事的发展:针对这种功能我们有一个初步的电路设计方案;

3.故事的完善:这种电路在细节上存在什么问题;

4.故事的结局:获得一个现实可用的电路;

5.故事的延展:是否有其他方案。

好我们现在讲第一点:

1.故事的起因:在Arduino的项目中,我们往往需要判断“是和否”这样的双项选择,比如:我们设计了一款水位监测系统,当水位达到一定高度后我们希望警示灯亮,相反当水位还没有到达一定高度时,我们希望警示灯暗。那么在这个项目中,关键点就是要判断一个“是/否”状态,即水位是否达到警戒位置。假如我们需要用Arduino来实现这个功能,那么我们首先需要解决的一个问题就是:怎么根据水位变化产生两种电压信号?换句话说就是,当水位到达警戒位置时,我们希望产生一种电压信号;而当水位没有到达警戒位置时,我们希望产生另一种电压信号。这就是所有故事的起因。

2.故事的发展:为了实现上面所说的“根据水位产生两种电压信号”的想法,我们自然而然会去设计一种外围电路,这种外围电路会根据水位来产生两种不同的电压信号,然后这两种不同的电压信号会被传递给Arduino,Arduino再根据电压信号来控制警戒灯。比如,当水位到达警戒位置时,该外围电路会产生一个5V的高电平,而当水位没有达到警戒位置时,该外围电路会产生一个0V的低电平。那么Arduino就可以通过获取高电平或者低电平来判断水位的情况,从而控制警戒灯的亮暗。好我们在这个朴素的想法指引下,会很容易地想到一个方案,见图2。

Arduino菜鸟通俗版解读系列(9)下拉电阻的作用
图2

图2是一个非常简单的电路,意思也非常明显:此时水位就相当于一个开关,当水位处于低位时,Arduino上的3号引脚和5V断开;当水位不断升高,最终会将图2中的导线导通,一旦导通之后,3号引脚就和5V高电平接通了,此时3号引脚就会读取到高电平,5V。嗯~完美,这样一来就可以通过水位的变化来获取到两种电平状态了!思路没错不过想要真的让这个电路运作起来,还需要解决几个问题,请看第3步。

3.故事的完善:图2中的电路图首先有第一个问题要解决:当水位足够高,导线导通的时候,我们知道3号引脚读到的是5V电平;但是当水位不高,还未能将导线导通的时候,3号引脚读入的是多少V?0V吗?其实不是的,当导线没有导通的时候,3号引脚读取到的是一连串变化的电平信号,我们叫这种状态为“浮空”状态。好,到底什么是“浮空”状态?从图2中我们可以看到,当水位没有将导线上下导通的时候,3号引脚上只是孤零零连着一个电线,那么此时这跟电线是不是很像一根天线呢?对!此时这根导线就相当于一根天线,这根天线会接受外围环境中的电磁波,然后传递到3号引脚上,所以此时3号引脚上接收到的既不是5V也不是0V,而是一串噪声信号,波动不定高高低低,就像波浪一样起起伏伏,所以我们叫这种状态为“浮空”状态。“浮空”状态是我们要极力避免的,为什么就不解释了,显然嘛!好,为了解决“浮空”状态,怎么办?很简单把3号引脚接地,如图3:

Arduino菜鸟通俗版解读系列(9)下拉电阻的作用
图3

就像这样把3号引脚接地即可。那么此时导线没有接通时,3号引脚接受到的就是0V。为什么接地了就不“浮空”了?嗯,大家生活中有过身上带静电的经验吧,当我们身上带静电的时候我们会去摸一下别的地方,把静电释放掉,这就相当于接地了,所以图3中将3号引脚接地是一个意思,通过接地我们把环境中的电磁波释放到大地之中,这样3号引脚的输入就稳定在0V了。到目前为止一切都是那么的完美!我们好像已经得到了一个可以实际使用的电路了!且慢还没有!我们继续思考下去,当水位不断升高,接通了导线,这个时候3号引脚就和5V接通了!但是有的朋友可能会发现,此时5V似乎和地短接了?对!这就是另外一个问题所在,当导线导通时,5V端其实会通过接地而短路。所以学过初中物理的我们可以知道,这个时候电流全部通过接地走掉了,而且电流会很大,搞不好会烧坏Arduino。怎么办?见图4。

Arduino菜鸟通俗版解读系列(9)下拉电阻的作用
图4

在3号引脚和GND之间接一个限流电阻,这个电阻就叫“下拉电阻”我们的主角终于登场了!它的作用就是限制5V短接GND的,防止电流过大,那么此时图4中A点的电位就是5V,也就是3号引脚的读入电压值。但是为什么它叫下拉电阻呢?明明是限流电阻嘛,别急,我们继续往下讲。请看图5。

Arduino菜鸟通俗版解读系列(9)下拉电阻的作用
图5

我们说为了防止5V高电平在导通状态下和GND短接,所以我们加上了一个限流电阻,那么当水位没有导通5V高电平时,这个限流电阻会有什么影响呢?如图5所示,当5V没有导通的时候,A点处的电位是多少?其实这个时候会有一个小电流从Arduino内部流出,需要注意的是Arduino内部其实也有内部电阻的,我们叫它 r,所以A点处的电位值其实是通过R和 r分压获得的,即U1/U2=r/R(见图5),从式子中可见电阻R越小,它分到的电压U2就越小,而U2其实就是A点的电位值,所以换句话说R的阻值越小A点的电位越低,R的作用就像是把A点电位往下拉一样,所以叫“下拉电阻”。好,讲到这里我们会有一个困惑:当水位没有导通5V高电位时,A处的电位不是0?对的,严格地讲不是0 ,但是活人不能被尿憋死,我们尽可能把R取的小一点,这样A点处的电位不就可以接近于0 了嘛,同时我们在整个系列的第一篇就说过,Arduino的数字引脚在读取电平的时候是允许一个误差范围的,就是说我们输入的假如是0.01V,此时Arduono也会认为它是低电平,所以我们没有必要非得输入一个严格的0V给到Arduino。

所以,我们可以看到这个所谓的“限流电阻”其实还有一个控制A点电位的功能,通过降低R的阻值可以让A点电位尽可能接近0V, 所以这个限流电阻又被叫做“下拉电阻”取得就是它“往下拉低电位”的意思。当然我们也不能把R取的太小了,因为如果R阻值太小就起不到限流的作用了,所以R的阻值大小是有一个平衡点的,通常我们取10K欧。

4.故事的结局:故事的结局其实已经讲完了,就是图4和图5中的电路图。这就是一个可以实际应用的电路图了。

5.故事的延展:很多文章尤其是网上一些帖子的讲解,一直强调下拉电阻的作用是防止“浮空”,这是错误的,浮空状态和下拉电阻没有关系,我们不需要下拉电阻一样可以避免浮空。在Arduino中下拉电阻的更关键的作用在我看来就是为了限流,而非防止浮空。因为如果只是为了避免浮空而拉低电位的话,直接接地就基本可以了(如图3),但是由于直接接地会造成短接,所以我们不得不加一个电阻限流,这才是Arduino中下拉电阻的更大的作用。下面给出图6中的例子让大家思考下。

Arduino菜鸟通俗版解读系列(9)下拉电阻的作用
图6

图6中我们采用了一个单刀双掷开关,代替了原来那种开关,这时候我们发现不再需要下拉电阻了,为什么?因为当我们把开关打到1号位置时5V并不会和GND短接;当把开关打到2位置时,3号引脚也不再担心下拉电阻引起的电位变化了。并且无论开关在哪个位置,3号引脚都不会出现“浮空”状态。

始发于知乎专栏:johnson

您必须 登录 才能发表评论!