基础硬体观念

数位脚位(Digital Pins)

86Duino 的数位脚位(86Duino 的数位脚位被对应到 Vortex86EX 的 GPIO 脚位)可以在执行阶段设定为输入或是输出,我们将在以下的文章说明如何设定以及各状态相关的特性。

数位脚位设定为 INPUT 时的特性

86Duino 的数位脚位预设为输入,如果要数位脚位作为输入使用,直接使用即可,不需透过 pinMode() 设定。当数位脚位被设定为输入时,会处于高阻抗状态。当状态为 INPUT 的数位脚位连接到其他电路上时,所造成的负载是很小的,意味着很小的电流就可以对外部电路的变化做出反应。(在 Arduino 的课程中可以看到状态为 INPUT 的 pin 可以用来完成一些特别的任务,像是实作电容式触摸传感器、把 LED 当作光电二极体读取或是把类比传感器当作 RCTime 读取)

然而这也意味着当数位脚位被设定为输入且没有连接东西时,会回传貌似随机的值,其值会受到环境的电子噪音或是邻近脚位的电容耦合影响。

数位脚位设定为 INPUT_PULLUP 时的特性

在 Vortex86EX 裡有内建 75K 欧姆的上拉电阻,可以在程式中启用内建的上拉电阻,只要使用 pinMode() 设定数位脚位为 INPUT_PULLUP 即可。

当数位脚位为 INPUT_PULLUP 状态时,如果没有连接东西在数位脚位上,会回传 HIGH。如果连接传感器在状态为 INPUT_PULLUP 的数位脚位上时,传感器的其他脚位应该要接地,以简单的开关为例,当开关没被按下时,连接的数位脚位会回传 HIGH,切换器被按下时,连接的数位脚位会回传 LOW

数位脚位设定为 INPUT_PULLUP 时,由于连接了上拉电阻数位脚位会提供电流,足以让连接在该脚位的 LED 亮起,但是亮度会很低。如果发现 LED 的亮度很低,可以检查是否是数位脚位设定为 INPUT_PULLUP

注意: 86Duino 的数位脚位可以负载的电压上限为 5V,意味着藉由数位脚位输入 5V 的电压给 86Duino 不会造成该脚位与 86Duino 的损坏。

数位脚位设定为 OUTPUT 时的特性

86Duino 的数位脚位可以使用 pinMode() 设定为 OUTPUT。当数位脚位被设定为 OUTPUT 时,会处于低阻抗状态,这意味着设定为 OUTPUT 的数位脚位,可以提供足够的电流给其他的电路或装置。86Duino 提供的电流可以是正的也可以是负的,最高可达 16mA,这样的电流可以使 LED 亮起(别忘了串联电阻)或是使大多数的传感器作用,但是不足以使螺线管、继电器或马达正常运作。

数位脚位被设定为 OUTPUT 时,如果在该脚位发生短路的情况或是连接到需要大电流的装置,可能会使数位脚位内的电晶体或是 Vortex86EX 损坏。通常这样的情况会使得 Vortes86EX 对应到该数位脚位的脚位损坏,但其他的功能则可正常运作。基于以上的理由,建议在数位脚位与欲连接的装置间加入 470 欧姆或 1K 欧姆的电阻,除非连接电阻后使得最大电流不足以使用。

脉冲宽度调变(Pulse Width Modulation, PWM)

脉冲宽度调变是将类比信号转换为脉波的一种技术。藉由产生方波并调整数位讯号 ON 和 OFF 的比例,可以模拟出设备能产生的最高电压到 0V 之间的电压(以 86Duino 为例,可以模拟出 3.3V ~ 0V 的电压)。脉冲宽度调变中数位讯号 ON 所佔的宽度称为脉冲宽度(pulse width),想要模拟出预期的电压就必须调整脉冲宽度。假如週期性的产生调整好脉冲宽度的方波,并且频率足够快的话,以脉冲宽度调变供电给 LED 为例,会像是提供稳定电压的电源给 LED。(在 86Duino Coding IDE 的选单 File->Sketchbook->Examples->Analog 中有一个 Fading 的范例,是以脉冲宽度调变控制 LED 的亮度)

下图由绿线切成了五格,每一格代表一个周期,而周期的倒数代表频率。以 86Duino 为例,86Duino 的脉冲宽度调变频率为 1000Hz,而周期为 1 毫秒。在程式中可以使用 analogWrite() 产生脉冲宽度调变,analogWrite() 可以输入的范围是 0-255,在下图中可以看到 analogWrite(255),会产生数位讯号一直为 ON 的脉冲宽度调变,analogWrite(127) 会产生脉冲宽度为 50% 的脉冲宽度调变。

类比输入脚位(Analog Input Pins)

86Duino 内建多通道类比数位转换器(基于渐近法),该转换器可以把连续的物理量(如电压)转换为数位的值,大多用来读取类比感测器的值。

86Duino 内建的类比数位转换器解析度为 11-bit,採样率为 100ksps,可以负载的最大电压为 3.3V。使用类比数位转换器时应该注意输入电压不能大于 3.3V,如果输入的电压大于 3.3V 会使得类比数位转换器无法正常运作甚至损坏。在程式中可以使用 analogRead() 读取经由类比数位转换器转换后的值。

See also

pinMode()
digitalWrite()
digitalRead()
analogWrite()
analogRead()


新手上路主页面

The text of the 86Duino reference is a modification of the Arduino reference, and is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.