Многоканальный ШИМ-вход на STM32

Я использую плату на базе STM32F405 (OpenPilot revo) для приема ШИМ-сигналов от приемника джойстика.

Мне нужно захватить пять сигналов ШИМ, используя только два таймера, таймер 8 и таймер 12. Мне уже удалось захватить сигнал ШИМ и вычислить рабочий цикл только для канала для каждого таймера, используя пример, предоставленный со стандартной библиотекой (PWM INPUT ).

Но я не мог использовать несколько каналов для каждого таймера. Как настроить каналы? Было бы здорово, если бы у кого-то был пример с более чем одним каналом, используемым для ввода ШИМ.

В качестве возможного упрощения есть неплохая вероятность того, что ваши каналы срабатывают последовательно, а не параллельно. (В прежние времена это было само собой разумеющимся, поскольку они были мультиплексированы по времени по аналоговому каналу, но сегодня PWM будет локально синтезироваться MCU приемника, поэтому теоретически может перекрываться). В наши дни вы, возможно, захотите взглянуть на непосредственную повторную реализацию приемника, поговорив с соответствующим (2,4 ГГц?) чип-модулем, а не захватив выходной сигнал, предназначенный для сервоприводов. Код для этого для любой марки радио, которую вы используете, вероятно, уже доступен в Интернете.
Некоторые радиоуправляемые приемники также выводят сигнал PPM , который удивительно легко декодировать с помощью всего одного таймера. Просто запустите захват по таймеру для каждого нарастающего фронта, вычтите предыдущее время захвата, и вы получите длину импульса для каждого канала. Для этого рекомендуется использовать прерывания. Это тот же формат, о котором @ChrisStratton упомянул: «Они были мультиплексированы по времени по аналоговому каналу».

Ответы (1)

Вместо того, чтобы использовать два блока захвата для раздельного захвата нарастающих и спадающих фронтов, используйте блок захвата, чтобы реагировать на оба фронта сигнала(ов) и определять состояние внутри обработчика прерывания. Или используйте внешнее прерывание (смена контакта), чтобы отреагировать на любое изменение сигнала, и используйте автономный таймер для захвата значения счетчика в программном обеспечении. Если прерываний не хватает, можно ИЛИ (диоды) подать сигналы на один вход прерывания и проверить источник с обычными входами (по одному на каждый сигнал).

Обратите внимание на то, как обрабатываются прерывания (приоритет) для случая, когда несколько сигналов изменяют состояние точно в одно и то же время.
задержка на одну мкс больше или меньше, вероятно, не является проблемой для серво-ШИМ.