Sommario:

Come fare Ernie: 11 passaggi
Come fare Ernie: 11 passaggi

Video: Come fare Ernie: 11 passaggi

Video: Come fare Ernie: 11 passaggi
Video: Ernia iatale: esercizi, cosa non mangiare e trattamento osteopatico 2024, Novembre
Anonim
Come fare Ernie
Come fare Ernie

Questo è un tutorial su come costruire Ernie, il tuo robot autonomo che segue il suono, usando una Zybo Board. Illustrerà come: creare un progetto in Vivado, creare driver per servomotori simili a PWM nell'FPGA, interfacciarsi con due sensori sonori, creare una differenza di orario dell'IP di arrivo, utilizzare freeRTOS e far funzionare lo zybo con una batteria. Questo è stato il nostro progetto finale per una classe di sistemi operativi in tempo reale (CPE 439) presso Cal Poly SLO.

Elenco attrezzature:

  • 1 - Scheda di sviluppo ZYBO Zynq 7000
  • 2 - Servo a rotazione continua di parallasse
  • 2 - Sensore sonoro (rilevatore di suoni SparkFun)
  • 1 - Pacco batteria USB agli ioni di litio da 5 V (per scheda)
  • 4 - Batterie AA (per servi)
  • 1 - Pacco batteria AA (con 4 alloggiamenti per batteria)
  • 1 - Cavo micro USB
  • 1 - Tagliere
  • many - Cavi maschio-maschio
  • 1 - Servo telaio

Requisiti software:

  • Xilinx Vivado Design Suite 2016.2
  • Esperto Digilent 2.16.1

Passaggio 1: impostare un progetto in Vivado per Ernie

Allestire un progetto in Vivado per Ernie
Allestire un progetto in Vivado per Ernie
Allestire un progetto in Vivado per Ernie
Allestire un progetto in Vivado per Ernie
Allestire un progetto in Vivado per Ernie
Allestire un progetto in Vivado per Ernie
  1. Apparirà una procedura guidata
  2. Fare clic su Avanti
  3. Avanti nominare il progetto

    1. Non usare mai un nome di progetto o un percorso di directory che contiene spazi!!!!!
    2. Questo sarà un progetto RTL.
  4. Non vogliamo specificare le fonti
  5. Facendo clic su Avanti, si arriva alla pagina Parte. Stiamo utilizzando uno ZYNQ XC7Z010-1CLG400C.

    1. Vivado non ha Zybo elencato come una delle sue schede predefinite. Selezionare: "parti", quindi cercare xc7z010clg400-1.
    2. Se scegli la parte sbagliata per errore puoi facilmente cambiare chip: Strumenti -> Impostazioni progetto -> Generale e fai clic sui punti a destra di "Dispositivo progetto"
  6. Fare clic su Crea disegno blocco.

    Chiamalo design_1 per ora

  7. Vedrai una barra verde che dice Aggiungi IP, fai clic su di essa.
  8. Cerca Zynq.

    1. Fare doppio clic sul sistema di elaborazione ZYNQ7,
    2. Questo blocco apparirà nel nostro design a blocchi.
  9. Vedrai una barra verde che dice Esegui Block Automation, fai clic su di essa.
  10. Scarica zybo_zynq_def.xml qui sotto.
  11. In Vivado, fai clic su "Importa impostazioni XPS" e seleziona "zybo_zynq_def.xml"

    Questo prepopola la configurazione del blocco Vivado con tutte le periferiche integrate della scheda Zybo e le assegnazioni dei pin

  12. Fare doppio clic sul blocco ZYNQ.

    1. Configurazione MIO

      1. Abilita Timer 0 (sotto Application Processor Unit - img 1)
      2. Abilita Watchdog (sotto Application Processor Unit- img 1)
      3. Abilita GPIO->GPIO MIO (sotto Application Processor Unit - img 2)
      4. Abilita GPIO-> Reset ENET (sotto I/O Peripherals-img 2)
    2. Configurazione dell'orologio

      Disabilita FCLK0 (sotto PL Fabric Clocks - img 3)

  13. Fare clic su OK.
  14. "Esegui automazione blocco" ora.

    Ci saranno alcune domande sui segnali, dì OK

  15. Fare clic su "Genera wrapper HDL".

    Vorremo copiare il wrapper generato per consentire le modifiche dell'utente

  16. Fare clic su OK.

Passaggio 2: creazione del PWM di Ernie in Vivado

Creare il PWM di Ernie in Vivado
Creare il PWM di Ernie in Vivado
Creare il PWM di Ernie in Vivado
Creare il PWM di Ernie in Vivado

Questo passaggio genererà un IP PWM con input inviati tramite la libreria AXI.

  1. Crea il blocco AXI GPIO facendo clic con il pulsante destro del mouse sullo sfondo e facendo clic su "aggiungi IP"

    digita "AXI_GPIO" nella barra di ricerca e seleziona questo pacchetto

  2. Ripersonalizza l'IP facendo doppio clic sul nuovo blocco axi_gpio_0

    1. sotto GPIO, imposta la larghezza GPIO su 2. Questi bit saranno il segnale PWM_ON per guidare ogni istanza del modulo PWM.
    2. fare clic su "abilita doppio canale"
    3. sotto GPIO 2, imposta la larghezza GPIO su 2. Questi bit saranno il segnale PWM_FW per impostare la direzione di ciascuna istanza del modulo PWM.
  3. Fare clic con il pulsante destro del mouse sulla porta di uscita axi_gpio_0 denominata GPIO e selezionare "Rendi esterno"

    1. Fare clic sul nuovo output etichettato GPIO e accedere alla scheda "proprietà" sulla barra degli strumenti a sinistra e modificare il nome in PWM_ON
    2. Fare clic sul nuovo output etichettato GPIO2 e accedere alla scheda "proprietà" sulla barra degli strumenti a sinistra e modificare il nome in PWM_FW
  4. Selezionare Esegui automazione della connessione nel banner verde sopra il diagramma a blocchi.

    Se si collegano manualmente le porte, gli indirizzi AXI potrebbero non essere configurati, causando problemi di comunicazione in seguito

  5. Nel riquadro Flow Navigator, seleziona project manager -> Aggiungi sorgenti per creare un nuovo blocco IP personalizzato

    1. scegli "aggiungi o crea fonti di progettazione" e premi avanti
    2. fai clic su "crea file", cambia il tipo di file in "SystemVerilog" e digita "pwm" nel campo del nome del file, quindi fai clic su OK
    3. fare clic su Fine
    4. ignorare la finestra Define Module premendo OK (li sovrascriveremo in seguito)

      se ti chiede se sei sicuro, fai clic su Sì

  6. Nella scheda sorgenti, fai doppio clic su pwm.sv (che si trova in "Design Sources/design_1_wrapper")

    Copia/incolla l'intero codice SystemVerilog dal file pwm.txt allegato di seguito

Passaggio 3: creazione del TDOA di Ernie in Vivado

Creare il TDOA di Ernie in Vivado
Creare il TDOA di Ernie in Vivado
Creare il TDOA di Ernie in Vivado
Creare il TDOA di Ernie in Vivado

Questo passaggio genererà un IP TDOA il cui output può essere letto tramite la libreria AXI

  1. Crea il blocco AXI GPIO facendo clic con il pulsante destro del mouse sullo sfondo e facendo clic su "aggiungi IP"

    digita "AXI_GPIO" nella barra di ricerca e seleziona questo pacchetto

  2. Ripersonalizza l'IP facendo doppio clic sul nuovo blocco axi_gpio_1

    1. sotto GPIO, seleziona la casella "Tutti gli ingressi" e imposta la larghezza GPIO su 32. Questo bus sarà la differenza di tempo di arrivo tra i due sensori.
    2. all'interno del blocco axi_gpio_1, fare clic sul + accanto alla porta GPIO per visualizzare gpio_io_i[31:0].
  3. Fare clic con il tasto destro sulla porta di output axi_gpio_1 etichettata gpio_io_i[31:0] e selezionare "Rendi esterno"

    Fare clic sul nuovo input etichettato gpio_io_i[31:0] e accedere alla scheda "proprietà" sulla barra degli strumenti a sinistra e modificare il nome in TDOA_val

  4. Selezionare Esegui automazione della connessione nel banner verde sopra il diagramma a blocchi.

    Se si collegano manualmente le porte, gli indirizzi AXI potrebbero non essere configurati, causando problemi di comunicazione in seguito

  5. Nel riquadro Flow Navigator, seleziona project manager -> Aggiungi sorgenti per creare un nuovo blocco IP personalizzato

    1. scegli "aggiungi o crea fonti di progettazione" e premi avanti
    2. fai clic su "crea file", cambia il tipo di file in "SystemVerilog" e digita "tdoa" nel campo del nome del file, quindi fai clic su OK
    3. fare clic su Fine
    4. ignorare la finestra Define Module premendo OK (li sovrascriveremo in seguito)

      se ti chiede se sei sicuro, fai clic su Sì

  6. Nella scheda sorgenti, fai doppio clic su tdoa.sv (che si trova in "Design Sources/design_1_wrapper")

    Copia/incolla l'intero codice SystemVerilog dal file tdoa.txt allegato di seguito

Passaggio 4: avvolgere ed esportare Ernie

Incartare ed esportare Ernie
Incartare ed esportare Ernie
  1. Verifica che il diagramma a blocchi assomigli allo screenshot allegato
  2. Nella scheda delle fonti, fai clic con il pulsante destro del mouse su design_1.bd e seleziona "Crea wrapper HDL…"

    1. Selezionare "Copia output generato per consentire le modifiche dell'utente", quindi premere "OK"
    2. Copia il codice da design_1_wrapper.txt allegato di seguito e incollalo al posto del codice design_1_wrapper.v generato
    3. salva design_1_wrapper.v
  3. Nella scheda sorgenti, fai doppio clic sul file ZYBO_Master.xdc in Constraints/constrs1

    1. Copia il codice da ZYBO_Master.txt allegato di seguito e incollalo al posto del codice ZYBO_Master.xdc esistente
    2. Notare i seguenti pin di ingresso/uscita:

      1. L15: Segnale PWM per il motore sinistro (Pmod JA2 su Zybo)
      2. L14: Segnale PWM per il motore destro (Pmod JA8 su Zybo)
      3. V12: ingresso cancello dal sensore sonoro 1 (Pmod JE1 su Zybo)
      4. K16: ingresso cancello dal sensore sonoro 2 (Pmod JE2 su Zybo)
  4. Nel riquadro Flow Navigator, fai clic su "Genera bitstream" in Programma e debug

    se pensi che sia fatto subito, probabilmente non lo è. seriamente, prepara un po' di tè

  5. Fare clic su File->Esporta->Genera hardware

    Seleziona "Includi Bitstream" e premi OK

  6. Fare clic su File-> Avvia SDK

Passaggio 5: costruire Ernie

Costruire Ernie
Costruire Ernie
Costruire Ernie
Costruire Ernie
  1. Montare i servi sul telaio del servo.
  2. Seguendo la scheda tecnica per i servi, procedi come segue:

    1. collegare la massa dei servi ai pin di massa sul JA Pmod di Zybo (vedi immagine piedinatura allegata)
    2. collegare il pin di alimentazione dei servi al pacco batterie AA

      Abbiamo scoperto che quando i servi sono collegati al Vdd dello Zybo, la scheda assorbe troppa corrente, causando il ripristino continuo della scheda

    3. collegare i pin del segnale di ingresso ai pin di uscita appropriati di Zybo (sinistra: JA2, destra: JA8)
  3. montare i sensori sonori sulla parte anteriore del telaio, rivolti in avanti, mantenendoli il più vicini possibile
  4. utilizzare la guida di collegamento del sensore sonoro per integrare i sensori sonori

    1. collegare i pin di terra e Vdd di ciascun sensore sonoro ai pin di terra e Vdd sul JE Pmod di Zybo (vedi immagine piedinatura allegata)
    2. collegare il pin Gate del sensore audio sinistro a JE1
    3. collegare il pin Gate del sensore audio destro a JE2

Passaggio 6: il primo BSP di Ernie

Il primo BSP di Ernie
Il primo BSP di Ernie
Il primo BSP di Ernie
Il primo BSP di Ernie
  1. Crea un BSP per concludere la piattaforma che abbiamo appena creato.

    Puoi ottenerlo tramite File -> Nuovo -> Pacchetto di supporto della scheda

  2. Apparirà una procedura guidata per aiutarti a creare il BSP.

    1. Vogliamo legare questo BSP con la nostra piattaforma che abbiamo appena creato, quindi
    2. La piattaforma hardware dovrebbe allinearsi a quella appena creata (vedi img 1)
    3. La nostra CPU sarà la CPU _0.
    4. Fare clic su Fine
    5. Assicurati di spuntare lwip141 per l'inclusione con il tuo bsp nella finestra che si apre (vedi img 2)

Passaggio 7: Ernie di FreeRTOS

  1. Scarica l'ultima versione di FreeRTOS da Sourceforge.

    Se il download è un eseguibile, eseguilo per estrarre i file FreeRTOS nella directory del tuo progetto

  2. Tieni aperto l'SDK e fai clic su File -> Importa.
  3. Vogliamo fare clic su Generale->Da un'area di lavoro esistente, quindi vorremo navigare fino al punto in cui abbiamo scaricato FreeRTOS.
  4. La nostra demo si troverà in FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702. Dopo aver selezionato questa cartella, dovremmo vedere apparire tre progetti (il nostro codice (OS), è BSP e la piattaforma HW).

    Importa SOLO RTOSDemo nel tuo attuale spazio di lavoro

  5. Su tutti i progetti della cartella "blu" cambia il BSP di riferimento

    1. Fare clic con il pulsante destro del mouse e selezionare "Cambia BSP di riferimento".
    2. Seleziona il BSP che hai appena creato per il tuo Zybo
    3. La modifica del codice nelle cartelle SDK Blue di Xilinx sono i progetti di codice effettivi.

Passaggio 8: importazione del codice C di Ernie

  1. Nella directory RTOSDemo/src, sovrascrivi il main.c esistente con il file main.c allegato qui.
  2. Copia il file main_sound.c nella directory RTOSDemo/src.

Passaggio 9: debug di Ernie

  1. Selezionare Esegui -> Configurazioni di debug
  2. Nel riquadro di sinistra crea una nuova esecuzione di System Debugger
  3. Nella scheda Impostazione destinazione,

    selezionare "Ripristina intero sistema" in modo che siano selezionati sia that che ps7_init

  4. Ora seleziona la scheda Applicazione.

    1. Seleziona “scarica applicazione”
    2. Imposta il core cortexa9_0 su "stop at program entry"
    3. Fare clic su Applica ed esegui il debug.
  5. Verificare che non ci siano errori nel processo di debug
  6. Tenendo d'occhio il robot, premere il pulsante Riprendi finché il programma non viene eseguito senza raggiungere alcun punto di interruzione
  7. Il robot dovrebbe ora girarsi e muoversi verso rumori forti. Sìì!

Passaggio 10: rendere Ernie autonomo

  1. Una volta che il tuo progetto è pronto (puoi eseguirlo senza problemi tramite il debugger) sei pronto per caricarlo nella memoria flash della tua scheda.
  2. Crea quello che viene chiamato il progetto "first stage boot loader" (FSBL) e contiene tutte le istruzioni di cui la tua scheda avrà bisogno per caricare i file del tuo progetto (il flusso di bit e il sistema operativo) all'avvio.

    1. Selezionare: File->Nuovo->Progetto applicazione e dovrebbe apparire la seguente finestra.
    2. Chiamalo come vuoi (cioè "FSBL")
    3. Assicurati che la piattaforma hardware sia quella con cui stai lavorando
    4. Premere Avanti (non premere Fine)
    5. Seleziona il modello Zynq FSBL
    6. Fare clic su Fine.
  3. Una volta completato il processo di creazione, saprai se tutto ha funzionato se vedi le seguenti due nuove cartelle nella finestra Esplora progetti.
  4. Crea un'immagine di avvio Ora dovrai creare l'immagine di avvio.

    1. Fare clic con il tasto destro sulla cartella del progetto (in questo caso la mia si chiama "RTOSDemo")
    2. Fai clic su "Crea immagine di avvio" dal menu a discesa
    3. Se tutto è collegato correttamente, il progetto saprà di quali file ha bisogno e la seguente finestra avrà l'aspetto che vedi di seguito (la chiave è che hai 3 partizioni nella sezione Immagine di avvio, il bootloader, il tuo file bit e il file.elf dei tuoi progetti).

      In caso contrario, è possibile che ci sia qualcosa di sbagliato nel collegamento del tuo progetto. Assicurati che le cartelle del progetto siano collegate ai rispettivi BSP

    4. Fare clic sul pulsante "Crea immagine"
  5. L'ultimo passaggio da eseguire nel software è ora il flash dell'immagine creata in precedenza nella memoria della scheda
    1. Selezionare dalla barra degli strumenti principale dell'SDK selezionare Xilinx Tools->Program Flash Memory
    2. Assicurati che sia selezionata la piattaforma hardware corretta e che il percorso del file immagine punti correttamente al file. BIN creato nel passaggio precedente.
    3. Seleziona "qspi single" dal tipo di Flash
    4. Spuntare "Verifica dopo il flash" per assicurare l'integrità ma non è necessario
  6. Configura la tua scheda Infine devi assicurarti che il jumper della modalità di programmazione delle schede (JP5) sia impostato correttamente per selezionare l'avvio da qspi (che contiene ciò che hai appena flashato) quando viene eseguita la BootROM.
  7. Ora è sufficiente spegnere e riaccendere il dispositivo e assicurarsi che il LED "Logic Configuration Done" (LED 10) sia acceso in verde.

Passaggio 11: rendere carino Ernie

  1. Pelliccia
  2. un sacco di pelliccia
  3. Grandi occhi!
  4. … cappello a cilindro

Consigliato: