Sisukord:

ZYBO OV7670 kaamera koos panoraami/kallutamise juhtimisega: 39 sammu (piltidega)
ZYBO OV7670 kaamera koos panoraami/kallutamise juhtimisega: 39 sammu (piltidega)

Video: ZYBO OV7670 kaamera koos panoraami/kallutamise juhtimisega: 39 sammu (piltidega)

Video: ZYBO OV7670 kaamera koos panoraami/kallutamise juhtimisega: 39 sammu (piltidega)
Video: wireless OV7670 CAMERA&&STM32 2024, Juuli
Anonim
Image
Image
ZYBO OV7670 kaamera panoraami/kallutamise juhtimisega
ZYBO OV7670 kaamera panoraami/kallutamise juhtimisega

Alustage esimesest sammust, et saada teavet 2-teljelise servo PWM-kontrolleri loomise kohta.

Alustage kogu projekti ulatuslikust plokkskeemist (samm 19).

Kaamera + panoraami/kallutamise seadistus, mida kasutasime:

Servode ühendamiseks kasutati Digilent'i PmodCON3.

Samm: PWM-mooduli lähtefaili loomine

2. samm: PWM-mooduli loomine- Vivado häälestus

PWM-mooduli ehitamine- Vivado häälestus
PWM-mooduli ehitamine- Vivado häälestus

Esiteks laadige Xilinxi veebisaidilt alla Vivado Design Suite. Installige kogu disainikomplekt, sealhulgas Vivado tarkvaraarenduskomplekt (SDK). See projekt kasutab versiooni 2017.2.

Vahepeal tuleks Digilent Adept 2 installida ka Zybo plaadi draiveriks.

3. samm: PWM-mooduli loomine- looge projektifail

PWM-mooduli loomine- looge projektifail
PWM-mooduli loomine- looge projektifail

Enne projektifaili loomist veenduge, et olete siin juba õpetuseks Zybo faili õigesti installinud:

Vivado versioon 2015.1 ja uuemad tahvelfailide installimine

Avage Vivado 2017.2. Klõpsake kiirkäivitusel nuppu Loo projekt -> Järgmine -> Projekti nimi (nimetage siin oma projekti nimi) -> Projekti tüüp. Valige projekti tüübist RTL -projekt ja märkige ruut „Ärge määrake allikaid praegu”. Seejärel valige vaikeosa jaoks kuvatavaks nimeks „Lauad” ja „Zybo”. Seejärel klõpsake projekti alustamiseks nuppu Lõpeta.

Samm 4: PWM-mooduli loomine- plokkide kujundus ja piirangute seadistus (I)

PWM-mooduli loomine- plokkide disain ja piirangute seadistus (I)
PWM-mooduli loomine- plokkide disain ja piirangute seadistus (I)

Klõpsake Flow Navigatoris nuppu "" Loo ploki kujundus "ja vajutage nuppu OK. vajalike IP -de lisamiseks klõpsake "+" märki. Lisama:

  • Üks ZYNQ7 töötlussüsteem Kaks AXI taimerit
  • Kaks AXI taimerit

5. samm: PWM-mooduli loomine- plokkide kujundus ja piirangute seadistus (II)

PWM-mooduli loomine- plokkide kujundus ja piirangute seadistus (II)
PWM-mooduli loomine- plokkide kujundus ja piirangute seadistus (II)

Pärast IP -de lisamist käivitage plokkide automatiseerimine ja ühenduse automatiseerimine. Kui automatiseerimine on lõpule viidud, paremklõpsake plokil “axi_timer_0” nuppu pwm0 -> Tee väline. Pange välisele tihvtile pwm0 nimi pwm_Xaxis. Samuti korrake ülaltoodud protsessi plokil „axi_timer_1” ja nimetage pwm0 väline tihvt pwm_Zaxis.

6. etapp: PWM-mooduli loomine- plokkide kavandamine ja piirangute seadistamine (III)

PWM-mooduli loomine- plokkide disain ja piirangute seadistus (III)
PWM-mooduli loomine- plokkide disain ja piirangute seadistus (III)

Pange tähele, et iga kord, kui lõpetame plokkide kujundamise Vivados, peame looma HDL -ümbrise. Kuna see on iga projekti tipptasemel moodul.

Samm 7: PWM-mooduli ehitamine- plokkide kavandamine ja piirangute seadistamine (IV)

PWM-mooduli ehitamine- plokkide kujundus ja piirangute seadistus (IV)
PWM-mooduli ehitamine- plokkide kujundus ja piirangute seadistus (IV)

Nüüd peame seadistama oma piirangute faili, et määrata meie plokkskeemiga ühendatud tihvtid. Sulgege aken Blokeeri kujundus, vahekaardil Allikad, „Lisa allikaid”-> Lisage või looge piiranguid-> lisage Zybo-Master.xdc meie piirangute failidena.

8. samm: PWM-mooduli loomine- plokkide kujundus ja piirangute seadistus (V)

PWM-mooduli ehitamine- plokkide kujundus ja piirangute seadistus (V)
PWM-mooduli ehitamine- plokkide kujundus ja piirangute seadistus (V)

Avage piirangute fail Zybo-Master.xdc kaustast Piirangud, tühistage pordid, mida soovime väljundsignaalidena määrata, ja nimetage ümber „get_ports {XXXX}”, mis tähistab plokkskeemil nimetatud välist tihvti. Piirangute faili seadistus on näidatud joonisel.

9. samm: PWM-mooduli ehitamine- riistvara installimine

PWM-mooduli ehitamine- riistvara installimine
PWM-mooduli ehitamine- riistvara installimine

Ühendage servomootorid seadmega Pmod CON3. TowerPro SG90 on selles projektis kasutatud servomootori mudel. Servomootori juhtmete puhul tähistab oranž juhe PWM -signaali, mis on ühendatud PIG CON3 SIG -tihvtiga. Punane juhe Vcc on toitejuhe, mis on ühendatud VS -pistikuga Pmod CON3 -s. Lõpuks on pruun traat Gnd maandusjuhe, mis on ühendatud GND tihvtiga. Seejärel sisestage Pmod CON3 Zybo Boardi JD -pordi ülemisele reale.

10. samm: PWM-mooduli loomine- looge bitivoo ja käivitage SDK

1. Käivitage vahekaardil Project Navigator käsk Generate BitStream.

2. Riistvara eksport: Fail> Eksport> Ekspordi riistvara-> märkige ruut „kaasata bitivool”-> OK 3. Käivitage SDK: Fail-> Käivitage SDK.

11. samm: PWM-mooduli loomine- looge Xilinxi SDK-s uus rakendus

PWM-mooduli loomine- looge Xilinxi SDK-s uus rakendus
PWM-mooduli loomine- looge Xilinxi SDK-s uus rakendus

Looge uus rakendus:

Fail> Uus> Rakendusprojekt -> Sisestage oma projekti nimi -> Lõpeta

Project Exploreri all peaks olema kolm kausta.

Sel juhul on „design_1_wrapper_hw_platform_0” Vivado varem eksporditud kaust. Axis_2_PWM_SDK_bsp on plaadi tugipaketi kaust. Ja Axis_2_PWM_SDK on meie peamine projekti kaust SDK -s. Faili „helloworld.c” näete Axis_2_PWM_SDK kausta „src” all, kus põhifail on „helloworld.c”.

12. samm: PWM-mooduli loomine- ülevaade Project Explorerist (I)

PWM-mooduli loomine- ülevaade Project Explorerist (I)
PWM-mooduli loomine- ülevaade Project Explorerist (I)

Kontrollime mõningaid faile Project Exploreris. Esiteks avage kaustas „design_1_wrapper_hw_platform_0” kaust „system.hdf”. See fail näitab protsessori ps7_cortex9 aadressikaarti ja meie disainis olevaid IP -plokke.

13. samm: PWM-mooduli loomine- ülevaade Project Explorerist (II)

PWM-mooduli loomine- ülevaade Project Explorerist (II)
PWM-mooduli loomine- ülevaade Project Explorerist (II)

Seejärel kontrollige kausta „Axis_2_PWM_SDK_bsp” all olevaid faile „include” ja „libsrc”. Siin olevad raamatukogufailid võimaldavad meil suhelda riistvara välisseadmetega ilma registreid "mängimata".

14. samm: PWM-mooduli loomine- ülevaade Project Explorerist (III)

PWM-mooduli loomine- ülevaade Project Explorerist (III)
PWM-mooduli loomine- ülevaade Project Explorerist (III)

BSP dokumentatsiooni kaudu leitakse xtmrctr.h AXI taimeriga seotud Xilinxi taimerijuhtimisteegina. Tavaliselt leiame siit soovitud PWM -funktsiooni. Kui aga loete dokumentatsiooni „tmrctr_v4_3”, näitab see, et draiver ei toeta praegu seadme PWM -toimingut. PWM -funktsiooni puudulikkuse tõttu peame oma PWM -funktsiooni lõpetama xtmrctr.h ja AXI Timer v2.0 LogiCORE IP tootejuhendi abil.

Samm 15: PWM-mooduli loomine- PWM-funktsiooni mähis (I)

PWM-mooduli loomine- PWM-funktsiooni mähis (I)
PWM-mooduli loomine- PWM-funktsiooni mähis (I)

Tagasi põhifaili "helloworld.c" juurde kaasake järgmised päisefailid:

16. etapp: PWM-mooduli loomine- PWM-funktsiooni pakkimine (II)

PWM-mooduli loomine- PWM-funktsiooni pakkimine (II)
PWM-mooduli loomine- PWM-funktsiooni pakkimine (II)

Määrake kahe AXI TImeri baasaadressid jaotises „xparameters.h”.

17. etapp: PWM-mooduli loomine- PWM-funktsiooni pakkimine (III)

PWM-mooduli ehitamine- PWM-funktsiooni pakkimine (III)
PWM-mooduli ehitamine- PWM-funktsiooni pakkimine (III)

Looge soovitud PWM -funktsioon.

Duty_val: teisendab kraadiväärtuse töötsükliks. PWM_Freq_Duty: määrake soovitud sagedus ja töötsükkel PWM -i genereerimiseks. Samuti tuleks määrata kellaaeg.

PWM_START: määrake PWM -registriaadress ja alustage PWM -i genereerimist.

PWM_STOP: määrake PWM -registriaadress ja lõpetage PWM -i genereerimine.

Ülejäänud demokood kuvatakse jaotises „helloworld.c” jaotises „Axis_2_PWM_SDK”

18. samm: PWM-mooduli ehitamine- käivitage see

1. Programmeerige FPGA SDK kaudu

  • Ühendage Zybo Board USB -pordi kaudu arvutiga.
  • Xilinxi tööriistad -> Programmeerige FPGA

2. Käivitage programm

Klõpsake ikooni „Käivita“ja rippmenüüst -> Käivita kui -> Käivita riistvaral

3. SDK terminal

  • Avage SDK -terminal -> Ühenda jadapordiga -> OK
  • Käivitage programm. Kui demokood töötab edukalt, peaksite nägema teksti „Initsialiseerimine tehtud!” SDK terminalis.

19. samm: videotöötluse voogesitus Digilent ZYBO -s OV7670 abil

Lisatud täielik arhiivifail.

Samm: täitke plokkskeem

Täielik plokkskeem
Täielik plokkskeem

See näitab projekti kõigi ühenduste ja IP -plokkide täielikku skeemi

Samm: ühendage OV7670 ZYBO -ga

Ühendage OV7670 ZYBO -ga
Ühendage OV7670 ZYBO -ga

Looge ühendus ov7670 mooduli ühendamiseks ZYBO Pmodidega

Andmed Pmod on Pmod D.

Kontroll Pmod on Pmod C

Lisaks ühendage PmodCON3 ja servod, nagu on kirjeldatud selle õpetuse esimeses pooles

22. samm: looge plokkide kujundus

Loo plokkide kujundus
Loo plokkide kujundus

Klõpsake Flow Navigatoris nuppu "Loo plokkide kujundus", seejärel vajutage OK.

23. toiming: lisage VHDL -failid OV7670 kaamera juhtimiseks ja jäädvustamiseks

Lisage projektile selle sammu juurde lisatud VHDL -failid

Samm: lisage piirangute fail

Lisage projektile lisatud piirangute fail.

Samm: lisage HLS IP jaoks IP Repo

Lisage HLS IP jaoks IP Repo
Lisage HLS IP jaoks IP Repo

Võtke lisatud Zip -fail ja pakkige see uude kausta, mis on sarnaselt nimega uues kataloogis (kaustas) nimega "HLS_repo".

Lisage oma projektile IP-hoidla, minnes IP-kataloogi ja paremklõpsake, valides "Lisa hoidla …"

Liikuge oma kataloogi "HLS_repo" ja valige see.

Valikuline: looge endale HLS videotöötlusplokk!

Samm: lisage moodulid ja IP

Lisage moodulid ja IP
Lisage moodulid ja IP
Lisage moodulid ja IP
Lisage moodulid ja IP

Lisage moodulid ov7670_axi_stream_capture, debounce ja ov7670_controller plokkskeemile, paremklõpsates taustal ja valides "Lisa moodul …"

Samamoodi lisage IP -d:

  • HLS_Video_Track
  • Video Frame Buffer Write
  • Videokaadri puhverlugemine
  • Video ajastamise kontroller
  • AXI4-Stream videoväljundiks
  • "Lõik" 3
  • Pidev
  • 2 AXI taimerist

Samm 27: IP -konfiguratsiooniseaded

IP konfiguratsiooniseaded
IP konfiguratsiooniseaded
IP konfiguratsiooniseaded
IP konfiguratsiooniseaded
IP konfiguratsiooniseaded
IP konfiguratsiooniseaded

Nagu piltidel näidatud

Samm: lisage ja konfigureerige PS IP -blokeering

Lisage ja seadistage PS IP -blokeering
Lisage ja seadistage PS IP -blokeering
Lisage ja seadistage PS IP -blokeering
Lisage ja seadistage PS IP -blokeering

Lisage plokkskeemile töötlemissüsteem ZYNQ7

muutke konfiguratsiooni:

  • PS-PL konfiguratsioon

    • HP

      • Luba S HP 0
      • Luba S HP 1
  • Kella konfiguratsioon

    • PL kangast kellad

      • FCLK_0 sagedusel 100 MHz
      • FCLK_1 sagedusel 25 MHz (väljundkell)
      • FLCK_2 sagedusel 35 MHz (<= 50 MHz) (CameraClock)

Samm 29: 1. osa. PWM -mooduli ehitamine servomootoritele

Tooge axi_timer_0 pwm0 uude väljundporti pwm_Xaxis

Tooge axi_timer_1 pwm0 uude väljundporti pwm_Zaxis

30. samm: videosisendi külgühendused (esile tõstetud)

Videosisendi külgühendused (esile tõstetud)
Videosisendi külgühendused (esile tõstetud)

Ühendage videosisendipoolsed IP -plokid õigesti

(* need ühendused tuleks luua, valides ühenduse automatiseerimise ajal õiged valikud) "aclk" axi_stream_capture'ist läheb aadressile:

  • ap_clk videokaadri puhver kirjutada
  • ap_clk HLS videovoo töötlemise plokis
  • *aclk AXI smartconnect IP -l videokaadri puhverist Kirjutage aadressile S_AXI_HP0
  • *Aclk, mis vastab AXI Interconnect IP kanalitele HLS videotöötlusploki S_AXI kanalite ja videokaadri puhver jaoks, kirjutage PS -plokile S_AXI_HP0_ACLK

Videovoo signaal on lihtsalt järjestikku ühendatud võtteplokist Zynqi mäluliidesesse.

  • Video läheb salvestusplokist HLS -i töötlusplokki.
  • HLS -plokist töödeldud video läheb kaadripuhvri kirjutamisplokki.
  • *Kaadripuhvri kirjutusplokk ühendub Zynq PS ploki HP0 liidesega.
  • Püüdmisploki väljundist saadav m_axis_tuser signaal ühendatakse käsitsi nii HLS töötlusploki video_in_TUSER sisendsignaaliga kui ka samas plokis oleva ap_start signaaliga.

AXI videovoo protokoll kasutab signaali TUSER (tuser), et näidata video kaadri algust. AP_Start käsib HLS -plokil töötlemist alustada. Seega kasutame kasutajat, et käivitada HLS -plokk, et töödelda iga kaadrit sellisena, nagu see on Siini ühe signaali ühendamisel ja sel viisil eraldamisel tuleb see ühendada ka ülejäänud bussi tavalise lõpp -punktiga. Vivado eeldab, et kui ühendate signaali käsitsi, soovite lahti ühendada selle, millega see tavaliselt ühenduks.

IP -plokkide konfiguratsiooniseaded:

Videokaadri puhver kirjutage:

Videoformaadid: RGB8

1 näidis kella kohta Maksimaalsed veerud: 1280 (> = 640) Maksimaalsed read: 960 (> = 480) Maksimaalne andmete laius: 8

Samm: ühendused OV7670 -ga

Ühendused OV7670 -ga
Ühendused OV7670 -ga

Blokil ov7670_axi_stream_capture

  • Tehke kõik sisendid väliseks (paremklõpsake tihvti ja valige menüüst või vasakklõps-> ctrl+T)
  • Jätke nimed nii, nagu need on

Kontrolleriplokil ov7670_

  • Muutke kõik plokiväljundid väliseks
  • Nimetage port config_finished ümber led0 -ks
  • ühendage clk CameraClockiga (<= 50MHz) (FCLK_2)

Tagasilöögiplokil

  • ühendage nupp1 sisend välise sisendpordiga btn0
  • ühendage out1 ov7670_controller IP -ploki uuesti saatmisliiniga
  • ühendage button2 sisend välise sisendpordiga btn3
  • ühendage out2n video jäädvustamise kella domeeni protsessori süsteemi lähtestamise IP sisendiga ext_reset_in. (*Seda tuleb võib -olla teha pärast seda, kui IP on loodud*)
  • ühendage clk CameraClockiga (<= 50MHz) (FCLK_2)

Samm 32: Ühendused video väljundis

Ühendused video väljundi poolel
Ühendused video väljundi poolel
Ühendused video väljundi poolel
Ühendused video väljundi poolel
Ühendused video väljundi poolel
Ühendused video väljundi poolel
Ühendused video väljundi poolel
Ühendused video väljundi poolel

Ühendused plokkidele Video Timing Controller (VTC), AXI4-Stream to Video Out ja viilud

  • Kasutage vid_io_out_clk ja VTC clk jaoks 25MHz kella (FCLK_1)
  • Kasutage 100MHz kella (FCLK_0) AXI4-Streami videoväljundiks
  • vtiming_out kuni vtiming_in
  • Videokaadri puhver Loe m_axis_video läheb AXI4-Streami videoväljundisse video_in
  • vtg_ce läheb gen_clken
  • Seosta VTC ummistunud, aklken, vid_io_out_ce konstantse doutiga [0: 0]
  • Tooge vid_hsync ja vid_vsync vastavalt välistele väljundportidele vga_hs ja vga_vs. (pole pildil)

Viilud:

  • Viilud tuleb seadistada nii, nagu on näidatud lisatud piltidel

    • nimetage plokid ümber viiludeks -punasteks, viilude_rohelisteks ja viilude_sinisteks
    • häälestusviilude vahemikud, nagu on näidatud piltidel ploki nime järgi
    • ühendage iga viilu väljund välise pordi väljundiga, nagu pildil näidatud.
  • vid_data [23: 0] ühendub iga viilu sisenditega (Din [23: 0])

Samm 33: käivitage plokkide ja ühenduse automatiseerimine

Käivitage plokk ja ühenduse automatiseerimine
Käivitage plokk ja ühenduse automatiseerimine
Käivitage plokk ja ühenduse automatiseerimine
Käivitage plokk ja ühenduse automatiseerimine
Käivitage plokk ja ühenduse automatiseerimine
Käivitage plokk ja ühenduse automatiseerimine

Käivitage plokkide automatiseerimine, et ühendada asjad ZYNQ7 PS plokist. Nagu pildilt näha.

Käivitage ühenduse automaatika, et luua kogu ühendus -IP. Pöörake tähelepanu iga pildi kõikidele võimalustele.

Tagasilöögiplokil ühendage out2n videosalvestuskella domeeni protsessorisüsteemi lähtestamisega ext_reset_in.

Samm: looge HDL -pakend

Loo HDL -pakend
Loo HDL -pakend

Looge oma plokkide jaoks HDL -pakend.

Seadke see ülemiseks mooduliks.

Samm: looge bitivoo, eksportige riistvara SDK -sse, käivitage SDK Vivadost

Lisage eksportimisel kindlasti ka bitivool.

Bitivoo genereerimine võib võtta väga kaua aega.

Seejärel käivitage SDK

36. samm: SDK (FreeRTOS puudub)

SDK (FreeRTOS puudub)
SDK (FreeRTOS puudub)

See versioon teeb kõike ilma FreeRTOS -i kasutamata, kondenseerides koodi kenasti.

Looge riistvara disainil põhinev eraldiseisev BSP. Vaikevalikud peaksid olema korras. Veenduge, et BSP -allikad on loodud.

Looge rakendus, nagu on näidatud pildil. (tühi rakendus)

Kustutage automaatselt loodud peamine ja importige manustatud failid.

37. samm: FreeRTOS -i juurutamine

FreeRTOS rakendamine
FreeRTOS rakendamine

See versioon kasutab FreeRTOS -i. Looge FreeRTOS901 BSP riistvara disaini põhjal. Vaikevalikud peaksid olema korras. Veenduge, et BSP -allikad on loodud.

Looge rakendus, nagu on näidatud pildil. (tühi rakendus)

Kustutage automaatselt loodud peamine ja importige manustatud failid.

Samm 38: Kasutusjuhised

Selle projekti käivitamine on natuke keeruline. Järgige samme järjekorras.

Veenduge, et teie ZYBO ei laadiks sisselülitamisel midagi ise. See tähendab, et Valmis LED ei peaks süttima. Üks võimalus seda teha on seada alglaadimisallika hüppaja asendisse JTAG.

Avage projekt (FreeRTOS või mitte), mida soovite SDK -st programmeerida

  1. Lülitage ZYBO sisse. Valmis LED ei tohiks süttida.
  2. Programmeerige FPGA bitifailiga. Valmis LED peaks süttima. Led0 ei tohiks süttida.
  3. Käivitage kood (kui te seda teete, pidage meeles, et lähete alguspunktist mööda).

Sel hetkel peaksite oma VGA -ekraanile väljundi saama.

Taaskäivitamiseks (kui see vigastab või mida iganes): puudutage kiiresti nuppu PS-SRST või lülitage ZYBO välja ja uuesti sisse. Jätkake sammust 2.

Protsessori peatamine siluriga viib kaamera liikumise asemel asendisse. Videovoog jätkub niikuinii.

Samm 39: Viited ja lingid

Xilinxi juhendid ja dokumentatsioon:

  • PG044 - AXI -Stream videoväljundiks
  • PG278 - Videokaadri puhver lugemiseks/kirjutamiseks

Muud lingid:

  • Lauri blogi - VDMA sisend
  • Lauri blogi - OV7670 VGA väljundisse, kasutades BRAM -i
  • Hamsterworks wiki, autor Mike Fields, OV7670 koodi algallikas
  • Andmeleht, mis näitab põhilisi ajastuspiiranguid

Soovitan: