【发布时间】:2012-02-16 22:01:15
【问题描述】:
这应该是一个简单的公式,但我想不通。
我有一个 16mHZ AVR 芯片。
我需要运行 24kHZ 的 PWM 信号..
决定什么是最佳预分频器的公式是什么。
我使用的是 16 位定时器。
【问题讨论】:
标签: c math embedded avr discrete-mathematics
这应该是一个简单的公式,但我想不通。
我有一个 16mHZ AVR 芯片。
我需要运行 24kHZ 的 PWM 信号..
决定什么是最佳预分频器的公式是什么。
我使用的是 16 位定时器。
【问题讨论】:
标签: c math embedded avr discrete-mathematics
阅读数据表(此处例如来自 ATmega328P 数据表,16 位定时器/计数器 1)以获得公式:
输出的 PWM 频率可以通过以下等式计算
fPWM = fclk_IO / (N * (1 + TOP))
N变量表示预分频器分频器(1、8、64、256 或 1024)。
【讨论】:
N 并计算(fclk_IO / (N * fPWM)) - 1 = TOP。 TOP 值四舍五入到最接近的整数是您要查找的设置。使用四舍五入的 TOP 整数,您可以通过使用我的答案中的公式来了解您的准确 PWM 频率。如果您尝试使用不同的 N 值,您会发现使用的预分频器值越高,频率就越准确。
16MHz / 24KHz 给你...
(16 * 1024 * 1024) / (24 * 1024) 给你...
16777216 / 24576 给你...
682.667
因为您的预分频器只能是一个整数,并且根据您需要的精确度,您可以选择在软件中每隔三个刻度更改预分频器值。例如,每前两个刻度的预分频器为 683,每第三个刻度为 682。
【讨论】: