Innehållsförteckning:

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

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

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

Jag gjorde denna höjdmätare så att piloten kunde veta att de är under 400 fotgränsen på RC -flygplan i USA. Min vän var orolig eftersom han inte kunde säga säkert att han alltid var under 400 fot och ville ha en extra försäkran om att en sensor med telemetradata skulle ge. Ja, du kan köpa en sensor från Spektrum, men du kan bygga detta projekt för mindre än $ 20 med breakout -brädor (som redan är uppblåsta i pris). Om du redan har J-link programmeraren kan du bygga detta på ett anpassat kort för några dollar. För att inte tala om när du förstår Xbus -protokollet kan du göra vilken som helst av de andra sensorerna som stöds! Men jag kommer bara att täcka en höjdmätare i det här projektet …

Reservdelar:

  • Jag använde ett Seeeduino XIAO -mikrokontrollerkort för detta projekt eftersom det är litet, använder en M0 -processor som har mycket kraft för detta projekt, har både I2C och SPI redo att gå ut ur lådan och använder 3.3v logik så ingen nivåförskjutning är nödvändig.

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

  • För lufttrycksavkänning köpte jag en BMP388 breakout board från Adafruit. Kortet har både I2C och SPI brutit ut och kan fungera med 3.3v eller 5v logik.

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

  • Protoboard för koppling av kretsen
  • Löd-/lödkolv
  • Man/hona stifthuvuden så att jag enkelt kan ta loss sensorn/mikrokontrollern.
  • Liten knapp. Jag använder detta för att återställa starthöjden.
  • 10k motstånd för neddragning av knappen.
  • JST-XH 4-polig honkontakt för anslutning till telemetriporten på Spektrum-mottagaren
  • SEGGER J-Link EDU programmerare för att blinka M0 utan en bootloader.

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

  • Adafruit SWD 10-polig brytbräda

    www.adafruit.com/product/2743

Tillbehör

  • Jag har också 3D -skrivit ut ett litet hölje för min höjdmätare, men det behövs inte.
  • Oscilloskop- Om du inte har en, rekommenderar jag starkt den här:

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

Steg 1: Lär dig Spektrum Telemetry Protocol

Lär dig Spektrum Telemetry Protocol
Lär dig Spektrum Telemetry Protocol
Lär dig Spektrum Telemetry Protocol
Lär dig Spektrum Telemetry Protocol
Lär dig Spektrum Telemetry Protocol
Lär dig Spektrum Telemetry Protocol

Detta gjordes mest för mig av Raymond Domingo. De hade redan gjort en höjdmätare kompatibel med Spektrum, så att källkoden hjälpte verkligen. Spektrums telemetridatablad fyllde i resten av luckorna. Att mäta datanivåerna från mottagaren visade att jag skulle behöva 3.3v logik.

Mottagaren skickar enhetsadressen och förväntar sig sedan ett 16-bytes svar. Databladet visar strukturerna för alla de olika sensorerna. Även om strukturen inte är 16 byte lång, förväntar sig mottagaren 16 byte tillbaka varje gång.

Spektrum -datablad:

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

Raymond Domingos projekt:

www.aerobtec.com/download/altisSpektrumInte…

Steg 2: Välj Hardware

Välj Hårdvara
Välj Hårdvara
Välj Hårdvara
Välj Hårdvara
Välj Hårdvara
Välj Hårdvara

Jag använde en BMP388 breakout board från Adafruit för tryckavkänning. Breakout ger I2C- och SPI -breakouts och fungerar med 3,3v eller 5v logik. Adafruit gör alltid ett fantastiskt jobb med sina breakout boards, så jag köpte den. Jag använde en DFRobot Gravity BMP388 -skiva istället i mitt bygge eftersom min Adafruit -skiva redan var i bruk.

Med tanke på att värd I2C -enheten använder 3.3v logik, behövde jag en 3.3v mikrokontroller, och jag ville att den skulle vara liten. Jag tänkte använda en Adafruit Trinket M0, men de är relativt dyra och har inte så många stift utbrutna. Sedan hittade jag Seeeduino XIAO -kortet. Det är ett M0-kort med både I2C och SPI redo att gå, med en USB-C-kontakt. Dessutom är den väldigt liten! Sammantaget gillar jag verkligen den här brädan (även om den långsamma startkristallen tog mig evigt att räkna ut).

Spektrum använder en JST-XH storlek 4-polig hankontakt på mottagaren för "Xbus" -porten som vi kommer att knacka på. Jag använde en 4-stifts JST-XH honkontakt på höjdmätaren och det fungerade perfekt.

Steg 3: Skriv programvara

Jag använde Arduino IDE för att skriva hela koden. Jag kopierade Spektrum -telemetrisprotokollet ur deras datablad och lade det till mitt Arduino -bibliotek. Eftersom Adafruit alltid har fina bibliotek för deras utbrott använde jag deras BMP3XX -bibliotek för BMP388 -sensorn.

De viktigaste takeawaysna från min design är:

  • Konfigurera I2C så att den fungerar som en klientenhet och svarar på Spektrum -höjdmätarens adress (0x12).
  • Läs BMP388 -barometern genom SPI.
  • Spara höjddata i två olika buffertar så att en I2C -begäran från mottagaren inte skadar data och växla mellan de två buffertarna när du hämtar data. Detta säkerställer att data som skickas till mottagaren alltid är fullständiga.
  • Använd en knapp för att nollställa höjdmätaren.

För mer information och kodanalys, se videon.

Steg 4: Anslut kretsen

Anslut kretsen
Anslut kretsen
Anslut kretsen
Anslut kretsen
Anslut kretsen
Anslut kretsen
Anslut kretsen
Anslut kretsen

Jag använde protoboard, men om du vill ta dig tid att designa en anpassad fräst bräda kan du göra kretsen mycket renare.

Jag anslöt JST-XH-kontakten till XIAO: s I2C-stift. Eftersom mottagaren matar ut 5 volt till telemetribussen gick det positiva från bussen till XIAO: s VCC -stift. På så sätt används den inbyggda 3.3v -regulatorn för att driva BMP388 -sensorn.

Steg 5: Kompilera utan en bootloader

Kompilera utan en bootloader
Kompilera utan en bootloader
Kompilera utan en bootloader
Kompilera utan en bootloader
  1. Hitta din boards.txt -fil (för vilket kort du än använder).

    I mitt fall låg den här: C: / Users / AppData / Local / Arduino15 / packages / Seeeduino / hardware / samd / 1.7.7 / boards.txt

  2. Kopiera ditt kort och byt namn på den första nyckeln för att ange en version utan start. Jag har precis lagt till _nbl i det ursprungliga namnet.

    • Gammal: seeed_XIAO_m0
    • Nytt: seeed_XIAO_m0_nbl
  3. Ändra.name -värdet:

    • Old: seeed_XIAO_m0_nbl.name = Seeeduino XIAO
    • Nytt: seeed_XIAO_m0_nbl.name = Seeeduino XIAO Ingen startladdare
  4. Ändra länken för att blinka utan bootloader genom att ändra byggarens ld -skript:

    • Gammalt: seeed_XIAO_m0_nbl.build.ldscript = linker_scripts/gcc/flash_with_bootloader.ld
    • Nytt: seeed_XIAO_m0_nbl.build.ldscript = linker_scripts/gcc/flash_ utan _bootloader.ld
  5. Starta om Arduino IDE.
  6. Välj det nya "Seeeduino XIAO No Bootloader" -kortet från kortmenyn.
  7. Välj "Exportera kompilerad binär"
  8. När den har sammanställts finns.bin -filen i din Arduino -projektmapp.

Steg 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 för omprogrammering av en bootloader på en M0/M4 -enhet. I vårt fall vill vi bli av med bootloader, men det fungerar på samma sätt.

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

När du väl har gjort detta kommer du inte att kunna ladda upp kod via USB. Du kan följa ovanstående guide för att blinka tillbaka startladdaren till enheten för att ladda upp kod via USB igen som du kunde från fabriken.

Adafruit -guiden är mycket grundlig, men det här är de grundläggande stegen:

  1. Lödbygelkablar på baksidan av XIAO -kortet.

    • Adafruit -guiden sa inte att RST -stiftet på 2x5 breakout -kortet behövde anslutas till återställningsstiftet på Adafruit -korten. Men för XIAO behövde jag ansluta till alla fyra plattorna på baksidan av kortet.
    • VREF -stiftet måste anslutas till XIAO 3.3v -stiftet. Detta berättar felsökaren att enhetslogiken är 3,3v. Utan det, om du väljer fel alternativ, kan du skada mikrokontrollern.
  2. Anslut bygelkablarna till J-Link.
  3. Slå på XIAO -kortet med en USB -kabel.
  4. Öppna Atmel Studio.
  5. Välj Verktyg Enhetsprogrammering
  6. Välj ditt M0 -kort. I detta fall, ATSAMD21G18A
  7. Välj SWD.
  8. Läs konfigurationen från målet.
  9. Om du använder EDU J-Link godkänner du användarvillkoren (om du följer användarvillkoren).
  10. Kontrollera att avläsningen i spänningen är korrekt i det övre högra hörnet. Om det inte är 3.3v kan du bryta din bräda!
  11. Rensa startskyddssäkringen (ställ in startladdarens storlek på 0 byte) och välj sedan program.
  12. I avsnittet Minnen väljer du din kompilerade.bin- eller.hex -fil och väljer program.

Felsökning:

När du läser enhetskonfigurationen, om du får ett spänning utanför intervallfel, se till att MCU är ansluten till ström och att J-Link VREF-stiftet är anslutet till 3,3 volt

Steg 7: Kompilera om utan den externa kristallen

Kompilera om utan den externa kristallen
Kompilera om utan den externa kristallen

XIAO -kortet har en extern kristall som tar lång tid att starta. Spektrum -mottagaren gör en enhetsupptäckt på telemetribussen 350 millisekunder efter uppstart, så vi måste berätta kompilatorn att använda den interna oscillatorn istället vilket gör att starten nästan blir omedelbar.

  1. Hitta filen boards.txt som du ändrade tidigare (ja, jag kunde ha sparat dig det här steget tidigare, men det här var en inlärningsprocess för mig)
  2. Lägg till "-DCRYSTALLESS" i strängen seeed_XIAO_m0_nbl.build.extra_flags. Detta kommer att berätta kompilatorn att använda den interna oscillatorn.
  3. Kompilera om koden.
  4. Flasha om MCU: n igen.
  5. Kontrollera att starttiden är tillräckligt snabb med ett oscilloskop.

Som du kan se på bilden är den gula kanalen 1 strömförsörjningen. Cyankanalen 2 är den färdiga stiftet på mikrokontrollern. Cirka 10 millisekunder efter uppstart dras kanal två högt av mikrokontrollern vilket indikerar att den är i installationsslingan. När installationen är klar kodas MCU för att dra nålen lågt, vilket indikerar att huvudslingan startar. Omfattningen visar att installationen tar cirka 3 millisekunder. Sammantaget tar mikrokontrollern 13 millisekunder efter uppstart för att vara redo att gå.

Rekommenderad: