Indholdsfortegnelse:

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

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

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

Jeg lavede denne højdemåler, så piloten kunne vide, at de er under grænsen på 400 fod på RC -fly i USA. Min ven var bekymret, da han ikke med sikkerhed kunne sige, at han altid var under 400 fod, og ønskede den ekstra sikkerhed, at en sensor med telemetri -data ville give. Ja, du kan købe en sensor fra Spektrum, men du kan bygge dette projekt for mindre end $ 20 med breakout boards (som allerede er oppustet i pris). Hvis du allerede har J-link programmereren, kan du bygge dette på et brugerdefineret bord til et par dollars. For ikke at nævne, når du forstår Xbus -protokollen, kan du lave en hvilken som helst af de andre understøttede sensorer! Men jeg vil bare dække en højdemåler i dette projekt …

Liste over dele:

  • Jeg brugte et Seeeduino XIAO mikrokontrollerkort til dette projekt, da det er lille, bruger en M0 -processor, der har masser af strøm til dette projekt, har både I2C og SPI klar til at gå ud af boksen og bruger 3.3v logik, så der er ingen niveauforskydning påkrævet.

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

  • Til lufttryksmåling købte jeg et BMP388 breakout board fra Adafruit. Brættet har både I2C og SPI brudt ud, og kan arbejde med 3.3v eller 5v logik.

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

  • Protoboard til tilslutning af kredsløbet
  • Lodde/loddejern
  • Mand/hun pinhoveder, så jeg let kan afmontere sensoren/mikrokontrolleren.
  • Lille knap. Jeg bruger dette til at nulstille starthøjden.
  • 10k modstand til en pull-down på knappen.
  • JST-XH 4-polet hunstik til tilslutning til telemetriporten på Spektrum-modtageren
  • SEGGER J-Link EDU programmerer til at blinke M0 uden en bootloader.

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

  • Adafruit SWD 10-pin breakout board

    www.adafruit.com/product/2743

Forbrugsvarer

  • Jeg har også 3D printet et lille kabinet til min højdemåler, men dette er ikke nødvendigt.
  • Oscilloskop- Hvis du ikke har en, kan jeg varmt anbefale denne:

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

Trin 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 blev for det meste gjort for mig af Raymond Domingo. De havde allerede lavet en højdemåler kompatibel med Spektrum, så at følge denne kildekode hjalp virkelig. Spektrum -telemetridatabladet udfyldte resten af hullerne. Måling af dataniveauerne fra modtageren viste, at jeg ville have brug for 3.3v logik.

Modtageren sender enhedsadressen og forventer derefter et 16-bytes svar. Databladet viser strukturerne for alle de forskellige sensorer. Selvom strukturen ikke er 16 bytes lang, forventer modtageren 16 bytes tilbage hver gang.

Spektrum Datablad:

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

Raymond Domingos projekt:

www.aerobtec.com/download/altisSpektrumInte…

Trin 2: Vælg hardware

Vælg Hardware
Vælg Hardware
Vælg Hardware
Vælg Hardware
Vælg Hardware
Vælg Hardware

Jeg brugte et BMP388 breakout board fra Adafruit til trykføling. Udbruddet giver I2C- og SPI -udbrud og fungerer ved 3.3v eller 5v logik. Adafruit gør altid et fantastisk stykke arbejde med deres breakout boards, så jeg købte det. Jeg brugte et DFRobot Gravity BMP388 -bord i stedet i min build, da mit Adafruit -bord allerede var i brug.

I betragtning af at vært I2C -enheden bruger 3.3v logik, havde jeg brug for en 3.3v mikrokontroller, og jeg ville have den til at være lille. Jeg havde tænkt mig at bruge en Adafruit Trinket M0, men de er relativt dyre og har ikke mange pinde brudt ud. Så fandt jeg Seeeduino XIAO -tavlen. Det er et M0-kort med både I2C og SPI klar til brug, med et USB-C-stik. Det er også virkelig lille! Generelt kan jeg virkelig godt lide dette bord (selvom den langsomme opstartskrystal tog mig evigt at finde ud af det).

Spektrum bruger et JST-XH størrelse 4-bens hanstik på modtageren til "Xbus" -porten, som vi vil trykke på. Jeg brugte et 4-benet JST-XH hunstik på højdemåleren, og det fungerede perfekt.

Trin 3: Skriv software

Jeg brugte Arduino IDE til at skrive hele koden. Jeg kopierede Spektrum telemetri protokollen ud af deres datablad og tilføjede den til mit Arduino bibliotek. Da Adafruit altid har gode biblioteker til deres udbrud, brugte jeg deres BMP3XX -bibliotek til BMP388 -sensoren.

De vigtigste takeaways fra mit design er:

  • Konfigurer I2C til at opføre sig som en klientenhed og svare på Spektrum højdemåleradresse (0x12).
  • Læs BMP388 barometeret gennem SPI.
  • Gem højdedata i to forskellige buffere, så en I2C -anmodning fra modtageren ikke ødelægger dataene, og skift mellem de to buffere, når dataene hentes. Dette sikrer, at de data, der sendes til modtageren, altid er komplette.
  • Bruger en knap til at nulstille højdemåleren.

For flere detaljer og kode analyse, se videoen.

Trin 4: Tilslut kredsløbet

Tilslut kredsløbet
Tilslut kredsløbet
Tilslut kredsløbet
Tilslut kredsløbet
Tilslut kredsløbet
Tilslut kredsløbet
Tilslut kredsløbet
Tilslut kredsløbet

Jeg brugte protoboard, men hvis du vil tage dig tid til at designe et tilpasset fræset bord, kan du gøre kredsløbet meget renere.

Jeg sluttede JST-XH-stikket til XIAOs I2C-ben. Da modtageren udsender 5 volt til telemetribussen, gik det positive fra bussen til XIAOs VCC -pin. På den måde bruges den indbyggede 3.3v -regulator til at drive BMP388 -sensoren.

Trin 5: Kompilér uden en bootloader

Kompilér uden en bootloader
Kompilér uden en bootloader
Kompilér uden en bootloader
Kompilér uden en bootloader
  1. Find din boards.txt -fil (til det kort, du bruger).

    I mit tilfælde var den placeret her: C: / Users / AppData / Local / Arduino15 / packages / Seeeduino / hardware / samd / 1.7.7 / boards.txt

  2. Kopiér dit board, og omdøb den første nøgle for at angive en version uden bootloader. Jeg har lige tilføjet _nbl til det originale navn.

    • Gammel: seeed_XIAO_m0
    • Nyt: seeed_XIAO_m0_nbl
  3. Skift.name -værdien:

    • Gammelt: seeed_XIAO_m0_nbl.name = Seeeduino XIAO
    • Ny: seeed_XIAO_m0_nbl.name = Seeeduino XIAO Ingen bootloader
  4. Rediger linkeren til at blinke uden bootloader ved at ændre builder ld -script:

    • Gammelt: seeed_XIAO_m0_nbl.build.ldscript = linker_scripts/gcc/flash_with_bootloader.ld
    • Nyt: seeed_XIAO_m0_nbl.build.ldscript = linker_scripts/gcc/flash_ uden _bootloader.ld
  5. Genstart Arduino IDE.
  6. Vælg det nye bord "Seeeduino XIAO No Bootloader" i menuen på tavlerne.
  7. Vælg "Eksporter kompileret binær"
  8. Når den er udarbejdet, vil.bin -filen være i din Arduino -projektmappe.

Trin 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 af en bootloader på en M0/M4 -enhed. I vores tilfælde vil vi slippe af med bootloaderen, men det fungerer på samme måde.

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

Når du har gjort dette, kan du ikke uploade kode via USB. Du kan følge ovenstående vejledning for at blinke bootloaderen tilbage på enheden for at uploade kode via USB igen, som du kunne fra fabrikken.

Adafruit -guiden er meget grundig, men disse er de grundlæggende trin:

  1. Loddet jumper ledninger på bagsiden af XIAO board.

    • Adafruit -guiden sagde ikke, at RST -stiften på 2x5 breakout -kortet skulle tilsluttes nulstillingstappen på Adafruit -tavlerne. Men til XIAO havde jeg brug for at oprette forbindelse til alle fire puder på bagsiden af brættet.
    • VREF -pin skal tilsluttes XIAO 3.3v pin. Dette fortæller debuggeren, at enhedens logik er 3,3v. Uden det, hvis du vælger den forkerte mulighed, kan du beskadige mikrokontrolleren.
  2. Tilslut jumperkablerne til J-Link.
  3. Tænd for XIAO -kortet med et USB -kabel.
  4. Åbn Atmel Studio.
  5. Vælg Værktøjer Enhedsprogrammering
  6. Vælg dit M0 -kort. I dette tilfælde ATSAMD21G18A
  7. Vælg SWD.
  8. Læs konfigurationen fra målet.
  9. Hvis du bruger EDU J-Link, skal du acceptere vilkårene for brug (hvis du overholder vilkårene for brug).
  10. Kontroller, at spændingen er korrekt i øverste højre hjørne. Hvis det ikke er 3.3v, kan du ødelægge dit bræt!
  11. Ryd opstartsbeskyttelsessikringen (indstil bootloader -størrelsen til 0 bytes), og vælg derefter program.
  12. Vælg din kompilerede.bin- eller.hex -fil i hukommelsesafsnittet, og vælg program.

Fejlfinding:

Når du læser enhedskonfigurationen, og hvis du får en spænding uden for områdefejl, skal du sørge for, at MCU'en er tilsluttet strøm, og at J-Link VREF-stiften er tilsluttet 3,3 volt

Trin 7: Kompilér igen uden den eksterne krystal

Genkompiler uden den eksterne krystal
Genkompiler uden den eksterne krystal

XIAO -kortet har en ekstern krystal, der tager lang tid at starte. Spektrum -modtageren foretager en enhedsopdagelse på telemetribussen 350 millisekunder efter opstart, så vi skal fortælle kompilatoren at bruge den interne oscillator i stedet, hvilket vil gøre opstart næsten øjeblikkelig.

  1. Find filen boards.txt, som du har ændret tidligere (ja, jeg kunne have gemt dig dette trin tidligere, men dette var en læreproces for mig)
  2. Føj "-DCRYSTALLESS" til strengen seeed_XIAO_m0_nbl.build.extra_flags. Dette vil fortælle kompilatoren at bruge den interne oscillator.
  3. Kompilér koden igen.
  4. Blitz MCU'en igen.
  5. Kontroller, at opstartstiden er hurtig nok ved hjælp af et oscilloskop.

Som du kan se på billedet, er den gule kanal 1 strømforsyningen. Den cyan kanal 2 er den klare pin på mikrokontrolleren. Cirka 10 millisekunder efter opstart trækkes kanal to højt af mikrokontrolleren, hvilket indikerer, at den er i opsætningssløjfen. Når opsætningen er udført, er MCU'en kodet til at trække stiften lavt, hvilket angiver, at hovedsløjfen starter. Omfanget viser, at opsætningen tager omkring 3 millisekunder. Generelt tager mikrokontrolleren 13 millisekunder efter opstart for at være klar til at gå.

Anbefalede: