README.md

Converter CRSF to PWM


Что это

Целью этого проекта является преобразователь для подключения к ELRS приемникам исполнительных устройств со стандартным ШИМ управлением. Например - аналоговых сервомашинок Указанные приемники предназначены для работы с полетными контроллерами. Для обмена данными используется двусторонний протокол CRSF, который обеспечивает передачу принятых канальных данных и обратную передачу телеметрии В качестве физического интерфейса используется стандартный UART со схемой 8N1. В оригинале протокол CRSF регламентирует скорость 416 кбод. Но ELRS приемники по умолчанию используют скорость 420 кбод. Хотя, во всех современных версиях ELRS, скорость легко настраивается с помощь. вэб-интерфейса.

На чем это сделано

В качестве аппаратной платформы используется микроконтроллер от Raspberry Pi - RP2040 (2 ядра Cortex M0 133МГц): https://www.raspberrypi.com/documentation/microcontrollers/silicon.html#rp2040
Отладочная плата на этом МК - Waweshare RP2040-Zero (самое дешевое, что есть): https://www.waveshare.com/rp2040-zero.htm
Программа написана на C с использованием Pico SDK: https://www.raspberrypi.com/documentation/pico-sdk/
Visual Studio Code со специальным расширением. Инструкция по установке и началу работы: https://datasheets.raspberrypi.com/pico/getting-started-with-pico.pdf

Описание


PWMi – выход ШИМ для i-го канала
Di – дискретный выход для i-го канала


В файле app_defs.h определены выходы каналов

Имя APP_PWM_PERIOD Определяет частоту обновления ШИМ. Возможные значения задаются типом PwmPeriod_t

Значение PWM_PERIOD_SINGLE_SHOT означает что ШИМ обновляется в момент прихода очередного CRSF пакета. Соответственно, частота обновления ШИМ равна частоте обновления выставленной на аппаратуре управления.

Параметр PWM_SCALE_PERCENT определяет масштабирование значения ШИМ на выходах (в процентах). Допустимое значение [0; 200]. Если больше, то ограничивается на 200.
Масштаб 100% соответствует длительности импульса в пределах 1000…2000 мкс, при, соответственно, минимальном и максимальном значении канала.


В файле crsf_decoder.h определены максимальное и минимальное значение канала в протоколе CRSF (параметры CRSF_VALUE_MIN и CRSF_VALUE_MAX).
Эти значения равны, соответственно, 172 и 1812 (взяты из реальной аппаратуры). При декодировании эти значения соответствуют размаху ШИМ 1000…2000 мкс в масштабе 100%. Если значение канала выйдет за указанный диапазон, оно будет обрезано

Для декодирования значения канала в дискретный выход используются параметры: CRSF_VALUE_MID среднее значение канала и CRSF_VALUE_DEAD_ZONE ширина запрещенной зоны. Дискретные выходы переключаются с гистерезисом. Учитывается текущее состояние выхода, новое значение канала и уровни запрещенной зоны.
Переключение выхода LO -> HI происходит если значение канала больше CRSF_VALUE_MID + CRSF_VALUE_DEAD_ZONE
Переключение выхода HI -> LO происходит если значение канала меньше CRSF_VALUE_MID - CRSF_VALUE_DEAD_ZONE

Описание

Конвертер протоколов CRSF to PWM на микроконтроллере RP2040

Конвейеры
0 успешных
0 с ошибкой