CRSF to PWM
Для експериментів мені знадобилося отримати PWM сигнал від ELRS приймача у якого є тільки RX, TX виводи. Зараз дуже багато приймачів, які мають лише UART, по якому працює CRSF протокол. Звісно, можна придбати приймач вже з PWM виходами. Та що з таким приймачем робити потім, після завершення експериментів? У мене і так багато залізяччя, котре лежить непотребом. А звичайний приймач я знайду куди застосувати.
Існують плати перетворювачі CRSF -> PWM від відомих і не дуже фірм, та коштують вони інколи трохи не адекватно, з огляду на примітивність функціоналу. Тому вирішив зробити свою реалізацію на найдешевшому мікроконтролері, який у мене був - STM32G030F6P6. І вже до обіду був готовий початковий варіант проєкту. Реалізація цього задуму дозволить надалі використовувати стандартний радіо пульт з ELRS або TBS для реалізації віддаленого керування будь-чим. Навіть тоді, коли нам потрібно буде не тільки PWM на виході, а щось цікавіше.
У підсумку маємо схему, яка:
- перетворює сигнал з приймача у 5 PWM сигналів. Можна використовувати будь-який приймач, який працює з CRSF протоколом на UART порту. У проєкт використовується швидкість порту 420000 Bits/s
- дозволяє встановити показники PWM за замовчуванням. Ці показники застосовуються коли плата вмикається і зв'язку між приймачем і пультом поки що немає
- дозволяє встановити FAILSAFE показники PWM. Ці показники застосовуються коли зникає зв'язок між приймачем і пультом
- вимірює напругу і відправляє телеметрію на пульт керування
Спеціальної плати не робив, використав тестову плату STM32G030F6P6, тому схеми немає. Думаю, підключення зрозуміле з цієї картинки.
Для вимірювання напруги батареї зробив подільник напруги з двох резисторів. З подільника напруга подається на вхід ADC1(PA4). Значення резисторів вказується у проєкті. Шукай рядки:
#define ADC_Voltage_R1 20000
#define ADC_Voltage_R2 4700
Щоб встановити PWM за замовчуванням, треба, щоб був встановлений зв'язок між пультом і приймачем. Далі встановити необхідні показники на пульті керуванні та замкнути на платі вхід B7(B8) на землю.
Щоб налаштувати FAILSAFE PWM, встановити необхідні показники на пульті керуванні та замкнути на платі вхід B9(C14) на землю.
Можна було б припаяти кнопки, та такі маніпуляції виконуються лише один раз.
Переваги проєкту: можливість використовувати будь-який приймач для реалізації своїх проєктів, надалі можна переробити цей проєкт для будь-яких інших рішень, перенести на інші мікроконтролери STM32. Недоліки: мікроконтролер працює на внутрішньому RC генераторі, який не є точним, тому показники PWM будуть не супер точними.
На фото плата з перетворювачем напруги на 5V для живлення плати і приймача вже у термоусадці, та припаяним до неї ERLS приймачем.
Завантажити проєкт можна тут: https://git.avislab.com/andre/STM32G030_CRSF_TO_PWM
Вітаю. Але STM32G030F6P6 не має кварцу для тактування робочої частоти, чи не вважаєте це проблемою для швидкостей UART під 420000. Так, CRSF має CRC, але ж все-таки?
Абсолютно вірне зауваження. Відсутність кварцу - може стати проблемою, особливо коли пристрій буде використовуватись у досить широкому температурному діапазоні. Тому треба на це звертати увагу. Конкретно мої експерименти не виходили за межі кімнати та кімнатної температури, тому проблем не було. Але для надійних пристроїв кварц обов'язковий.
Tags
dma dc-dc lcd eb-500 raspberry-pi tim wifi eeprom gpio piezo rfid usb encoder capture avr mongodb adc soldering ngnix gps css python options examples ethernet motor atmega sensors bkp exti led meteo mpu-9250 remap solar smd html docker hih-4000 programmator displays mpx4115a battery brushless web pmsm nodemcu watchdog rtc servo uart i2c mpu-6050 pwm usart sms git ssd1331 3d-printer flash nvic books websocket st-link ssd1306 max1674 foc stm32 java-script esp8266 timer bmp280 barometer dht11 rs-232 bluetooth bldc flask bme280
Архіви



