Cuprins:

Altimetru avion RC (compatibil cu telemetria Spektrum): 7 pași
Altimetru avion RC (compatibil cu telemetria Spektrum): 7 pași

Video: Altimetru avion RC (compatibil cu telemetria Spektrum): 7 pași

Video: Altimetru avion RC (compatibil cu telemetria Spektrum): 7 pași
Video: Пол Маккриди о природе и человечестве 2024, Noiembrie
Anonim
Altimetru avion RC (compatibil cu telemetria Spektrum)
Altimetru avion RC (compatibil cu telemetria Spektrum)

Am făcut acest altimetru, astfel încât pilotul să știe că se află sub limita de 400 de picioare a aeronavelor RC din SUA. Prietenul meu era îngrijorat, deoarece nu putea spune cu certitudine că avea întotdeauna sub 400 ft și dorea asigurarea suplimentară pe care o va oferi un senzor cu date de telemetrie. Da, puteți cumpăra un senzor de la Spektrum, dar puteți construi acest proiect pentru mai puțin de 20 USD cu plăci de rupere (care sunt deja umflate în preț). Dacă aveți deja programatorul J-link, îl puteți construi pe o placă personalizată pentru câțiva dolari. Ca să nu mai vorbim după ce înțelegeți protocolul Xbus, puteți face oricare dintre ceilalți senzori suportați! Dar voi acoperi doar un altimetru în acest proiect …

Lista de componente:

  • Am folosit o placă de microcontroler Seeeduino XIAO pentru acest proiect, deoarece este mică, folosește un procesor M0 care are multă putere pentru acest proiect, are atât I2C, cât și SPI gata să iasă din cutie și folosește logică de 3.3v, deci nu există schimbare de nivel. necesar.

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

  • Pentru detectarea presiunii aerului, am achiziționat o placă de separare BMP388 de la Adafruit. Placa are atât I2C, cât și SPI, și poate funcționa cu o logică de 3.3v sau 5v.

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

  • Protoboard pentru cablarea circuitului
  • Lipit / lipit
  • Anteturi pin masculin / feminin, astfel încât să pot detașa cu ușurință senzorul / microcontrolerul.
  • Buton mic. Folosesc acest lucru pentru resetarea altitudinii de pornire.
  • Rezistor de 10 k pentru un pull-down pe buton.
  • Conector mamă 4 pini JST-XH pentru conectare la portul de telemetrie al receptorului Spektrum
  • Programator SEGGER J-Link EDU pentru a bloca M0 fără bootloader.

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

  • Adafruit SWD 10-pin board breakout

    www.adafruit.com/product/2743

Provizii

  • De asemenea, am imprimat 3D o mică incintă pentru altimetrul meu, dar acest lucru nu este necesar.
  • Osciloscop - Dacă nu aveți unul, îl recomand cu drag pe acesta:

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

Pasul 1: Aflați Protocolul de telemetrie Spektrum

Aflați Protocolul de telemetrie Spektrum
Aflați Protocolul de telemetrie Spektrum
Aflați Protocolul de telemetrie Spektrum
Aflați Protocolul de telemetrie Spektrum
Aflați Protocolul de telemetrie Spektrum
Aflați Protocolul de telemetrie Spektrum

Acest lucru mi-a fost făcut în mare parte de Raymond Domingo. Au făcut deja un altimetru compatibil cu Spektrum, așa că urmarea acestui cod sursă a ajutat cu adevărat. Foaia tehnică de telemetrie Spektrum a completat restul golurilor. Măsurarea nivelurilor de date din receptor a arătat că aș avea nevoie de logică de 3.3v.

Receptorul trimite adresa dispozitivului și apoi așteaptă un răspuns de 16 octeți. Fișa tehnică prezintă structurile tuturor senzorilor. Chiar dacă structura nu are o lungime de 16 octeți, receptorul așteaptă 16 octeți înapoi de fiecare dată.

Foaie de date Spektrum:

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

Proiectul lui Raymond Domingo:

www.aerobtec.com/download/altisSpektrumInte…

Pasul 2: Selectați Hardware

Selectați Hardware
Selectați Hardware
Selectați Hardware
Selectați Hardware
Selectați Hardware
Selectați Hardware

Am folosit o placă BMP388 de la Adafruit pentru detectarea presiunii. Breakout oferă I2C și SPI breakouts și funcționează la logica de 3.3v sau 5v. Adafruit face întotdeauna o treabă uimitoare cu panourile lor, așa că am achiziționat-o. Am folosit în schimb o placă DFRobot Gravity BMP388 în construcția mea, deoarece placa mea Adafruit era deja în uz.

Având în vedere că dispozitivul gazdă I2C folosește logica de 3.3v, aveam nevoie de un microcontroler de 3.3v și am vrut să fie mic. Aveam de gând să folosesc un Adafruit Trinket M0, dar sunt relativ scumpe și nu au prea mulți ace rupte. Apoi am găsit placa Seeeduino XIAO. Este o placă M0 cu I2C și SPI gata de utilizare, cu un conector USB-C. De asemenea, este foarte mic! În general, îmi place foarte mult această placă (chiar dacă cristalul de pornire lentă m-a luat pentru totdeauna să-mi dau seama).

Spektrum folosește un conector tată cu 4 pini de dimensiune JST-XH pe receptor pentru portul „Xbus” pe care îl vom atinge. Am folosit un conector femelă JST-XH cu 4 pini pe altimetru și a funcționat perfect.

Pasul 3: Scrieți software

Am folosit Arduino IDE pentru a scrie tot codul. Am copiat protocolul de telemetrie Spektrum din foaia de date și l-am adăugat în biblioteca mea Arduino. Întrucât Adafruit are întotdeauna biblioteci frumoase pentru evadarea lor, am folosit biblioteca lor BMP3XX pentru senzorul BMP388.

Principalele mâncăruri din designul meu sunt:

  • Configurați I2C să se comporte ca un dispozitiv client și să răspundă la adresa altimetrului Spektrum (0x12).
  • Citiți barometrul BMP388 prin SPI.
  • Salvați datele de altitudine în două buffere diferite, astfel încât o cerere I2C de la receptor să nu corupă datele și să alterneze între cele două buffere la preluarea datelor. Acest lucru asigură faptul că datele trimise către receptor sunt întotdeauna complete.
  • Folosește un buton pentru a zero altimetrul.

Pentru mai multe detalii și analiza codului, urmăriți videoclipul.

Pasul 4: conectați circuitul

Conectați circuitul
Conectați circuitul
Conectați circuitul
Conectați circuitul
Conectați circuitul
Conectați circuitul
Conectați circuitul
Conectați circuitul

Am folosit protoboard, dar dacă doriți să vă alocați timp pentru a proiecta o placă frezată personalizată, ați putea face circuitul mult mai curat.

Am conectat conectorul JST-XH la pinii I2C ai XIAO. Deoarece receptorul transmite 5 volți la magistrala de telemetrie, pozitivul din autobuz a trecut la pinul VCC al XIAO. În acest fel, regulatorul de 3.3v de la bord este utilizat pentru alimentarea senzorului BMP388.

Pasul 5: Compilați fără bootloader

Compilați fără un bootloader
Compilați fără un bootloader
Compilați fără un bootloader
Compilați fără un bootloader
  1. Găsiți fișierul dvs. boards.txt (pentru orice bord utilizați).

    În cazul meu, a fost localizat aici: C: / Users / AppData / Local / Arduino15 / packages / Seeeduino / hardware / samd / 1.7.7 / boards.txt

  2. Copiați placa dvs. și redenumiți prima cheie pentru a specifica o versiune fără bootloader. Tocmai am adăugat _nbl la numele original.

    • Vechi: seeed_XIAO_m0
    • Nou: seeed_XIAO_m0_nbl
  3. Schimbați valoarea.name:

    • Vechi: seeed_XIAO_m0_nbl.name = Seeeduino XIAO
    • Nou: seeed_XIAO_m0_nbl.name = Seeeduino XIAO fără bootloader
  4. Modificați linkerul pentru a clipi fără bootloader schimbând scriptul ld al constructorului:

    • Vechi: seeed_XIAO_m0_nbl.build.ldscript = linker_scripts / gcc / flash_with_bootloader.ld
    • Nou: seeed_XIAO_m0_nbl.build.ldscript = linker_scripts / gcc / flash_with out _bootloader.ld
  5. Reporniți ID-ul Arduino.
  6. Selectați noua placă „Seeeduino XIAO No Bootloader” din meniul Placi.
  7. Selectați „Export Compiler Binary”
  8. Odată compilat, fișierul.bin va fi în folderul de proiect Arduino.

Pasul 6: Flash MCU cu J-Link

Flash MCU cu J-Link
Flash MCU cu J-Link
Flash MCU cu J-Link
Flash MCU cu J-Link
Flash MCU cu J-Link
Flash MCU cu J-Link

Adafruit are un ghid fantastic despre reprogramarea unui bootloader pe un dispozitiv M0 / M4. În cazul nostru, vrem să scăpăm de bootloader, dar funcționează la fel.

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

După ce faceți acest lucru, nu veți putea încărca cod prin USB. Puteți urma ghidul de mai sus pentru a întoarce încărcătorul de boot pe dispozitiv pentru a încărca din nou codul prin USB așa cum ați reușit din fabrică.

Ghidul Adafruit este foarte detaliat, dar aceștia sunt pașii de bază:

  1. Jumperul de lipit se află în partea din spate a plăcii XIAO.

    • Ghidul Adafruit nu a spus că pinul RST de pe placa de breakout 2x5 trebuie conectat la pinul de resetare de pe plăcile Adafruit. Dar pentru XIAO, trebuia să mă conectez la toate cele patru plăci de pe partea din spate a plăcii.
    • Pinul VREF trebuie conectat la pinul XIAO 3.3v. Acest lucru spune depanatorului că logica dispozitivului este de 3.3v. Fără aceasta, dacă selectați opțiunea greșită, ați putea deteriora microcontrolerul.
  2. Conectați firele jumperului la J-Link.
  3. Porniți placa XIAO cu un cablu USB.
  4. Deschideți Atmel Studio.
  5. Selectați Instrumente Programare dispozitiv
  6. Selectați placa M0. În acest caz, ATSAMD21G18A
  7. Selectați SWD.
  8. Citiți configurația din țintă.
  9. Dacă utilizați EDU J-Link, acceptați condițiile de utilizare (dacă respectați condițiile de utilizare).
  10. Verificați dacă citirea în tensiune este corectă în colțul din dreapta sus. Dacă nu este 3.3v, ai putea să-ți rupi placa!
  11. Ștergeți siguranța de protecție la pornire (setați dimensiunea încărcătorului la 0 octeți), apoi selectați programul.
  12. În secțiunea de memorii, selectați fișierul.bin sau.hex compilat și selectați programul.

Depanare:

Când citiți configurația dispozitivului, dacă primiți o eroare de tensiune în afara intervalului, asigurați-vă că MCU este conectat la alimentare și că pinul J-Link VREF este conectat la 3,3 volți

Pasul 7: Recompilați fără cristalul extern

Recompilați fără cristalul extern
Recompilați fără cristalul extern

Placa XIAO are un cristal extern care durează mult timp pentru a porni. Receptorul Spektrum face o descoperire a dispozitivului pe magistrala de telemetrie la 350 de milisecunde după pornire, așa că trebuie să spunem compilatorului să folosească în schimb oscilatorul intern, ceea ce va face pornirea aproape instantanee.

  1. Găsiți fișierul boards.txt pe care l-ați modificat mai devreme (da, aș fi putut să vă salvez acest pas mai devreme, dar acesta a fost un proces de învățare pentru mine)
  2. Adăugați „-DCRYSTALLESS” la șirul seeed_XIAO_m0_nbl.build.extra_flags. Acest lucru îi va spune compilatorului să utilizeze oscilatorul intern.
  3. Recompilați codul.
  4. Re-blitz MCU.
  5. Verificați dacă timpul de pornire este suficient de rapid folosind un osciloscop.

După cum puteți vedea din imagine, canalul galben 1 este sursa de alimentare. Canalul cyan 2 este pinul gata de pe microcontroler. La aproximativ 10 milisecunde după pornire, canalul doi este tras de sus de către microcontroler, ceea ce indică faptul că se află în bucla de configurare. Odată ce setarea este finalizată, MCU este codat pentru a trage pinul jos, indicând că bucla principală începe. Scopul arată că configurarea durează aproximativ 3 milisecunde. În general, microcontrolerul durează 13 milisecunde după pornire pentru a fi gata de funcționare.

Recomandat: