Sommario:

Stabilizzatore per fotocamera portatile: 13 passaggi (con immagini)
Stabilizzatore per fotocamera portatile: 13 passaggi (con immagini)

Video: Stabilizzatore per fotocamera portatile: 13 passaggi (con immagini)

Video: Stabilizzatore per fotocamera portatile: 13 passaggi (con immagini)
Video: STABILIZZATORE per FOTOCAMERA, SMARTPHONE, ACTION CAM Moza Mini P ECONOMICO 2024, Luglio
Anonim
Stabilizzatore per fotocamera portatile
Stabilizzatore per fotocamera portatile

introduzione

Questa è una guida per la creazione di un impianto di stabilizzazione della fotocamera portatile a 3 assi per una GoPro utilizzando una scheda di sviluppo Digilent Zybo Zynq-7000. Questo progetto è stato sviluppato per la classe CPE Real-Time Operating Systems (CPE 439). Lo stabilizzatore utilizza tre servi e un IMU per correggere il movimento dell'utente per mantenere il livello della telecamera.

Parti necessarie per il progetto

  • Scheda di sviluppo Digilent Zybo Zynq-7000
  • Sparkfun IMU Breakout - MPU 9250
  • 2 servi HiTec HS-5485HB (acquista un movimento a 180 gradi o programma da 90 a 180 gradi)
  • 1 servo HiTec HS-5685MH (acquista un movimento a 180 gradi o programma da 90 a 180 gradi)
  • 2 staffe servo standard
  • 1 tagliere
  • 15 ponticelli maschio-maschio
  • 4 ponticelli maschio-femmina
  • Colla calda
  • Impugnatura o maniglia
  • Tassello in legno diametro 5 mm
  • GoPro o altra fotocamera e hardware di montaggio
  • Alimentatore in grado di erogare 5V.
  • Accesso alla stampante 3D

Passaggio 1: configurazione hardware Vivado

Configurazione hardware Vivado
Configurazione hardware Vivado

Iniziamo con la creazione del design del blocco sottostante per il progetto.

  1. Apri Vivado 2016.2, fai clic sull'icona "Crea nuovo progetto" e fai clic su "Avanti>".
  2. Assegna un nome al tuo progetto e fai clic su "Avanti >".
  3. Scegli il progetto RTL e premi "Avanti >".
  4. Digita nella barra di ricerca xc7z010clg400-1, quindi seleziona la parte e premi "Avanti >" e "Fine".

Passaggio 2: impostazione del design del blocco

Ora inizieremo a generare il design del blocco aggiungendo e impostando Zynq IP Block.

  1. Nel pannello di sinistra, sotto IP Integrator, fare clic su "Create Block Design" e quindi fare clic su "OK".
  2. Fare clic con il pulsante destro del mouse sulla scheda "Diagramma" e scegliere "Aggiungi IP…".
  3. Digita "ZYNQ7 Processing System" e fai clic sulla selezione.
  4. Fare doppio clic sul blocco Zynq che appare.
  5. Fare clic su "Importa impostazioni XPS" e importare il file "ZYBO_zynq_def.xml" fornito.
  6. Vai a "MIO Configuration" e seleziona "Application Processor Unit" e abilita Timer 0 e Watchdog timer.
  7. Nella stessa scheda, in "Periferiche I/O", selezionare ENET 0 (e modificare il menu a discesa in "MIO 16.. 27", USB 0, SD 0, UART 1, I2C 0.
  8. Sotto "GPIO", seleziona GPIO MIO, Reset ENET, Reset USB e Reset I2C.
  9. Ora vai a "Configurazione orologio". Selezionare FCLK_CLK0 in PL Fabric Clocks. Quindi, fare clic su "OK".

Passaggio 3: crea un blocco IP PWM personalizzato

Questo blocco IP consente alla scheda di inviare un segnale PWM per controllare il movimento dei servi. Il lavoro è stato fortemente basato sul tutorial di Digitronix Nepal, che trovi qui. La logica è stata aggiunta per rallentare l'orologio in modo che l'impulso venisse emesso alla frequenza corretta. Il blocco prende un numero da 0 a 180 e lo converte in un impulso da 750-2150 usec.

  1. Ora, nella scheda Strumenti nell'angolo in alto a sinistra, fai clic su "Crea e impacchetta IP…" e premi Avanti.
  2. Quindi seleziona "Crea una nuova periferica AXI4" e premi Avanti.
  3. Assegna un nome al tuo blocco IP PWM (lo abbiamo chiamato pwm_core) e fai clic su Avanti, quindi fai clic su Avanti anche nella pagina successiva.
  4. Ora fai clic su "Modifica IP" e premi Fine. Si aprirà una nuova finestra per modificare il blocco pwm.
  5. Nella scheda "Sorgenti" e sotto "Sorgenti design", espandi 'pwm_core_v1_0' (sostituisci pwm_core con il tuo nome) e apri il file che diventa visibile.
  6. Copia e incolla il codice fornito in 'pwm_core_v1_0_S00_AXI.v' nel file zip in fondo al progetto. Ctrl + Maiusc + R e sostituisci "pwm_core" con il tuo nome per il blocco ip.
  7. Quindi apri ' nome _v1_0' e copia il codice fornito nel file 'pwm_core_v1_0.v'. Ctrl + Maiusc + R e sostituisci "pwm_core" con name.
  8. Ora vai alla scheda "IP pacchetto - nome" e seleziona "Parametri di personalizzazione".
  9. In questa scheda ci sarà una barra gialla in alto che ha un testo collegato. Seleziona questo e "Parametri nascosti" verranno visualizzati nella casella.
  10. Ora vai su "Personalizzazione GUI" e fai clic con il pulsante destro del mouse su Pwm Counter Max seleziona "Modifica parametro…".
  11. Seleziona le caselle "Visibile nella GUI di personalizzazione" e "Specifica intervallo".
  12. Modifica il menu a discesa "Tipo:" in Intervallo di numeri interi e imposta il minimo su 0 e il massimo su 65535 e seleziona la casella "Mostra intervallo". Ora fai clic su OK.
  13. Trascina Pwm Counter Max sotto l'albero 'Pagina 0'. Ora vai su "Rivedi e impacchetta" e fai clic sul pulsante "Riconfeziona IP".

Passaggio 4: aggiungi il blocco IP PWM al design

Aggiungi blocco IP PWM al design
Aggiungi blocco IP PWM al design

Aggiungeremo il blocco IP nel design del blocco per consentire all'utente l'accesso al blocco IP PWM attraverso il processore.

  1. Fare clic con il pulsante destro del mouse nella scheda del diagramma e fare clic su "Impostazioni IP…". Vai alla scheda "Gestore repository".
  2. Fare clic sul pulsante più verde e selezionarlo. Ora trova ip_repo nel File Manager e aggiungilo al progetto. Quindi premi Applica e poi OK.
  3. Fare clic con il pulsante destro del mouse nella scheda del diagramma e fare clic su "Aggiungi IP…". Digita il nome del tuo blocco IP PWM e selezionalo.
  4. Dovrebbe esserci una barra verde nella parte superiore dello schermo, prima seleziona "Esegui automazione connessione" e fai clic su OK. Quindi fare clic su "Esegui automazione blocco" e fare clic su OK.
  5. Fare doppio clic sul blocco PWM e modificare Pwm Counter Max a 1024 da 128.
  6. Passa il puntatore del mouse su PWM0 sul blocco PWM. Dovrebbe esserci una piccola matita che appare quando lo fai. Fare clic con il tasto destro e selezionare "Crea porta…" e fare clic su OK quando si apre una finestra. Questo crea una porta esterna a cui passare il segnale.
  7. Ripetere il passaggio 6 anche per PWM1 e PWM2.
  8. Trova la piccola icona circolare a doppia freccia nella barra laterale e fai clic su di essa. Rigenererà il layout e il design del tuo blocco dovrebbe assomigliare all'immagine sopra.

Passaggio 5: configurare il wrapper HDL e impostare il file dei vincoli

Configura il wrapper HDL e imposta il file dei vincoli
Configura il wrapper HDL e imposta il file dei vincoli

Ora genereremo il design di alto livello per il nostro design a blocchi e quindi mapperemo PWM0, PWM1 e PWM2 ai pin Pmod sulla scheda Zybo.

  1. Vai alla scheda "Sorgenti". Fare clic con il pulsante destro del mouse sul file di progettazione del blocco in "Sorgenti di progettazione" e fare clic su "Crea wrapper HDL…". Seleziona "Copia wrapper generato per consentire le modifiche dell'utente" e fai clic su OK. Questo genera il design di alto livello per il design a blocchi che abbiamo creato.
  2. Il Pmod su cui verrà inviato l'output è JE.
  3. In File, seleziona "Aggiungi origini…" e seleziona "Aggiungi o crea vincoli" e fai clic su Avanti.
  4. Fare clic su aggiungi file e selezionare il file "ZYBO_Master.xdc" incluso. Se guardi in questo file noterai che tutto non è commentato tranne sei righe "set_property" sotto "##Pmod Header JE". Noterai che PWM0, PWM1 e PWM2 sono gli argomenti per queste righe. Si mappano al Pin 1, Pin 2 e Pin 3 del JE Pmod.

Passaggio 6: generazione di bitstream

È necessario generare il flusso di bit per l'esportazione della progettazione hardware nell'SDK prima di procedere.

  1. In "Programma e debug" nella barra laterale, seleziona "Genera Bitstream". Questo eseguirà la sintesi, quindi l'implementazione e quindi genererà il flusso di bit per la progettazione.
  2. Correggi gli eventuali errori visualizzati, ma gli avvisi generalmente possono essere ignorati.
  3. Vai su File-> Avvia SDK e fai clic su OK. Questo aprirà l'SDK Xilinx.

Passaggio 7: configurazione del progetto in SDK

Questa parte può essere un po' frustrante. In caso di dubbio, crea un nuovo BSP e sostituisci quello vecchio. Questo ci ha risparmiato un sacco di tempo per il debug.

  1. Inizia scaricando l'ultima versione di FreeRTOS qui.
  2. Estrai tutto dal download e importa FreeRTOS nell'SDK facendo clic su File-> Importa e in "Generale" fai clic su "Progetti esistenti nell'area di lavoro", quindi fai clic su Avanti.
  3. Vai a "FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702" nella cartella FreeRTOS. Importa solo "RTOSDemo" da questa posizione.
  4. Ora genera un Board Support Package (BSP) facendo clic su File->New Board Support Package.
  5. Seleziona "ps7_cortexa9_0" e seleziona "lwip141" e fai clic su OK.
  6. Fare clic con il tasto destro sulla cartella blu RTOSDemo e selezionare "Riferimenti progetto".
  7. Deseleziona "RTOSDemo_bsp" e seleziona il nuovo BSP che abbiamo appena creato.

Passaggio 8: modifiche al codice FreeRTOS

Il codice che forniamo può essere separato in 7 file diversi. main.c, iic_main_thread.c, xil_printfloat.c, xil_printfloat.h, IIC_funcs.c, IIC_funcs.he iic_imu.h. Il codice in iic_main_thread.c è stato adattato dalla libreria di Kris Winer, che può essere trovata qui. Abbiamo principalmente trasformato il suo codice per incorporare attività e farlo funzionare con la scheda Zybo. Abbiamo anche aggiunto funzioni per il calcolo della correzione dell'orientamento della telecamera. Abbiamo lasciato in diverse istruzioni print che sono utili per il debug. La maggior parte di essi è commentata, ma se ne senti il bisogno puoi decommentarli.

  1. Il modo più semplice per modificare il file main.c è sostituire il codice con il codice copiato dal nostro file main.c incluso.
  2. Per creare un nuovo file, fai clic con il pulsante destro del mouse sulla cartella src sotto RTOSDemo e seleziona C Source File. Denominare questo file "iic_main_thread.c".
  3. Copia il codice dal file "iic_main_thread.c" incluso e incollalo nel file appena creato.
  4. Ripetere i passaggi 2 e 3 con i file rimanenti.
  5. richiede un'istruzione di collegamento in gcc. Per aggiungerlo al percorso di compilazione, fai clic con il pulsante destro del mouse su RTOSDemo e seleziona "Impostazioni di compilazione C/C++".
  6. Verrà aperta una nuova finestra. Passa a ARM v7 gcc linker-> Librerie. Seleziona il piccolo file di aggiunta nell'angolo in alto a destra e digita "m". Ciò includerà la libreria matematica nel progetto.
  7. Crea progetto con Ctrl + B per confermare che tutto funziona. Controlla gli avvisi che vengono generati ma potresti essere in grado di ignorarli.
  8. Ci sono un paio di posti che necessitano di modifiche, principalmente la declinazione magnetica della tua posizione attuale. Spiegheremo come cambiarlo nella parte di calibrazione del tutorial.

Passaggio 9: stampa 3D per stabilizzatore

Stampa 3D per stabilizzatore
Stampa 3D per stabilizzatore

Devi stampare in 3D un paio di parti per questo progetto. Probabilmente è possibile acquistare parti di dimensioni/dimensioni simili alle nostre parti stampate.

  1. Usa i file forniti per stampare il braccio e la staffa di supporto per la GoPro.
  2. È necessario aggiungere un'impalcatura al file.stl.
  3. Tagliare/pulire le parti dell'impalcatura in eccesso una volta stampate.
  4. Se lo desideri, puoi sostituire il tassello di legno con una parte stampata in 3D.

Passaggio 10: assemblaggio delle parti

Assemblaggio delle parti
Assemblaggio delle parti

Ci sono diverse parti per il montaggio dello stabilizzatore. Le staffe acquistate vengono fornite con 4 viti autofilettanti e 4 bulloni con dadi. Poiché ci sono 3 servi, una delle squadrette del servo deve essere pre-tappata per consentire il passaggio di 2 dei bulloni.

  1. Saldare 8 pin sul breakout IMU, 4 su ciascun lato.
  2. L'IMU è fissata alla staffa di supporto stampata in 3D per la GoPro al centro della staffa.
  3. Orientare la staffa in modo che i fori di montaggio del servo si trovino sul lato sinistro. Posiziona l'IMU sul bordo più vicino a te, con i perni che pendono dal bordo. Quindi, posiziona il supporto GoPro sopra l'IMU, attaccando l'IMU e il supporto in posizione sulla staffa.
  4. Attacca un HS-5485HB alla staffa del servo che è integrata nel braccio stampato in 3D.
  5. Avvita la staffa GoPro nel servo collegato al braccio, assicurandoti che il servo sia impostato in modo che si trovi nel mezzo del suo raggio di movimento.
  6. Quindi, collegare il servo HS-5685MH a una staffa del servo. Quindi picchiettare la squadretta del servo con una delle viti. Ora attacca il servo alla parte inferiore dell'ultima staffa del servo.
  7. Ora attacca l'ultimo servo alla staffa in cui è avvitato il servo HS-5685MH. Quindi avvitare il braccio in questo servo, assicurandosi che il braccio sia avvitato in modo che possa muoversi di 90 gradi in ogni direzione.
  8. Per completare la costruzione del gimbal, aggiungi un piccolo pezzo del tassello di legno per collegare la staffa GoPro e il braccio stampato in 3D. Ora hai assemblato lo stabilizzatore.
  9. Infine, puoi aggiungere una maniglia collegata alla staffa del servo inferiore.

Passaggio 11: collegamento di Zybo allo stabilizzatore

Collegamento di Zybo allo stabilizzatore
Collegamento di Zybo allo stabilizzatore

Ci sono un paio di cose a cui prestare attenzione quando si esegue questa operazione. Vuoi assicurarti che i 5V dall'alimentatore non entrino mai nella scheda Zybo, poiché ciò porterebbe a problemi con la scheda. Assicurati di ricontrollare i tuoi ponticelli per confermare che nessun cavo viene scambiato.

  1. Per collegare lo Zybo allo stabilizzatore avrai bisogno di 15 ponticelli da maschio a maschio e 4 ponticelli da maschio a femmina.
  2. Innanzitutto, collega due ponticelli all'alimentatore da 5 V lungo i binari + e - della breadboard. Questi forniranno l'alimentazione ai servi.
  3. Quindi, collegare 3 coppie di ponticelli alle guide + e - della breadboard. Queste saranno la potenza per ciascuno dei servi.
  4. Inserire l'altra estremità dei ponticelli + e - in ciascuno dei servi.
  5. Collegare un ponticello tra il binario - della breadboard e uno dei pin GND sullo Zybo JE Pmod (vedere l'immagine del passaggio 5). Ciò creerà una massa comune tra la scheda Zybo e l'alimentatore.
  6. Quindi collegare un cavo di segnale al pin 1, pin 2 e pin 3 del JE Pmod. Il pin 1 è mappato al servo inferiore, il pin 2 è mappato al servo all'estremità del braccio e il pin 3 è mappato al servo centrale.
  7. Inserire i 4 fili femmina nei pin GND, VDD, SDA e SCL del breakout IMU. GND e VDD si collegano a GND e 3V3 sui pin JF. Collegare il pin SDA al pin 8 e SCL al pin 7 sul JF (vedere l'immagine del passaggio 5).
  8. Infine, collega il computer alla scheda tramite un cavo micro usb. Ciò consentirà la comunicazione con uart e consentirà di programmare la scheda Zybo.

Passaggio 12: correzione del nord reale

Correzione del vero nord
Correzione del vero nord

La calibrazione del magnetometro nell'IMU è importante per il corretto funzionamento del dispositivo. La declinazione magnetica, che corregge il nord magnetico al nord geografico.

  1. Per correggere la differenza tra il nord magnetico e il nord geografico, è necessario utilizzare una combinazione di due servizi, Google Maps e il calcolatore del campo magnetico di NOAA.
  2. Usa Google Maps per trovare la tua latitudine e longitudine della tua posizione attuale.
  3. Prendi la tua attuale longitudine e latitudine e collegala al calcolatore del campo magnetico.
  4. Quello che viene restituito è la declinazione magnetica. Inserisci questo calcolo nel codice alla riga 378 di "iic_main_thread.c". Se la tua declinazione è est, sottrai dal valore di imbardata, se ovest aggiungi al valore di imbardata.

*la foto è stata presa dalla guida di collegamento MPU 9250 di Sparkfun, trovata qui.

Passaggio 13: esecuzione del programma

Esecuzione del programma
Esecuzione del programma

Il momento che stavi aspettando! La parte migliore del progetto è vederlo funzionare. Un problema che abbiamo notato è che c'è una deviazione dai valori riportati dall'IMU. Un filtro passa-basso può aiutare a correggere questa deriva, e giocherellare con il magnetometro, l'accelerazione e le calibrazioni del giroscopio aiuterà anche a correggere questa deriva.

  1. Innanzitutto, crea tutto nell'SDK, questo può essere fatto premendo Ctrl + B.
  2. Assicurati che l'alimentatore sia acceso e impostato su 5V. Ricontrolla che tutti i fili vadano nella posizione corretta.
  3. Quindi, per eseguire il programma, premere il triangolo verde in alto al centro della barra delle applicazioni.
  4. Quando il programma viene eseguito, i servi verranno tutti ripristinati alle loro posizioni 0, quindi preparatevi per il movimento del rig. Una volta inizializzato il programma, i servi torneranno alle loro posizioni di 90 gradi.
  5. Verrà eseguita una funzione di calibrazione del magnetometro e le indicazioni verranno stampate sul terminale UART, a cui è possibile connettersi tramite un monitor seriale come "putty" o il monitor seriale fornito nell'SDK.
  6. La calibrazione ti farà spostare il dispositivo in una figura 8 per circa 10 secondi. Puoi rimuovere questo passaggio commentando la riga 273 di "iic_main_thread.c". Se lo commenti, devi decommentare le righe 323 - 325 "iic_main_thread.c". Questi valori sono stati inizialmente raccolti dalla calibrazione del magnetometro sopra e poi inseriti come valori.
  7. Dopo la calibrazione il codice di stabilizzazione verrà inizializzato e il dispositivo manterrà stabile la fotocamera.

Consigliato: