четверг, 1 декабря 2016 г.

Извращенский (HAL) способ померить скважность контроллером STM32 в четыре строчки кода и кучу кликов мышью в CubeMX:
- использовать полноценный таймер (в данном стучае TIM2), настроить у него комбинированный канал в режим PWM input on CH(1или 2, что по сути запараллелит два первых канала таймера на одну ногу и отключит другую, при этом альтернативные функции для ноги другого канала останутся доступны, на ней пропадёт только функциональность таймера).
- разрешить прерывания от таймера в его настройках в CubeMX (да, да... мышью)
- после этого в сгенерированном исходнике, добавить запуск обработки прерываний от обоих каналов таймера где нибудь в основном модуле
    HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1);
    HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_2);
- в обработчик прерываний искомого таймера (TIM2) добавить ещё две строчки
  длительность=HAL_TIM_ReadCapturedValue(&htim2, TIM_CHANNEL_1);
  период=HAL_TIM_ReadCapturedValue(&htim2, TIM_CHANNEL_2);
(не по русски конечно, по умолчанию величины 16-ти битные)
и фсё...
хотите делите одно на другое, хотите просто используйте  период как период таймера, тогда длительность сразу будет относительная, по сути скважность...
З.Ы. не проверял, меняются ли местами период и длительность при переключении каналов, всё что выше справедливо для входа частоты с CH2

Комментариев нет :

Отправить комментарий