Sadržaj:
- Korak 1: Izrada PWM modula- izvorna datoteka
- Korak 2: Izgradnja PWM modula- Vivado postavljanje
- Korak 3: Izgradnja PWM modula- Izradite datoteku projekta
- Korak 4: Izgradnja PWM modula- Dizajn bloka i postavljanje datoteke ograničenja (I)
- Korak 5: Izgradnja PWM modula- Dizajn bloka i postavljanje datoteke ograničenja (II)
- Korak 6: Izgradnja PWM modula- Dizajn bloka i postavljanje datoteke ograničenja (III)
- Korak 7: Izrada PWM modula- Dizajn bloka i postavljanje datoteke ograničenja (IV)
- Korak 8: Izgradnja PWM modula- Dizajn bloka i postavljanje datoteke ograničenja (V)
- Korak 9: Izrada PWM modula- instalacija hardvera
- Korak 10: Izgradnja PWM modula- Generirajte Bitstream i pokrenite SDK
- Korak 11: Izgradnja PWM modula- Izradite novu aplikaciju u Xilinx SDK-u
- Korak 12: Izrada PWM modula- Pregled Project Explorera (I)
- Korak 13: Izrada PWM modula- Pregled Project Explorera (II)
- Korak 14: Izrada PWM modula- Pregled Project Explorera (III)
- Korak 15: Izgradnja PWM modula- zaključavanje PWM funkcije (I)
- Korak 16: Izgradnja PWM modula- Završna PWM funkcija (II)
- Korak 17: Izgradnja PWM modula- Završna PWM funkcija (III)
- Korak 18: Izgradnja PWM modula- Neka radi
- Korak 19: Streaming video obrada na Digilent ZYBO s OV7670
- Korak 20: Potpuni blok dijagram
- Korak 21: Spojite OV7670 na ZYBO
- Korak 22: Izradite dizajn bloka
- Korak 23: Dodajte VHDL datoteke za OV7670 upravljanje kamerom i snimanje
- Korak 24: Dodajte datoteku ograničenja
- Korak 25: Dodajte IP Repo za HLS IP
- Korak 26: Dodajte module i IP
- Korak 27: Postavke IP konfiguracije
- Korak 28: Dodajte i konfigurirajte PS IP blok
- Korak 29: Dio 1. Izgradnja PWM modula za servo motore
- Korak 30: Bočne veze video ulaza (aclk istaknuto)
- Korak 31: Spajanje na OV7670
- Korak 32: Veze na vanjskoj strani videa
- Korak 33: Pokrenite blokadu i automatizaciju veze
- Korak 34: Generirajte HDL omot
- Korak 35: Generirajte Bitstream, izvezite hardver u SDK, pokrenite SDK iz Vivada
- Korak 36: SDK (bez FreeRTOS -a)
- Korak 37: Implementacija FreeRTOS -a
- Korak 38: Upute za uporabu
- Korak 39: Reference i veze
Video: ZYBO OV7670 kamera s kontrolom pomicanja/naginjanja: 39 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:37
Počnite od prvog koraka za detalje o stvaranju dvoosnog servo PWM kontrolera.
Počnite od masivnog blok dijagrama (korak 19) za cijeli projekt.
Camera + Pan/tilt setup koji smo koristili:
PmodCON3 iz tvrtke Digilent korišten je za povezivanje servomotora.
Korak 1: Izrada PWM modula- izvorna datoteka
Korak 2: Izgradnja PWM modula- Vivado postavljanje
Prvo preuzmite Vivado Design Suite s web stranice Xilinx. Instalirajte sav paket dizajna, uključujući Vivado Software Development Kit (SDK). Ovaj projekt koristi verziju 2017.2.
U međuvremenu bi Digilent Adept 2 trebao biti instaliran i kao upravljački program Zybo ploče.
Korak 3: Izgradnja PWM modula- Izradite datoteku projekta
Prije nego stvorite datoteku projekta, provjerite jeste li već pravilno instalirali datoteku Zybo kao vodič ovdje:
Vivado verzija 2015.1 i novije instalacije datoteka ploče
Otvorite Vivado 2017.2. Na Brzom početku kliknite Stvori projekt -> Dalje -> Naziv projekta (Ovdje imenujte naziv svog projekta) -> Vrsta projekta. Na Vrsta projekta odaberite RTL projekt i označite na "Nemoj navesti izvore u ovom trenutku". Zatim za zadani dio odaberite “Boards” i “Zybo” kao naziv za prikaz. Zatim kliknite Završi za početak projekta.
Korak 4: Izgradnja PWM modula- Dizajn bloka i postavljanje datoteke ograničenja (I)
Na Flow Navigatoru kliknite “” Create Block Design”, zatim pritisnite OK. kliknite znak "+" za dodavanje potrebnih IP adresa. Dodati:
- Jedan ZYNQ7 sustav za obradu Dva AXI mjerača vremena
- Dva AXI mjerača vremena
Korak 5: Izgradnja PWM modula- Dizajn bloka i postavljanje datoteke ograničenja (II)
Nakon dodavanja IP adresa, pokrenite automatizaciju blokova i automatizaciju veze. Nakon što je automatizacija dovršena, u bloku “axi_timer_0” desnom tipkom miša kliknite pwm0 -> Make External. Vanjski pin pwm0 imenujte kao pwm_Xaxis. Također, ponovite gornji postupak na bloku “axi_timer_1” i imenujte vanjski pin pwm0 kao pwm_Zaxis.
Korak 6: Izgradnja PWM modula- Dizajn bloka i postavljanje datoteke ograničenja (III)
Uočite da svaki put kad završimo Block Design u Vivadu, moramo stvoriti HDL Wrapper. Budući da će to biti modul najviše razine za svaki projekt.
Korak 7: Izrada PWM modula- Dizajn bloka i postavljanje datoteke ograničenja (IV)
Sada moramo postaviti našu datoteku ograničenja za dodjeljivanje pinova spojenih na naš blok dijagram. Zatvorite prozor Dizajn blokova, na kartici Izvori, “Dodaj izvore”-> Dodajte ili stvorite ograničenja-> dodajte Zybo-Master.xdc kao naše datoteke ograničenja.
Korak 8: Izgradnja PWM modula- Dizajn bloka i postavljanje datoteke ograničenja (V)
Otvorite datoteku ograničenja Zybo-Master.xdc iz mape Ograničenja, dekommentirajte portove koje želimo navesti kao izlazne signale i preimenujte “get_ports {XXXX}”, što XXXX označava vanjski pin imenovan u blok dijagramu. Postavka datoteke ograničenja prikazana je na slici.
Korak 9: Izrada PWM modula- instalacija hardvera
Spojite servo motore na Pmod CON3. TowerPro SG90 je model servo motora koji smo koristili u ovom projektu. Za žice servo motora, narančasta žica predstavlja PWM signal, spojen na SIG pin u Pmod CON3. Crvena žica Vcc je žica za napajanje spojena na pin VS u Pmod CON3. Konačno, smeđa žica Gnd je uzemljena žica spojena na GND pin. Zatim umetnite Pmod CON3 u gornji red JD priključka na Zybo ploči.
Korak 10: Izgradnja PWM modula- Generirajte Bitstream i pokrenite SDK
1. Na kartici Project Navigator pokrenite Generate BitStream.
2. Izvoz hardvera: Datoteka> Izvoz> Izvoz hardvera-> označite "uključi bitstream"-> U redu 3. Pokrenite SDK: Datoteka-> Pokreni SDK.
Korak 11: Izgradnja PWM modula- Izradite novu aplikaciju u Xilinx SDK-u
Izradite novu aplikaciju:
Datoteka> Novo> Aplikacijski projekt -> Unesite naziv svog projekta -> Završi
Pod Project Explorerom trebale bi postojati tri mape.
U ovom slučaju, “design_1_wrapper_hw_platform_0” je mapa koju je Vivado prethodno izvezla. Axis_2_PWM_SDK_bsp je mapa paketa podrške za ploču. A Axis_2_PWM_SDK je naša glavna mapa projekta u SDK -u. Datoteku "helloworld.c" možete vidjeti u mapi "src" na Axis_2_PWM_SDK, gdje je "helloworld.c" glavna datoteka.
Korak 12: Izrada PWM modula- Pregled Project Explorera (I)
Provjerimo neke datoteke pod Project Explorerom. Prvo, u mapi “design_1_wrapper_hw_platform_0” otvorite “system.hdf”. Ova datoteka prikazuje mapu adresa za procesor ps7_cortex9 i IP blokove prisutne u našem dizajnu.
Korak 13: Izrada PWM modula- Pregled Project Explorera (II)
Zatim provjerite datoteke "include" i "libsrc" u mapi "Axis_2_PWM_SDK_bsp". Knjižnične datoteke ovdje nam omogućuju interakciju s hardverskim perifernim uređajima bez "sviranja" registra.
Korak 14: Izrada PWM modula- Pregled Project Explorera (III)
Putem BSP dokumentacije xtmrctr.h se nalazi kao Xilinx Timer Control Library vezana uz AXI Timer. Obično bismo ovdje mogli pronaći željenu PWM funkciju. Međutim, ako pročitate dokumentaciju “tmrctr_v4_3”, to pokazuje da upravljački program trenutno ne podržava PWM rad uređaja. Zbog nedostatka PWM funkcije, moramo dovršiti našu PWM funkciju uz pomoć xtmrctr.h i AXI Timer v2.0 LogiCORE IP Vodiča za proizvode.
Korak 15: Izgradnja PWM modula- zaključavanje PWM funkcije (I)
Natrag na glavnu datoteku “helloworld.c”, uključite sljedeće datoteke zaglavlja:
Korak 16: Izgradnja PWM modula- Završna PWM funkcija (II)
Definirajte osnovne adrese dva AXI TImera kroz "xparameters.h".
Korak 17: Izgradnja PWM modula- Završna PWM funkcija (III)
Izgradite željenu PWM funkciju.
Duty_val: pretvara vrijednost stupnja u radni ciklus. PWM_Freq_Duty: postavlja željenu frekvenciju i radni ciklus za generiranje PWM -a. Treba odrediti i vrijeme sata.
PWM_START: dodijelite adresu registra PWM -a i počnite generirati PWM.
PWM_STOP: dodijelite adresu registra PWM -a i zaustavite generiranje PWM -a.
Ostatak demo koda prikazan je u "helloworld.c" pod "Axis_2_PWM_SDK"
Korak 18: Izgradnja PWM modula- Neka radi
1. Programirajte FPGA putem SDK -a
- Spojite Zybo Board putem USB priključka na računalo.
- Xilinx Alati -> Program FPGA
2. Pokrenite program
Pritisnite ikonu "Pokreni" i padajući izbornik -> Pokreni kao -> Pokreni na hardveru
3. SDK terminal
- Otvorite terminal SDK -> Spoji na serijski port -> OK
- Pokrenite program. Ako se demo kôd uspješno pokrene, trebali biste vidjeti "Inicijalizacija je dovršena!" na terminalu SDK.
Korak 19: Streaming video obrada na Digilent ZYBO s OV7670
Kompletna arhivska datoteka u prilogu.
Korak 20: Potpuni blok dijagram
Ovo prikazuje potpuni dijagram svih veza i IP blokova u projektu
Korak 21: Spojite OV7670 na ZYBO
Kreirajte vezu za povezivanje modula ov7670 sa ZYBO Pmods
Podaci Pmod je Pmod D
Kontrolni Pmod je Pmod C
Dodatno, povežite PmodCON3 i servo upravljače kako je navedeno u prvoj polovici ovog vodiča
Korak 22: Izradite dizajn bloka
U Flow Navigatoru kliknite "Create Block Design", zatim pritisnite OK.
Korak 23: Dodajte VHDL datoteke za OV7670 upravljanje kamerom i snimanje
Dodajte VHDL datoteke priložene ovom koraku u projekt
Korak 24: Dodajte datoteku ograničenja
Dodajte priloženu datoteku ograničenja u svoj projekt.
Korak 25: Dodajte IP Repo za HLS IP
Uzmite priloženu Zip datoteku i raspakirajte je u novu mapu pod istim nazivom u novom direktoriju (mapi) pod nazivom "HLS_repo".
Dodajte IP spremište u svoj projekt tako što ćete otići u IP katalog i desnom tipkom miša odabrati "Dodaj spremište …"
Idite u direktorij "HLS_repo" i odaberite ga.
Izborno: Izradite HLS blok za video obradu sami!
Korak 26: Dodajte module i IP
Dodajte module ov7670_axi_stream_capture, debounce i ov7670_controller u blok dijagram desnim klikom na pozadinu i odabirom "Dodaj modul …"
Slično, dodajte IP -ove:
- HLS_Video_Track
- Zapisivanje međuspremnika video okvira
- Očitavanje međuspremnika video okvira
- Upravljač video mjerenja vremena
- AXI4-stream za video izlaz
- 3 "kriške"
- Konstantno
- 2 AXI mjerača vremena
Korak 27: Postavke IP konfiguracije
Kao što je prikazano na slikama
Korak 28: Dodajte i konfigurirajte PS IP blok
Blok dijagramu dodajte ZYNQ7 procesni sustav
uredite konfiguraciju:
- PS-PL konfiguracija
-
HP
- Omogući S HP 0
- Omogući S HP 1
-
- Konfiguracija sata
-
PL satovi od tkanine
- FCLK_0 na 100MHz
- FCLK_1 na 25MHz (OutputClock)
- FLCK_2 na 35 MHz (<= 50 MHz) (CameraClock)
-
Korak 29: Dio 1. Izgradnja PWM modula za servo motore
Iznesite axi_timer_0 pwm0 na novi izlazni priključak pwm_Xaxis
Iznesite axi_timer_1 pwm0 na novi izlazni priključak pwm_Zaxis
Korak 30: Bočne veze video ulaza (aclk istaknuto)
Pravilno spojite IP blokove na strani video ulaza
(* ove veze treba stvoriti odabirom odgovarajućih opcija tijekom automatizacije veze) "aclk" iz axi_stream_capture ide na:
- ap_clk na video frame buffer write
- ap_clk na bloku za obradu video streama HLS
- *aclk na AXI IP -u pametnog povezivanja iz međuspremnika video okvira Zapišite u S_AXI_HP0
- *aclk koji odgovara kanalima AXI Interconnect IP -a za S_AXI kanale HLS bloka za video obradu i međuspremnik video okvira upisuje S_AXI_HP0_ACLK na PS blok
Signal videotoka jednostavno je serijski spojen iz bloka snimanja na memorijsko sučelje Zynq.
- Videozapis ide od bloka snimanja do bloka za obradu HLS -a.
- Obrađeni video zapis iz HLS bloka ide u blok za pisanje međuspremnika okvira.
- *Blok za pisanje međuspremnika okvira spaja se na sučelje HP0 na bloku Zynq PS.
- Signal m_axis_tuser s izlaza bloka hvatanja ručno se povezuje na ulazni signal video_in_TUSER na bloku za obradu HLS -a i signal ap_start na istom bloku.
Signal TUSER (tuser) koristi protokol AXI video toka za označavanje početka okvira video zapisa. AP_Start govori HLS bloku da počne s obradom. Stoga koristimo tuser za pokretanje HLS bloka za obradu svakog kadra dolazi. Kad povezujete pojedinačni signal sabirnice i odvajate ga na ovaj način, potrebno ga je spojiti i na uobičajenu završnu točku ostatka sabirnice. Vivado pretpostavlja da ako ručno povezujete signal želite prekinuti vezu s kojom bi se obično spojio.
Konfiguracijske postavke IP blokova:
Zapisivanje međuspremnika video okvira:
Video formati: RGB8
1 uzorak po satu Maksimalni broj stupaca: 1280 (> = 640) Maksimalni red: 960 (> = 480) Maksimalna širina podataka: 8
Korak 31: Spajanje na OV7670
Na bloku ov7670_axi_stream_capture
- Neka svi ulazi budu vanjski (desni klik na pin i odaberite iz izbornika ili lijevi klik-> ctrl+T)
- Ostavite imena takva kakva jesu
Na bloku ov7670_controller
- Učinite sve izlazne blokove vanjskim
- Preimenujte port config_finished u led0
- spojite clk na CameraClock (<= 50MHz) (FCLK_2)
Na bloku debounce
- spojite ulaz button1 na vanjski ulazni port zvan btn0
- spojite out1 na liniju za ponovno slanje na IP bloku ov7670_controller
- spojite ulaz button2 na vanjski ulazni port zvan btn3
- spojite izlaz out2n na ulaz ext_reset_in na IP -u za resetiranje procesorskog sustava za domenu sata snimanja video zapisa. (*To bi moglo biti potrebno učiniti nakon generiranja tog IP -a*)
- spojite clk na CameraClock (<= 50MHz) (FCLK_2)
Korak 32: Veze na vanjskoj strani videa
Priključci za blokove Video Timing Controller (VTC), AXI4-Stream to Video Out i kriške
- Koristite sat od 25 MHz (FCLK_1) za vid_io_out_clk i VTC clk
- Koristite sat od 100 MHz (FCLK_0) za pristup na AXI4-Stream za video izlaz
- vtiming_out to vtiming_in
- Video Frame Buffer Read m_axis_video ide na AXI4-Stream na Video Out video_in
- vtg_ce ide na gen_clken
- Vežite VTC clken, aclken, vid_io_out_ce za Constant dout [0: 0]
- Iznesite vid_hsync i vid_vsync na vanjske izlazne portove vga_hs i vga_vs. (nije na slici)
Kriške:
- Kriške treba postaviti kako je prikazano na priloženim slikama
- preimenujte blokove u slice_red, slice_green i slice_blue
- rasponi kriški postavljanja kako je prikazano na slikama prema nazivu bloka
- spojite svaki izlaz kriške na izlaz vanjskog priključka kao što je prikazano na slici.
- vid_data [23: 0] povezuje se s ulazima za svaku krišku (Din [23: 0])
Korak 33: Pokrenite blokadu i automatizaciju veze
Pokrenite Block Automation za povezivanje stvari iz ZYNQ7 PS bloka. Kao što je prikazano na slici.
Pokrenite automatizaciju veze za stvaranje svih IP -ova za međusobno povezivanje. Obratite posebnu pozornost na sve opcije na svakoj slici.
Na bloku debounce, spojite out2n na domenu sata za snimanje video zapisa Ponovno postavljanje procesorskog sustava ext_reset_in ulaz.
Korak 34: Generirajte HDL omot
Generirajte HDL omot za svoj blok dizajn.
Postavite ga kao gornji modul.
Korak 35: Generirajte Bitstream, izvezite hardver u SDK, pokrenite SDK iz Vivada
Uključite bitstream u izvoz.
Generiranje prijenosa bitova može potrajati jako dugo.
Zatim pokrenite SDK
Korak 36: SDK (bez FreeRTOS -a)
Ova verzija radi sve bez korištenja FreeRTOS -a, lijepo kondenzirajući kôd.
Napravite samostalni BSP na temelju hardverskog dizajna. Zadane opcije trebale bi biti u redu. Provjerite jesu li generirani izvori BSP -a.
Izradite aplikaciju kao što je prikazano na slici. (prazna aplikacija)
Izbrišite automatski generirani glavni i uvezite priložene datoteke.
Korak 37: Implementacija FreeRTOS -a
Ova verzija koristi FreeRTOS. Napravite FreeRTOS901 BSP na temelju hardverskog dizajna. Zadane opcije trebale bi biti u redu. Provjerite jesu li generirani izvori BSP -a.
Izradite aplikaciju kao što je prikazano na slici. (prazna aplikacija)
Izbrišite automatski generirani glavni i uvezite priložene datoteke.
Korak 38: Upute za uporabu
Ovaj je projekt pomalo nezgodno za pokretanje. Slijedite korake redom.
Pazite da vaš ZYBO ništa ne učitava sam kad se uključi. To znači da LED dioda Done ne bi trebala svijetliti. Jedan od načina za to je postavljanje kratkospojnika izvora pokretanja na JTAG.
Otvorite projekt (FreeRTOS ili ne) koji želite programirati iz SDK -a
- Uključite svoj ZYBO. LED dioda Done ne bi trebala svijetliti.
- Programirajte FPGA s bit datotekom. LED dioda Gotovo bi trebala zasvijetliti. Led0 ne bi trebao svijetliti.
- Pokrenite kôd (ako to radite, ne zaboravite proći početnu točku prekida).
U ovom trenutku trebali biste dobiti izlaz na svom VGA zaslonu.
Za ponovno pokretanje (ako greške ili što već): brzo dodirnite gumb PS-SRST ili isključite ZYBO, a zatim ga ponovo uključite. Nastavite od koraka 2.
Zaustavljanje procesora pomoću programa za ispravljanje pogrešaka uzrokovat će da fotoaparat zadrži položaj umjesto da se pomakne. Video stream će se svejedno nastaviti.
Korak 39: Reference i veze
Referentni vodiči i dokumentacija za Xilinx:
- PG044 - AXI -Stream za video izlaz
- PG278 - Video Frame Buffer Read/Write
Ostali linkovi:
- Lauri blog - VDMA ulaz
- Lauri blog - OV7670 na VGA izlaz pomoću BRAM -a
- Hamsterworks wiki, Mike Fields, izvorni izvor koda OV7670
- Tehnički list prikazuje osnovne specifikacije vremena
Preporučeni:
D4E1 - Fleksibilno inženjerstvo: Naočale protiv naginjanja 2,4: 4 koraka
D4E1 - Fleksibilno inženjerstvo: Naočale protiv naginjanja 2.4: Bok! Dopustite mi da počnem kratkim uvodom. Mi smo dvojac studenata Industial Product Design iz Howest -a, Kortrijk, Belgija. Za naš CAD tečaj dobili smo zadatak redizajnirati pomoćni alat koji će ga staviti u masovnu proizvodnju ili zadržati u malim serijama
RC automobil s Bluetooth kontrolom, s kontrolom brzine i mjerenjem udaljenosti: 8 koraka
RC automobil s Bluetooth kontrolom i kontrolom brzine i mjerenjem udaljenosti: Kao klinac, uvijek su me fascinirali RC automobili. Danas možete pronaći mnoge vodiče za izradu jeftinih RC automobila s Bluetooth -om uz pomoć Arduina. Napravimo korak dalje i upotrijebimo svoje praktično znanje o kinematici za izračunavanje
Mehanizam pomicanja i naginjanja za vremenske intervale DSLR -a: 7 koraka (sa slikama)
Mehanizam pomicanja i naginjanja za vremenske intervale DSLR -a: Imao sam nekoliko koračnih motora koji su ležali okolo i doista sam ih htio upotrijebiti da napravim nešto cool. Odlučio sam da napravim Pan and Tilt sustav za svoj DSLR fotoaparat kako bih mogao stvarati hladne vremenske odmake. Stavke koje će vam trebati: 2x koračni motor -htt
Kako riješiti problem pomicanja miša Xiaomi mišem: 6 koraka (sa slikama)
Kako riješiti problem pomicanja miša Xiaomi mišem: Baš kao i sa bilo kojim drugim alatom, računalnom bi mišu na kraju trebalo stalno održavanje zbog njegove stalne uporabe. Tipično trošenje proizvoda omogućuje mu manje učinkovito funkcioniranje nego što je to bilo tijekom vremena kada je nekoć b
Jeftina kamera s kacigom s PIC kontrolom pomoću Sony LANC -a (dobro za ekstremne sportove): 4 koraka
Jeftina kamera s kacigom s kontrolom PIC -a pomoću Sony LANC -a (dobro za ekstremne sportove): Ova uputa pokazat će vam kako napraviti jeftinu kameru s kacigom kojom se može upravljati putem daljinskog upravljača kako bi vaša glavna kamera mogla sigurno ostati u torbi. Kontroler se može pričvrstiti na jednu od naramenica vaše torbe s ruksom, i