Innholdsfortegnelse:

Hvordan lage Ernie: 11 trinn
Hvordan lage Ernie: 11 trinn

Video: Hvordan lage Ernie: 11 trinn

Video: Hvordan lage Ernie: 11 trinn
Video: Я работаю в Страшном музее для Богатых и Знаменитых. Страшные истории. Ужасы. 2024, November
Anonim
Hvordan lage Ernie
Hvordan lage Ernie

Dette er en opplæring om hvordan du bygger Ernie, din autonome lyd etter robot, ved hjelp av et Zybo Board. Den vil dekke hvordan du: oppretter et prosjekt i Vivado, lager PWM-lignende servomotordrivere i FPGA, grensesnitt med to lydsensorer, oppretter en tidsforskjell ved ankomst-IP, bruker freeRTOS og kjører zyboen fra en batteripakke. Dette var vårt siste prosjekt for en Real Time Operating Systems -klasse (CPE 439) på Cal Poly SLO.

Utstyrsliste:

  • 1 - ZYBO Zynq 7000 Development Board
  • 2 - Parallax Continuous Rotation Servo
  • 2 - Lydsensor (SparkFun lyddetektor)
  • 1 - 5v litiumion USB -batteripakke (for brett)
  • 4 - AA -batterier (for servoer)
  • 1 - AA -batteripakke (m/ 4 batterispor)
  • 1 - Micro USB -kabel
  • 1 - Brødbrett
  • mange - mannlige til mannlige ledninger
  • 1 - Servo -chassis

Programvarekrav:

  • Xilinx Vivado Design Suite 2016.2
  • Digilent Adept 2.16.1

Trinn 1: Sette opp et prosjekt i Vivado for Ernie

Setter opp et prosjekt i Vivado for Ernie
Setter opp et prosjekt i Vivado for Ernie
Setter opp et prosjekt i Vivado for Ernie
Setter opp et prosjekt i Vivado for Ernie
Setter opp et prosjekt i Vivado for Ernie
Setter opp et prosjekt i Vivado for Ernie
  1. En veiviser vil dukke opp
  2. Klikk Neste
  3. Gi prosjektet et nytt navn

    1. Bruk aldri et prosjektnavn eller en katalogbane som har mellomrom !!!!!
    2. Dette blir et RTL -prosjekt.
  4. Vi ønsker ikke å spesifisere kilder
  5. Ved å klikke på Neste kommer vi til Delsiden. Vi bruker en ZYNQ XC7Z010-1CLG400C.

    1. Vivado har ikke Zybo oppført som en av de forhåndsdefinerte tavlene. Velg: “deler”, og søk deretter etter xc7z010clg400-1.
    2. Hvis du velger feil del ved en feiltakelse, kan du enkelt bytte chips: Verktøy -> Prosjektinnstillinger -> Generelt og klikk på prikkene til høyre for "Project Device"
  6. Klikk på Opprett blokkdesign.

    Gi den navnet design_1 for nå

  7. Du vil se en grønn linje som sier Legg til IP, klikk på den.
  8. Søk etter Zynq.

    1. Dobbeltklikk på ZYNQ7 Processing System,
    2. Denne blokken vil vises i vår blokkdesign.
  9. Du vil se en grønn linje som sier Run Block Automation, klikk på den.
  10. Last ned zybo_zynq_def.xml nedenfor.
  11. I Vivado klikker du "Importer XPS -innstillinger" og velger "zybo_zynq_def.xml"

    Dette befolker Vivado-blokkonfigurasjonen på forhånd med alle Zybo-bordets innebygde eksterne enheter og pin-tildelinger

  12. Dobbeltklikk på ZYNQ -blokken.

    1. MIO -konfigurasjon

      1. Aktiver timer 0 (under Application Processor Unit - bilde 1)
      2. Aktiver Watchdog (under Application Processor Unit- bilde 1)
      3. Aktiver GPIO-> GPIO MIO (under Application Processor Unit - bilde 2)
      4. Aktiver GPIO-> ENET Reset (under I/O Peripherals- img 2)
    2. Klokke konfigurasjon

      Deaktiver FCLK0 (under PL stoffklokker - bilde 3)

  13. Klikk OK.
  14. "Kjør Block Automation" nå.

    Det vil være noen spørsmål om signaler, si OK

  15. Klikk på "Generer HDL Wrapper".

    Vi vil kopiere den genererte innpakningen for å tillate brukerredigeringer

  16. Klikk OK.

Trinn 2: Opprette Ernies PWM i Vivado

Oppretter Ernies PWM i Vivado
Oppretter Ernies PWM i Vivado
Oppretter Ernies PWM i Vivado
Oppretter Ernies PWM i Vivado

Dette trinnet vil generere en PWM IP med innganger sendt via AXI -biblioteket.

  1. Opprett AXI GPIO-blokk ved å høyreklikke på bakgrunnen og klikke "legg til IP"

    skriv "AXI_GPIO" i søkefeltet, og velg denne pakken

  2. Tilpass IP på nytt ved å dobbeltklikke på den nye axi_gpio_0 blokken

    1. under GPIO, sett GPIO -bredden til 2. Disse bitene vil være PWM_ON -signalet for å drive hver PWM -modulinstans.
    2. klikk på "aktiver dobbeltkanal"
    3. under GPIO 2, sett GPIO -bredden til 2. Disse bitene vil være PWM_FW -signalet for å angi retningen for hver PWM -modulforekomst.
  3. Høyreklikk på axi_gpio_0 utgangsporten merket GPIO, og velg "Lag ekstern"

    1. Klikk på den nye utgangen merket GPIO, og naviger til kategorien "egenskaper" på verktøylinjen til venstre, og endre navnet til PWM_ON
    2. Klikk på den nye utgangen merket GPIO2, og naviger til kategorien "egenskaper" på venstre verktøylinje, og endre navnet til PWM_FW
  4. Velg Kjør tilkoblingsautomatisering i det grønne banneret over blokkdiagrammet.

    Hvis du kobler til portene manuelt, er det ikke sikkert at AXI -adresser konfigureres, noe som kan føre til kommunikasjonsproblemer senere

  5. I Flow Navigator -ruten velger du prosjektleder -> Legg til kilder for å opprette en ny tilpasset IP -blokk

    1. velg "legg til eller opprett designkilder", og klikk deretter på neste
    2. klikk "opprett fil", endre filtype til "SystemVerilog", og skriv "pwm" i filnavnfeltet, klikk deretter OK
    3. klikk på Fullfør
    4. ignorere vinduet Definer modul ved å trykke OK (vi vil overskrive disse senere)

      Hvis den spør om du er sikker, klikker du Ja

  6. I kategorien Kilder dobbeltklikker du på pwm.sv (ligger i "Designkilder/design_1_wrapper")

    Kopier/lim inn hele SystemVerilog -koden fra filen pwm.txt som er vedlagt nedenfor

Trinn 3: Lag Ernie's TDOA i Vivado

Lagde Ernies TDOA i Vivado
Lagde Ernies TDOA i Vivado
Lagde Ernies TDOA i Vivado
Lagde Ernies TDOA i Vivado

Dette trinnet vil generere en TDOA IP hvis utgang kan leses via AXI -biblioteket

  1. Opprett AXI GPIO-blokk ved å høyreklikke på bakgrunnen og klikke "legg til IP"

    skriv "AXI_GPIO" i søkefeltet, og velg denne pakken

  2. Tilpass IP på nytt ved å dobbeltklikke på den nye axi_gpio_1-blokken

    1. under GPIO, merker du av for "Alle innganger" og setter GPIO -bredden til 32. Denne bussen vil være tidsforskjellen ved ankomst mellom de to sensorene.
    2. inne i axi_gpio_1 -blokken klikker du på + ved siden av GPIO -porten for å vise gpio_io_i [31: 0].
  3. Høyreklikk på utgangsporten axi_gpio_1 merket gpio_io_i [31: 0], og velg "Lag ekstern"

    Klikk på den nye inngangen merket gpio_io_i [31: 0], og naviger til "egenskaper" -fanen på venstre verktøylinje, og endre navnet til TDOA_val

  4. Velg Kjør tilkoblingsautomatisering i det grønne banneret over blokkdiagrammet.

    Hvis du kobler til portene manuelt, er det ikke sikkert at AXI -adresser konfigureres, noe som kan føre til kommunikasjonsproblemer senere

  5. I Flow Navigator -ruten velger du prosjektleder -> Legg til kilder for å opprette en ny tilpasset IP -blokk

    1. velg "legg til eller opprett designkilder", og klikk deretter på neste
    2. klikk "opprett fil", endre filtype til "SystemVerilog", og skriv "tdoa" i filnavnfeltet, klikk deretter OK
    3. klikk på Fullfør
    4. ignorere vinduet Definer modul ved å trykke OK (vi vil overskrive disse senere)

      Hvis den spør om du er sikker, klikker du Ja

  6. I kategorien Kilder dobbeltklikker du på tdoa.sv (ligger i "Designkilder/design_1_wrapper")

    Kopier/lim inn hele SystemVerilog -koden fra tdoa.txt -filen som er vedlagt nedenfor

Trinn 4: Innpakning og eksport av Ernie

Innpakning og eksport av Ernie
Innpakning og eksport av Ernie
  1. Kontroller at blokkdiagrammet ser ut som skjermbildet som er vedlagt
  2. I kategorien Kilder, høyreklikker du på design_1.bd og velger "Create HDL Wrapper …"

    1. Velg "Kopier generert utgang for å tillate brukerredigeringer", og trykk deretter "OK"
    2. Kopier koden fra design_1_wrapper.txt vedlagt nedenfor, og lim den inn i stedet for den genererte design_1_wrapper.v -koden
    3. lagre design_1_wrapper.v
  3. I kategorien Kilder dobbeltklikker du på filen ZYBO_Master.xdc under Begrensninger/begrensninger1

    1. Kopier koden fra ZYBO_Master.txt vedlagt nedenfor, og lim den inn i stedet for den eksisterende ZYBO_Master.xdc -koden
    2. Legg merke til følgende inngangs-/utgangspinner:

      1. L15: PWM -signal for venstre motor (Pmod JA2 på Zybo)
      2. L14: PWM -signal for høyre motor (Pmod JA8 på Zybo)
      3. V12: gateinngang fra lydsensor 1 (Pmod JE1 på Zybo)
      4. K16: gateinngang fra lydsensor 2 (Pmod JE2 på Zybo)
  4. I Flow Navigator -ruten klikker du på "Generer Bitstream" under Program og feilsøking

    hvis du tror det er gjort med en gang, er det sannsynligvis ikke det. Seriøst, lag litt te

  5. Klikk på File-> Export-> Generate Hardware

    Merk av for "Inkluder Bitstream" og trykk OK

  6. Klikk på File-> Launch SDK

Trinn 5: Bygge Ernie

Bygger Ernie
Bygger Ernie
Bygger Ernie
Bygger Ernie
  1. Monter servoene på servokabinettet.
  2. Følg databladet for servoene:

    1. koble bakken på servoen til jordpinnene på Zybo's JA Pmod (se vedlagte pinout -bilde)
    2. koble strømpinnen til servoene til AA -batteripakken

      Vi fant ut at når servoene er koblet til Zybo's Vdd, trekker brettet for mye strøm, noe som får kortet til å tilbakestilles kontinuerlig

    3. koble inngangssignalpinnene til Zybos passende utgangspinner (venstre: JA2, høyre: JA8)
  3. Monter lydsensorene foran på chassiset, vendt fremover, og hold dem så tett som mulig
  4. bruk lydsensorens tilkoblingsguide for å integrere lydsensorene

    1. koble bakken og Vdd -pinnene til hver lydsensor til bakken og Vdd -pinnene på Zybo's JE Pmod (se vedlagte pinout -bilde)
    2. koble den venstre lydsensorens portnål til JE1
    3. koble den høyre lydsensorens portnål til JE2

Trinn 6: Ernies første BSP

Ernies første BSP
Ernies første BSP
Ernies første BSP
Ernies første BSP
  1. Lag en BSP for å pakke opp plattformen vi nettopp har opprettet.

    Du kan få dette gjennom File -> New -> Board Support Package

  2. En veiviser vil dukke opp for å hjelpe deg med å lage BSP.

    1. Vi ønsker å knytte denne BSP med plattformen vår som vi nettopp har opprettet, så
    2. Maskinvareplattformen bør stå på linje med den vi nettopp har opprettet (se bilde 1)
    3. CPUen vår vil være _0 CPU.
    4. Klikk på Fullfør
    5. Husk å krysse av for lwip141 for inkludering med bsp i vinduet som dukker opp (se bilde 2)

Trinn 7: FreeRTOS'ing Ernie

  1. Last ned den siste FreeRTOS -versjonen fra Sourceforge.

    Hvis nedlastingen er kjørbar, kan du kjøre den for å pakke ut FreeRTOS -filene i prosjektkatalogen

  2. Hold SDK -en åpen, og klikk på File -> Import.
  3. Vi vil klikke Generelt-> Fra et eksisterende arbeidsområde, og så vil vi navigere til der vi lastet ned FreeRTOS.
  4. Demoen vår ligger i FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702. Når vi velger denne mappen, bør vi se tre prosjekter dukke opp (vår kode (OS), det er BSP og HW -plattformen).

    Importer KUN RTOSDemo til ditt nåværende arbeidsområde

  5. På alle "blå" mapprosjekter endrer det refererte BSP

    1. Høyreklikk og velg "Endre referert BSP."
    2. Velg BSP du nettopp opprettet for din Zybo
    3. Koderedigering i Xilinxs SDK Blue -mapper er de faktiske kodeprosjektene.

Trinn 8: Importere Ernies C -kode

  1. I RTOSDemo/src -katalogen overskriver du den eksisterende main.c -filen med main.c -filen vedlagt her.
  2. Kopier main_sound.c -filen til RTOSDemo/src -katalogen.

Trinn 9: Debugging Ernie

  1. Velg Kjør -> Debug Configurations
  2. I den venstre ruten opprett en ny System Debugger -kjøring
  3. I kategorien Måloppsett,

    velg “Reset Entire System” slik at både det og ps7_init velges

  4. Velg nå kategorien Program.

    1. Velg "Last ned applikasjon"
    2. Sett cortexa9_0 -kjernen til "stopp ved programoppføring"
    3. Klikk på Bruk og feilsøk.
  5. Kontroller at det ikke er noen feil i feilsøkingsprosessen
  6. Hold øye med roboten, trykk på Fortsett -knappen til programmet kjører uten å treffe noen bruddpunkter
  7. Roboten skal nå snu og bevege seg mot høye lyder. Jippi!

Trinn 10: Gjør Ernie autonom

  1. Når prosjektet er klart til å gå (du kan kjøre uten problemer gjennom feilsøkingsprogrammet) er du klar til å laste det inn i flash -minnet på brettet ditt.
  2. Lag det som kalles "first stage boot loader" (FSBL) -prosjektet og inneholder all instruksjonen som brettet ditt trenger for å laste prosjektfilene (bitstrømmen og OS) ved oppstart.

    1. Velg: File-> New-> Application Project og følgende vindu skal vises.
    2. Gi det navnet du vil (dvs. "FSBL")
    3. Sørg for at maskinvareplattformen er den du jobber med
    4. Trykk på neste (Ikke trykk på Fullfør)
    5. Velg Zynq FSBL -malen
    6. Klikk på ferdig.
  3. Når opprettelsesprosessen er fullført, vil du vite om alt fungerte hvis du ser følgende to nye mapper i vinduet Prosjektutforsker.
  4. Lag et oppstartsbilde Nå må du lage oppstartsbildet.

    1. Høyreklikk på prosjektmappen din (i dette tilfellet heter min "RTOSDemo")
    2. Klikk "Create Boot image" fra rullegardinmenyen
    3. Hvis alt er koblet riktig, vil prosjektet vite hvilke filer det trenger, og det følgende vinduet vil se ut som du ser nedenfor (nøkkelen er at du har 3 partisjoner under Boot image -delen, bootloaderen, bitfilen og prosjektene.elf -filen din).

      Hvis dette ikke er tilfelle, er det muligens noe galt med prosjektlinken din. Forsikre deg om at prosjektmappene er knyttet til sine respektive BSP -er

    4. Klikk på "Lag bilde" -knappen
  5. Det siste trinnet å utføre i programvare er å nå blinke det tidligere opprettede bildet ditt i minnet på brettet

    1. Velg fra SDKs hovedverktøylinje, velg Xilinx Tools-> Program Flash Memory
    2. Forsikre deg om at riktig maskinvareplattform er valgt og at bildefilbanen peker riktig på. BIN -filen som ble opprettet i forrige trinn.
    3. Velg "qspi singel" fra Flash -typen
    4. Merk av for “Bekreft etter blits” for å sikre integriteten, men det er ikke nødvendig
  6. Konfigurer tavlen Til slutt må du forsikre deg om at jumperen for programmeringsmodus for brettene (JP5) er riktig angitt for å velge å starte fra qspi (som inneholder det du nettopp blinket) når BootROM kjøres.
  7. Slå nå av og på enheten og forsikre deg om at "Logic Configuration Done LED" (LED 10) lyser grønt.

Trinn 11: Gjør Ernie Cute

  1. Pels
  2. Mye pels
  3. Store øyne!
  4. … topphatt

Anbefalt: