Пульт радиоуправления пистолетного типа
(прошивка)
Биндинг
Режим биндинга для пульта запускается либо из меню, либо специальной кнопкой. Возврат в нормальный режим происходит либо при успешном завершении привязки, либо по кнопке «отмена». При отмене процедуры привязки пульт работает с теми настройками, которые у него были перед запуском биндинга.
В режиме биндинга пульт переключается в режим приема и устанавливает свой адрес в 254.254.254.254. В этом режиме он ожидает специального пакета с приемника. Формат пакета при этом должен быть следующим:
байт |
значение |
0 |
0xfa |
1:4 |
4 байта адреса приемника |
При приеме такого пакета, пульт запоминает адрес и отправляет обратно пакет следующего формата:
Байт |
значение |
0 |
0x5d |
1:4 |
4 байта адреса приемника (подтверждение) |
5 |
Идентификатор привязки |
Пятый байт используется для обеспечения единственности передатчика для привязанного к нему приемника. Значение этого байта берется случайным образом каждый раз при включении режима привязки. Далее, при передаче данных управления моделью, приемник будет рассматривать их только при условии наличия этого идентификатора. Таким образом, обеспечивается защита от одновременной привязки двух пультов к одной модели.
Подключение кнопок
Кнопки подключаются к микроконтроллеру при помощи входного сдвигового регистра 74HC165 (интерфейс SPI). Для чтения состояния кнопок предусмотрена функция buttonsRead. Результатом ее выполнения является обновление двух переменных:
dState – байт текущего состояния кнопок
dChanged – байт, указывающий на то, состояние каких кнопок изменилось
Соответствие битов кнопкам следующее:
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Не используется |
Не используется |
Кнопка
«канал 4» |
Кнопка
«bind» |
Кнопка
«меню» |
Кнопка
«отмена» |
Кнопка
«+» |
Кнопка
«-» |
Подключение резисторов
Резисторы пропорциональных каналов подключаются к линиям АЦП 4 и 5. На микроконтроллере эти выводы совмещены с выводами SDA и SDL интерфейса I2C. АЦП запускаем в режиме циклической оцифровки сигнала. Подробно я описывал тут.
Подключение дисплея
Наиболее подходящим для данного проекта оказался дисплей Arduino TFT. Он практически идеально вписался в имеющийся корпус. Главное же его достоинство – подключение по SPI. Это особенно актуально ввиду большого дефицита свободных пинов на микроконтроллере. Для работы с дисплеем использована библиотека TFT, входящая в Arduino IDE версии 1.0.5 и выше. SD-карта на дисплее пока не используется.
Подключение радиомодуля
За основу пульта был взят OrangeRx OpenLRS модуль приемника. Достаточно подробно я описал его тут.
Настройки модели (хранение их в EEPROM)
Пульт дает возможность управления моделью посредством двух пропорциональных и четырех дискретных каналов. Пропорциональные каналы описываются следующей структурой данных:
Наименование |
Тип данных |
Назначение |
Область EEPROM |
Center |
uint16_t |
Нейтральное положение органа управления |
Область калибровочных значений |
MaxVal |
uint16_t |
Крайнее правое положение органа управления |
Область калибровочных значений |
MinVal |
uint16_t |
Крайнее левое положение органа управления |
Область калибровочных значений |
chValue |
uint16_t |
Текущее положение органа управления |
|
ExpLeft |
uint16_t |
Максимальное отклонение управляющего сигнала влево |
Область настроек модели |
ExpRight |
uint16_t |
Максимальное отклонение управляющего сигнала вправо |
Область настроек модели |
Trimm |
uint8_t |
Смещение нейтрального положения |
Область настроек модели |
Revers |
uint8_t |
Реверс канала |
Область настроек модели |
Все дискретные каналы описываются двумя переменными с размерностью в один байт:
Наименование |
Тип данных |
Назначение |
Область EEPROM |
dChannels |
uint8_t |
Текущее состояние кнопок |
|
dFix |
uint8_t |
Режим работы кнопок |
Область настроек модели |
Каждому дискретному каналу в этих переменных соответствует один бит ( с первого по четвертый).
Для кнопок возможны два режима работы:
Без фиксации – при нажатой кнопке значением соответствующего канала является логическая единица, при отпущенной – логический ноль.
С фиксацией – каждое нажатие кнопки переключает состояние соответствующего канала с логического ноля на логическую единицу и обратно. Т.е. для включения канала требуется одно кратковременное нажатие на кнопку. Выключение при этом производится повторным нажатием.
Алгоритм микширования
Фактически это алгоритм приведения сигнала с органа пропорционального управления к заданному диапазону значений. Базовым диапазоном при этом является диапазон значений от 1000 до 2000 с нейтральным значением 1500. Так же используется диапазон реальных значений, полученных при калибровке пульта.
- Если ADC_Value больше Center, то считать ОУ отклоненным вправо. Выполнить приведение ADC_Value к диапазону значений 1500:2000
- Если ADC_Value меньше Center, то считать ОУ отклоненным влево. Выполнить приведение ADC_Value к диапазону значений 1000:1500
- Если 1 и 2 не выполняются, то считать ADC_Value равным 1500
- Если для канала включен реверс, то «перевернуть» его значение в рамках диапазона 1000:2000 и изменить принятое отклонение в 1/2 на противоположное.
- Если ОУ отклонен вправо, то привести его значение к диапазону 1500 : 1500 + ExpRight
- Если ОУ отклонен влево, то привести его значение к диапазону 1500 + ExpLeft : 1500
- Полученное значение сдвинуть на Trimm - 128
Прошивки
В прошивке отлажены и функционируют:
- кнопки
- меню
- режим привязки
- передача дискретных каналов
Еще предстоит отладить:
- пропорциональные каналы и их настройки
- генерацию сигналов для пропорциональных каналов.
Так же надо будет написать FHSS - скачкообразный перебор частот. Он необходим для повышения надежности и радиуса действия пульта.
Передатчик v0.1_a скачать
Приемник v0.1_a скачать
Версия 02а:
- Отлажены пропорциональные каналы
- Исправлена бага в бинде
- Исправлена бага в сохранении модели
Передатчик: скачать
Приемник: скачать
Версия 03а:
- написан и отлажен FHSS
- сделана передача телеметрии. На экране отображаются RSSI & TSSI.
- сделан Failsafe.
- Кнопка BIND изменила свое назначение. Теперь она программирует Failsafe.
Передатчик: скачать
Приемник: скачать
Версия 1.0:
Написал небольшое приложение для Windows - теперь можно управлять списком моделей с ПК.
Так же приложение позволяет сохранять модели на ПК.
Открыл репозиторий в GitHub. Там теперь в одном месте находятся все исходники и документация.
По документации:
- для приемника и передатчика нарисовал в MS Visio основные алгоритмы
- выложил схему подключения кнопок для Dip Trace. Печатка к сожалению утеряна
- в файле Documentation.xlsx собрал в таблицу соединения Оранжа для приемника и передатчика
- там же битовые маски для кнопок и карта EEPROM для передатчика
Скачать с GitHub. |