Kazalo:
- 1. korak: Izdelava modula PWM- izvorna datoteka
- 2. korak: Izdelava modula PWM- nastavitev Vivada
- 3. korak: Izdelava modula PWM- Ustvarite datoteko projekta
- 4. korak: Izdelava modula PWM- Oblikovanje bloka in nastavitev datoteke omejitev (I)
- 5. korak: Izdelava modula PWM- Oblikovanje bloka in nastavitev datotek omejitev (II)
- Korak 6: Izdelava modula PWM- Oblikovanje bloka in nastavitev datotek omejitev (III)
- 7. korak: Izdelava modula PWM- Oblikovanje bloka in nastavitev datotek omejitev (IV)
- 8. korak: Izdelava modula PWM- Oblikovanje bloka in nastavitev datotek omejitev (V)
- 9. korak: Izdelava modula PWM- Namestitev strojne opreme
- 10. korak: Izdelava modula PWM- Ustvarite bitstream in zaženite SDK
- 11. korak: Izdelava modula PWM- Ustvarite novo aplikacijo v SDK za Xilinx
- 12. korak: Izdelava modula PWM- Pregled raziskovalca projektov (I)
- 13. korak: Izdelava modula PWM- Pregled raziskovalca projektov (II)
- Korak 14: Izdelava modula PWM- Pregled raziskovalca projektov (III)
- Korak 15: Izdelava modula PWM- Zaključek funkcije PWM (I)
- Korak 16: Izdelava modula PWM- Zaključek funkcije PWM (II)
- Korak 17: Izdelava modula PWM- Zaključek funkcije PWM (III)
- Korak 18: Izdelava modula PWM- zaženite ga
- Korak 19: Pretakanje video obdelave na Digilent ZYBO z OV7670
- 20. korak: Celoten blokovni diagram
- Korak 21: Priključite OV7670 na ZYBO
- Korak: Ustvarite oblikovanje blokov
- 23. korak: Dodajte datoteke VHDL za nadzor in snemanje kamere OV7670
- Korak: Dodajte datoteko omejitev
- Korak: Dodajte IP Repo za IP HLS
- Korak 26: Dodajte module in IP
- Korak 27: Nastavitve konfiguracije IP
- Korak 28: Dodajte in konfigurirajte PS IP Block
- Korak 29: 1. del Izdelava modula PWM za servo motorje
- 30. korak: Stranske povezave video vhoda (označeno s klikom)
- 31. korak: Povezave z OV7670
- Korak 32: Povezave na zunanji strani videa
- Korak 33: Zaženite samodejno blokiranje in povezavo
- Korak 34: Ustvarite HDL Wrapper
- Korak 35: Ustvarite Bitstream, izvozite strojno opremo v SDK, zaženite SDK iz Vivada
- Korak 36: SDK (brez FreeRTOS -a)
- Korak 37: Izvajanje FreeRTOS
- Korak 38: Navodila za uporabo
- Korak 39: Reference in povezave
Video: Kamera ZYBO OV7670 z nadzorom pomika/nagiba: 39 korakov (s slikami)
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:08
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
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
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)
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)
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)
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)
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)
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
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
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)
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)
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)
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)
Nazaj na glavno datoteko »helloworld.c« vključite naslednje datoteke z glavo:
Korak 16: 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)
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
To prikazuje celoten diagram vseh povezav in blokov IP v projektu
Korak 21: 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
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
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
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
Kot je prikazano na slikah
Korak 28: 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)
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
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 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 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
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)
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
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
- Vklopite vaš ZYBO. LED dioda Končano ne sme zasvetiti.
- Programirajte FPGA z bitno datoteko. LED dioda Končano naj zasveti. Led0 ne sme zasvetiti.
- 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:
LED -matrika z nadzorom Googlovega pomočnika!: 7 korakov (s slikami)
LED -matrika z nadzorom Googlovega pomočnika!: V tej vadnici vam bom pokazal, kako lahko naredite LED -matriko z nadzorovanim pomočnikom Google, ki jo lahko upravljate kjer koli s pametnim telefonom, zato začnimo
Brezžična svetilka Rubikova kocka za spreminjanje barve na podlagi nagiba: 10 korakov (s slikami)
Brezžična Rubikova kockasta svetilka za enostavno spreminjanje barve na nagibu: danes bomo zgradili to čudovito svetilko Rubikove kocke, ki spreminja barvo glede na to, katera stran je navzgor. Kocka deluje na majhni bateriji LiPo, ki se polni s standardnim kablom micro-usb, in po mojem testiranju ima življenjsko dobo baterije nekaj dni. Ta
Mehanizem pomika in nagiba za časovne presledke DSLR: 7 korakov (s slikami)
Mehanizem pomika in nagiba za časovne presledke DSLR: Nekaj koračnih motorjev je ležalo naokoli in res sem jih želel uporabiti, da naredim nekaj kul. Odločil sem se, da bom za svoj fotoaparat DSLR naredil sistem Pan and Tilt, da bom lahko ustvarjal hladne časovne zamike. Predmeti, ki jih potrebujete: 2x koračni motorji -htt
Kamera z nadzorom gibanja z uporabo MESH SDK: 6 korakov (s slikami)
Kamera z nadzorom gibanja z uporabo paketa MESH SDK: Ali želite avtomatizirati kamero, da zajame najboljše trenutke vašega ljubljenčka, ko niste doma? Senzor gibanja MESH omogoča fotoaparate, ki podpirajo SDK. Na primer, senzor gibanja MESH smo postavili poleg hrane za mačke in mačjih igrač v
Senzor nagiba pet centov: 4 koraki (s slikami)
Senzor nagiba s petimi centri: To je osnovni senzor nagiba, ki ga navdihujejo senzorji s kroglo in kletko, vendar 2d namesto 3d. Ujeti vzorec poveže pare žic, odvisno od usmerjenosti senzorja. Te so hitro izdelane in precej poceni; Prišel sem do njih za projekt s