Как установить частоту ШИМ с высокой степенью детализации

Я хочу создать ШИМ на 100 кГц , который может иметь 1000 шагов. например, когда я устанавливаю CCR1 на 0%, ШИМ отключается, а когда я устанавливаю CCR1 на 499, он должен быть 50% и, очевидно, при CCR1 = 999, он должен иметь полный рабочий цикл 100%.

CPU_CLK составляет 80 МГц... но я не могу этого добиться. вот мой код до сих пор:

  htim1.Instance = TIM1;
  htim1.Init.Prescaler = 0;
  htim1.Init.CounterMode = TIM_COUNTERMODE_CENTERALIGNED2;
  htim1.Init.Period = 1000-1;
  htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim1.Init.RepetitionCounter = 0;
  htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;

Это дает мне ШИМ с частотой 40 кГц .... намного ниже 100 кГц ... Prescalare уже на минимуме ... это невозможно достичь?

Чип STM32L476.

100 кГц умножить на 1000 равно 100 МГц. Ваша максимальная тактовая частота составляет 80 МГц. Вы видите проблему?
+1 хороший вопрос, потому что многие люди не понимают ограничений, касающихся разрешения, тактовой частоты и частоты ШИМ.
Обычно в регуляторах с широким динамическим диапазоном они используют PFM + PWM для достижения динамического диапазона 60 дБ.
Итак, что для вас важнее, "высокая детализация" в названии или "100 кГц" в вопросе? Потому что 16-битные таймеры могут дать вам разрешение 65k, что намного больше 1000 шагов.
@Maple Мне нужно ровно 1000 шагов на частоте 100 кГц ... Я думаю, это невозможно сделать так просто :( Мне нужен более быстрый чип
@DEKKER «Мне нужен более быстрый чип». Или вы можете использовать внешний ШИМ-генератор, например, 12-битный M66242P от Mitsubishi, для 4096 шагов до 25 МГц.

Ответы (1)

Короткий ответ: это не тривиально с тактовой частотой 80 МГц, если вы не используете некоторые методы дизеринга (см. ниже).

ф с л к "=" п Вт М ф р е д ты д н с у × 2 с т е п с

В вашем случае требуется шаг 10 бит ... поэтому вам нужны как минимум основные часы 100 МГц.

Документ, на который я ссылался в своем комментарии, показывает некоторые сложные способы достижения этого с более низкими тактовыми частотами путем сглаживания и объединения большего количества таймеров (это довольно сложно). Вот документ самого STM.

Очевидно, что другим решением будет использование другого микроконтроллера из того же семейства с более высокими тактовыми частотами, если это позволяет ваше приложение/бюджет.