说说 Arduino 101的 PWM频率

之前介绍过 Arduino Uno 的 PWM 频率问题,最近因为需要研究了一下 Arduino 101 的 PWM 频率问题。经过一番研究,发现在Arduino15\packages\Intel-Test@arduino.cn\hardware\arc32\2.0.0\cores\arduino\wiring_analog.c 中提供了analogWriteFrequency 函数。

/*
 * brief Set the frequency of analogWrite parameters.
 *
 * param res
 */
extern void analogWriteFrequency(uint8_t pin, uint32_t freq);

 

从参数上来看,只要在 freq 指定一个频率,就可以输出这个频率的 PWM信号。
首先,测试一下 PWM 的默认频率:

void setup() {
  // initialize digital pin 13 as an output.
  pinMode(6, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  analogWrite(6,127);
}

 

pwma

可以看到,对于 Pin6 默认的PWM 频率是 980Hz
接下来,试试 64KHz:

void setup() {
  // initialize digital pin 13 as an output.
  pinMode(6, OUTPUT);
  analogWriteFrequency(6, 64000);
}

 

pwmb

频率为 63.747Khz。
继续用这样的方法,升高频率到 250K,可以看到频率是 246.18Khz。

pwmc

继续升高到1Mhz
pwmd

实验程序,最高可以发出 16Mhz的频率。
然后就是区分度的问题,这个词是我创造的,我想表达的是 pwm升高1之后是否有正常的变化。比如:我们PWM 写入8位,就是分成256份。一份对应 1/256=0.39%。就是说,正常情况下,anglogWrite(PinX,1) 和anglogWrite(PinX,2)在占空比上应该有 0.39%的差别。份数越少,区分度越差。

发表评论

电子邮件地址不会被公开。 必填项已用*标注