veydlin
@veydlin
Мне никогда не жалко средств на свое любопытство

Как настроить ШИМ для сервопривода в STM32?

Есть код из примера с вариантом, когда тактирование идет от внутреннего генератора на 8МГц, он рабочий.
И вот что мне не понятно. Судя по схеме от куба на шине от которой тактируется таймер тоже 8МГц, предделительTIM2->PSC = 6, как там могло оказаться 50гц?

Сейчас, я тактирую от внешнего кварца на 8МГц, при его подключении STM32 сам (wtf) устанавливает умножитель и запускается на 72МГц.

Я хотел бы понять, как рассчитывать таймер ШИМа для сервопривода при другой частоте (72МГц), может кто описать последовательность расчета?

// Настраиваем таймер таймер 2
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // Тактируем
 TIM2->CCER |= (TIM_CCER_CC2E); // Разрешаем таймеру использовать ногу PA1 для ШИМа
 TIM2->CCMR1 |= (TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2);
 TIM2->PSC = 6; // Настраиваем предделитель, чтобы частота ШИМа была в районе 50 Гц
 TIM2->CR1 |= TIM_CR1_CEN; // Запускаем


963f92cbdacb41e498a0ab59c783112c.png
  • Вопрос задан
  • 8318 просмотров
Решения вопроса 1
@Eddy_Em
1. Выбросить "куб"!
2. Выбросить SPL, HAL и прочую мерзость!
3. Читать reference manual до прояснения!

"Сам" чип ничего делать не будет, пока не сконфигурировать его. Если и дальше пользоваться "кубом", то совсем плохо будет с логикой.

72МГц — нормальная внутренняя тактовая частота для, скажем, STM32F1xx. Какой чип? Плясать от этого надо.
Открываем reference manual в разделе RCC и читаем. Скажем, у STM32F1xx TIM2 тактируется от APB1. APB1 — от AHB, а тот — напрямую от SYSCLK. Если тактировать от внешнего кварца на 8МГц, то нужно в конфигурации в качестве входа для PLL выбрать HSE, а в качестве входа SYSCLK — PLL (кстати, при тактировании от внутренней RC-цепочки максимальная частота SYSCLK будет 36МГц) и выставить нужным образом предделители AHB, APB1 и TIM2_PSC. Еще нужно не забыть разрешить тактирование всей этой периферии.

Если предделители AHB и APB1 выставить в 1, а множитель PLL — в 9, то получим 72МГц на входе тактирования TIM2. Если регистр TIM2_PSC выставить в 6, то частота будет делиться на 7 — получится "кривое" число.

Что такое 50Гц ШИМа? Частота повторения импульсов? Если так, то нужно плясать от требуемой точности коэффициента заполнения. Если нужен ШИМ на 50Гц с восьмибитным заполнением, то частота таймера должна быть в 256 раз больше, чем 50Гц, т.е. составлять 12800Гц. При тактировании TIM2 напрямую, т.е. 72МГц, в TIM2_PSC надо будет записать число 5624 — тогда его частота будет ровно 12800Гц. В TIM2_ARR запишем 255, а в TIM2_CCRx (x зависит от того, какая нога выбрана выходом ШИМ и как к ней подключен таймер) будем писать число от 0 до 255 в зависимости от требуемого заполнения.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы