Inhoudsopgave:

RC-vliegtuighoogtemeter (compatibel met Spektrum-telemetrie): 7 stappen
RC-vliegtuighoogtemeter (compatibel met Spektrum-telemetrie): 7 stappen

Video: RC-vliegtuighoogtemeter (compatibel met Spektrum-telemetrie): 7 stappen

Video: RC-vliegtuighoogtemeter (compatibel met Spektrum-telemetrie): 7 stappen
Video: Spektrum Smart Telemetry Explained and Demonstrated 2024, Juli-
Anonim
RC-vliegtuighoogtemeter (compatibel met Spektrum-telemetrie)
RC-vliegtuighoogtemeter (compatibel met Spektrum-telemetrie)

Ik heb deze hoogtemeter gemaakt zodat de piloot kan weten dat ze onder de 400 voet limiet op RC-vliegtuigen in de VS zitten. Mijn vriend maakte zich zorgen omdat hij niet met zekerheid kon zeggen dat hij altijd onder de 400 ft was, en wilde de extra zekerheid die een sensor met telemetrische gegevens zou bieden. Ja, je kunt een sensor van Spektrum kopen, maar je kunt dit project voor minder dan $ 20 bouwen met breakout-boards (die al in prijs zijn opgeblazen). Als je de J-link-programmer al hebt, kun je deze voor een paar dollar op een aangepast bord bouwen. Om nog maar te zwijgen van het feit dat als je eenmaal het Xbus-protocol begrijpt, je een van de andere ondersteunde sensoren kunt maken! Maar ik zal gewoon een hoogtemeter in dit project behandelen …

Onderdelen lijst:

  • Ik heb voor dit project een Seeeduino XIAO-microcontrollerbord gebruikt, omdat het klein is, een M0-processor gebruikt die voldoende kracht heeft voor dit project, zowel I2C als SPI klaar heeft om uit de doos te gaan, en 3.3v-logica gebruikt, dus geen niveauverschuiving is verplicht.

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

  • Voor luchtdrukmeting kocht ik een BMP388 breakout board van Adafruit. Het bord heeft zowel I2C als SPI uitgebroken en kan werken op 3.3v of 5v logica.

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

  • Protoboard voor het aansluiten van het circuit
  • Soldeer/soldeerbout
  • Mannelijke/vrouwelijke pin-headers zodat ik de sensor/microcontroller gemakkelijk kan loskoppelen.
  • Kleine knoop. Deze gebruik ik voor het resetten van de starthoogte.
  • 10k weerstand voor een pull-down op de knop.
  • JST-XH 4-pins vrouwelijke connector om aan te sluiten op de telemetriepoort van de Spektrum-ontvanger
  • SEGGER J-Link EDU programmer om de M0 te flashen zonder bootloader.

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

  • Adafruit SWD 10-pins breakout-bord

    www.adafruit.com/product/2743

Benodigdheden

  • Ik heb ook een kleine behuizing voor mijn hoogtemeter 3D geprint, maar dit is niet nodig.
  • Oscilloscoop- Als je er geen hebt, raad ik deze ten zeerste aan:

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

Stap 1: Leer het Spektrum-telemetrieprotocol

Leer het Spektrum-telemetrieprotocol
Leer het Spektrum-telemetrieprotocol
Leer het Spektrum-telemetrieprotocol
Leer het Spektrum-telemetrieprotocol
Leer het Spektrum-telemetrieprotocol
Leer het Spektrum-telemetrieprotocol

Dit werd grotendeels voor mij gedaan door Raymond Domingo. Ze hadden al een hoogtemeter gemaakt die compatibel was met Spektrum, dus het volgen van die broncode hielp echt. Het datablad van Spektrum-telemetrie vulde de rest van de lacunes in. Het meten van de gegevensniveaus uit de ontvanger toonde aan dat ik 3.3v-logica nodig zou hebben.

De ontvanger verzendt het apparaatadres en verwacht vervolgens een antwoord van 16 bytes. De datasheet toont de structuren voor alle verschillende sensoren. Zelfs als de structuur niet 16 bytes lang is, verwacht de ontvanger telkens 16 bytes terug.

Spektrum-gegevensblad:

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

Het project van Raymond Domingo:

www.aerobtec.com/download/altisSpektrumInte…

Stap 2: Selecteer hardware

Selecteer hardware
Selecteer hardware
Selecteer hardware
Selecteer hardware
Selecteer hardware
Selecteer hardware

Ik gebruikte een BMP388 breakout board van Adafruit voor drukmeting. De breakout biedt I2C- en SPI-breakouts en werkt op 3.3v- of 5v-logica. Adafruit doet altijd geweldig werk met hun breakout-boards, dus ik heb het gekocht. Ik heb in plaats daarvan een DFRobot Gravity BMP388-bord gebruikt in mijn build omdat mijn Adafruit-bord al in gebruik was.

Aangezien het host-I2C-apparaat 3.3v-logica gebruikt, had ik een 3.3v-microcontroller nodig en ik wilde dat het klein was. Ik wilde een Adafruit Trinket M0 gebruiken, maar die is relatief duur en er zijn niet veel pinnen uitgebroken. Toen vond ik het Seeeduino XIAO-bord. Het is een M0-bord met zowel I2C als SPI klaar voor gebruik, met een USB-C-connector. Het is ook echt heel klein! Over het algemeen vind ik dit bord erg leuk (hoewel het langzame opstartkristal me een eeuwigheid kostte om erachter te komen).

Spektrum gebruikt een 4-pins mannelijke connector van JST-XH-formaat op de ontvanger voor de "Xbus" -poort die we zullen gebruiken. Ik gebruikte een 4-pins JST-XH vrouwelijke stekker op de hoogtemeter en het werkte perfect.

Stap 3: Software schrijven

Ik gebruikte de Arduino IDE om alle code te schrijven. Ik heb het Spektrum-telemetrieprotocol uit hun datasheet gekopieerd en aan mijn Arduino-bibliotheek toegevoegd. Omdat Adafruit altijd mooie bibliotheken heeft voor hun breakouts, heb ik hun BMP3XX-bibliotheek gebruikt voor de BMP388-sensor.

De belangrijkste punten uit mijn ontwerp zijn:

  • Stel de I2C in om zich als een clientapparaat te gedragen en te reageren op het Spektrum-hoogtemeteradres (0x12).
  • Lees de BMP388-barometer af via SPI.
  • Sla de hoogtegegevens op in twee verschillende buffers zodat een I2C-verzoek van de ontvanger de gegevens niet beschadigt, en wissel af tussen de twee buffers bij het ophalen van de gegevens. Dit zorgt ervoor dat de gegevens die naar de ontvanger worden verzonden altijd compleet zijn.
  • Gebruikt een knop om de hoogtemeter op nul te zetten.

Bekijk de video voor meer details en code-analyse.

Stap 4: Bedraad het circuit

Bedrading van het circuit
Bedrading van het circuit
Bedrading van het circuit
Bedrading van het circuit
Bedrading van het circuit
Bedrading van het circuit
Bedrading van het circuit
Bedrading van het circuit

Ik heb protoboard gebruikt, maar als je de tijd wilt nemen om een op maat gefreesd bord te ontwerpen, kun je het circuit een stuk schoner maken.

Ik heb de JST-XH-connector aangesloten op de I2C-pinnen van de XIAO. Omdat de ontvanger 5 volt afgeeft aan de telemetriebus, ging het positieve van de bus naar de VCC-pin van de XIAO. Op die manier wordt de ingebouwde 3.3v-regelaar gebruikt om de BMP388-sensor van stroom te voorzien.

Stap 5: compileren zonder bootloader

Compileren zonder bootloader
Compileren zonder bootloader
Compileren zonder bootloader
Compileren zonder bootloader
  1. Zoek je boards.txt-bestand (voor welk bord je ook gebruikt).

    In mijn geval bevond het zich hier: C:\Users\AppData\Local\Arduino15\packages\Seeeduino\hardware\samd\1.7.7\boards.txt

  2. Kopieer je bord en hernoem de eerste sleutel om een versie zonder bootloader op te geven. Ik heb zojuist _nbl toegevoegd aan de oorspronkelijke naam.

    • Oud: seeed_XIAO_m0
    • Nieuw: seeed_XIAO_m0_nbl
  3. Wijzig de.name-waarde:

    • Oud: seeed_XIAO_m0_nbl.name=Seeeduino XIAO
    • Nieuw: seeed_XIAO_m0_nbl.name=Seeeduino XIAO Geen Bootloader
  4. Wijzig de linker om te flashen zonder de bootloader door het builder ld-script te wijzigen:

    • Oud: seeed_XIAO_m0_nbl.build.ldscript=linker_scripts/gcc/flash_with_bootloader.ld
    • Nieuw: seeed_XIAO_m0_nbl.build.ldscript=linker_scripts/gcc/flash_with out _bootloader.ld
  5. Start de Arduino IDE opnieuw.
  6. Selecteer het nieuwe "Seeeduino XIAO No Bootloader"-bord in het bordmenu.
  7. Selecteer "Exporteer gecompileerd binair bestand"
  8. Eenmaal gecompileerd, bevindt het.bin-bestand zich in uw Arduino-projectmap.

Stap 6: Flash MCU met J-Link

Flash MCU met J-Link
Flash MCU met J-Link
Flash MCU met J-Link
Flash MCU met J-Link
Flash MCU met J-Link
Flash MCU met J-Link

Adafruit heeft een fantastische gids over het herprogrammeren van een bootloader op een M0/M4-apparaat. In ons geval willen we van de bootloader af, maar het werkt op dezelfde manier.

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

Zodra u dit doet, kunt u geen code meer uploaden via USB. Je kunt de bovenstaande gids volgen om de bootloader terug naar het apparaat te flashen om de code opnieuw via USB te uploaden, zoals je in de fabriek kon doen.

De Adafruit-gids is zeer grondig, maar dit zijn de basisstappen:

  1. Soldeer jumperdraden aan de achterkant van het XIAO-bord.

    • De Adafruit-gids zei niet dat de RST-pin op het 2x5 breakout-bord moest worden aangesloten op de reset-pin op de Adafruit-borden. Maar voor de XIAO moest ik verbinding maken met alle vier de pads aan de achterkant van het bord.
    • De VREF-pin moet worden aangesloten op de XIAO 3.3v-pin. Dit vertelt de debugger dat de apparaatlogica 3.3v is. Als u dit niet doet, kunt u de microcontroller beschadigen als u de verkeerde optie selecteert.
  2. Sluit de jumperdraden aan op de J-Link.
  3. Schakel het XIAO-bord in met een USB-kabel.
  4. Atmel-studio openen.
  5. Selecteer Extra Apparaatprogrammering
  6. Selecteer je M0-bord. In dit geval de ATSAMD21G18A
  7. Selecteer SWD.
  8. Lees de configuratie van het doel.
  9. Als je de EDU J-Link gebruikt, ga dan akkoord met de gebruiksvoorwaarden (als je je aan de gebruiksvoorwaarden houdt).
  10. Controleer of de ingelezen spanning in de rechterbovenhoek correct is. Als het geen 3.3v is, zou je je bord kunnen breken!
  11. Wis de opstartbeveiligingszekering (stel de grootte van de bootloader in op 0 bytes) en selecteer vervolgens het programma.
  12. Selecteer in het geheugengedeelte uw gecompileerde.bin- of.hex-bestand en selecteer programma.

Probleemoplossen:

Wanneer u de apparaatconfiguratie leest en u een foutmelding krijgt dat de spanning buiten het bereik ligt, zorg er dan voor dat de MCU is aangesloten op de voeding en dat de J-Link VREF-pin is aangesloten op 3,3 volt

Stap 7: opnieuw compileren zonder het externe kristal

Opnieuw compileren zonder het externe kristal
Opnieuw compileren zonder het externe kristal

Het XIAO-bord heeft een extern kristal dat lang duurt om te starten. De Spektrum-ontvanger doet een apparaatdetectie op de telemetriebus 350 milliseconden na het opstarten, dus we moeten de compiler vertellen om in plaats daarvan de interne oscillator te gebruiken, waardoor het opstarten bijna onmiddellijk zal plaatsvinden.

  1. Zoek het boards.txt-bestand dat je eerder hebt gewijzigd (ja, ik had je deze stap eerder kunnen besparen, maar dit was een leerproces voor mij)
  2. Voeg "-DCRYSTALLESS" toe aan de reeks seeed_XIAO_m0_nbl.build.extra_flags. Dit zal de compiler vertellen om de interne oscillator te gebruiken.
  3. Compileer de code opnieuw.
  4. Flash de MCU opnieuw.
  5. Controleer met een oscilloscoop of de opstarttijd snel genoeg is.

Zoals je op de afbeelding kunt zien, is het gele kanaal 1 de voeding. Het cyaankanaal 2 is de kant-en-klare pin op de microcontroller. Ongeveer 10 milliseconden na het opstarten wordt kanaal twee omhoog getrokken door de microcontroller, wat aangeeft dat het zich in de setup-lus bevindt. Zodra de installatie is voltooid, is de MCU gecodeerd om de pin laag te trekken, wat aangeeft dat de hoofdlus begint. De scope laat zien dat de setup ongeveer 3 milliseconden duurt. Over het algemeen heeft de microcontroller na het opstarten 13 milliseconden nodig om klaar te zijn voor gebruik.

Aanbevolen: