Оглавление:
- Запасы
- Шаг 1. Изучите протокол телеметрии Spektrum
- Шаг 2: Выберите оборудование
- Шаг 3: напишите программное обеспечение
- Шаг 4: Подключите схему
- Шаг 5. Компиляция без загрузчика
- Шаг 6. Прошивка MCU с помощью J-Link
- Шаг 7: перекомпилируйте без внешнего кристалла
Видео: Самолетный высотомер RC (совместим с телеметрией Spektrum): 7 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:48
Я сделал этот высотомер, чтобы пилот мог знать, что они находятся под пределом 400 футов на радиоуправляемых самолетах в США. Мой друг был обеспокоен, поскольку не мог с уверенностью сказать, что он всегда находится ниже 400 футов, и хотел получить дополнительную уверенность, которую обеспечит датчик с данными телеметрии. Да, вы можете купить датчик в Spektrum, но вы можете построить этот проект менее чем за 20 долларов с коммутационными платами (цена которых уже завышена). Если у вас уже есть программатор J-link, вы можете построить его на специальной плате за несколько долларов. Не говоря уже о том, что как только вы поймете протокол Xbus, вы сможете создавать любые другие поддерживаемые датчики! Но в этом проекте я просто расскажу о высотомере …
Список деталей:
-
Для этого проекта я использовал плату микроконтроллера Seeeduino XIAO, так как она крошечная, использует процессор M0, который обладает достаточной мощностью для этого проекта, имеет как I2C, так и SPI, готовые к выходу из коробки, и использует логику 3,3 В, поэтому смещение уровня не происходит. требуется.
https://www.seeedstudio.com/Seeeduino-XIAO-Arduino…
-
Для измерения давления воздуха я купил плату расширения BMP388 от Adafruit. Плата имеет как I2C, так и SPI, и может работать при логике 3,3 или 5 В.
https://www.adafruit.com/product/3966
- Протоплата для разводки схемы
- Припой / паяльник
- Разъемы штыревых / гнездовых контактов, чтобы я мог легко отсоединить датчик / микроконтроллер.
- Маленькая кнопка. Я использую это для сброса начальной высоты.
- Резистор 10к для подтягивания на кнопку.
- 4-контактный гнездовой разъем JST-XH для подключения к телеметрическому порту приемника Spektrum
-
Программатор SEGGER J-Link EDU для прошивки M0 без загрузчика.
https://www.adafruit.com/product/3571
-
10-контактная коммутационная плата Adafruit SWD
www.adafruit.com/product/2743
Запасы
- Я также напечатал на 3D-принтере небольшой корпус для своего высотомера, но он не нужен.
-
Осциллограф - Если у вас его нет, я настоятельно рекомендую этот:
https://store.digilentinc.com/analog-discovery-2-1…
Шаг 1. Изучите протокол телеметрии Spektrum
В основном это делал для меня Раймонд Доминго. Они уже сделали альтиметр, совместимый со Spektrum, так что следование исходному коду действительно помогло. Даташит телеметрии Spektrum заполнил остальные пробелы. Измерение уровней данных на приемнике показало, что мне понадобится логика 3,3 В.
Получатель отправляет адрес устройства, а затем ожидает 16-байтового ответа. В таблице данных показаны структуры для всех различных датчиков. Даже если структура не имеет длины 16 байтов, получатель каждый раз ожидает возврата 16 байтов.
Лист данных Spektrum:
www.spektrumrc.com/ProdInfo/Files/SPM_Tele…
Проект Раймонда Доминго:
www.aerobtec.com/download/altisSpektrumInte…
Шаг 2: Выберите оборудование
Я использовал коммутационную плату BMP388 от Adafruit для измерения давления. Коммутационный разъем обеспечивает контакты I2C и SPI и работает при логике 3,3 или 5 В. Adafruit всегда отлично справляется со своими коммутационными досками, поэтому я купил их. Вместо этого в своей сборке я использовал плату DFRobot Gravity BMP388, так как моя доска Adafruit уже использовалась.
Учитывая, что хост-устройство I2C использует логику 3,3 В, мне нужен был микроконтроллер 3,3 В, и я хотел, чтобы он был небольшим. Я собирался использовать Adafruit Trinket M0, но они относительно дорогие и не имеют большого количества сломанных контактов. Затем я нашел доску Seeeduino XIAO. Это плата M0 с I2C и SPI, готовая к работе, с разъемом USB-C. Кроме того, он действительно крошечный! В целом, мне очень нравится эта плата (хотя на то, чтобы разобраться с кристаллом медленного запуска, у меня ушла целая вечность).
Spektrum использует 4-контактный штекерный разъем JST-XH на приемнике для порта «Xbus», к которому мы будем подключаться. Я использовал 4-контактную розетку JST-XH на высотомере, и она отлично работала.
Шаг 3: напишите программное обеспечение
Я использовал IDE Arduino для написания всего кода. Я скопировал протокол телеметрии Spektrum из их таблицы данных и добавил его в свою библиотеку Arduino. Поскольку у Adafruit всегда есть хорошие библиотеки для прорывов, я использовал их библиотеку BMP3XX для датчика BMP388.
Основные выводы из моего дизайна:
- Настройте I2C, чтобы он работал как клиентское устройство и отвечал на адрес высотомера Spektrum (0x12).
- Считайте показания барометра BMP388 через SPI.
- Сохраните данные о высоте в двух разных буферах, чтобы запрос I2C от приемника не повредил данные, и чередуйте эти два буфера при выборке данных. Это гарантирует, что данные, отправленные получателю, всегда будут полными.
- Использует кнопку для обнуления высотомера.
Подробности и анализ кода смотрите в видео.
Шаг 4: Подключите схему
Я использовал protoboard, но если вы хотите потратить время на разработку специальной фрезерованной платы, вы могли бы сделать схему намного чище.
Я подключил разъем JST-XH к контактам I2C XIAO. Поскольку приемник выдает 5 вольт на шину телеметрии, положительный сигнал с шины поступал на вывод VCC XIAO. Таким образом, встроенный стабилизатор 3,3 В используется для питания датчика BMP388.
Шаг 5. Компиляция без загрузчика
-
Найдите свой файлboards.txt (для любой используемой вами доски).
В моем случае он находился здесь: C: / Users / AppData / Local / Arduino15 / packages / Seeeduino / hardware / samd / 1.7.7 \boards.txt
-
Скопируйте свою плату и переименуйте первый ключ, чтобы указать версию без загрузчика. Я просто добавил _nbl к исходному имени.
- Старый: seeed_XIAO_m0
- Новое: seeed_XIAO_m0_nbl
-
Измените значение.name:
- Старая версия: seeed_XIAO_m0_nbl.name = Seeeduino XIAO
- Новое: seeed_XIAO_m0_nbl.name = Seeeduino XIAO без загрузчика
-
Измените компоновщик для прошивки без загрузчика, изменив скрипт builder ld:
- Старая версия: seeed_XIAO_m0_nbl.build.ldscript = linker_scripts / gcc / flash_with_bootloader.ld
- Новое: seeed_XIAO_m0_nbl.build.ldscript = linker_scripts / gcc / flash_with out _bootloader.ld
- Перезагрузите IDE Arduino.
- Выберите новую плату «Seeeduino XIAO No Bootloader» в меню плат.
- Выберите «Экспорт скомпилированного двоичного файла».
- После компиляции.bin-файл будет в папке вашего проекта Arduino.
Шаг 6. Прошивка MCU с помощью J-Link
У Adafruit есть фантастическое руководство по перепрограммированию загрузчика на устройстве M0 / M4. В нашем случае мы хотим избавиться от загрузчика, но он работает точно так же.
learn.adafruit.com/how-to-program-samd-boo…
Как только вы это сделаете, вы не сможете загрузить код через USB. Вы можете следовать приведенному выше руководству, чтобы снова прошить загрузчик на устройство, чтобы снова загрузить код через USB, как вы это делали на заводе.
Руководство Adafruit очень подробное, но вот основные шаги:
-
Припаяйте перемычки к задней части платы XIAO.
- В руководстве Adafruit не сказано, что вывод RST на коммутационной плате 2x5 необходимо подключить к выводу сброса на платах Adafruit. Но для XIAO мне нужно было подключиться ко всем четырем контактным площадкам на задней панели платы.
- Вывод VREF должен быть подключен к выводу XIAO 3.3v. Это сообщает отладчику, что логика устройства составляет 3,3 В. Без него, если вы выберете неправильный вариант, вы можете повредить микроконтроллер.
- Подключите перемычки к J-Link.
- Включите плату XIAO с помощью USB-кабеля.
- Откройте Atmel Studio.
- Выберите Инструменты Программирование устройства
- Выберите свою доску M0. В этом случае ATSAMD21G18A
- Выберите SWD.
- Прочтите конфигурацию от цели.
- Если вы используете EDU J-Link, примите условия использования (если вы соблюдаете условия использования).
- Убедитесь, что напряжение в верхнем правом углу отображается правильно. Если это не 3,3 В, вы можете сломать плату!
- Очистите предохранитель защиты загрузки (установите размер загрузчика на 0 байт), а затем выберите программу.
- В разделе памяти выберите скомпилированный файл.bin или.hex и выберите программу.
Исправление проблем:
Если при чтении конфигурации устройства вы получаете ошибку напряжения вне допустимого диапазона, убедитесь, что MCU подключен к источнику питания и что контакт J-Link VREF подключен к напряжению 3,3 В
Шаг 7: перекомпилируйте без внешнего кристалла
Плата XIAO имеет внешний кристалл, запуск которого занимает много времени. Приемник Spektrum обнаруживает устройство на шине телеметрии через 350 миллисекунд после включения, поэтому нам нужно указать компилятору использовать вместо него внутренний генератор, который сделает запуск почти мгновенным.
- Найдите файл Board.txt, который вы изменили ранее (да, я мог бы сохранить вам этот шаг раньше, но для меня это был процесс обучения)
- Добавьте "-DCRYSTALLESS" в строку seeed_XIAO_m0_nbl.build.extra_flags. Это скажет компилятору использовать внутренний генератор.
- Перекомпилируйте код.
- Перепрошить MCU.
- Убедитесь, что время запуска достаточно быстрое, используя осциллограф.
Как видно из рисунка, желтый канал 1 - это источник питания. Голубой канал 2 - это вывод готовности микроконтроллера. Примерно через 10 миллисекунд после включения питания микроконтроллер подтягивает второй канал к высокому уровню, что указывает на то, что он находится в цикле настройки. После завершения настройки микроконтроллер кодируется для вывода низкого уровня на вывод, что указывает на запуск основного цикла. Осциллограф показывает, что настройка занимает около 3 миллисекунд. В целом микроконтроллеру требуется 13 миллисекунд после включения питания, чтобы быть готовым к работе.
Рекомендуемые:
Высотомер (высотомер) на основе атмосферного давления: 7 шагов (с изображениями)
Альтиметр (высотомер) на основе атмосферного давления: [Edit]; См. Версию 2 в шаге 6 с вводом базовой высоты вручную. Это описание конструкции высотомера (высотомера) на базе Arduino Nano и датчика атмосферного давления Bosch BMP180. Конструкция проста, но измерения
Dirt Cheap Dirt-O-Meter - звуковой высотомер на базе Arduino за 9 долларов: 4 шага (с изображениями)
Dirt Cheap Dirt-O-Meter - звуковой высотомер на базе Arduino за 9 долларов: Dytters (A.K.A Audible Altimeters) спасали жизни парашютистов на долгие годы. Теперь Audible Abby тоже сэкономит им деньги. У базовых Dytters есть четыре будильника, одна на подъеме и три на спуске. В самолете парашютисты должны знать, когда
Светодиодный компас и высотомер: 7 шагов (с изображениями)
Светодиодный компас и высотомер: объекты со светодиодами меня всегда восхищали. Поэтому этот проект объединяет популярный цифровой датчик компаса HMC5883L с 48 светодиодами. Поместив светодиоды по кругу, вы увидите, в каком направлении вы движетесь. Каждые 7,5 градусов будет др
Электронный барометрический высотомер для стратосферных воздушных шаров: 9 шагов (с изображениями)
Электронный барометрический высотомер для стратосферных шаров: наша команда, RandomRace.ru, запускает гелиевые шары. Маленькие и большие, с камерами и без. Мы запускаем маленькие, чтобы случайным образом сбрасывать контрольные точки для соревнований по приключенческим гонкам, и большие, чтобы делать отличные видео и фотографии с самого верха атмосферы
Высотомер Arduino с использованием BMP и SPI или I2C OLED: 5 шагов
Высотомер Arduino с использованием BMP и SPI или I2C OLED: в течение долгого времени я искал высотомер и температуру с помощью одного датчика и отображал их на OLED на основе SPI. Поскольку я не смог найти ничего точного, подумал, что создам свой собственный, используя библиотеку U8glib. На YouTube есть одно руководство