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

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

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

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

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

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

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

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

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

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

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


person starscream    schedule 30.09.2016    source источник
comment
Вы можете запустить другой таймер в начале периодов ШИМ, который сгенерирует прерывание через 25 мс.   -  person Bence Kaulics    schedule 01.10.2016
comment
Есть ли у STM32F4 функция, которая позволяет мне это делать?   -  person starscream    schedule 01.10.2016


Ответы (1)


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

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

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

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

person starscream    schedule 02.10.2016