【问题标题】:Working Out Frequency for PWM计算 PWM 的频率
【发布时间】:2012-02-16 22:01:15
【问题描述】:

这应该是一个简单的公式,但我想不通。

我有一个 16mHZ AVR 芯片。

我需要运行 24kHZ 的 PWM 信号..

决定什么是最佳预分频器的公式是什么。

我使用的是 16 位定时器。

【问题讨论】:

    标签: c math embedded avr discrete-mathematics


    【解决方案1】:

    阅读数据表(此处例如来自 ATmega328P 数据表,16 位定时器/计数器 1)以获得公式:

    输出的 PWM 频率可以通过以下等式计算

    fPWM = fclk_IO / (N * (1 + TOP))

    N 变量表示预分频器分频器(1、8、64、256 或 1024)。

    【讨论】:

    • 我只是想弄清楚如何从这个公式中得到 24KHZ...我的代数有点生疏了 10 年辍学
    • @michael 简单数学:使用固定的N 并计算(fclk_IO / (N * fPWM)) - 1 = TOP。 TOP 值四舍五入到最接近的整数是您要查找的设置。使用四舍五入的 TOP 整数,您可以通过使用我的答案中的公式来了解您的准确 PWM 频率。如果您尝试使用不同的 N 值,您会发现使用的预分频器值越高,频率就越准确。
    • 所以 16000000 / (8 / 2400000) - 1 = TOP 16MHZ 芯片试图获得 24KHZ 频率?
    • 我的意思是你使用的 lower 预分频器值,精度越高
    • @michael 你的意思可能是 16 000 000 / (8 * 24 000) - 1 = TOP。
    【解决方案2】:

    16MHz / 24KHz 给你...

    (16 * 1024 * 1024) / (24 * 1024) 给你...

    16777216 / 24576 给你...

    682.667

    因为您的预分频器只能是一个整数,并且根据您需要的精确度,您可以选择在软件中每隔三个刻度更改预分频器值。例如,每前两个刻度的预分频器为 683,每第三个刻度为 682。

    【讨论】:

    • 机会是,因为我们谈论的是 CPU 时钟频率,所以整个“2 的幂”业务在这里并不适用(如果这是一个 32k 晶体,那可能是另一回事了,但是)。时钟名义上可能是 16 * 1000 * 1000 Hz。这也将 682.xyz 更改为,是的,666.666...
    • 除非另有说明,否则晶体频率总是是 2 的幂。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多