Loading...

Learning   Examples | Foundations | Hacking | Links

数字引脚

Arduino 的引脚可以配置为输入或输出。 本文讲解引脚在这两种模式下的功能。虽然本文的标题说的是数字引脚,但是大多数 Arduino (Atmega) 模拟引脚的配置和使用方法都和数字引脚相同。

输入引脚的属性

Arduino (Atmega) 的引脚默认就是输入,所以不必用 pinMode() 显式声明为输入。配置为输入的引脚处于高阻抗状态,也就是说在这些输入引脚采样时只会消耗极小的电流,可以视为在引脚前串接了一个100M欧的电阻。这就意味着只要微小的电流就能改变输入引脚的状态,因此引脚可以用于实现电容触摸传感器, 把 LED 当作光电二极管, 或用一个简单的 RC电路 来从一个模拟传感器读取数据。

然而这同样也带来一个问题,如果输入引脚没有连接,或仅仅是连了一条线而没有接入其他电路,这个引脚的状态因为环境的原因(电子杂波或接近电容)会变成随机值。

上拉电阻

一般来说,有必要在没有输入的情况下使输入引脚保持一个已知的状态。可以通过在输入端加入一个上拉电阻(连接到+5V)或下拉电阻(连接到地)来实现,电阻一般选用10k的。

Atmega 芯片内置了一个可以用软件设置的20k的上拉电阻,可以通过以下方法设置。

pinMode(pin, INPUT);           // 设置为输入
digitalWrite(pin, HIGH);       // 开启上拉电阻

需要注意的是,上拉电阻的电流足够使接在输入引脚上的LED发出微光。如果一个项目里的LED看起来已经工作了,但是亮度却很低,那么很可能是忘了用 pinMode() 设置引脚为输出端。

另一个需要注意的事是控制上拉电阻和控制引脚保持高/低电平使用的是同一个寄存器(芯片内部的记忆单元)。因此当一个配置为输入端又开启了上拉电阻的引脚在程序中用 pinMode() 改为输出端时,该引脚就被设置为高电平输出。反过来也一样,在高电平状态的输出端用 pinMode() 转为输入端时就同时开启了上拉电阻。

注意: 把13号数字引脚用于输入时会比其他数字引脚更复杂,因为在大多数Arduino板上13号引脚上已经焊接了一个LED和电阻。如果你开启这个引脚内部的20k上拉电阻,其电平将不是你期望的5V,而是因为LED和串联电阻的作用被拉到了1.7V,也就是说这个引脚会保持在低电平状态。如果你一定要把13号引脚作为数字输入,需要使用一个外置的下拉电阻。

输出引脚的属性

用 pinMode() 配置为输出的引脚处于低阻抗模式。这表示它们能为其他电路提供一定的电流。Atmega 引脚可以提供(电流输出)或吸收(电流流入)最高40mA的电流,供外部设备/电路使用。这足够点亮一个LED(不要忘了串联电阻),或给大多数传感器供电,但是对大多数继电器, 螺线管和电机来说这样的电流是不够的。

短路 Arduino 的引脚或尝试驱动需要大电流的设备都可能损坏引脚内的输出晶体管,甚至烧毁整个 Atmega 芯片。多数情况下会导致单片机的一个引脚“死掉”而其他引脚仍然正常工作。因为这个原因,在输出引脚连接其他设备时,除非是必需要使用最大的电流驱动,串联一个470欧或1k的电阻是个不错的做法。

back to Foundations

See Also