Kazalo:

Kamera ZYBO OV7670 z nadzorom pomika/nagiba: 39 korakov (s slikami)
Kamera ZYBO OV7670 z nadzorom pomika/nagiba: 39 korakov (s slikami)

Video: Kamera ZYBO OV7670 z nadzorom pomika/nagiba: 39 korakov (s slikami)

Video: Kamera ZYBO OV7670 z nadzorom pomika/nagiba: 39 korakov (s slikami)
Video: Camera Tracking 2024, Julij
Anonim
Image
Image
Fotoaparat ZYBO OV7670 s funkcijo Pan/tilt Control
Fotoaparat ZYBO OV7670 s funkcijo Pan/tilt Control

Začnite pri prvem koraku za podrobnosti o samo ustvarjanju dvoosnega servo krmilnika PWM.

Začnite pri obsežnem blokovnem diagramu (korak 19) za celoten projekt.

Nastavitev kamere + pomik/nagib, ki smo jo uporabili:

PmodCON3 podjetja Digilent je bil uporabljen za povezavo servomotorjev.

1. korak: Izdelava modula PWM- izvorna datoteka

2. korak: Izdelava modula PWM- nastavitev Vivada

Izdelava modula PWM- nastavitev Vivado
Izdelava modula PWM- nastavitev Vivado

Najprej prenesite programsko opremo Vivado Design Suite s spletnega mesta Xilinx. Namestite vso oblikovalsko zbirko, vključno s kompletom za razvoj programske opreme Vivado (SDK). Ta projekt uporablja različico 2017.2.

Medtem je treba Digilent Adept 2 namestiti tudi kot gonilnik za ploščo Zybo.

3. korak: Izdelava modula PWM- Ustvarite datoteko projekta

Izdelava modula PWM- Ustvarite datoteko projekta
Izdelava modula PWM- Ustvarite datoteko projekta

Preden ustvarite datoteko projekta, se prepričajte, da ste datoteko Zybo že pravilno namestili kot vadnico tukaj:

Namestitev datoteke plošče Vivado različice 2015.1 in novejše

Odprite Vivado 2017.2. Ob hitrem zagonu kliknite Ustvari projekt -> Naprej -> Ime projekta (tukaj poimenujte ime svojega projekta) -> Vrsta projekta. Pri Vrsta projekta izberite RTL Project in označite »Trenutno ne navajajte virov«. Nato za privzeti del kot prikazno ime izberite “Boards” in “Zybo”. Nato kliknite Dokončaj, da začnete projekt.

4. korak: Izdelava modula PWM- Oblikovanje bloka in nastavitev datoteke omejitev (I)

Izdelava modula PWM- Oblikovanje bloka in nastavitev datoteke omejitev (I)
Izdelava modula PWM- Oblikovanje bloka in nastavitev datoteke omejitev (I)

Na Flow Navigatorju kliknite “” Create Block Design “, nato pritisnite OK. kliknite znak "+", da dodate potrebne IP -je. Dodaj:

  • En procesorski sistem ZYNQ7 Dva časovnika AXI
  • Dva AXI timerja

5. korak: Izdelava modula PWM- Oblikovanje bloka in nastavitev datotek omejitev (II)

Izdelava modula PWM- Oblikovanje bloka in nastavitev datotek omejitev (II)
Izdelava modula PWM- Oblikovanje bloka in nastavitev datotek omejitev (II)

Po dodajanju IP -jev zaženite avtomatizacijo blokov in avtomatizacijo povezav. Ko je avtomatizacija končana, v bloku »axi_timer_0« z desno tipko miške kliknite pwm0 -> Make External. Poimenujte zunanji zatič pwm0 kot pwm_Xaxis. Prav tako ponovite zgornji postopek na bloku "axi_timer_1" in poimenujte zunanji zatič pwm0 kot pwm_Zaxis.

Korak 6: Izdelava modula PWM- Oblikovanje bloka in nastavitev datotek omejitev (III)

Izdelava modula PWM- Oblikovanje bloka in nastavitev datoteke omejitev (III)
Izdelava modula PWM- Oblikovanje bloka in nastavitev datoteke omejitev (III)

Upoštevajte, da moramo vsakič, ko končamo Block Design v Vivadu, ustvariti HDL Wrapper. Ker bo to modul najvišje ravni za vsak projekt.

7. korak: Izdelava modula PWM- Oblikovanje bloka in nastavitev datotek omejitev (IV)

Izdelava modula PWM- Oblikovanje blokov in nastavitev datotek omejitev (IV)
Izdelava modula PWM- Oblikovanje blokov in nastavitev datotek omejitev (IV)

Zdaj moramo nastaviti datoteko omejitev za dodelitev zatičev, povezanih z našim blokovnim diagramom. Zaprite okno Oblikovanje blokov, na zavihku Viri, »Dodaj vire«-> Dodaj ali ustvari omejitve-> dodaj Zybo-Master.xdc kot naše datoteke omejitev.

8. korak: Izdelava modula PWM- Oblikovanje bloka in nastavitev datotek omejitev (V)

Izdelava modula PWM- Oblikovanje bloka in nastavitev datoteke omejitev (V)
Izdelava modula PWM- Oblikovanje bloka in nastavitev datoteke omejitev (V)

Odprite datoteko omejitev Zybo-Master.xdc iz mape Omejitve, odkomentirajte vrata, ki jih želimo določiti kot izhodne signale, in preimenujte »get_ports {XXXX}«, ki XXXX označuje zunanji pin, imenovan v blokovnem diagramu. Nastavitev datoteke omejitev je prikazana na sliki.

9. korak: Izdelava modula PWM- Namestitev strojne opreme

Izdelava modula PWM- Namestitev strojne opreme
Izdelava modula PWM- Namestitev strojne opreme

Servo motorje priključite na Pmod CON3. TowerPro SG90 je model servo motorja, ki smo ga uporabili v tem projektu. Za žice servo motorja oranžna žica predstavlja signal PWM, priključen na pin SIG v Pmod CON3. Rdeča žica Vcc je napajalna žica, priključena na pin VS v Pmod CON3. Končno je rjava žica Gnd ozemljitvena žica, priključena na zatič GND. Nato vstavite Pmod CON3 v zgornjo vrsto vrat JD na plošči Zybo.

10. korak: Izdelava modula PWM- Ustvarite bitstream in zaženite SDK

1. Na zavihku Project Navigator zaženite Generate BitStream.

2. Izvozi strojno opremo: Datoteka> Izvozi> Izvozi strojno opremo-> označite »vključi bitni tok«-> V redu 3. Zaženite SDK: Datoteka-> Zaženi SDK.

11. korak: Izdelava modula PWM- Ustvarite novo aplikacijo v SDK za Xilinx

Izdelava modula PWM- Ustvarite novo aplikacijo v Xilinx SDK
Izdelava modula PWM- Ustvarite novo aplikacijo v Xilinx SDK

Ustvarite novo aplikacijo:

Datoteka> Novo> Aplikacijski projekt -> Vnesite ime svojega projekta -> Dokončaj

Pod Project Explorerjem bi morale biti tri mape.

V tem primeru je »design_1_wrapper_hw_platform_0« mapa, ki jo je Vivado predhodno izvozilo. Axis_2_PWM_SDK_bsp je mapa paketa za podporo plošče. Axis_2_PWM_SDK je naša glavna projektna mapa v SDK -ju. Datoteko »helloworld.c« si lahko ogledate v mapi »src« v Axis_2_PWM_SDK, kjer je »helloworld.c« glavna datoteka.

12. korak: Izdelava modula PWM- Pregled raziskovalca projektov (I)

Izdelava modula PWM- Pregled raziskovalca projektov (I)
Izdelava modula PWM- Pregled raziskovalca projektov (I)

Preverimo nekaj datotek v Raziskovalcu projektov. Najprej v mapi »design_1_wrapper_hw_platform_0« odprite »system.hdf«. Ta datoteka prikazuje zemljevid naslovov za procesor ps7_cortex9 in bloke IP, ki so prisotni v naši zasnovi.

13. korak: Izdelava modula PWM- Pregled raziskovalca projektov (II)

Izdelava modula PWM- Pregled raziskovalca projektov (II)
Izdelava modula PWM- Pregled raziskovalca projektov (II)

Nato preverite datoteke »include« in »libsrc« v mapi »Axis_2_PWM_SDK_bsp«. Knjižnične datoteke tukaj nam omogočajo interakcijo s zunanjimi napravami strojne opreme brez registrov "predvajanja".

Korak 14: Izdelava modula PWM- Pregled raziskovalca projektov (III)

Izdelava modula PWM- Pregled raziskovalca projektov (III)
Izdelava modula PWM- Pregled raziskovalca projektov (III)

V dokumentaciji BSP najdemo xtmrctr.h kot knjižnico za nadzor časovnika Xilinx, ki je povezana s časovnikom AXI. Običajno lahko tukaj najdemo želeno funkcijo PWM. Če pa preberete dokumentacijo »tmrctr_v4_3«, to kaže, da gonilnik trenutno ne podpira delovanja PWM naprave. Zaradi pomanjkanja funkcije PWM moramo svojo funkcijo PWM zaključiti s pomočjo xtmrctr.h in AXI Timer v2.0 LogiCORE IP Product Guide.

Korak 15: Izdelava modula PWM- Zaključek funkcije PWM (I)

Izdelava modula PWM- zaključek funkcije PWM (I)
Izdelava modula PWM- zaključek funkcije PWM (I)

Nazaj na glavno datoteko »helloworld.c« vključite naslednje datoteke z glavo:

Korak 16: Izdelava modula PWM- Zaključek funkcije PWM (II)

Izdelava modula PWM- zaključek funkcije PWM (II)
Izdelava modula PWM- zaključek funkcije PWM (II)

Določite osnovne naslove dveh AXI TImer prek »xparameters.h«.

Korak 17: Izdelava modula PWM- Zaključek funkcije PWM (III)

Izdelava modula PWM- zaključek funkcije PWM (III)
Izdelava modula PWM- zaključek funkcije PWM (III)

Ustvarite želeno funkcijo PWM.

Duty_val: pretvori vrednost stopnje v delovni cikel. PWM_Freq_Duty: nastavi želeno frekvenco in delovni cikel za ustvarjanje PWM. Določiti je treba tudi časovno obdobje.

PWM_START: dodelite naslov registra PWM in začnite ustvarjati PWM.

PWM_STOP: dodelite naslov registra PWM in ustavite generiranje PWM.

Preostala demo koda je prikazana v “helloworld.c” pod “Axis_2_PWM_SDK”

Korak 18: Izdelava modula PWM- zaženite ga

1. Programirajte FPGA prek SDK

  • Priključite Zybo Board prek vrat USB na računalnik.
  • Orodja Xilinx -> Program FPGA

2. Zaženite program

Kliknite ikono »Zaženi« in spustite meni -> Zaženi kot -> Zaženi na strojni opremi

3. Terminal SDK

  • Odprite terminal SDK -> Poveži se s serijskimi vrati -> V redu
  • Zaženite program. Če se predstavitvena koda uspešno zažene, bi morali videti »Inicializacija končana!« na terminalu SDK.

Korak 19: Pretakanje video obdelave na Digilent ZYBO z OV7670

Priložena celotna arhivska datoteka.

20. korak: Celoten blokovni diagram

Celoten blok diagram
Celoten blok diagram

To prikazuje celoten diagram vseh povezav in blokov IP v projektu

Korak 21: Priključite OV7670 na ZYBO

Priključite OV7670 na ZYBO
Priključite OV7670 na ZYBO

Ustvarite povezavo za priključitev modula ov7670 na ZYBO Pmods

Podatki Pmod so Pmod D

Krmilni Pmod je Pmod C

Poleg tega priključite PmodCON3 in servomotorje, kot je določeno v prvi polovici te vadnice

Korak: Ustvarite oblikovanje blokov

Ustvarite oblikovanje blokov
Ustvarite oblikovanje blokov

V Flow Navigatorju kliknite "Ustvari zasnovo bloka", nato pritisnite OK.

23. korak: Dodajte datoteke VHDL za nadzor in snemanje kamere OV7670

V projektu dodajte datoteke VHDL, priložene temu koraku

Korak: Dodajte datoteko omejitev

V projekt dodajte priloženo datoteko omejitev.

Korak: Dodajte IP Repo za IP HLS

Dodajte IP Repo za IP HLS
Dodajte IP Repo za IP HLS

Vzemite priloženo datoteko Zip in jo razpakirajte v novo mapo, imenovano podobno v novem imeniku (mapi), imenovanem "HLS_repo".

V svoj projekt dodajte skladišče IP, tako da odprete katalog IP in z desno tipko miške kliknete »Dodaj skladišče…«

Pomaknite se do imenika "HLS_repo" in ga izberite.

Izbirno: Ustvarite blok za obdelavo videa HLS zase!

Korak 26: Dodajte module in IP

Dodajte module in IP
Dodajte module in IP
Dodajte module in IP
Dodajte module in IP

Modulom ov7670_axi_stream_capture, debounce in ov7670_controller dodajte blokovni diagram tako, da z desno tipko miške kliknete ozadje in izberete "Dodaj modul …"

Podobno dodajte IP -je:

  • HLS_Video_Track
  • Zapisovanje medpomnilnika video okvirja
  • Branje medpomnilnika video okvirja
  • Krmilnik časa za video
  • AXI4-tok za video izhod
  • 3 "rezine"
  • Konstantno
  • 2 časovnika AXI

Korak 27: Nastavitve konfiguracije IP

Nastavitve konfiguracije IP
Nastavitve konfiguracije IP
Nastavitve konfiguracije IP
Nastavitve konfiguracije IP
Nastavitve konfiguracije IP
Nastavitve konfiguracije IP

Kot je prikazano na slikah

Korak 28: Dodajte in konfigurirajte PS IP Block

Dodajte in konfigurirajte PS IP Block
Dodajte in konfigurirajte PS IP Block
Dodajte in konfigurirajte PS IP Block
Dodajte in konfigurirajte PS IP Block

V blok diagram dodajte procesni sistem ZYNQ7

uredi konfiguracijo:

  • Konfiguracija PS-PL

    • HP

      • Omogoči S HP 0
      • Omogoči S HP 1
  • Konfiguracija ure

    • Ura iz tkanine PL

      • FCLK_0 pri 100 MHz
      • FCLK_1 pri 25 MHz (OutputClock)
      • FLCK_2 pri 35 MHz (<= 50 MHz) (CameraClock)

Korak 29: 1. del Izdelava modula PWM za servo motorje

Pripeljite axi_timer_0 pwm0 na nova izhodna vrata pwm_Xaxis

Pripeljite axi_timer_1 pwm0 na nova izhodna vrata pwm_Zaxis

30. korak: Stranske povezave video vhoda (označeno s klikom)

Stranske povezave video vhoda (označeno s klikom)
Stranske povezave video vhoda (označeno s klikom)

Pravilno priključite bloke IP na strani video vhoda

(* te povezave je treba ustvariti z izbiro pravih možnosti med avtomatizacijo povezave) "aclk" iz axi_stream_capture gre na:

  • ap_clk pri zapisovanju medpomnilnika video okvirja
  • ap_clk na bloku za obdelavo videotoka HLS
  • *aclk na AXI smartconnect IP iz vmesnika video okvirja Zapišite v S_AXI_HP0
  • *aclk, ki ustreza kanalom IP AXI Interconnect IP za kanale S_AXI bloka za obdelavo videa HLS in medpomnilnik video okvirja, zapiše S_AXI_HP0_ACLK na bloku PS

Signal videotoka je preprosto zaporedno povezan od bloka zajema do pomnilniškega vmesnika Zynq.

  • Video prehaja iz bloka zajema v blok za obdelavo HLS.
  • Obdelani video iz bloka HLS gre v blok za zapisovanje medpomnilnika okvirja.
  • *Blok za zapisovanje medpomnilnika okvirja se poveže z vmesnikom HP0 na bloku Zynq PS.
  • Signal m_axis_tuser z izhoda bloka zajema se ročno poveže z vhodnim signalom video_in_TUSER na bloku za obdelavo HLS in signalom ap_start na istem bloku.

Signal TUSER (tuser) uporablja protokol video toka AXI za označevanje začetka sličice videa. AP_Start pove bloku HLS, naj začne obdelavo. Tako uporabljamo tuser za sprožitev bloka HLS za obdelavo vsakega kadra prihaja. Ko povežete en sam signal vodila in ga tako razdelite, ga morate priključiti tudi na običajno zaključno točko preostalega vodila. Vivado predvideva, da želite, če signal priključite ročno, odklopiti tisto, na kar bi se običajno povezal.

Konfiguracijske nastavitve blokov IP:

Zapisovanje medpomnilnika video okvirja:

Video formati: RGB8

1 vzorec na uro Največ stolpcev: 1280 (> = 640) Največ vrstic: 960 (> = 480) Največja širina podatkov: 8

31. korak: Povezave z OV7670

Povezave z OV7670
Povezave z OV7670

Na bloku ov7670_axi_stream_capture

  • Naj bodo vsi vhodi zunanji (z desno miškino tipko kliknite zatič in v meniju izberite ali levi klik-> ctrl+T)
  • Pustite imena takšna, kot so

Na bloku ov7670_controller

  • Naj bodo vsi izhodi blokov zunanji
  • Preimenujte vrata config_finished v led0
  • priključi CLK na CameraClock (<= 50MHz) (FCLK_2)

Na bloku debounce

  • priključite vhod button1 na zunanja vhodna vrata, imenovana btn0
  • priključite out1 na linijo za ponovno pošiljanje na bloku IP ov7670_controller
  • vhod button2 priključite na zunanja vhodna vrata, imenovana btn3
  • priključite out2n na vhod ext_reset_in na IP -ju procesorskega sistema za ponastavitev za domeno ure snemanja videa. (*To bo morda treba storiti po ustvarjanju tega IP -ja*)
  • priključi CLK na CameraClock (<= 50MHz) (FCLK_2)

Korak 32: Povezave na zunanji strani videa

Priključki na strani Out Out Video
Priključki na strani Out Out Video
Priključki na strani Out Out Video
Priključki na strani Out Out Video
Priključki na strani Out Out Video
Priključki na strani Out Out Video
Priključki na strani Out Out Video
Priključki na strani Out Out Video

Priključki za bloke Video Timing Controller (VTC), AXI4-Stream to Video Out in rezine

  • Uporabite uro 25MHz (FCLK_1) za vid_io_out_clk in VTC clk
  • Uporabite 100MHz uro (FCLK_0) za povezavo na AXI4-Stream to Video Out
  • od vtiming_out do vtiming_in
  • Video Frame Buffer Read m_axis_video gre v AXI4-Stream v Video Out video_in
  • vtg_ce gre na gen_clken
  • Privežite VTC clken, aclken, vid_io_out_ce na Constant dout [0: 0]
  • Pripeljite vid_hsync in vid_vsync na zunanja izhodna vrata vga_hs oziroma vga_vs. (ni na sliki)

Rezine:

  • Rezine je treba nastaviti, kot je prikazano na priloženih slikah

    • preimenujte bloke v slice_red, slice_green in slice_blue
    • nastavitev razponov rezin, kot je prikazano na slikah za ime bloka
    • vsak izhod rezine priključite na izhod zunanjih vrat, kot je prikazano na sliki.
  • vid_data [23: 0] se poveže z vhodi za vsako rezino (Din [23: 0])

Korak 33: Zaženite samodejno blokiranje in povezavo

Zaženite samodejno blokiranje in povezavo
Zaženite samodejno blokiranje in povezavo
Zaženite samodejno blokiranje in povezavo
Zaženite samodejno blokiranje in povezavo
Zaženite samodejno blokiranje in povezavo
Zaženite samodejno blokiranje in povezavo

Zaženite Block Automation za povezavo stvari iz bloka ZYNQ7 PS. Kot prikazuje slika.

Zaženite samodejno povezavo, da ustvarite vse IP medsebojne povezave. Bodite pozorni na vse možnosti na vsaki sliki.

Na bloku debounce povežite out2n z domeno ure snemanja video posnetkov Ponastavitev sistema procesorja ext_reset_in vhod.

Korak 34: Ustvarite HDL Wrapper

Ustvari HDL Wrapper
Ustvari HDL Wrapper

Ustvarite HDL Wrapper za svojo zasnovo blokov.

Nastavite ga kot zgornji modul.

Korak 35: Ustvarite Bitstream, izvozite strojno opremo v SDK, zaženite SDK iz Vivada

V izvoz vključite bitni tok.

Ustvarjanje bitnega toka lahko traja zelo dolgo.

Nato zaženite SDK

Korak 36: SDK (brez FreeRTOS -a)

SDK (brez FreeRTOS -a)
SDK (brez FreeRTOS -a)

Ta različica počne vse brez uporabe FreeRTOS -a in lepo kondenzira kodo.

Ustvarite samostojen BSP na podlagi zasnove strojne opreme. Privzete možnosti bi morale biti v redu. Prepričajte se, da so bili ustvarjeni viri BSP.

Ustvarite aplikacijo, kot je prikazano na sliki. (prazna aplikacija)

Izbrišite samodejno ustvarjeno glavno datoteko in uvozite priložene datoteke.

Korak 37: Izvajanje FreeRTOS

Izvajanje FreeRTOS
Izvajanje FreeRTOS

Ta različica uporablja FreeRTOS. Ustvarite BSP FreeRTOS901 na podlagi zasnove strojne opreme. Privzete možnosti bi morale biti v redu. Prepričajte se, da so bili ustvarjeni viri BSP.

Ustvarite aplikacijo, kot je prikazano na sliki. (prazna aplikacija)

Izbrišite samodejno ustvarjeno glavno datoteko in uvozite priložene datoteke.

Korak 38: Navodila za uporabo

Začetek izvajanja tega projekta je nekoliko težaven. Sledite korakom po vrstnem redu.

Prepričajte se, da vaš ZYBO pri vklopu ne nalaga ničesar. To pomeni, da LED dioda Končano ne sme zasvetiti. Eden od načinov za to je, da skakalnik izvornega zagona nastavite na JTAG.

Odprite projekt (FreeRTOS ali ne), ki ga želite programirati iz SDK -ja

  1. Vklopite vaš ZYBO. LED dioda Končano ne sme zasvetiti.
  2. Programirajte FPGA z bitno datoteko. LED dioda Končano naj zasveti. Led0 ne sme zasvetiti.
  3. Zaženite kodo (če to počnete, pojdite mimo začetne prelomne točke).

Na tej točki bi morali dobiti izhod na zaslonu VGA.

Če želite znova zagnati (če se napaka ali kaj podobnega): hitro tapnite gumb PS-SRST ali izklopite ZYBO in ga nato znova vklopite. Nadaljujte s korakom 2.

Ustavitev procesorja z razhroščevalnikom bo povzročila, da fotoaparat zadrži položaj namesto premikanja. Video tok se bo vseeno nadaljeval.

Korak 39: Reference in povezave

Referenčni vodniki in dokumentacija Xilinx:

  • PG044 - AXI -tok za video izhod
  • PG278 - Vmesnik za branje/pisanje video okvirja

Druge povezave:

  • Laurijev blog - vhod VDMA
  • Laurijev blog - OV7670 na VGA izhod z uporabo BRAM -a
  • Hamsterworks wiki, avtor Mike Fields, prvotni vir kode OV7670
  • Podatkovni list, ki prikazuje osnovne časovne specifikacije

Priporočena: