STM32 - Как вызвать прерывание после определенного времени включения ШИМ?

Я новичок в микроконтроллерах ARM (STM32F411), и я пытался обойти периферийные устройства, используя библиотеку STAL HAL и STM32Cube.

Я уже настроил свою плату для использования некоторых периферийных устройств:

  • Таймер 2 для запуска прерывания с определенной частотой

  • Таймер 3 для запуска ШИМ на 3 каналах.

  • АЦП с 4 каналами, в режиме DMA, для чтения некоторых аналоговых входов.

Предположим теперь, что весь период ШИМ равен 100 мс, а его рабочий цикл равен 50% (50 мс ШИМ включен и 50 мс ШИМ выключен).

Я хотел бы вызвать прерывание после определенного времени ШИМ на уровне, скажем, 50% от него.

Следовательно, я хотел бы запустить прерывание на 25 мс, чтобы использовать АЦП для выборки его аналоговых входов.

Есть ли у вас какие-либо предложения о том, как я могу реализовать такое прерывание?

Заранее спасибо за вашу помощь!

1 ответ

Решение

Поскольку АЦП STM32F411 используется в обычном режиме (не в режиме с инжекцией), и только три канала из четырех используются для генерации ШИМ на таймере 3, четвертый канал может использоваться для запуска АЦП.

Следовательно, Таймер 3 настроен следующим образом:

  • CH1 используется для режима сравнения выходов 0(TIM3-> CCMR1.OC1M = 0)
  • CH2, CH3, CH4 используются для выходов ШИМ

Поэтому TIM3->CCR1 загружается до значения, которое дает 25% режима работы, затем он генерирует события TIM3_CH1, которые можно использовать для запуска начала преобразования АЦП на 25% от вашей временной базы TIM3.

Другие вопросы по тегам