Spisu treści:

Wysokościomierz samolotu RC (kompatybilny z telemetrią Spektrum): 7 kroków
Wysokościomierz samolotu RC (kompatybilny z telemetrią Spektrum): 7 kroków

Wideo: Wysokościomierz samolotu RC (kompatybilny z telemetrią Spektrum): 7 kroków

Wideo: Wysokościomierz samolotu RC (kompatybilny z telemetrią Spektrum): 7 kroków
Wideo: Budowa samolotu RC stabilizator żyroskopowy 2024, Listopad
Anonim
Wysokościomierz RC (kompatybilny z telemetrią Spektrum)
Wysokościomierz RC (kompatybilny z telemetrią Spektrum)

Zrobiłem ten wysokościomierz, aby pilot mógł wiedzieć, że znajdują się poniżej 400 stóp limitu na samolotach RC w USA. Mój przyjaciel był zaniepokojony, ponieważ nie mógł powiedzieć na pewno, że zawsze był poniżej 400 stóp i chciał dodatkowej pewności, jaką zapewni czujnik z danymi telemetrycznymi. Tak, możesz kupić czujnik od Spektrum, ale możesz zbudować ten projekt za mniej niż 20 USD za pomocą tabliczek typu breakout (które są już zawyżone w cenie). Jeśli masz już programator J-link, możesz zbudować go na niestandardowej płytce za kilka dolarów. Nie wspominając już o tym, że kiedy zrozumiesz protokół Xbus, możesz stworzyć dowolny z innych obsługiwanych czujników! Ale w tym projekcie będę tylko mierzył wysokościomierz…

Lista części:

  • Do tego projektu użyłem płytki mikrokontrolera Seeeduino XIAO, ponieważ jest malutka, używa procesora M0, który ma dużo mocy dla tego projektu, ma zarówno I2C, jak i SPI gotowe do wyjęcia z pudełka i używa logiki 3,3 V, więc nie ma zmiany poziomu wymagany.

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

  • Do wykrywania ciśnienia powietrza kupiłem tablicę zaciskową BMP388 od Adafruit. Płyta ma wyłamane zarówno I2C, jak i SPI i może pracować z logiką 3,3 V lub 5 V.

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

  • Protoboard do okablowania obwodu
  • Lutownica/lutownica
  • Męskie/żeńskie złącza pinowe, dzięki czemu mogę łatwo odłączyć czujnik/mikrokontroler.
  • Mały guzik. Używam tego do resetowania wysokości startowej.
  • Rezystor 10k dla pull-down na przycisku.
  • JST-XH 4-pinowe złącze żeńskie do podłączenia do portu telemetrii odbiornika Spektrum
  • Programator SEGGER J-Link EDU do flashowania M0 bez bootloadera.

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

  • 10-pinowa tabliczka zaciskowa Adafruit SWD

    www.adafruit.com/product/2743

Kieszonkowe dzieci

  • Wydrukowałem też w 3D małą obudowę dla mojego wysokościomierza, ale to nie jest potrzebne.
  • Oscyloskop- Jeśli go nie masz, bardzo polecam ten:

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

Krok 1: Naucz się protokołu telemetrii Spektrum

Poznaj protokół telemetrii Spektrum
Poznaj protokół telemetrii Spektrum
Poznaj protokół telemetrii Spektrum
Poznaj protokół telemetrii Spektrum
Poznaj protokół telemetrii Spektrum
Poznaj protokół telemetrii Spektrum

W większości zrobił to dla mnie Raymond Domingo. Stworzyli już wysokościomierz kompatybilny ze Spektrum, więc podążanie za tym kodem źródłowym naprawdę pomogło. Arkusz danych telemetrycznych Spektrum wypełnił resztę luk. Pomiar poziomów danych z odbiornika pokazał, że potrzebuję logiki 3.3v.

Odbiornik wysyła adres urządzenia, a następnie oczekuje odpowiedzi 16-bajtowej. Arkusz danych pokazuje struktury wszystkich różnych czujników. Nawet jeśli struktura nie ma długości 16 bajtów, odbiorca za każdym razem oczekuje 16 bajtów wstecz.

Arkusz danych Spektrum:

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

Projekt Raymonda Domingo:

www.aerobtec.com/download/altisSpektrumInte…

Krok 2: Wybierz sprzęt

Wybierz sprzęt
Wybierz sprzęt
Wybierz sprzęt
Wybierz sprzęt
Wybierz sprzęt
Wybierz sprzęt

Do wykrywania nacisku użyłem deski typu breakout BMP388 firmy Adafruit. Breakout zapewnia wybicia I2C i SPI i działa przy logice 3,3 V lub 5 V. Adafruit zawsze wykonuje niesamowitą robotę ze swoimi breakoutami, więc kupiłem go. Użyłem płyty DFRobot Gravity BMP388 w mojej konstrukcji, ponieważ moja płyta Adafruit była już w użyciu.

Biorąc pod uwagę, że urządzenie hosta I2C wykorzystuje logikę 3,3 V, potrzebowałem mikrokontrolera 3,3 V i chciałem, aby był mały. Miałem zamiar użyć Adafruit Trinket M0, ale są one stosunkowo drogie i nie mają zbyt wielu wyłamanych pinów. Potem znalazłem płytkę Seeeduino XIAO. Jest to płyta M0 z I2C i SPI gotowa do pracy, ze złączem USB-C. Poza tym jest naprawdę malutki! Ogólnie bardzo podoba mi się ta płyta (mimo że powolny kryształ startowy zajęło mi wieczność, aby to rozgryźć).

Spektrum używa 4-pinowego męskiego złącza JST-XH na odbiorniku dla portu "Xbus", do którego będziemy się podłączać. Użyłem 4-pinowej wtyczki żeńskiej JST-XH na wysokościomierzu i zadziałało idealnie.

Krok 3: Napisz oprogramowanie

Do napisania całego kodu użyłem Arduino IDE. Skopiowałem protokół telemetryczny Spektrum z ich arkusza danych i dodałem go do mojej biblioteki Arduino. Ponieważ Adafruit zawsze ma ładne biblioteki dla swoich wybić, użyłem ich biblioteki BMP3XX dla czujnika BMP388.

Główne wnioski z mojego projektu to:

  • Skonfiguruj I2C tak, aby zachowywał się jak urządzenie klienckie i odpowiadał na adres wysokościomierza Spektrum (0x12).
  • Odczytaj barometr BMP388 przez SPI.
  • Zapisz dane wysokości w dwóch różnych buforach, aby żądanie I2C z odbiornika nie uszkodziło danych, i naprzemiennie między dwoma buforami podczas pobierania danych. Daje to pewność, że dane wysyłane do odbiorcy są zawsze kompletne.
  • Używa przycisku do wyzerowania wysokościomierza.

Aby uzyskać więcej szczegółów i analizę kodu, obejrzyj wideo.

Krok 4: Podłącz obwód

Podłącz obwód
Podłącz obwód
Podłącz obwód
Podłącz obwód
Podłącz obwód
Podłącz obwód
Podłącz obwód
Podłącz obwód

Użyłem płytki prototypowej, ale jeśli chcesz poświęcić czas na zaprojektowanie niestandardowej płytki frezowanej, możesz sprawić, że obwód będzie znacznie czystszy.

Podłączyłem złącze JST-XH do pinów I2C XIAO. Ponieważ odbiornik wyprowadza 5 woltów na szynę telemetryczną, plus z szyny trafia do pinu VCC XIAO. W ten sposób wbudowany regulator 3.3v służy do zasilania czujnika BMP388.

Krok 5: Kompiluj bez bootloadera

Kompiluj bez bootloadera
Kompiluj bez bootloadera
Kompiluj bez bootloadera
Kompiluj bez bootloadera
  1. Znajdź swój plik boards.txt (dla dowolnej tablicy, której używasz).

    W moim przypadku znajdował się tutaj: C:\Users\AppData\Local\Arduino15\packages\Seeeduino\hardware\samd\1.7.7\boards.txt

  2. Skopiuj swoją tablicę i zmień nazwę pierwszego klucza, aby określić wersję bez bootloadera. Właśnie dodałem _nbl do oryginalnej nazwy.

    • Stary: seeed_XIAO_m0
    • Nowość: seeed_XIAO_m0_nbl
  3. Zmień wartość.name:

    • Stare: seeed_XIAO_m0_nbl.name=Seeeduino XIAO
    • Nowość: seeed_XIAO_m0_nbl.name=Seeeduino XIAO bez bootloadera
  4. Zmodyfikuj linker, aby flashował bez bootloadera, zmieniając skrypt ld konstruktora:

    • Stare: seeed_XIAO_m0_nbl.build.ldscript=linker_scripts/gcc/flash_with_bootloader.ld
    • Nowość: seeed_XIAO_m0_nbl.build.ldscript=linker_scripts/gcc/flash_bez _bootloader.ld
  5. Zrestartuj środowisko Arduino IDE.
  6. Wybierz nową płytę "Seeeduino XIAO No Bootloader" z menu tablic.
  7. Wybierz „Eksportuj skompilowany plik binarny”
  8. Po skompilowaniu plik.bin znajdzie się w folderze projektu Arduino.

Krok 6: Flash MCU z J-Link

Flash MCU z J-Link
Flash MCU z J-Link
Flash MCU z J-Link
Flash MCU z J-Link
Flash MCU z J-Link
Flash MCU z J-Link

Adafruit ma fantastyczny przewodnik po przeprogramowaniu bootloadera na urządzeniu M0/M4. W naszym przypadku chcemy pozbyć się bootloadera, ale działa to w ten sam sposób.

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

Gdy to zrobisz, nie będziesz mógł przesłać kodu przez USB. Możesz postępować zgodnie z powyższym przewodnikiem, aby sflashować bootloader z powrotem na urządzenie, aby ponownie przesłać kod przez USB, tak jak w fabryce.

Poradnik Adafruit jest bardzo dokładny, ale oto podstawowe kroki:

  1. Przylutuj przewody połączeniowe z tyłu płyty XIAO.

    • Przewodnik Adafruit nie powiedział, że pin RST na płytce breakout 2x5 musi być podłączony do pinu resetującego na płytkach Adafruit. Ale w przypadku XIAO musiałem połączyć się ze wszystkimi czterema padami z tyłu płyty.
    • Pin VREF musi być podłączony do pinu XIAO 3.3v. To mówi debugerowi, że logika urządzenia to 3,3V. Bez tego, jeśli wybierzesz niewłaściwą opcję, możesz uszkodzić mikrokontroler.
  2. Podłącz przewody połączeniowe do J-Link.
  3. Włącz płytę XIAO za pomocą kabla USB.
  4. Otwórz Atmel Studio.
  5. Wybierz Narzędzia Programowanie urządzenia
  6. Wybierz swoją tablicę M0. W tym przypadku ATSAMD21G18A
  7. Wybierz SWD.
  8. Odczytaj konfigurację z celu.
  9. Jeśli korzystasz z EDU J-Link, zaakceptuj warunki użytkowania (jeśli przestrzegasz warunków użytkowania).
  10. Sprawdź, czy odczytane napięcie w prawym górnym rogu jest prawidłowe. Jeśli nie jest to 3,3 V, możesz zepsuć swoją płytkę!
  11. Wyczyść bezpiecznik ochrony rozruchu (ustaw rozmiar bootloadera na 0 bajtów), a następnie wybierz program.
  12. W sekcji pamięci wybierz skompilowany plik.bin lub.hex i wybierz program.

Rozwiązywanie problemów:

Gdy czytasz konfigurację urządzenia, jeśli pojawi się błąd napięcia poza zakresem, upewnij się, że MCU jest podłączony do zasilania, a pin J-Link VREF jest podłączony do 3,3 wolta

Krok 7: Ponowna kompilacja bez zewnętrznego kryształu

Ponowna kompilacja bez zewnętrznego kryształu
Ponowna kompilacja bez zewnętrznego kryształu

Płyta XIAO ma zewnętrzny kryształ, którego uruchomienie zajmuje dużo czasu. Odbiornik Spektrum wykrywa urządzenie na magistrali telemetrycznej 350 milisekund po włączeniu zasilania, więc musimy powiedzieć kompilatorowi, aby zamiast tego używał wewnętrznego oscylatora, co sprawi, że uruchomienie będzie prawie natychmiastowe.

  1. Znajdź plik boards.txt, który zmodyfikowałeś wcześniej (tak, mogłem zapisać ten krok wcześniej, ale był to dla mnie proces uczenia się)
  2. Dodaj "-DCRYSTALLESS" do ciągu seeed_XIAO_m0_nbl.build.extra_flags. To powie kompilatorowi, aby używał wewnętrznego oscylatora.
  3. Ponownie skompiluj kod.
  4. Ponowne flashowanie MCU.
  5. Za pomocą oscyloskopu sprawdź, czy czas uruchamiania jest wystarczająco krótki.

Jak widać na zdjęciu, żółty kanał 1 to zasilacz. Kanał cyjan 2 to gotowy pin w mikrokontrolerze. Około 10 milisekund po włączeniu zasilania, kanał drugi jest podciągany przez mikrokontroler, co wskazuje, że znajduje się w pętli konfiguracji. Po zakończeniu konfiguracji MCU jest kodowany tak, aby obniżyć pin, co wskazuje, że rozpoczyna się główna pętla. Zakres pokazuje, że konfiguracja trwa około 3 milisekund. Ogólnie rzecz biorąc, mikrokontroler potrzebuje 13 milisekund po włączeniu, aby był gotowy do pracy.

Zalecana: