为什么某些引脚的PWM频率不同?


Answers:


23

这些并不是PWM信号可用的唯一频率。但是,它们是由所应用的预分频器确定的频率(您可以按如下所述轻松更改)。

3对PWM引脚中的每对都与一个定时器相连,每个定时器都有自己的基本频率,如下所示:

  • 引脚5和6在timer0上配对,基本频率为62500Hz
  • 引脚9和10在timer1上配对,基频为31250Hz
  • 引脚3和11在timer2上配对,基本频率为31250Hz

然后,每组引脚都有许多可以选择的预分频器值,它们将划分该对引脚的基频。可用的预分频器值为:

  • 引脚5和6的预分频器值为1,8,64,256和1024
  • 引脚9和10的预分频器值为1,8,64,256和1024
  • 引脚3和11的预分频值为1,8,32,64,128,256和1024

不同的组合会在给定的PWM引脚中产生不同的频率。请注意,计时器2(与引脚3和11绑定)具有更多可用的预分频器值,从而有更多可用频率。

现在,为什么计时器2不同,这是一个单独的问题。

编辑:这是每个引脚可能的PWM频率的列表(来自本文):

对于引脚6和5(OC0A和OC0B):

  • 如果TCCR0B = xxxxx001,则频率为64kHz
  • 如果TCCR0B = xxxxx010,则频率为8 kHz
  • 如果TCCR0B = xxxxx011,则频率为1kHz(这是Diecimila引导程序的默认设置)
  • 如果TCCR0B = xxxxx100,则频率为250Hz
  • 如果TCCR0B = xxxxx101,则频率为62.5 Hz

对于引脚9、10、11和3(OC1A,OC1B,OC2A,OC2B):

  • 如果TCCRnB = xxxxx001,则频率为32kHz
  • 如果TCCRnB = xxxxx010,则频率为4 kHz
  • 如果TCCRnB = xxxxx011,则频率为500Hz(这是Diecimila引导程序的默认设置)
  • 如果TCCRnB = xxxxx100,则频率为125Hz
  • 如果TCCRnB = xxxxx101,则频率为31.25 Hz

TCCRnB在此处设置timer的预分频器位,根据要设置的定时器n,将其替换n为0、1或2。如果仍然不确定按位运算,请阅读此位数学教程

我的资料来源:

请注意,在这些来源中,关于引脚9和10是否具有与5和6或3和11相同的行为,似乎存在分歧,但是无论如何您都可以理解。我正在阅读数据表,以尝试找出正确的方法,或者这是否是板之间的差异。


1
这个答案指的是什么ATmega?我没有检查,但我敢打赌,每个控制器的确有所不同。
jippie 2014年

@jippie好点!消息来源是ATmega168和328。–
Ricardo

@jippie在我的回答中,为了澄清一下,引脚号是指它们在Uno板上的分配方式(例如,引脚1表示数字引脚1或D1),而不是IC(ATmega328引脚1复位)。
里卡多

1
我相信这些细节也会随着董事会,Uno,Duemilanove,Mega等而改变……
jippie

@jippie当然可以。
里卡多

8

我不了解设计注意事项,但是如果您查看Arduino上微控制器的数据表,您会注意到PWM引脚组合在一起,并且每组都连接到定时器。此定时器的增加速度因配置的预分频器而异。如果您为某个定时器更改了预分频器,则将更改相关PWM引脚的PWM频率。我相信某些计时器会为该millis();功能的其他目的加倍。如果更改该计时器的预分频器,则返回的值millis()将因相同的因素而偏离。

您可以如下计算预分频器的设置:

$$ \ text {prescaler} = \ dfrac {f_ {CPU}} {PWMresolution×f_ {PWM}} = \ dfrac {16 \ text {MHz}} {256×490} \约128 $$

预分频器= f [CPU] /(PWMresolution×f [PWM])= 16000000 /(256×490)=大约128。

查看数据表,您会发现128确实是您可以选择的预分频器值之一。


2
男孩,我们想念MathJax还是什么?我希望我们在Beta之后启用它。
里卡多

1
@Ricardo我的浏览器中有一个MathJax按钮; o) meta.arduino.stackexchange.com/questions/13/…–
jippie
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.