Inhaltsverzeichnis:

RC Flugzeug Höhenmesser (kompatibel mit Spektrum Telemetrie) - Gunook
RC Flugzeug Höhenmesser (kompatibel mit Spektrum Telemetrie) - Gunook

Video: RC Flugzeug Höhenmesser (kompatibel mit Spektrum Telemetrie) - Gunook

Video: RC Flugzeug Höhenmesser (kompatibel mit Spektrum Telemetrie) - Gunook
Video: Test: Mikro Vario von Hepf macht's möglich – Vario-Telemetrie für Jeti, Multiplex, Hott und Futaba 2024, November
Anonim
RC Flugzeug Höhenmesser (kompatibel mit Spektrum Telemetrie)
RC Flugzeug Höhenmesser (kompatibel mit Spektrum Telemetrie)

Ich habe diesen Höhenmesser gemacht, damit der Pilot weiß, dass er in den USA unter der 400-Fuß-Grenze für RC-Flugzeuge liegt. Mein Freund war besorgt, da er nicht mit Sicherheit sagen konnte, dass er immer unter 400 Fuß war, und wollte die zusätzliche Sicherheit, die ein Sensor mit Telemetriedaten bieten würde. Ja, Sie können einen Sensor von Spektrum kaufen, aber Sie können dieses Projekt für weniger als 20 US-Dollar mit Breakout-Boards (die bereits im Preis aufgeblasen sind) bauen. Wenn Sie bereits über den J-Link-Programmierer verfügen, können Sie diesen für ein paar Dollar auf einem benutzerdefinierten Board erstellen. Ganz zu schweigen davon, dass Sie, sobald Sie das Xbus-Protokoll verstanden haben, jeden der anderen unterstützten Sensoren herstellen können! Aber ich werde in diesem Projekt nur einen Höhenmesser abdecken…

Liste der Einzelteile:

  • Ich habe für dieses Projekt ein Seeeduino XIAO-Mikrocontroller-Board verwendet, da es winzig ist, einen M0-Prozessor verwendet, der viel Leistung für dieses Projekt hat, sowohl I2C als auch SPI bereit zum Auspacken hat und eine 3,3-V-Logik verwendet, sodass keine Pegelverschiebung möglich ist erforderlich.

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

  • Für die Luftdruckmessung habe ich ein BMP388 Breakout Board von Adafruit gekauft. Das Board hat sowohl I2C als auch SPI herausgebrochen und kann mit 3,3 V oder 5 V Logik arbeiten.

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

  • Protoboard zum Verdrahten der Schaltung
  • Löten/Lötkolben
  • Stiftleisten (männlich/weiblich), damit ich den Sensor/Mikrocontroller leicht abnehmen kann.
  • Kleiner Knopf. Ich benutze dies zum Zurücksetzen der Starthöhe.
  • 10k Widerstand für einen Pull-Down auf den Knopf.
  • JST-XH 4-Pin-Buchse zum Einstecken in den Telemetrieanschluss des Spektrum-Empfängers
  • SEGGER J-Link EDU Programmer zum Flashen des M0 ohne Bootloader.

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

  • Adafruit SWD 10-Pin Breakout-Board

    www.adafruit.com/product/2743

Lieferungen

  • Ich habe auch ein kleines Gehäuse für meinen Höhenmesser in 3D gedruckt, aber das wird nicht benötigt.
  • Oszilloskop - Wenn Sie keins haben, empfehle ich dieses:

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

Schritt 1: Lernen Sie das Spektrum Telemetry Protocol

Lernen Sie das Spektrum Telemetry Protocol
Lernen Sie das Spektrum Telemetry Protocol
Lernen Sie das Spektrum Telemetry Protocol
Lernen Sie das Spektrum Telemetry Protocol
Lernen Sie das Spektrum Telemetry Protocol
Lernen Sie das Spektrum Telemetry Protocol

Dies wurde hauptsächlich von Raymond Domingo für mich erledigt. Sie hatten bereits einen Höhenmesser kompatibel mit Spektrum gemacht, also half es wirklich, diesem Quellcode zu folgen. Das Datenblatt der Spektrum-Telemetrie füllte die restlichen Lücken. Die Messung der Datenpegel aus dem Empfänger ergab, dass ich eine 3,3-V-Logik benötigen würde.

Der Empfänger sendet die Geräteadresse und erwartet dann eine 16-Byte-Antwort. Das Datenblatt zeigt die Strukturen für alle verschiedenen Sensoren. Auch wenn die Struktur nicht 16 Byte lang ist, erwartet der Empfänger jedes Mal 16 Byte zurück.

Spektrum-Datenblatt:

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

Raymond Domingos Projekt:

www.aerobtec.com/download/altisSpektrumInte…

Schritt 2: Hardware auswählen

Hardware auswählen
Hardware auswählen
Hardware auswählen
Hardware auswählen
Hardware auswählen
Hardware auswählen

Zur Druckmessung habe ich ein BMP388 Breakout Board von Adafruit verwendet. Der Breakout bietet I2C- und SPI-Breakouts und arbeitet mit 3,3-V- oder 5-V-Logik. Adafruit macht mit ihren Breakout-Boards immer einen tollen Job, also habe ich es gekauft. Ich habe in meinem Build stattdessen ein DFRobot Gravity BMP388-Board verwendet, da mein Adafruit-Board bereits im Einsatz war.

Da das Host-I2C-Gerät eine 3,3-V-Logik verwendet, brauchte ich einen 3,3-V-Mikrocontroller, und ich wollte, dass er klein ist. Ich wollte ein Adafruit Trinket M0 verwenden, aber sie sind relativ teuer und haben nicht sehr viele Stifte ausgebrochen. Dann habe ich das Seeeduino XIAO-Board gefunden. Es ist ein M0-Board mit I2C und SPI ready to go, mit einem USB-C-Anschluss. Außerdem ist es wirklich winzig! Insgesamt mag ich dieses Board wirklich (obwohl ich ewig gebraucht habe, um den langsamen Startkristall zu finden).

Spektrum verwendet einen 4-poligen Stecker der Größe JST-XH am Empfänger für den "Xbus" -Port, den wir anzapfen werden. Ich habe am Höhenmesser eine 4-polige JST-XH-Buchse verwendet und es hat perfekt funktioniert.

Schritt 3: Software schreiben

Ich habe die Arduino IDE verwendet, um den gesamten Code zu schreiben. Ich habe das Spektrum-Telemetrieprotokoll aus ihrem Datenblatt kopiert und meiner Arduino-Bibliothek hinzugefügt. Da Adafruit immer schöne Bibliotheken für ihre Breakouts hat, habe ich ihre BMP3XX-Bibliothek für den BMP388-Sensor verwendet.

Die wichtigsten Erkenntnisse aus meinem Design sind:

  • Richten Sie den I2C so ein, dass er sich als Client-Gerät verhält und auf die Spektrum-Höhenmesseradresse (0x12) reagiert.
  • Lesen Sie das BMP388-Barometer über SPI aus.
  • Speichern Sie die Höhendaten in zwei verschiedenen Puffern, damit eine I2C-Anforderung vom Empfänger die Daten nicht verfälscht, und wechseln Sie beim Abrufen der Daten zwischen den beiden Puffern. Dadurch wird sichergestellt, dass die an den Empfänger gesendeten Daten immer vollständig sind.
  • Benutzt eine Taste, um den Höhenmesser auf Null zu stellen.

Weitere Details und Codeanalysen finden Sie im Video.

Schritt 4: Verdrahten Sie die Schaltung

Verdrahten Sie die Schaltung
Verdrahten Sie die Schaltung
Verdrahten Sie die Schaltung
Verdrahten Sie die Schaltung
Verdrahten Sie die Schaltung
Verdrahten Sie die Schaltung
Verdrahten Sie die Schaltung
Verdrahten Sie die Schaltung

Ich habe Protoboard verwendet, aber wenn Sie sich die Zeit nehmen möchten, um eine benutzerdefinierte gefräste Platine zu entwerfen, können Sie die Schaltung viel sauberer machen.

Ich habe den JST-XH-Stecker mit den I2C-Pins des XIAO verbunden. Da der Empfänger 5 Volt an den Telemetriebus ausgibt, ging das Plus vom Bus zum VCC-Pin des XIAO. Auf diese Weise wird der integrierte 3,3-V-Regler zur Stromversorgung des BMP388-Sensors verwendet.

Schritt 5: Kompilieren ohne Bootloader

Kompilieren ohne Bootloader
Kompilieren ohne Bootloader
Kompilieren ohne Bootloader
Kompilieren ohne Bootloader
  1. Suchen Sie nach der Datei „boards.txt“(für jedes Board, das Sie verwenden).

    In meinem Fall befand es sich hier: C:\Users\AppData\Local\Arduino15\packages\Seeeduino\hardware\samd\1.7.7\boards.txt

  2. Kopieren Sie Ihr Board und benennen Sie den ersten Schlüssel um, um eine Version ohne Bootloader anzugeben. Ich habe gerade _nbl zum ursprünglichen Namen hinzugefügt.

    • Alt: seeed_XIAO_m0
    • Neu: seeed_XIAO_m0_nbl
  3. Ändern Sie den.name-Wert:

    • Alt: seeed_XIAO_m0_nbl.name=Seeeduino XIAO
    • Neu: seeed_XIAO_m0_nbl.name=Seeeduino XIAO Kein Bootloader
  4. Ändern Sie den Linker so, dass er ohne Bootloader blinkt, indem Sie das Builder ld-Skript ändern:

    • Alt: seeed_XIAO_m0_nbl.build.ldscript=linker_scripts/gcc/flash_with_bootloader.ld
    • Neu: seeed_XIAO_m0_nbl.build.ldscript=linker_scripts/gcc/flash_with out _bootloader.ld
  5. Starten Sie die Arduino-IDE neu.
  6. Wählen Sie das neue Board "Seeeduino XIAO No Bootloader" aus dem Board-Menü aus.
  7. Wählen Sie "Kompilierte Binärdatei exportieren"
  8. Nach der Kompilierung befindet sich die.bin-Datei in Ihrem Arduino-Projektordner.

Schritt 6: Flash-MCU mit J-Link

Flash-MCU mit J-Link
Flash-MCU mit J-Link
Flash-MCU mit J-Link
Flash-MCU mit J-Link
Flash-MCU mit J-Link
Flash-MCU mit J-Link

Adafruit hat eine fantastische Anleitung zur Neuprogrammierung eines Bootloaders auf einem M0/M4-Gerät. In unserem Fall wollen wir den Bootloader loswerden, aber es funktioniert genauso.

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

Sobald Sie dies tun, können Sie keinen Code über USB hochladen. Sie können der obigen Anleitung folgen, um den Bootloader wieder auf das Gerät zu flashen, um den Code erneut über USB hochzuladen, wie Sie es ab Werk konnten.

Der Adafruit-Leitfaden ist sehr gründlich, aber dies sind die grundlegenden Schritte:

  1. Lötbrückendrähte an der Rückseite der XIAO-Platine anlöten.

    • Der Adafruit-Leitfaden sagte nicht, dass der RST-Pin auf dem 2x5-Breakout-Board mit dem Reset-Pin auf den Adafruit-Boards verbunden werden muss. Aber für den XIAO musste ich alle vier Pads auf der Rückseite des Boards anschließen.
    • Der VREF-Pin muss mit dem XIAO 3.3v-Pin verbunden werden. Dies teilt dem Debugger mit, dass die Gerätelogik 3,3 V beträgt. Ohne sie könnte der Mikrocontroller beschädigt werden, wenn Sie die falsche Option auswählen.
  2. Verbinden Sie die Überbrückungsdrähte mit dem J-Link.
  3. Schalten Sie das XIAO-Board mit einem USB-Kabel ein.
  4. Öffnen Sie Atmel-Studio.
  5. Wählen Sie Tools Geräteprogrammierung
  6. Wählen Sie Ihr M0-Board aus. In diesem Fall ist der ATSAMD21G18A
  7. Wählen Sie SWD.
  8. Lesen Sie die Konfiguration aus dem Ziel.
  9. Wenn Sie den EDU J-Link verwenden, stimmen Sie den Nutzungsbedingungen zu (wenn Sie sich an die Nutzungsbedingungen halten).
  10. Überprüfen Sie, ob die eingelesene Spannung in der oberen rechten Ecke korrekt ist. Wenn es nicht 3,3 V ist, könnten Sie Ihr Board brechen!
  11. Löschen Sie die Boot-Protect-Sicherung (stellen Sie die Bootloader-Größe auf 0 Bytes ein) und wählen Sie dann das Programm aus.
  12. Wählen Sie im Abschnitt "Speicher" Ihre kompilierte.bin- oder.hex-Datei und wählen Sie das Programm aus.

Fehlerbehebung:

Wenn Sie beim Lesen der Gerätekonfiguration einen Spannungsfehler außerhalb des Bereichs erhalten, stellen Sie sicher, dass die MCU an die Stromversorgung angeschlossen ist und dass der J-Link VREF-Pin mit 3,3 Volt verbunden ist

Schritt 7: Neukompilieren ohne den externen Kristall

Neukompilieren ohne den externen Kristall
Neukompilieren ohne den externen Kristall

Das XIAO-Board verfügt über einen externen Quarz, dessen Start lange dauert. Der Spektrum-Empfänger führt 350 Millisekunden nach dem Einschalten eine Geräteerkennung auf dem Telemetriebus durch, daher müssen wir dem Compiler mitteilen, dass er stattdessen den internen Oszillator verwenden soll, wodurch der Start fast sofort erfolgt.

  1. Suchen Sie die Datei board.txt, die Sie zuvor geändert haben (ja, ich hätte Ihnen diesen Schritt früher sparen können, aber das war ein Lernprozess für mich)
  2. Fügen Sie "-DCRYSTALLESS" zur Zeichenfolge seeed_XIAO_m0_nbl.build.extra_flags hinzu. Dadurch wird der Compiler angewiesen, den internen Oszillator zu verwenden.
  3. Kompilieren Sie den Code neu.
  4. Flashen Sie die MCU erneut.
  5. Stellen Sie mit einem Oszilloskop sicher, dass die Startzeit schnell genug ist.

Wie Sie auf dem Bild sehen können, ist der gelbe Kanal 1 die Stromversorgung. Der Cyan-Kanal 2 ist der Ready-Pin des Mikrocontrollers. Ungefähr 10 Millisekunden nach dem Einschalten wird Kanal zwei vom Mikrocontroller hochgezogen, was anzeigt, dass er sich in der Setup-Schleife befindet. Sobald die Einrichtung abgeschlossen ist, ist die MCU so codiert, dass sie den Pin nach unten zieht, was anzeigt, dass die Hauptschleife beginnt. Das Oszilloskop zeigt, dass die Einrichtung etwa 3 Millisekunden dauert. Insgesamt braucht der Mikrocontroller nach dem Einschalten 13 Millisekunden, um einsatzbereit zu sein.

Empfohlen: