Innehållsförteckning:

Hur man gör Ernie: 11 steg
Hur man gör Ernie: 11 steg

Video: Hur man gör Ernie: 11 steg

Video: Hur man gör Ernie: 11 steg
Video: Installera/Återställa Windows, ENKELT - Komplett.se 2024, November
Anonim
Hur man gör Ernie
Hur man gör Ernie

Detta är en handledning om hur du bygger Ernie, ditt autonoma ljud efter robot, med hjälp av en Zybo Board. Det kommer att täcka hur man: skapa ett projekt i Vivado, skapa PWM-liknande servomotordrivrutiner i FPGA, gränssnitt med två ljudsensorer, skapa en tidsskillnad mellan ankomst-IP, använd freeRTOS och kör zybo från ett batteri. Detta var vårt sista projekt för en Real Time Operating Systems -klass (CPE 439) på Cal Poly SLO.

Utrustningslista:

  • 1 - ZYBO Zynq 7000 Development Board
  • 2 - Parallax kontinuerlig rotationsservo
  • 2 - Ljudsensor (SparkFun ljuddetektor)
  • 1 - 5v litiumjon USB -batteri (för kort)
  • 4 - AA -batterier (för servon)
  • 1 - AA -batteri (med 4 batterifack)
  • 1 - Micro USB -kabel
  • 1 - Brödbräda
  • många - Man till Man tråd
  • 1 - Servo chassi

Programvarukrav:

  • Xilinx Vivado Design Suite 2016.2
  • Digilent Adept 2.16.1

Steg 1: Skapa ett projekt i Vivado för Ernie

Upprätta ett projekt i Vivado för Ernie
Upprätta ett projekt i Vivado för Ernie
Upprätta ett projekt i Vivado för Ernie
Upprätta ett projekt i Vivado för Ernie
Upprätta ett projekt i Vivado för Ernie
Upprätta ett projekt i Vivado för Ernie
  1. En guide kommer att dyka upp
  2. Klicka på Nästa
  3. Nästa namn på projektet

    1. Använd aldrig ett projektnamn eller katalogväg som har mellanslag !!!!!
    2. Detta kommer att bli ett RTL -projekt.
  4. Vi vill inte ange källor
  5. Genom att klicka på Nästa kommer vi till Delsidan. Vi använder en ZYNQ XC7Z010-1CLG400C.

    1. Vivado har inte Zybo listat som en av sina fördefinierade kort. Välj: "delar" och sök sedan efter xc7z010clg400-1.
    2. Om du väljer fel del av misstag kan du enkelt byta marker: Verktyg -> Projektinställningar -> Allmänt och klicka på punkterna till höger om "Projektenhet"
  6. Klicka på Skapa blockdesign.

    Ge den design_1 för tillfället

  7. Du kommer att se en grön stapel som säger Lägg till IP, klicka på den.
  8. Sök efter Zynq.

    1. Dubbelklicka på ZYNQ7 Processing System,
    2. Detta block kommer att visas i vår blockdesign.
  9. Du kommer att se en grön stapel som säger Run Block Automation, klicka på den.
  10. Ladda ner zybo_zynq_def.xml nedan.
  11. I Vivado klickar du på "Importera XPS -inställningar" och väljer "zybo_zynq_def.xml"

    Detta fyller i förväg Vivado-blockkonfigurationen med alla Zybo-kortets inbyggda kringutrustning och stifttilldelningar

  12. Dubbelklicka på ZYNQ -blocket.

    1. MIO -konfiguration

      1. Aktivera timer 0 (under Application Processor Unit - bild 1)
      2. Aktivera Watchdog (under Application Processor Unit- bild 1)
      3. Aktivera GPIO-> GPIO MIO (under Application Processor Unit - bild 2)
      4. Aktivera GPIO-> ENET Återställ (under I/O-kringutrustning- bild 2)
    2. Klocka konfiguration

      Inaktivera FCLK0 (under PL -tygklockor - bild 3)

  13. Klicka på Ok.
  14. "Kör Block Automation" nu.

    Det kommer att finnas några frågor om signaler, säg OK

  15. Klicka på "Generera HDL -omslag".

    Vi vill kopiera den genererade omslaget för att tillåta användarredigeringar

  16. Klicka på OK.

Steg 2: Skapa Ernies PWM i Vivado

Skapar Ernies PWM i Vivado
Skapar Ernies PWM i Vivado
Skapar Ernies PWM i Vivado
Skapar Ernies PWM i Vivado

Detta steg genererar en PWM IP med ingångar som skickas via AXI -biblioteket.

  1. Skapa AXI GPIO-block genom att högerklicka på bakgrunden och klicka på "lägg till IP"

    skriv "AXI_GPIO" i sökfältet och välj det här paketet

  2. Anpassa IP igen genom att dubbelklicka på det nya axi_gpio_0 blocket

    1. under GPIO, ställ in GPIO -bredd till 2. Dessa bitar kommer att vara PWM_ON -signalen för att driva varje PWM -modulinstans.
    2. klicka på "aktivera dubbelkanal"
    3. under GPIO 2, ställ in GPIO -bredd till 2. Dessa bitar är PWM_FW -signalen för att ställa in riktningen för varje PWM -modulinstans.
  3. Högerklicka på axi_gpio_0 -utgångsporten märkt GPIO och välj "Skapa externt"

    1. Klicka på den nya utdata märkt GPIO, navigera till fliken "egenskaper" i det vänstra verktygsfältet och ändra namnet till PWM_ON
    2. Klicka på den nya utmatningen märkt GPIO2 och navigera till fliken "egenskaper" i det vänstra verktygsfältet och ändra namnet till PWM_FW
  4. Välj Kör anslutningsautomation i den gröna bannern ovanför blockdiagrammet.

    Om du manuellt ansluter portarna kanske AXI -adresser inte konfigureras, vilket leder till kommunikationsproblem senare

  5. I flödesnavigeringsfönstret väljer du projektledare -> Lägg till källor för att skapa ett nytt anpassat IP -block

    1. välj "lägg till eller skapa designkällor" och tryck på nästa
    2. klicka på "skapa fil", ändra filtyp till "SystemVerilog" och skriv "pwm" i filnamnfältet, klicka sedan på OK
    3. klicka på Slutför
    4. ignorera fönstret Definiera modul genom att trycka på OK (vi kommer att skriva över dessa senare)

      om den frågar om du är säker klickar du på Ja

  6. På fliken källor dubbelklickar du på pwm.sv (finns i "Designkällor/design_1_wrapper")

    Kopiera/klistra in hela SystemVerilog -koden från filen pwm.txt som bifogas nedan

Steg 3: Skapa Ernies TDOA i Vivado

Skapar Ernies TDOA i Vivado
Skapar Ernies TDOA i Vivado
Skapar Ernies TDOA i Vivado
Skapar Ernies TDOA i Vivado

Detta steg genererar en TDOA IP vars utdata kan läsas via AXI -biblioteket

  1. Skapa AXI GPIO-block genom att högerklicka på bakgrunden och klicka på "lägg till IP"

    skriv "AXI_GPIO" i sökfältet och välj det här paketet

  2. Anpassa IP igen genom att dubbelklicka på det nya axi_gpio_1-blocket

    1. under GPIO, kryssa i rutan "Alla ingångar" och ställ in GPIO -bredd till 32. Denna buss kommer att vara tidsskillnaden mellan ankomst mellan de två sensorerna.
    2. inne i blocket axi_gpio_1 klickar du på + bredvid GPIO -porten för att visa gpio_io_i [31: 0].
  3. Högerklicka på axi_gpio_1 -utgångsporten märkt gpio_io_i [31: 0] och välj "Skapa externt"

    Klicka på den nya ingången märkt gpio_io_i [31: 0], navigera till fliken "egenskaper" i det vänstra verktygsfältet och ändra namnet till TDOA_val

  4. Välj Kör anslutningsautomation i den gröna bannern ovanför blockdiagrammet.

    Om du manuellt ansluter portarna kanske AXI -adresser inte konfigureras, vilket leder till kommunikationsproblem senare

  5. I flödesnavigeringsfönstret väljer du projektledare -> Lägg till källor för att skapa ett nytt anpassat IP -block

    1. välj "lägg till eller skapa designkällor" och tryck på nästa
    2. klicka på "skapa fil", ändra filtyp till "SystemVerilog" och skriv "tdoa" i filnamnfältet, klicka sedan på OK
    3. klicka på Slutför
    4. ignorera fönstret Definiera modul genom att trycka på OK (vi kommer att skriva över dessa senare)

      om den frågar om du är säker klickar du på Ja

  6. På fliken källor dubbelklickar du på tdoa.sv (finns i "Designkällor/design_1_wrapper")

    Kopiera/klistra in hela SystemVerilog -koden från tdoa.txt -filen som bifogas nedan

Steg 4: Packa in och exportera Ernie

Inslagning och export av Ernie
Inslagning och export av Ernie
  1. Kontrollera att blockdiagrammet ser ut som den bifogade skärmdumpen
  2. På fliken källor högerklickar du på design_1.bd och väljer "Skapa HDL-omslag …"

    1. Välj "Kopiera genererad utdata för att tillåta användarredigeringar" och tryck sedan på "OK"
    2. Kopiera koden från design_1_wrapper.txt som bifogas nedan och klistra in den istället för den genererade design_1_wrapper.v -koden
    3. spara design_1_wrapper.v
  3. På fliken källor dubbelklickar du på filen ZYBO_Master.xdc under Begränsningar/constrs1

    1. Kopiera koden från ZYBO_Master.txt som bifogas nedan och klistra in den i stället för den befintliga ZYBO_Master.xdc -koden
    2. Observera följande ingångs-/utgångsstiften:

      1. L15: PWM -signal för vänster motor (Pmod JA2 på Zybo)
      2. L14: PWM -signal för höger motor (Pmod JA8 på Zybo)
      3. V12: grindingång från ljudsensor 1 (Pmod JE1 på Zybo)
      4. K16: gate input från ljudsensor 2 (Pmod JE2 på Zybo)
  4. I flödesnavigeringsfönstret klickar du på "Generera bitström" under Program och felsökning

    om du tror att det är gjort direkt är det förmodligen inte det. seriöst, gör lite te

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

    Markera "Inkludera Bitstream" och tryck OK

  6. Klicka på Arkiv-> Starta SDK

Steg 5: Bygga Ernie

Bygga Ernie
Bygga Ernie
Bygga Ernie
Bygga Ernie
  1. Montera servon på servoskalet.
  2. Följ databladet för servon, gör följande:

    1. anslut jordens servo till jordstift på Zybos JA Pmod (se bifogad pinout -bild)
    2. anslut strömuttaget på servona till AA -batteriet

      Vi fann att när servon är anslutna till Zybos Vdd drar kortet för mycket ström, vilket gör att kortet kontinuerligt återställs

    3. anslut ingångssignalstiften till Zybos lämpliga utgångsstiften (vänster: JA2, höger: JA8)
  3. montera ljudsensorerna på framsidan av chassit, framåt och håll dem så nära varandra som möjligt
  4. använd ljudsensorns anslutningsguide för att integrera ljudsensorerna
    1. kabela marken och Vdd -stiften på varje ljudsensor till marken och Vdd -stiften på Zybos JE Pmod (se bifogad pinout -bild)
    2. anslut den vänstra ljudsensorns portnål till JE1
    3. anslut den högra ljudsensorns portnål till JE2

Steg 6: Ernies första BSP

Ernies första BSP
Ernies första BSP
Ernies första BSP
Ernies första BSP
  1. Skapa en BSP för att avsluta plattformen vi just skapat.

    Du kan få detta genom Arkiv -> Nytt -> Styrelsepaket

  2. En guide kommer att dyka upp för att hjälpa dig att skapa BSP.

    1. Vi vill knyta denna BSP till vår plattform som vi just skapat, så
    2. Hårdvaruplattformen bör ligga i linje med den vi just skapade (se bild 1)
    3. Vår CPU kommer att vara _0 CPU.
    4. Klicka på Slutför
    5. Var noga med att kryssa av lwip141 för inkludering med din bsp i fönstret som dyker upp (se bild 2)

Steg 7: FreeRTOS'ing Ernie

  1. Ladda ner den senaste FreeRTOS -versionen från Sourceforge.

    Om nedladdningen är körbar kör du den för att extrahera FreeRTOS -filerna i projektkatalogen

  2. Håll SDK -en öppen och klicka på Arkiv -> Importera.
  3. Vi vill klicka på Allmänt-> Från en befintlig arbetsyta och sedan vill vi navigera till var vi laddade ner FreeRTOS.
  4. Vår demo kommer att finnas i FreeRTOS/Demo/CORTEX_A9_Zynq_ZC702. När vi väljer den här mappen bör vi se tre projekt dyka upp (vår kod (OS), det är BSP och HW -plattformen).

    ENDAST importera RTOSDemo till din nuvarande arbetsyta

  5. På alla”blå” mapprojekt ändrar BSP som refereras

    1. Högerklicka och välj "Ändra refererad BSP."
    2. Välj den BSP du just skapade för din Zybo
    3. Kodredigering i Xilinx SDK Blue -mappar är de faktiska kodprojekten.

Steg 8: Importera Ernies C -kod

  1. I katalogen RTOSDemo/src, skriv över den befintliga main.c -filen med main.c -filen bifogad här.
  2. Kopiera main_sound.c -fiilen till RTOSDemo/src -katalogen.

Steg 9: Debugging Ernie

  1. Välj Kör -> Debug Configurations
  2. Skapa en ny systemfelsökare i den vänstra rutan
  3. På fliken Målinställning,

    välj “Återställ hela systemet” så att både det och ps7_init väljs

  4. Välj nu fliken Program.

    1. Välj "ladda ner applikation"
    2. Ställ cortexa9_0 -kärnan på "stopp vid programinträde"
    3. Klicka på Apply and Debug.
  5. Kontrollera att det inte finns några fel i felsökningen
  6. Håll koll på roboten och tryck på knappen Fortsätt tills programmet körs utan att träffa några brytpunkter
  7. Roboten ska nu vända och gå mot höga ljud. Jippie!

Steg 10: Gör Ernie autonom

  1. När ditt projekt är klart att gå (du kan köra utan problem via felsökaren) är du redo att ladda det till flashminnet på ditt kort.
  2. Skapa det som kallas "first stage boot loader" (FSBL) -projektet och innehåller all instruktion som ditt kort behöver för att ladda dina projektfiler (bitströmmen och OS) vid start.

    1. Välj: File-> New-> Application Project och följande fönster ska visas.
    2. Ge det vad du vill (dvs "FSBL")
    3. Se till att hårdvaruplattformen är den du arbetar med
    4. Tryck på nästa (tryck inte på Slutför)
    5. Välj Zynq FSBL -mallen
    6. Klicka på Slutför.
  3. När skapandeprocessen är klar vet du om allt fungerade om du ser följande två nya mappar i fönstret Project Explorer.
  4. Skapa en startbild Nu måste du skapa en startbild.

    1. Högerklicka på din projektmapp (i detta fall kallas min "RTOSDemo")
    2. Klicka på "Skapa startbild" från rullgardinsmenyn
    3. Om allt är korrekt länkat kommer projektet att veta vilka filer det behöver och följande fönster kommer att se ut som du ser nedan (nyckeln är att du har tre partitioner under Boot image -sektionen, bootloader, din bitfil och dina projekt.elf -fil).

      Om så inte är fallet är det möjligtvis något fel med att ditt projekt länkar. Se till att projektmapparna är länkade till sina respektive BSP: er

    4. Klicka på knappen "Skapa bild"
  5. Det sista steget att utföra i programvara är att nu blinka din tidigare skapade bild till kortets minne

    1. Välj från SDK: s huvudverktygsfält, välj Xilinx Tools-> Program Flash Memory
    2. Se till att rätt maskinvaruplattform är vald och att bildfilens sökväg pekar korrekt på. BIN -filen som skapades i föregående steg.
    3. Välj "qspi singel" från Flash -typen
    4. Markera "Verifiera efter blixt" för att säkerställa integriteten men det behövs inte
  6. Konfigurera ditt kort Slutligen måste du försäkra dig om att kortets programmeringslägesbygel (JP5) är korrekt inställd för att välja att starta från qspi (som innehåller det du just blinkade) när BootROM körs.
  7. Nu är det bara att slå på enheten och försäkra dig om att "Logic Configuration Done LED" (LED 10) lyser grönt.

Steg 11: Gör Ernie Cute

  1. Päls
  2. Mycket päls
  3. Stora ögon!
  4. … toppmössa

Rekommenderad: