1. Arduino Mega PWM pin
Arduino Mega有5个计时器,计时器0-计时器4。由于timer0还用于毫秒和微功能,因此它使用快速PWM,而其他定时器配置为用于相位校正PWM。这导致不同引脚上的频率不同:
timer 0 (controls pin 13, 4)
timer 1 (controls pin 12, 11)
timer 2 (controls pin 10, 9)
timer 3 (controls pin 5, 3, 2)
timer 4 (controls pin 8, 7, 6)
这个是mega2560的5个时钟对应的PWM输出引脚。TIMER 0控制的两个脚默认是快速PWM模式,默认频率是980hz(计算公式为:时钟/预分频器/ PWM模式的状态数,如16 Mhz / 64/256 = 976.56 Hz)。其他的TIMER默认都是相位PWM模式,频率是490hz(16 Mhz / 64/510 = 490.20 Hz)。
若PWM频率太低,电机会抖动,LED会闪烁
人耳可以感受20kHz以内的频率,为避免听到电机的抖动音,应调高PWM的输出频率
2. Secrets of Arduino PWM
https://docs.arduino.cc/tutorials/generic/secrets-of-arduino-pwm
3. Adjusting PWM Frequencies
https://playground.arduino.cc/Main/TimerPWMCheatsheet/
Arduino的PWM输出频率是由ATmega微处理器内部的三个系统定时器:
- (Timer0~Timer2)决定的,Timer0(5、6)、Timer1(9、10)、Timer2(3、11),通过改变定时器的设置,来调整PWM的输出频率。
- Arduino的delay()、millis()、micros()等函数的基准时间,来自Timer0,若调整此定时器,将导致这些函数的延迟时间错乱。
下面的程序语句将Timer1(9、10端口输出)的PWM频率调整成31250Hz。
void setup() {
TCCR1B = TCCR1B & 0b11111000 | 0x01;
}`