Innholdsfortegnelse:

RC Plane Altimeter (kompatibel med Spektrum Telemetry): 7 trinn
RC Plane Altimeter (kompatibel med Spektrum Telemetry): 7 trinn

Video: RC Plane Altimeter (kompatibel med Spektrum Telemetry): 7 trinn

Video: RC Plane Altimeter (kompatibel med Spektrum Telemetry): 7 trinn
Video: Spektrum Vario meter/altimeter setup 2024, Juli
Anonim
RC Plane Altimeter (kompatibel med Spektrum Telemetry)
RC Plane Altimeter (kompatibel med Spektrum Telemetry)

Jeg lagde denne høydemåler slik at piloten kunne vite at de er under 400 fot grensen på RC -fly i USA. Vennen min var bekymret siden han ikke kunne si sikkert at han alltid var under 400 fot, og ønsket den ekstra tryggheten som en sensor med telemetredata ville gi. Ja, du kan kjøpe en sensor fra Spektrum, men du kan bygge dette prosjektet for mindre enn $ 20 med breakout boards (som allerede er oppblåst i pris). Hvis du allerede har J-link programmereren, kan du bygge dette på et tilpasset bord for noen få dollar. For ikke å snakke om når du forstår Xbus -protokollen, kan du lage noen av de andre støttede sensorene! Men jeg skal bare dekke en høydemåler i dette prosjektet …

Deleliste:

  • Jeg brukte et Seeeduino XIAO mikrokontrollerbord for dette prosjektet siden det er lite, bruker en M0 -prosessor som har rikelig med strøm til dette prosjektet, har både I2C og SPI klar til å gå ut av esken, og bruker 3.3v logikk så ingen nivåskifting er nødvendig.

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

  • For lufttryksmåling kjøpte jeg et BMP388 breakout -bord fra Adafruit. Brettet har både I2C og SPI brutt ut, og kan fungere med 3.3v eller 5v logikk.

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

  • Protoboard for å koble opp kretsen
  • Lodde/loddejern
  • Mann/hunn pinhoder slik at jeg enkelt kan koble fra sensoren/mikrokontrolleren.
  • Liten knapp. Jeg bruker dette til å tilbakestille starthøyden.
  • 10k motstand for nedtrekk på knappen.
  • JST-XH 4-pinners hunnkontakt for å koble til telemetriporten på Spektrum-mottakeren
  • SEGGER J-Link EDU programmerer for å blinke M0 uten en bootloader.

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

  • Adafruit SWD 10-pins breakout board

    www.adafruit.com/product/2743

Rekvisita

  • Jeg har også 3D -trykt et lite kabinett for høydemåler, men dette er ikke nødvendig.
  • Oscilloskop- Hvis du ikke har en, anbefaler jeg denne:

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

Trinn 1: Lær Spektrum Telemetry Protocol

Lær Spektrum Telemetry Protocol
Lær Spektrum Telemetry Protocol
Lær Spektrum Telemetry Protocol
Lær Spektrum Telemetry Protocol
Lær Spektrum Telemetry Protocol
Lær Spektrum Telemetry Protocol

Dette ble stort sett gjort for meg av Raymond Domingo. De hadde allerede laget en høydemåler kompatibel med Spektrum, så det hjalp virkelig å følge kildekoden. Spektrum telemetridatabladet fyllte ut resten av hullene. Å måle datanivåene fra mottakeren viste at jeg ville trenge 3.3v logikk.

Mottakeren sender enhetsadressen, og forventer deretter et 16-bytes svar. Databladet viser strukturene for alle de forskjellige sensorene. Selv om strukturen ikke er 16 byte lang, forventer mottakeren 16 byte tilbake hver gang.

Spektrum datablad:

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

Raymond Domingos prosjekt:

www.aerobtec.com/download/altisSpektrumInte…

Trinn 2: Velg maskinvare

Velg Maskinvare
Velg Maskinvare
Velg Maskinvare
Velg Maskinvare
Velg Maskinvare
Velg Maskinvare

Jeg brukte et BMP388 breakout -bord fra Adafruit for trykkfølelse. Utbruddet gir I2C- og SPI -brudd, og fungerer på 3,3v eller 5v logikk. Adafruit gjør alltid en fantastisk jobb med sine breakout boards, så jeg kjøpte den. Jeg brukte et DFRobot Gravity BMP388 -bord i stedet i min konstruksjon siden Adafruit -brettet mitt allerede var i bruk.

Gitt at vert I2C -enheten bruker 3.3v logikk, trengte jeg en 3.3v mikrokontroller, og jeg ville at den skulle være liten. Jeg hadde tenkt å bruke en Adafruit Trinket M0, men de er relativt dyre og har ikke så mange pins brutt ut. Så fant jeg Seeeduino XIAO -brettet. Det er et M0-kort med både I2C og SPI klar til bruk, med en USB-C-kontakt. Dessuten er den veldig liten! Totalt sett liker jeg dette brettet (selv om den langsomme oppstartskrystallet tok meg evigheter å finne ut).

Spektrum bruker en JST-XH størrelse 4-pinners hankontakt på mottakeren for "Xbus" -porten som vi skal tappe inn på. Jeg brukte en 4-pinners JST-XH hunkontakt på høydemåler, og det fungerte perfekt.

Trinn 3: Skriv programvare

Jeg brukte Arduino IDE til å skrive hele koden. Jeg kopierte Spektrum telemetri -protokollen ut av databladet og la den til i Arduino -biblioteket mitt. Siden Adafruit alltid har fine biblioteker for utbrudd, brukte jeg BMP3XX -biblioteket til BMP388 -sensoren.

De viktigste takeawayene fra designet mitt er:

  • Konfigurer I2C til å oppføre seg som en klientenhet og svare på Spektrum høydemåleradresse (0x12).
  • Les BMP388 -barometeret gjennom SPI.
  • Lagre høydedataene i to forskjellige buffere, slik at en I2C -forespørsel fra mottakeren ikke ødelegger dataene, og veksle mellom de to bufferne når du henter dataene. Dette sikrer at dataene som sendes til mottakeren alltid er fullstendige.
  • Bruker en knapp for å nullstille høydemåler.

For mer informasjon og kodeanalyse, se videoen.

Trinn 4: Koble til kretsen

Koble kretsen
Koble kretsen
Koble kretsen
Koble kretsen
Koble kretsen
Koble kretsen
Koble kretsen
Koble kretsen

Jeg brukte protoboard, men hvis du vil ta deg tid til å designe et tilpasset frestebrett, kan du gjøre kretsen mye renere.

Jeg koblet JST-XH-kontakten til XIAOs I2C-pinner. Siden mottakeren sender ut 5 volt til telemetribussen, gikk det positive fra bussen til XIAOs VCC -pin. På den måten brukes den innebygde 3.3v -regulatoren til å drive BMP388 -sensoren.

Trinn 5: Kompil uten en bootloader

Kompiler uten en bootloader
Kompiler uten en bootloader
Kompiler uten en bootloader
Kompiler uten en bootloader
  1. Finn din boards.txt -fil (for hvilket brett du bruker).

    I mitt tilfelle lå den her: C: / Users / AppData / Local / Arduino15 / packages / Seeeduino / hardware / samd / 1.7.7 / boards.txt

  2. Kopier brettet ditt, og gi nytt navn til den første nøkkelen for å angi en no bootloader -versjon. Jeg har nettopp lagt til _nbl i det opprinnelige navnet.

    • Gammel: seeed_XIAO_m0
    • Nytt: seeed_XIAO_m0_nbl
  3. Endre.name -verdien:

    • Old: seeed_XIAO_m0_nbl.name = Seeeduino XIAO
    • Nytt: seeed_XIAO_m0_nbl.name = Seeeduino XIAO Ingen oppstartslaster
  4. Endre linkeren til å blinke uten bootloader ved å endre builder ld -skriptet:

    • Gammelt: seeed_XIAO_m0_nbl.build.ldscript = linker_scripts/gcc/flash_with_bootloader.ld
    • Nytt: seeed_XIAO_m0_nbl.build.ldscript = linker_scripts/gcc/flash_ uten _bootloader.ld
  5. Start Arduino IDE på nytt.
  6. Velg det nye "Seeeduino XIAO No Bootloader" -kortet fra brettmenyen.
  7. Velg "Eksporter kompilert binær"
  8. Når den er samlet, vil.bin -filen være i Arduino -prosjektmappen.

Trinn 6: Flash MCU med J-Link

Flash MCU med J-Link
Flash MCU med J-Link
Flash MCU med J-Link
Flash MCU med J-Link
Flash MCU med J-Link
Flash MCU med J-Link

Adafruit har en fantastisk guide til omprogrammering av en bootloader på en M0/M4 -enhet. I vårt tilfelle vil vi bli kvitt opplastingsprogrammet, men det fungerer på samme måte.

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

Når du har gjort dette, kan du ikke laste opp kode via USB. Du kan følge veiledningen ovenfor for å blinke bootloaderen tilbake til enheten for å laste opp kode via USB igjen slik du kunne fra fabrikken.

Adafruit -guiden er veldig grundig, men dette er de grunnleggende trinnene:

  1. Loddestikkledere på baksiden av XIAO -kortet.

    • Adafruit -guiden sa ikke at RST -pinnen på 2x5 breakout -kortet måtte kobles til reset -pin på Adafruit -kortene. Men for XIAO måtte jeg koble til alle fire putene på baksiden av brettet.
    • VREF -pinnen må kobles til XIAO 3.3v -pinnen. Dette forteller debuggeren at enhetslogikken er 3,3v. Uten det, hvis du velger feil alternativ, kan du skade mikrokontrolleren.
  2. Koble jumperledningene til J-Link.
  3. Slå på XIAO -kortet med en USB -kabel.
  4. Åpne Atmel Studio.
  5. Velg Verktøy Enhetsprogrammering
  6. Velg ditt M0 -kort. I dette tilfellet, ATSAMD21G18A
  7. Velg SWD.
  8. Les konfigurasjonen fra målet.
  9. Hvis du bruker EDU J-Link, godtar du vilkårene for bruk (hvis du overholder vilkårene for bruk).
  10. Kontroller at avlesningen i spenningen er riktig i øvre høyre hjørne. Hvis det ikke er 3.3v, kan du ødelegge brettet ditt!
  11. Slett oppstartsbeskyttelsessikringen (sett størrelsen på opplastingsprogrammet til 0 byte), og velg deretter program.
  12. I minneseksjonen velger du den kompilerte.bin- eller.hex -filen og velger program.

Feilsøking:

Når du leser enhetskonfigurasjonen, hvis du får en spenning utenfor rekkevidde-feil, må du kontrollere at MCU-en er koblet til strøm og at J-Link VREF-pinnen er koblet til 3,3 volt

Trinn 7: Kompiler på nytt uten den eksterne krystallen

Rekompiler uten den eksterne krystallen
Rekompiler uten den eksterne krystallen

XIAO -kortet har en ekstern krystall som tar lang tid å starte. Spektrum -mottakeren gjør en enhetsfunn på telemetribussen 350 millisekunder etter oppstart, så vi må be kompilatoren om å bruke den interne oscillatoren i stedet, noe som vil gjøre oppstart nesten øyeblikkelig.

  1. Finn boards.txt -filen som du endret tidligere (ja, jeg kunne ha lagret deg dette trinnet tidligere, men dette var en læringsprosess for meg)
  2. Legg til "-DCRYSTALLESS" i strengen seeed_XIAO_m0_nbl.build.extra_flags. Dette vil fortelle kompilatoren å bruke den interne oscillatoren.
  3. Kompiler koden på nytt.
  4. Flash MCU-en på nytt.
  5. Kontroller at oppstartstiden er rask nok ved hjelp av et oscilloskop.

Som du kan se på bildet, er den gule kanalen 1 strømforsyningen. Den cyan kanal 2 er den ferdige pinnen på mikrokontrolleren. Cirka 10 millisekunder etter oppstart, trekkes kanal to høyt av mikrokontrolleren som indikerer at den er i oppsettsløyfen. Når oppsettet er utført, er MCU -en kodet for å trekke pinnen lavt, noe som indikerer at hovedsløyfen starter. Omfanget viser at oppsettet tar omtrent 3 millisekunder. Totalt sett tar mikrokontrolleren 13 millisekunder etter oppstart for å være klar til å gå.

Anbefalt: