arduino timer频率_Arduino上PWM输出的频率是多少

PWM信号由AVR芯片上的计时器生成。每个定时器可以在两个或三个不同的引脚上产生PWM信号。每个引脚可以有自己的占空比,但是它们共享PWM频率。您可以通过更改计时器的时钟源来更改PWM的频率。默认情况下,它们使用CPU时钟除以64,即。他们通过Arduino初始化代码将其预分频器设置为64。更令人困惑的是,有两种不同的PWM模式:快速PWM和相位校正PWM。在快速PWM中,计时器计数到255,然后溢出并从0(256个不同状态)重新开始。在相位校正PWM中,计时器计数到255,然后改变方向并向下计数到零,改变方向,依此类推(510种不同状态)。

Arduino Mega有5个计时器,计时器0-计时器4。由于timer0还用于毫秒和微功能,因此它使用快速PWM,而其他定时器配置为用于相位校正PWM。这导致不同引脚上的频率不同:

引脚4和13,由

计时器0 控制:16 Mhz / 64/256 = 976.56 Hz

由定时器1-4控制的其他PWM引脚:

16 Mhz / 64/510 = 490.20 Hz

计算公式为:时钟/预分频器/ PWM模式的状态数

对于我所知的所有其他Arduino板,情况都是一样的,除了它们连接到不同引脚的计时器更少。

也可以使定时器的计数值不同于255。在8位定时器上,您将松开输出引脚,但在16位定时器上,可以使用输入捕捉寄存器来定义TOP值。输入捕获功能是Arduino社区中很少使用的功能,因此您可能不会错过它。

Arduino库仅允许您使用8位分辨率,即使在16位定时器上也是如此。如果需要更高的分辨率,则必须编写自己的AnalogWrite或使用为此目的而创建的库。在Arduino Mega上,timer0和timer2为8位,其余均为16位。

通过更改16位定时器的模式以利用全分辨率,并结合更改预分频器和TOP值,可以实现非常宽的PWM频率范围。

在快速PWM模式下,通过将预分频器设置为1,将TOP设置为3,可以达到的最大频率是时钟/ 4,不允许使用较低的值。这将为您提供2位分辨率的4 MHz PWM。可以是0%,25%,50%或75%的时间。较高的TOP值将以较低的频率提供较高的分辨率。

有关详细说明,请阅读本文或参考数据表。

更改定时器0的预分频器,PWM模式或TOP值会与millis()和混为一谈micros()。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值