Я хочу создать ШИМ на 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.
Короткий ответ: это не тривиально с тактовой частотой 80 МГц, если вы не используете некоторые методы дизеринга (см. ниже).
В вашем случае требуется шаг 10 бит ... поэтому вам нужны как минимум основные часы 100 МГц.
Документ, на который я ссылался в своем комментарии, показывает некоторые сложные способы достижения этого с более низкими тактовыми частотами путем сглаживания и объединения большего количества таймеров (это довольно сложно). Вот документ самого STM.
Очевидно, что другим решением будет использование другого микроконтроллера из того же семейства с более высокими тактовыми частотами, если это позволяет ваше приложение/бюджет.
ЧтоГрубый Зверь
Шон87
аутист
Тони Стюарт EE75
Клен
ДЕККЕР
Клен