上拉电阻和下拉电阻
简介
在数字逻辑电路中,一个信号不是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);
}
}
- 【微信官方】获取用户信息方案介绍
- 【实战】如何使用 Python 从 Redis 中删除 4000万 KEY
- [多图] DevOps 也要懂点 Excel
- [实战篇] Python 运维中使用并发
- PHP数据结构(十) ——有向无环图与拓扑算法
- PHP数据结构(十一) ——图的连通性问题与最小生成树算法(1)
- 优化 MySQL: 3 个简单的小调整
- PHP数据结构(十一) ——图的连通性问题与最小生成树算法(2)
- 进程间通信的历史与未来
- PHP数据结构(十二) ——静态查找表
- 小程序中滚动条的使用,wx.pageScrollTo和<scroll-view>的对比
- 小程序中tabBar的使用
- ubuntu配置虚拟内存
- PHP数据结构(十三) ——动态查找表(二叉排序树)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- spring-boot-route(二十)Spring Task实现简单定时任务
- php+ajax实现商品对比功能示例
- spring-boot-route(二十一)Quartz实现动态定时任务
- Helm仓库的重要变更和v2支持将在11月结束
- ThinkPHP框架整合微信支付之刷卡模式图文详解
- 详解Python直接赋值,深拷贝和浅拷贝
- 利用python下载scihub成文献为PDF操作
- PHP中的Iterator迭代对象属性详解
- 使用Python实现微信拍一拍功能的思路代码
- Laravel5.7 Eloquent ORM快速入门详解
- 微信公众号用户与网站用户的绑定解决方案分析
- laravel使用Faker数据填充的实现方法
- PHP开发实现快递查询功能详解
- Laravel5.7 数据库操作迁移的实现方法
- PHP7引入的"??"和"?:"的区别讲解