Cuprins:

Cum să-l faci pe Ernie: 11 pași
Cum să-l faci pe Ernie: 11 pași

Video: Cum să-l faci pe Ernie: 11 pași

Video: Cum să-l faci pe Ernie: 11 pași
Video: Iată 10 EXERCIȚII Care Îți Vor CREȘTE Bicepsul În Doar Câteva ZILE! 2024, Noiembrie
Anonim
Cum să-l faci pe Ernie
Cum să-l faci pe Ernie

Acesta este un tutorial despre cum să construiești Ernie, robotul tău autonom de urmărire a sunetului, folosind o placă Zybo. Acesta va acoperi cum să: creați un proiect în Vivado, să creați drivere de servomotor de tip PWM în FPGA, interfața cu doi senzori de sunet, să creați o diferență de timp de sosire IP, să utilizați freeRTOS și să rulați zybo de pe o baterie. Acesta a fost proiectul nostru final pentru o clasă de sisteme de operare în timp real (CPE 439) la Cal Poly SLO.

Lista de echipamente:

  • 1 - Placa de dezvoltare ZYBO Zynq 7000
  • 2 - Servo de rotație continuă Parallax
  • 2 - Senzor de sunet (Detector de sunet SparkFun)
  • 1 - acumulator USB 5V litiu-ion (pentru bord)
  • 4 - baterii AA (pentru servomotoare)
  • 1 - pachet de baterii AA (cu 4 sloturi pentru baterii)
  • 1 - Cablu micro USB
  • 1 - Pană de pâine
  • multe - fire de la mascul la mascul
  • 1 - Șasiu servo

Cerințe software:

  • Xilinx Vivado Design Suite 2016.2
  • Digilent Adept 2.16.1

Pasul 1: Configurarea unui proiect în Vivado pentru Ernie

Înființarea unui proiect în Vivado pentru Ernie
Înființarea unui proiect în Vivado pentru Ernie
Înființarea unui proiect în Vivado pentru Ernie
Înființarea unui proiect în Vivado pentru Ernie
Înființarea unui proiect în Vivado pentru Ernie
Înființarea unui proiect în Vivado pentru Ernie
  1. Va apărea un vrăjitor
  2. Faceți clic pe Următorul
  3. Următorul nume al proiectului

    1. Nu folosiți niciodată un nume de proiect sau o cale de director care să aibă spații !!!!!
    2. Acesta va fi un proiect RTL.
  4. Nu dorim să specificăm surse
  5. Dând clic pe Următorul, ajungem la pagina Piesă. Folosim un ZYNQ XC7Z010-1CLG400C.

    1. Vivado nu are Zybo listat ca unul dintre panourile sale predefinite. Selectați: „piese”, apoi căutați xc7z010clg400-1.
    2. Dacă alegeți greșit partea greșită, puteți schimba cu ușurință jetoanele: Instrumente -> Setări proiect -> General și faceți clic pe punctele din dreapta „Dispozitiv proiect”
  6. Faceți clic pe Creați design de bloc.

    Denumiți-l design_1 pentru moment

  7. Veți vedea o bară verde pe care scrie Add IP, faceți clic pe ea.
  8. Căutați Zynq.

    1. Faceți dublu clic pe sistemul de procesare ZYNQ7,
    2. Acest bloc va apărea în designul blocului nostru.
  9. Veți vedea o bară verde pe care scrie Run Block Automation, faceți clic pe ea.
  10. Descărcați zybo_zynq_def.xml mai jos.
  11. În Vivado, faceți clic pe „Importați setările XPS” și selectați „zybo_zynq_def.xml”

    Acest pre completează configurația blocului Vivado cu toate perifericele încorporate ale plăcii Zybo și atribuirea pinilor

  12. Faceți dublu clic pe blocul ZYNQ.

    1. Configurare MIO

      1. Activați temporizatorul 0 (sub Unitatea procesorului de aplicații - img 1)
      2. Activați Watchdog (sub Unitatea procesorului de aplicații - img 1)
      3. Activați GPIO-> GPIO MIO (sub Unitatea procesorului de aplicații - img 2)
      4. Activați resetarea GPIO-> ENET (sub periferice I / O- img 2)
    2. Configurarea ceasului

      Dezactivați FCLK0 (sub PL Fabric Clocks - img 3)

  13. Faceți clic pe Ok.
  14. „Rulați automatizarea blocului” acum.

    Vor fi câteva întrebări despre semnale, spuneți OK

  15. Faceți clic pe „Generare HDL Wrapper”.

    Vom dori să copiem ambalajul generat pentru a permite modificările utilizatorilor

  16. Faceți clic pe OK.

Pasul 2: Crearea PWM-ului lui Ernie în Vivado

Crearea PWM a lui Ernie în Vivado
Crearea PWM a lui Ernie în Vivado
Crearea PWM a lui Ernie în Vivado
Crearea PWM a lui Ernie în Vivado

Acest pas va genera un IP PWM cu intrări trimise prin biblioteca AXI.

  1. Creați blocul AXI GPIO făcând clic dreapta pe fundal și făcând clic pe „adăugați IP”

    tastați „AXI_GPIO” în bara de căutare și selectați acest pachet

  2. Re-personalizați IP făcând dublu clic pe noul bloc axi_gpio_0

    1. sub GPIO, setați lățimea GPIO la 2. Acești biți vor fi semnalul PWM_ON pentru a conduce fiecare instanță a modulului PWM.
    2. faceți clic pe „activați canalul dual”
    3. sub GPIO 2, setați lățimea GPIO la 2. Acești biți vor fi semnalul PWM_FW pentru a seta direcția fiecărei instanțe a modulului PWM.
  3. Faceți clic dreapta pe portul de ieșire axi_gpio_0 etichetat GPIO și selectați „Make External”

    1. Faceți clic pe noua ieșire etichetată GPIO și navigați la fila „Proprietăți” din bara de instrumente din stânga și schimbați numele în PWM_ON
    2. Faceți clic pe noua ieșire etichetată GPIO2 și navigați la fila „Proprietăți” din bara de instrumente din stânga și schimbați numele în PWM_FW
  4. Selectați Execută automatizarea conexiunii în bannerul verde de deasupra diagramei bloc.

    Dacă conectați manual porturile, este posibil ca adresele AXI să nu fie configurate, ceea ce duce la probleme de comunicare ulterior

  5. În panoul Flug Navigator, selectați manager de proiect -> Adăugați surse pentru a crea un nou bloc IP personalizat

    1. alegeți „adăugați sau creați surse de proiectare” și accesați următoarea
    2. faceți clic pe „creați fișier”, schimbați tipul de fișier în „SystemVerilog” și tastați „pwm” în câmpul cu numele fișierului, apoi faceți clic pe OK
    3. faceți clic pe Finalizare
    4. ignorați fereastra Definire modul apăsând OK (le vom suprascrie mai târziu)

      dacă vă întreabă dacă sunteți sigur, dați clic pe Da

  6. În fila Surse, faceți dublu clic pe pwm.sv (aflat în „Design Sources / design_1_wrapper”)

    Copiați / lipiți întregul cod SystemVerilog din fișierul pwm.txt atașat mai jos

Pasul 3: Crearea TDOA a lui Ernie în Vivado

Crearea TDOA a lui Ernie în Vivado
Crearea TDOA a lui Ernie în Vivado
Crearea TDOA a lui Ernie în Vivado
Crearea TDOA a lui Ernie în Vivado

Acest pas va genera un IP TDOA a cărui ieșire poate fi citită prin biblioteca AXI

  1. Creați blocul AXI GPIO făcând clic dreapta pe fundal și făcând clic pe „adăugați IP”

    tastați „AXI_GPIO” în bara de căutare și selectați acest pachet

  2. Re-personalizați IP făcând dublu clic pe noul bloc axi_gpio_1

    1. sub GPIO, bifați caseta „Toate intrările” și setați lățimea GPIO la 32. Această magistrală va fi diferența de timp de sosire între cei doi senzori.
    2. în interiorul blocului axi_gpio_1, faceți clic pe + de lângă portul GPIO pentru a afișa gpio_io_i [31: 0].
  3. Faceți clic dreapta pe portul de ieșire axi_gpio_1 etichetat gpio_io_i [31: 0] și selectați „Make External”

    Faceți clic pe noua intrare etichetată gpio_io_i [31: 0] și navigați la fila „Proprietăți” din bara de instrumente din stânga și schimbați numele în TDOA_val

  4. Selectați Execută automatizarea conexiunii în bannerul verde de deasupra diagramei bloc.

    Dacă conectați manual porturile, este posibil ca adresele AXI să nu fie configurate, ceea ce duce la probleme de comunicare ulterior

  5. În panoul Flug Navigator, selectați manager de proiect -> Adăugați surse pentru a crea un nou bloc IP personalizat

    1. alegeți „adăugați sau creați surse de proiectare” și accesați următoarea
    2. faceți clic pe „creați fișier”, schimbați tipul de fișier la „SystemVerilog” și tastați „tdoa” în câmpul cu numele fișierului, apoi faceți clic pe OK
    3. faceți clic pe Finalizare
    4. ignorați fereastra Definire modul apăsând OK (le vom suprascrie mai târziu)

      dacă vă întreabă dacă sunteți sigur, dați clic pe Da

  6. În fila Surse, faceți dublu clic pe tdoa.sv (aflat în „Design Sources / design_1_wrapper”)

    Copiați / lipiți întregul cod SystemVerilog din fișierul tdoa.txt atașat mai jos

Pasul 4: Împachetarea și exportul Ernie

Împachetarea și exportul Ernie
Împachetarea și exportul Ernie
  1. Verificați dacă diagrama bloc arată ca captura de ecran atașată
  2. În fila Surse, faceți clic dreapta pe design_1.bd și selectați „Creați HDL Wrapper …”

    1. Selectați „Copiați ieșirea generată pentru a permite modificările utilizatorului”, apoi apăsați „OK”
    2. Copiați codul din design_1_wrapper.txt atașat mai jos și lipiți-l în locul codului design_1_wrapper.v generat
    3. salvați design_1_wrapper.v
  3. În fila Surse, faceți dublu clic pe fișierul ZYBO_Master.xdc sub Constraints / constrs1

    1. Copiați codul din ZYBO_Master.txt atașat mai jos și lipiți-l în locul codului ZYBO_Master.xdc existent
    2. Rețineți următorii pini de intrare / ieșire:

      1. L15: semnal PWM pentru motorul din stânga (Pmod JA2 pe Zybo)
      2. L14: semnal PWM pentru motorul potrivit (Pmod JA8 pe Zybo)
      3. V12: intrare poartă de la senzorul de sunet 1 (Pmod JE1 pe Zybo)
      4. K16: intrare poartă de la senzorul de sunet 2 (Pmod JE2 pe Zybo)
  4. În panoul Flug Navigator, faceți clic pe „Generați fluxul de biți” sub Program și depanare

    dacă crezi că s-a făcut imediat, probabil că nu. serios, pregătește niște ceai

  5. Faceți clic pe Fișier-> Export-> Generați hardware

    Bifați „Includeți Bitstream” și apăsați OK

  6. Faceți clic pe Fișier-> Lansare SDK

Pasul 5: Construirea lui Ernie

Clădirea lui Ernie
Clădirea lui Ernie
Clădirea lui Ernie
Clădirea lui Ernie
  1. Montați servomotoarele pe șasiul servo.
  2. Urmând fișa tehnică pentru servos, faceți următoarele:

    1. conectați pământul servomotoarelor la pinii de împământare de pe modelul JA P Zybo (a se vedea imaginea atașată)
    2. conectați știftul de alimentare al servo-urilor la acumulatorul AA

      Am constatat că, atunci când servo-urile sunt conectate la Vdd-ul lui Zybo, placa atrage prea mult curent, determinând placa să se reseteze continuu

    3. conectați pinii de semnal de intrare la pinii de ieșire corespunzători ai Zybo (stânga: JA2, dreapta: JA8)
  3. montați senzorii de sunet în partea din față a șasiului, cu fața în față, menținându-i cât mai aproape posibil
  4. utilizați ghidul de conectare al senzorului de sunet pentru a integra senzorii de sunet

    1. conectați pământul și pinii Vdd ai fiecărui senzor de sunet la sol și pinii Vdd de pe JE Pmod de la Zybo (a se vedea imaginea atașată)
    2. conectați pinul de poartă al senzorului de sunet stâng la JE1
    3. conectați pinul de poartă al senzorului de sunet corect la JE2

Pasul 6: Primul BSP al lui Ernie

Primul BSP al lui Ernie
Primul BSP al lui Ernie
Primul BSP al lui Ernie
Primul BSP al lui Ernie
  1. Creați un BSP pentru a încheia platforma pe care tocmai am creat-o.

    Puteți obține acest lucru prin File -> New -> Board Support Package

  2. Va apărea un vrăjitor pentru a vă ajuta să creați BSP.

    1. Vrem să legăm acest BSP cu platforma noastră pe care tocmai am creat-o, deci
    2. Platforma hardware ar trebui să se alinieze cu cea pe care tocmai am creat-o (vezi imaginea 1)
    3. Procesorul nostru va fi CPU _0.
    4. Faceți clic pe Finalizare
    5. Asigurați-vă că bifați lwip141 pentru a fi inclus în bsp în fereastra care apare (a se vedea imaginea 2)

Pasul 7: Ernie FreeRTOS

  1. Descărcați cea mai recentă versiune FreeRTOS de la Sourceforge.

    Dacă descărcarea este executabilă, rulați-o pentru a extrage fișierele FreeRTOS în directorul de proiect

  2. Păstrați SDK-ul deschis și faceți clic pe Fișier -> Import.
  3. Vrem să facem clic pe General-> Din un spațiu de lucru existent și apoi vom dori să navigăm până unde am descărcat FreeRTOS.
  4. Demo-ul nostru va fi localizat în FreeRTOS / Demo / CORTEX_A9_Zynq_ZC702. La selectarea acestui folder, ar trebui să vedem trei proiecte care apar (codul nostru (OS), este BSP și platforma HW).

    Importați doar RTOSDemo în spațiul dvs. de lucru curent

  5. Pe toate folderele „albastre”, proiectele modifică BSP-ul de referință

    1. Faceți clic dreapta și selectați „Modificați BSP referențiat”.
    2. Selectați BSP-ul pe care tocmai l-ați creat pentru Zybo
    3. Editarea codului în folderele SDK Blue ale Xilinx reprezintă proiectele de coduri reale.

Pasul 8: Importarea codului C al lui Ernie

  1. În directorul RTOSDemo / src, suprascrieți main.c existent cu fișierul main.c atașat aici.
  2. Copiați fișierul main_sound.c în directorul RTOSDemo / src.

Pasul 9: Depanare Ernie

  1. Selectați Executare -> Configurări de depanare
  2. În panoul din stânga, creați o nouă rulare de sistem de depanare
  3. În fila Configurare țintă,

    selectați „Reset Entire System” pentru a selecta atât that, cât și ps7_init

  4. Acum selectați fila Aplicație.

    1. Selectați „descărcați aplicația”
    2. Setați nucleul cortexa9_0 la „oprire la intrarea în program”
    3. Faceți clic pe Aplicare și depanare.
  5. Verificați dacă nu există erori în procesul de depanare
  6. Urmărind atent robotul, apăsați butonul Reluare până când programul rulează fără a atinge niciun punct de întrerupere
  7. Robotul ar trebui să se întoarcă și să se deplaseze către zgomote puternice. Yay!

Pasul 10: Îl face autonom pe Ernie

  1. Odată ce proiectul dvs. este gata (puteți rula fără probleme prin debugger), sunteți gata să îl încărcați pe memoria flash de pe placa dvs.
  2. Creați ceea ce se numește proiectul „first stage boot loader” (FSBL) și conține toate instrucțiunile de care va avea nevoie placa dvs. pentru a încărca fișierele de proiect (fluxul de biți și sistemul de operare) la pornire.

    1. Selectați: Fișier-> Nou-> Proiect de aplicație și ar trebui să apară următoarea fereastră.
    2. Denumiți-l ceea ce doriți (adică „FSBL”)
    3. Asigurați-vă că platforma hardware este cea cu care lucrați
    4. Apăsați următorul (Nu apăsați Finish)
    5. Selectați șablonul Zynq FSBL
    6. Faceți clic pe Terminare.
  3. Odată ce procesul de creare este finalizat, veți ști dacă totul a funcționat dacă vedeți următoarele două foldere noi în fereastra Project Explorer.
  4. Creați o imagine de pornire Acum va trebui să creați imaginea de pornire.

    1. Faceți clic dreapta pe folderul de proiect (în acest caz al meu se numește „RTOSDemo”)
    2. Faceți clic pe „Creați o imagine de pornire” din meniul derulant
    3. Dacă totul este legat corect, proiectul va ști de ce fișiere are nevoie și următoarea fereastră va arăta așa cum vedeți mai jos (cheia fiind că aveți 3 partiții în secțiunea Boot image, bootloader-ul, fișierul dvs. de biți și fișierele dvs..elf).

      Dacă nu este cazul, este posibil să se întâmple ceva în neregulă cu conectarea la proiect. Asigurați-vă că folderele proiectului sunt conectate la BSP-urile respective

    4. Faceți clic pe butonul „Creați imagine”
  5. Ultimul pas pe care trebuie să îl efectuați în software este acum să blocați imaginea creată anterior în memoria plăcii

    1. Selectați din bara principală a instrumentului SDK, selectați Xilinx Tools-> Program Flash Memory
    2. Asigurați-vă că este selectată platforma hardware corectă și că calea fișierului imagine indică corect fișierul. BIN creat în pasul anterior.
    3. Selectați „qspi single” din tipul Flash
    4. Bifați „Verificați după bliț” pentru a asigura integritatea, dar nu este necesar
  6. Configurați-vă placa În cele din urmă, trebuie să vă asigurați că jumperul de mod de programare a plăcilor (JP5) este setat corect pentru a selecta pornirea din qspi (care conține ceea ce tocmai ați aprins) când este rulat BootROM.
  7. Acum pur și simplu alimentați dispozitivul și asigurați-vă că „LED-ul de configurare logică terminat” (LED 10) este aprins în verde.

Pasul 11: Facerea lui Ernie Cute

  1. Blană
  2. Multă blană
  3. Ochi mari!
  4. … pălărie de top

Recomandat: