Arduino 简明教程
Arduino - Pulse Width Modulation
脉冲宽度调制或 PWM 是一种常见的技术,用于改变脉冲串中脉冲的宽度。PWM 有许多应用,如控制伺服器和速度控制器,以及限制电机和 LED 的有效功率。
Basic Principle of PWM
脉冲宽度调制基本上是一个具有可变高低时间的方波。基本 PWM 信号如下图所示。
PWM 涉及到各种术语 −
-
On-Time − 信号高电平持续时间。
-
Off-Time − 信号低电平持续时间。
-
Period − 表示为 PWM 信号的导通时间和关断时间的总和。
-
Duty Cycle − 表示为 PWM 信号周期内信号保持导通时间的百分比。
analogWrite() Function
analogWrite() 函数向引脚写入模拟值(PWM 波形)。它可以用来点亮亮度可变的 LED 或驱动速度可变的电机。调用 analogWrite() 函数后,该引脚将生成指定占空比的稳定方波,持续到下一次调用 analogWrite() 或对同一引脚调用 digitalRead() 或 digitalWrite()。大多数引脚上的 PWM 信号频率约为 490 Hz。在 Uno 和类似的电路板上,引脚 5 和 6 的频率约为 980 Hz。Leonardo 上的引脚 3 和 11 也以 980 Hz 的频率运行。
在大多数 Arduino 电路板(带有 ATmega168 或 ATmega328 的电路板)上,此函数在引脚 3、5、6、9、10 和 11 上运行。在 Arduino Mega 上,它在引脚 2 - 13 和 44 - 46 上运行。具有 ATmega8 的较旧 Arduino 电路板仅支持引脚 9、10 和 11 上的 analogWrite() 。
Arduino Due 支持引脚 2 至 13 以及引脚 DAC0 和 DAC1 上的 analogWrite() 。与 PWM 引脚不同,DAC0 和 DAC1 是数模转换器,并作为真正的模拟输出。
在调用 analogWrite() 之前,无需调用 pinMode() 将引脚设置为输出。
analogWrite() Function Syntax
analogWrite ( pin , value ) ;
value —占空比:0(始终关闭)到 255(始终开启)之间的值。
Example
int ledPin = 9; // LED connected to digital pin 9
int analogPin = 3; // potentiometer connected to analog pin 3
int val = 0; // variable to store the read value
void setup() {
pinMode(ledPin, OUTPUT); // sets the pin as output
}
void loop() {
val = analogRead(analogPin); // read the input pin
analogWrite(ledPin, (val / 4)); // analogRead values go from 0 to 1023,
// analogWrite values from 0 to 255
}