Sommario:

Altimetro aereo RC (compatibile con la telemetria Spektrum): 7 passaggi
Altimetro aereo RC (compatibile con la telemetria Spektrum): 7 passaggi

Video: Altimetro aereo RC (compatibile con la telemetria Spektrum): 7 passaggi

Video: Altimetro aereo RC (compatibile con la telemetria Spektrum): 7 passaggi
Video: Radiomaster R168 - Recensione e tutorial telemetria - La miglior ricevente per Aerei con/senza FPV 2024, Luglio
Anonim
Altimetro aereo RC (compatibile con la telemetria Spektrum)
Altimetro aereo RC (compatibile con la telemetria Spektrum)

Ho realizzato questo altimetro in modo che il pilota potesse sapere che sono al di sotto del limite di 400 piedi sugli aerei RC negli Stati Uniti. Il mio amico era preoccupato perché non poteva dire con certezza di essere sempre sotto i 400 piedi e voleva l'ulteriore sicurezza che avrebbe fornito un sensore con dati di telemetria. Sì, puoi acquistare un sensore da Spektrum, ma puoi costruire questo progetto per meno di $ 20 con schede breakout (che sono già gonfiate nel prezzo). Se hai già il programmatore J-link, puoi costruirlo su una scheda personalizzata per pochi dollari. Per non parlare del fatto che una volta compreso il protocollo Xbus, puoi realizzare uno qualsiasi degli altri sensori supportati! Ma mi limiterò a coprire un altimetro in questo progetto…

Elenco delle parti:

  • Ho usato una scheda microcontrollore Seeeduino XIAO per questo progetto poiché è minuscola, utilizza un processore M0 che ha molta potenza per questo progetto, ha sia I2C che SPI pronti per uscire dalla scatola e utilizza la logica 3.3v, quindi nessun cambiamento di livello è necessario.

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

  • Per il rilevamento della pressione dell'aria, ho acquistato una scheda breakout BMP388 da Adafruit. La scheda ha sia I2C che SPI e può funzionare con logica 3.3v o 5v.

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

  • Scheda prototipi per il cablaggio del circuito
  • Saldatore/saldatore
  • Intestazioni pin maschio/femmina in modo da poter staccare facilmente il sensore/microcontrollore.
  • Bottone piccolo. Lo uso per reimpostare l'altitudine di partenza.
  • Resistenza da 10k per un pull-down sul pulsante.
  • Connettore femmina JST-XH a 4 pin da collegare alla porta di telemetria del ricevitore Spektrum
  • Programmatore SEGGER J-Link EDU per eseguire il flashing di M0 senza bootloader.

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

  • Scheda breakout Adafruit SWD a 10 pin

    www.adafruit.com/product/2743

Forniture

  • Ho anche stampato in 3D un piccolo involucro per il mio altimetro, ma non è necessario.
  • Oscilloscopio: se non ne hai uno, ti consiglio vivamente questo:

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

Passaggio 1: apprendere il protocollo di telemetria Spektrum

Impara il protocollo di telemetria Spektrum
Impara il protocollo di telemetria Spektrum
Impara il protocollo di telemetria Spektrum
Impara il protocollo di telemetria Spektrum
Impara il protocollo di telemetria Spektrum
Impara il protocollo di telemetria Spektrum

Questo è stato fatto principalmente per me da Raymond Domingo. Avevano già realizzato un altimetro compatibile con Spektrum, quindi seguire quel codice sorgente ha davvero aiutato. Il foglio dati della telemetria Spektrum ha colmato il resto delle lacune. La misurazione dei livelli di dati dal ricevitore ha mostrato che avrei avuto bisogno della logica 3.3v.

Il destinatario invia l'indirizzo del dispositivo e quindi si aspetta una risposta a 16 byte. La scheda tecnica mostra le strutture per tutti i vari sensori. Anche se la struttura non è lunga 16 byte, il ricevitore si aspetta 16 byte indietro ogni volta.

Scheda tecnica Spektrum:

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

Il progetto di Raymond Domingo:

www.aerobtec.com/download/altisSpektrumInte…

Passaggio 2: selezionare l'hardware

Seleziona Hardware
Seleziona Hardware
Seleziona Hardware
Seleziona Hardware
Seleziona Hardware
Seleziona Hardware

Ho usato una scheda breakout BMP388 di Adafruit per il rilevamento della pressione. Il breakout fornisce breakout I2C e SPI e funziona con logica 3.3v o 5v. Adafruit fa sempre un ottimo lavoro con le sue breakout board, quindi l'ho acquistata. Ho usato invece una scheda DFRobot Gravity BMP388 nella mia build poiché la mia scheda Adafruit era già in uso.

Dato che il dispositivo I2C host utilizza la logica 3.3v, avevo bisogno di un microcontrollore 3.3v e volevo che fosse piccolo. Stavo per usare un Adafruit Trinket M0, ma sono relativamente costosi e non hanno molti pin spezzati. Poi ho trovato la scheda Seeeduino XIAO. È una scheda M0 con sia I2C che SPI pronti all'uso, con un connettore USB-C. Inoltre è davvero minuscolo! Nel complesso mi piace molto questa scheda (anche se il cristallo di avvio lento mi ha impiegato un'eternità per capirlo).

Spektrum utilizza un connettore maschio a 4 pin di dimensioni JST-XH sul ricevitore per la porta "Xbus" a cui attingeremo. Ho usato una spina femmina JST-XH a 4 pin sull'altimetro e ha funzionato perfettamente.

Passaggio 3: scrivere il software

Ho usato l'IDE Arduino per scrivere tutto il codice. Ho copiato il protocollo di telemetria Spektrum dal loro foglio dati e l'ho aggiunto alla mia libreria Arduino. Dato che Adafruit ha sempre delle belle librerie per i suoi breakout, ho usato la loro libreria BMP3XX per il sensore BMP388.

I principali punti da trarre dal mio design sono:

  • Imposta l'I2C in modo che si comporti come un dispositivo client e risponda all'indirizzo dell'altimetro Spektrum (0x12).
  • Leggi il barometro BMP388 tramite SPI.
  • Salva i dati di altitudine in due buffer diversi in modo che una richiesta I2C dal ricevitore non danneggi i dati e si alterni tra i due buffer durante il recupero dei dati. Questo assicura che i dati inviati al destinatario siano sempre completi.
  • Utilizza un pulsante per azzerare l'altimetro.

Per maggiori dettagli e analisi del codice, guarda il video.

Passaggio 4: cablare il circuito

Cablare il circuito
Cablare il circuito
Cablare il circuito
Cablare il circuito
Cablare il circuito
Cablare il circuito
Cablare il circuito
Cablare il circuito

Ho usato la scheda prototipi, ma se vuoi dedicare del tempo a progettare una scheda fresata personalizzata, potresti rendere il circuito molto più pulito.

Ho collegato il connettore JST-XH ai pin I2C dello XIAO. Poiché il ricevitore emette 5 volt al bus di telemetria, il positivo dal bus è andato al pin VCC dello XIAO. In questo modo il regolatore di bordo da 3,3 V viene utilizzato per alimentare il sensore BMP388.

Passaggio 5: compilazione senza bootloader

Compila senza bootloader
Compila senza bootloader
Compila senza bootloader
Compila senza bootloader
  1. Trova il tuo file board.txt (per qualunque scheda tu stia utilizzando).

    Nel mio caso, si trovava qui: C:\Users\AppData\Local\Arduino15\packages\Seeeduino\hardware\samd\1.7.7\boards.txt

  2. Copia la tua scheda e rinomina la prima chiave per specificare una versione senza bootloader. Ho appena aggiunto _nbl al nome originale.

    • Vecchio: seed_XIAO_m0
    • Novità: seed_XIAO_m0_nbl
  3. Modifica il valore.name:

    • Vecchio: seed_XIAO_m0_nbl.name=Seeeduino XIAO
    • Novità: seeed_XIAO_m0_nbl.name=Seeeduino XIAO nessun bootloader
  4. Modifica il linker in flash senza il bootloader cambiando lo script ld del builder:

    • Vecchio: seeed_XIAO_m0_nbl.build.ldscript=linker_scripts/gcc/flash_with_bootloader.ld
    • Novità: seeed_XIAO_m0_nbl.build.ldscript=linker_scripts/gcc/flash_with out _bootloader.ld
  5. Riavvia l'IDE Arduino.
  6. Seleziona la nuova scheda "Seeeduino XIAO No Bootloader" dal menu delle schede.
  7. Seleziona "Esporta binario compilato"
  8. Una volta compilato, il file.bin sarà nella cartella del progetto Arduino.

Passaggio 6: flash MCU con J-Link

MCU flash con J-Link
MCU flash con J-Link
MCU flash con J-Link
MCU flash con J-Link
MCU flash con J-Link
MCU flash con J-Link

Adafruit ha una fantastica guida sulla riprogrammazione di un bootloader su un dispositivo M0/M4. Nel nostro caso, vogliamo sbarazzarci del bootloader, ma funziona allo stesso modo.

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

Una volta fatto ciò, non sarai in grado di caricare il codice tramite USB. Puoi seguire la guida sopra per ripristinare il bootloader sul dispositivo per caricare nuovamente il codice tramite USB come hai fatto in fabbrica.

La guida di Adafruit è molto approfondita, ma questi sono i passaggi fondamentali:

  1. Saldare i ponticelli sul retro della scheda XIAO.

    • La guida di Adafruit non diceva che il pin RST sulla scheda breakout 2x5 doveva essere collegato al pin di ripristino sulle schede Adafruit. Ma per lo XIAO, dovevo collegarmi a tutti e quattro i pad sul retro della scheda.
    • Il pin VREF deve essere collegato al pin XIAO 3.3v. Questo dice al debugger che la logica del dispositivo è 3.3v. Senza di essa, se selezioni l'opzione sbagliata, potresti danneggiare il microcontrollore.
  2. Collegare i cavi dei ponticelli al J-Link.
  3. Accendi la scheda XIAO con un cavo USB.
  4. Apri Atmel Studio.
  5. Seleziona Strumenti Programmazione dispositivo
  6. Seleziona la tua scheda M0. In questo caso, l'ATSAMD21G18A
  7. Seleziona SWD.
  8. Leggere la configurazione dal target.
  9. Se stai utilizzando EDU J-Link, accetta i termini di utilizzo (se stai rispettando i termini di utilizzo).
  10. Verificare che la lettura della tensione sia corretta nell'angolo in alto a destra. Se non è 3.3v, potresti rompere la tua scheda!
  11. Cancella il fusibile di protezione dell'avvio (imposta la dimensione del bootloader su 0 byte), quindi seleziona il programma.
  12. Nella sezione delle memorie, seleziona il file.bin o.hex compilato e seleziona il programma.

Risoluzione dei problemi:

Quando leggi la configurazione del dispositivo, se ricevi un errore di tensione fuori range, assicurati che l'MCU sia collegato all'alimentazione e che il pin VREF J-Link sia collegato a 3,3 volt

Passaggio 7: Ricompilare senza il cristallo esterno

Ricompila senza il cristallo esterno
Ricompila senza il cristallo esterno

La scheda XIAO ha un cristallo esterno che impiega molto tempo per avviarsi. Il ricevitore Spektrum esegue un rilevamento del dispositivo sul bus di telemetria 350 millisecondi dopo l'accensione, quindi dobbiamo dire al compilatore di utilizzare invece l'oscillatore interno che renderà l'avvio quasi istantaneo.

  1. Trova il file board.txt che hai modificato in precedenza (sì, avrei potuto salvarti questo passaggio prima, ma questo è stato un processo di apprendimento per me)
  2. Aggiungi "-DCRYSTALLESS" alla stringa seed_XIAO_m0_nbl.build.extra_flags. Questo dirà al compilatore di usare l'oscillatore interno.
  3. Ricompilare il codice.
  4. Ricaricare l'MCU.
  5. Verificare che il tempo di avvio sia sufficientemente rapido utilizzando un oscilloscopio.

Come puoi vedere dall'immagine, il canale 1 giallo è l'alimentatore. Il canale ciano 2 è il pin pronto sul microcontrollore. Circa 10 millisecondi dopo l'accensione, il canale due viene tirato in alto dal microcontrollore che indica che si trova nel ciclo di configurazione. Una volta completata l'installazione, l'MCU è codificato per abbassare il pin, indicando che il ciclo principale sta iniziando. L'ambito mostra che l'installazione richiede circa 3 millisecondi. Nel complesso il microcontrollore impiega 13 millisecondi dopo l'accensione per essere pronto.

Consigliato: