简介
在数字逻辑电路中,一个信号不是0,就是1。正是因为这样,数字电路的设计才简单,可靠。
通常,用电压5v(或者接近5V)代表 on 开状态,代表高电平,对应状态 1。用电压0v (或者接近0v)代表off关状态,代表低电平,对应状态0。
有些开发板是基于3,3V的,因此使用3.3V作为高电平。
如果一个线路中的电压处于不确定的状态(例如一个引脚不和任何其它回路连通时),那我们就说它的电压是浮动的,他会随着时间不断变化,跳动,而且很容易受到外界环境的影响。处于这种不确定状态的电路会被随机解释为高或者低电平。 这种现象也叫电子噪声。
然而程序必须是严格准确的,所以电路的设计一定要避免线路电压处于浮动状态。
我们可以使用上拉电阻或者下拉电阻将电路的电压在任何时候都保持在确定的状态下,这就是上拉电阻和下拉电阻的作用。
下拉电阻
作用:将一个未知的电平拉低到稳定的低电平状态。
上图中,我们要判定input这个引脚 是高电平还是低电平。
当按钮S2没按下时,Input通过2个电阻接到GND,是稳定的低电平 。 当S2按下时,+5V ,S2 , R2 ,GND这条路导通,而Input接在R2的前面,因此会得到高电平。
因此我么可以通过Input端是高电平还是低电平来判断S2是否按下。如果没有 下拉电阻R2,那么S2没按下前,Input没有和任何东西相连,它的电平处于浮动状态,且很容易受环境影响,带来电子噪声。
上拉电阻
作用:将一个未知的电平拉高到稳定的高电平状态。
当S2没按下时,Input通过2个电阻和+5V连接(注意电路中并没构成回路,因此不会有压降,所以Input端依然是高电平),为高电平。当S2按下时,+5V,R2,S2,GND形成回路,R2 电阻大,产生压降大,因此后面的Input就是低电平。
因此,可以通过Input端的电平来判断S2是否按下。
相比下拉电阻,上拉电阻在数字电路中使用的更多。
Arduino中的拉电阻
Arduino的数字引脚和模拟引脚都内置了【上拉电阻】,电阻为20K~50K欧姆,他们需要使用 代码去激活使能。
提示:
1、如果你需要为Arduino自己配置外置的拉电阻,官方建议为10K欧姆。
2、不建议使用13脚作为输入引脚使用,因为13脚配置了一个板载的LED灯,即便是你使能了上拉电阻,LED等的电阻会拉低电压,使得引脚依然是低电平。如果你非要使用13作为输入,那就外置拉电阻。
使能Arduino上拉电阻的代码:
pinMode(10, INPUT);digitalWrite(10, HIGH); //激活10号引脚的上拉电阻,因此在没有收到任何输入信号时,10号引脚一直是高电平。/或者pinMode(10, INPUT_PULLUP) ; //最新的Arduino库支持使用INPUT_PULLUP配置为输入且使能上拉电阻,和上面的2行代码等效。
注意:如果你配置一个引脚为输出,且使能上拉电阻,然后又切换IO模式为OUTPUT,那么此引脚会保持高电平状态。反之:如果一个引脚为原本为输出模式,且输出高电平,切换为输入后,将自动激活上拉电阻。
动手试一试
实验目的:不使用Arduino内置的上拉电阻,通过电子器件构造一个外置【下拉电阻】,实现功能:通过8号引脚判断按钮释放按下,按钮没按下时,8号引脚始终接受低电平信号,按钮按下时,接受到高电平信号。每当按钮按下时,反转板载LED的状态.
电路连线
代码
void setup() { pinMode(LED_BUILTIN , OUTPUT); //使用板载LED作为控制对象.}void loop() { if(HIGH == digitalRead(8)){ //如果按钮按下 digitalWrite(LED_BUILTIN , LOW == digitalRead(LED_BUILTIN) ? HIGH : LOW ); //则反转 LED的状态 delay(600); }}