第15课 端口内部的上拉功能

我是潘,曾经是个工程师。这是为 Ardui.Co 制作的 “Arduino 公开课” 系列的入门教程。这节课我们将开始介绍 Arduino 的相关电路。要设计一个强大而稳定的系统,模拟方面的知识是必修课。有任何疑问请在评论区提出,我会逐一回答。

第3课我们介绍了按键控制LED开关,当时设置了一个下拉电阻,确保按钮的稳定性,不会误触发。此外,DHT系列温度传感器、霍尔传感器、旋转编码器等脉冲信号模块应用中,也经常看到上/下拉电阻。那么,这个电阻是否去掉呢?

在大部分应用场合中,答案是否定的。不过,外接电阻可以拿掉,因为Arduino Uno 的ATmega328P  芯片已经内置了上拉电阻,简单修改一下外部电路接线和程序,就可以起用。这是ATmega328P 的 Datasheet 的电路结构如下:

首先要理解上拉电阻的含义:

上拉电阻(Pull-up resistors)维基百科的解释是:是当某输入端口未连接设备或处于高阻抗的情况下,一种用于保证输入信号为预期逻辑电平的电阻元件。他们通常在不同的逻辑器件之间工作,提供一定的电压信号。

其作用是,如果外部组件未启用,上拉电阻则“微弱地”将输入电压信号“拉高”。如果外部组件启用,它将取消上拉电阻所设置的高电平。通过这样,上拉电阻可以使引脚即使在未连接外部组件的时候也能保持确定的逻辑电平。

简单来说,如果没有外部信号输入的情况下,保证端口处于一个可以确定的状态。假如没有这个电阻,电平可能会因为电源纹波、浪涌等因素,而跳跃,触发端口。

另外,与上拉电阻接 Vcc 相反,下拉电阻则是接地的,确保没有输入的情况下,处于低电平状态电平。不过,ATmega328P 每个端口都内置了上拉电阻,但没有下拉电阻,其他型号请参考Datasheet。

我们把第3课按钮开关的接线调整一下:

线路简洁了很多。程序修改如下:

这个程序核心是这行代码:

将 INPUT 改为 INPUT_PULLUP,D9 被拉高了,成了一个常态,所以触发状态要改为 LOW 的模式。

Leave a Reply

Your email address will not be published. Required fields are marked *