Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Ручной расчёт TOP

В этом разделе мы вручную вычислим значение TOP для заданной частоты ШИМ. Этот метод требует перебора различных значений делителя и проверки, попадает ли получившееся значение TOP в допустимый диапазон.

В следующем разделе есть более удобный способ: с помощью кода на Rust или формы-калькулятора можно автоматически вычислить и TOP, и делитель. Однако ручной метод полезен уже сейчас, потому что помогает понять, как тактовая частота, делитель и значение TOP связаны друг с другом.

Значение TOP должно лежать в диапазоне от 0 до 65534. Хотя TOP хранится в 16-битном беззнаковом регистре, если установить его в 65535, нельзя получить настоящую скважность 100 процентов. Это происходит потому, что для скважности 100 процентов регистр сравнения скважности (CC) должен быть равен TOP + 1, а сам CC также имеет ширину 16 бит. Если держать TOP не выше 65534, значение TOP + 1 всё ещё помещается в регистр CC, и весь диапазон скважности от 0 до 100 процентов представляется корректно.

Чтобы TOP оставался в этих пределах, мы будем выбирать значения делителя, являющиеся степенями двойки, например 8, 16, 32 или 64. Такой подход работает не для каждой возможной частоты. В некоторых случаях понадобятся другие целые значения или даже дробные делители. Чтобы всё было просто, начнём с этого подхода.

В качестве примера рассчитаем значения, необходимые для генерации сигнала ШИМ 50 Гц для сервопривода.

Формула частоты ШИМ

Даташит RP2350 определяет частоту ШИМ так:

\[ f_{PWM} = \frac{f_{sys}}{\text{period}} = \frac{f_{sys}}{(\text{TOP} + 1) \times (\text{CSR_PH_CORRECT} + 1) \times \left( \text{DIV_INT} + \frac{\text{DIV_FRAC}}{16} \right)} \]

Вот выведенная формула для получения TOP по целевой частоте:

\[ \text{TOP} = \frac{f_{sys}} {f_{PWM} \times (\text{CSR_PH_CORRECT} + 1) \times \left( \text{DIV_INT} + \frac{\text{DIV_FRAC}}{16} \right)} - 1 \]

Где:

  • \( f_{PWM} \) — желаемая частота ШИМ.
  • \( f_{sys} \) — системная частота тактирования. Для Pico 2 она равна 150 МГц.

Мы не будем использовать фазово-корректный режим и не будем использовать дробную часть делителя, поэтому упростим формулу ещё больше:

\[ \text{TOP} = \frac{f_{sys}} {f_{PWM} \times \text{DIV_INT}} - 1 \]

TOP для 50 Гц

Нам нужна частота ШИМ 50 Гц. Чтобы её получить, подставим системную частоту тактирования, целевую частоту и выбранную целую часть делителя и получим следующее значение TOP:

\[ \text{top} = \frac{150,000,000}{50 \times 64} - 1 \]

\[ \text{top} = \frac{150,000,000}{3,200} - 1 \]

\[ \text{top} = 46,875 - 1 \]

\[ \text{top} = 46,874 \]

Вы можете поэкспериментировать с другими значениями делителя (в том числе дробными) и соответствующими значениями top.