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
web java-script bmp280 adc bldc stm32 rs-232 programmator 3d-printer flash pwm sms motor docker raspberry-pi meteo gps ngnix bme280 timer ssd1331 mpu-6050 bkp battery rfid st-link tim mpx4115a ssd1306 encoder atmega pmsm wifi options rtc examples nvic soldering mongodb esp8266 books lcd foc flask barometer bluetooth ethernet brushless uart watchdog servo gpio solar git remap dma usart eb-500 smd nodemcu sensors displays html python capture dht11 led i2c eeprom piezo exti websocket max1674 usb dc-dc avr hih-4000 css mpu-9250
Архіви



