Съдържание:

RC Plane Altimeter (съвместим със Spectrum Telemetry): 7 стъпки
RC Plane Altimeter (съвместим със Spectrum Telemetry): 7 стъпки

Видео: RC Plane Altimeter (съвместим със Spectrum Telemetry): 7 стъпки

Видео: RC Plane Altimeter (съвместим със Spectrum Telemetry): 7 стъпки
Видео: Garmin Tactix 7 Review - The special features in detail German 2024, Ноември
Anonim
RC Plane Altimeter (съвместим със Spectrum Telemetry)
RC Plane Altimeter (съвместим със Spectrum Telemetry)

Направих този висотомер, за да може пилотът да знае, че те са под ограничението от 400 фута на RC самолети в САЩ. Приятелят ми беше притеснен, тъй като не можеше да каже със сигурност, че винаги е под 400 фута, и искаше допълнителна гаранция, че сензор с телеметрични данни ще осигури. Да, можете да закупите сензор от Spektrum, но можете да изградите този проект за по -малко от $ 20 с пробивни платки (които вече са завишени в цената). Ако вече имате програмист J-link, можете да изградите това на персонализирана дъска за няколко долара. Да не говорим, след като разберете протокола Xbus, можете да направите някой от другите поддържани сензори! Но просто ще покрия висотомер в този проект …

Списък с части:

  • Използвах платка за микроконтролер Seeeduino XIAO за този проект, тъй като е малък, използва процесор M0, който има много мощност за този проект, има I2C и SPI готов да излезе от кутията и използва 3.3v логика, така че не се променя нивото задължително.

    https://www.seeedstudio.com/Seeeduino-XIAO-Arduino…

  • За измерване на въздушното налягане закупих BMP388 пробивна дъска от Adafruit. Платката има I2C и SPI разбити и може да работи на 3.3v или 5v логика.

    https://www.adafruit.com/product/3966

  • Прото платка за свързване на веригата
  • Припой/поялник
  • Мъжки/женски щифтове, за да мога лесно да откачам сензора/микроконтролера.
  • Малък бутон. Използвам това за нулиране на началната височина.
  • 10k резистор за изтегляне на бутона.
  • JST-XH 4-пинов женски конектор за включване в порта за телеметрия на приемника Spektrum
  • SEGGER J-Link EDU програмист да мига M0 без буутлоудър.

    https://www.adafruit.com/product/3571

  • Адапрутна SWD 10-пинова пробивна дъска

    www.adafruit.com/product/2743

Консумативи

  • Отпечатах също 3D корпус за моя висотомер, но това не е необходимо.
  • Осцилоскоп- Ако нямате такъв, силно препоръчвам този:

    https://store.digilentinc.com/analog-discovery-2-1…

Стъпка 1: Научете протокола за телеметрия на Spektrum

Научете протокола за телеметрия на Spektrum
Научете протокола за телеметрия на Spektrum
Научете протокола за телеметрия на Spektrum
Научете протокола за телеметрия на Spektrum
Научете протокола за телеметрия на Spektrum
Научете протокола за телеметрия на Spektrum

Това беше направено най -вече от мен от Реймънд Доминго. Те вече бяха направили висотомер, съвместим със Spektrum, така че спазването на този изходен код наистина помогна. Информационният лист за телеметрия на Spektrum попълва останалите празнини. Измерването на нивата на данни от приемника показа, че ще ми трябва 3.3v логика.

Получателят изпраща адреса на устройството и след това очаква отговор от 16 байта. Информационният лист показва структурите за всички различни сензори. Дори ако структурата не е дълга 16 байта, приемникът очаква 16 байта обратно всеки път.

Спецификация на Spektrum:

www.spektrumrc.com/ProdInfo/Files/SPM_Tele…

Проектът на Реймънд Доминго:

www.aerobtec.com/download/altisSpektrumInte…

Стъпка 2: Изберете Хардуер

Изберете Хардуер
Изберете Хардуер
Изберете Хардуер
Изберете Хардуер
Изберете Хардуер
Изберете Хардуер

Използвах пробивна платка BMP388 от Adafruit за измерване на налягането. Пробивът осигурява I2C и SPI пробиви и работи при 3.3v или 5v логика. Adafruit винаги върши невероятна работа с техните пробивни дъски, затова го купих. Вместо това използвах платка DFRobot Gravity BMP388 в моята конструкция, тъй като моята дъска Adafruit вече беше използвана.

Като се има предвид, че хост I2C устройството използва 3.3v логика, имах нужда от 3.3v микроконтролер и исках той да е малък. Щях да използвам 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: Свържете веригата

Свържете веригата
Свържете веригата
Свържете веригата
Свържете веригата
Свържете веригата
Свържете веригата
Свържете веригата
Свържете веригата

Използвах протоборд, но ако искате да отделите време за проектиране на персонализирана фрезована дъска, можете да направите веригата много по -чиста.

Свързах JST-XH конектора към I2C щифтовете на XIAO. Тъй като приемникът извежда 5 волта към телеметричната шина, положителният сигнал от шината отива към VCC щифта на XIAO. По този начин бордовият 3.3v регулатор се използва за захранване на сензора BMP388.

Стъпка 5: Компилирайте без буутлоудър

Компилирайте без буутлоудър
Компилирайте без буутлоудър
Компилирайте без буутлоудър
Компилирайте без буутлоудър
  1. Намерете вашия файл files.txt (за каквато и дъска да използвате).

    В моя случай той се намираше тук: C: / Users / AppData / Local / Arduino15 / packages / Seeeduino / hardware / samd / 1.7.7 / board.txt

  2. Копирайте дъската си и преименувайте първия ключ, за да посочите версия без буутлоудъра. Току -що добавих _nbl към оригиналното име.

    • Стар: seeed_XIAO_m0
    • Ново: seeed_XIAO_m0_nbl
  3. Променете стойността на.name:

    • Стар: seeed_XIAO_m0_nbl.name = Seeeduino XIAO
    • Ново: seeed_XIAO_m0_nbl.name = Seeeduino XIAO No Bootloader
  4. Променете свързващото устройство, за да мига без буутлоудъра, като промените ld скрипта на builder:

    • Стар: 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
  5. Рестартирайте Arduino IDE.
  6. Изберете новата платка "Seeeduino XIAO No Bootloader" от менюто на дъските.
  7. Изберете „Експортиране на компилиран двоичен файл“
  8. След като бъде компилиран,.bin файлът ще бъде в папката на вашия проект Arduino.

Стъпка 6: Flash MCU с J-Link

Flash MCU с J-Link
Flash MCU с J-Link
Flash MCU с J-Link
Flash MCU с J-Link
Flash MCU с J-Link
Flash MCU с J-Link

Adafruit има фантастично ръководство за препрограмиране на буутлоудъра на устройство M0/M4. В нашия случай искаме да се отървем от буутлоудъра, но той работи по същия начин.

learn.adafruit.com/how-to-program-samd-boo…

След като направите това, няма да можете да качвате код през USB. Можете да следвате горното ръководство, за да прехвърлите буутлоудъра обратно на устройството, за да качите отново код през USB, както сте успели от фабриката.

Ръководството на Adafruit е много задълбочено, но това са основните стъпки:

  1. Запоявайте проводниците на джъмпера към задната част на платката XIAO.

    • Ръководството на Adafruit не казва, че RST щифтът на разглобяващата платка 2x5 трябва да бъде свързан към щифта за нулиране на платките Adafruit. Но за XIAO трябваше да се свържа и с четирите подложки на гърба на платката.
    • Щифтът VREF трябва да бъде свързан към XIAO 3.3v щифт. Това казва на инструмента за отстраняване на грешки, че логиката на устройството е 3.3v. Без него, ако изберете грешна опция, можете да повредите микроконтролера.
  2. Свържете проводниците на джъмпера към J-Link.
  3. Включете платката XIAO с USB кабел.
  4. Отворете студио Atmel.
  5. Изберете Инструменти Програмиране на устройства
  6. Изберете вашата M0 платка. В този случай ATSAMD21G18A
  7. Изберете SWD.
  8. Прочетете конфигурацията от целта.
  9. Ако използвате EDU J-Link, приемете условията за ползване (ако спазвате условията за ползване).
  10. Проверете дали напрежението на отчитане е правилно в горния десен ъгъл. Ако не е 3.3v, можете да счупите дъската си!
  11. Изчистете предпазителя за защита при зареждане (задайте размера на буутлоудъра на 0 байта) и след това изберете програма.
  12. В секцията спомени изберете вашия компилиран.bin или.hex файл и изберете програма.

Отстраняване на неизправности:

Когато четете конфигурацията на устройството, ако получите грешка в напрежението извън обхвата, уверете се, че MCU е включен в захранването и че щифтът J-Link VREF е свързан към 3,3 волта

Стъпка 7: Прекомпилирайте без външен кристал

Прекомпилирайте без външен кристал
Прекомпилирайте без външен кристал

Платката XIAO има външен кристал, чието стартиране отнема много време. Приемникът Spektrum открива устройство на телеметричната шина 350 милисекунди след включване, така че трябва да кажем на компилатора да използва вместо това вътрешния осцилатор, което ще направи стартирането почти мигновено.

  1. Намерете файла Board.txt, който сте променили по -рано (да, можех да ви спестя тази стъпка по -рано, но това беше процес на обучение за мен)
  2. Добавете „-DCRYSTALLESS“към низа seeed_XIAO_m0_nbl.build.extra_flags. Това ще каже на компилатора да използва вътрешния осцилатор.
  3. Прекомпилирайте кода.
  4. Повторно мигане на MCU.
  5. Проверете дали времето за стартиране е достатъчно бързо с помощта на осцилоскоп.

Както можете да видите от снимката, жълтият канал 1 е захранването. Циановият канал 2 е готовият щифт на микроконтролера. Около 10 милисекунди след включване, втори канал се изтегля високо от микроконтролера, което показва, че е в контура за настройка. След като настройката приключи, MCU се кодира, за да издърпа щифта ниско, което показва, че основният контур започва. Обхватът показва, че настройката отнема около 3 милисекунди. Като цяло микроконтролерът отнема 13 милисекунди след включването, за да бъде готов за работа.

Препоръчано: