Sadržaj:
- Korak 1: Izgradnja PWM modula- izvorna datoteka
- Korak 2: Izgradnja PWM modula- Vivado postavljanje
- Korak 3: Izgradnja PWM modula- Kreiranje projektne datoteke
- Korak 4: Izgradnja PWM modula- Dizajn bloka i postavljanje datoteke ograničenja (I)
- Korak 5: Izgradnja PWM modula- Dizajn bloka i postavljanje datoteka ograničenja (II)
- Korak 6: Izgradnja PWM modula- Dizajn bloka i postavljanje datoteke ograničenja (III)
- Korak 7: Izgradnja PWM modula- Dizajn bloka i postavljanje datoteka ograničenja (IV)
- Korak 8: Izgradnja PWM modula- Dizajn bloka i postavljanje datoteke ograničenja (V)
- Korak 9: Izgradnja PWM modula- Instalacija hardvera
- Korak 10: Izgradnja PWM modula- Generirajte Bitstream i pokrenite SDK
- Korak 11: Izgradnja PWM modula- Kreirajte novu aplikaciju u Xilinx SDK-u
- Korak 12: Izgradnja PWM modula- Pregled Project Explorera (I)
- Korak 13: Izgradnja PWM modula- Pregled Project Explorera (II)
- Korak 14: Izgradnja PWM modula- Pregled Project Explorera (III)
- Korak 15: Izgradnja PWM modula- završavanje PWM funkcije (I)
- Korak 16: Izgradnja PWM modula- Završna funkcija PWM (II)
- Korak 17: Izgradnja PWM modula- Završna funkcija PWM (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: Priključite OV7670 na ZYBO
- Korak 22: Kreirajte 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 (aklk istaknuto)
- Korak 31: Povezivanje na OV7670
- Korak 32: Veze na spoljašnjoj 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 upotrebu
- Korak 39: Reference i veze
Video: ZYBO OV7670 kamera sa kontrolom pomicanja/naginjanja: 39 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:08
Počnite od prvog koraka za detalje o stvaranju dvoosnog servo PWM kontrolera.
Počnite od masivnog blok dijagrama (korak 19) za cijeli projekt.
Postavka kamere + Pan/tilt koju smo koristili:
PmodCON3 iz Digilenta je korišten za povezivanje servo pogona.
Korak 1: Izgradnja PWM modula- izvorna datoteka
Korak 2: Izgradnja PWM modula- Vivado postavljanje
Prvo preuzmite Vivado Design Suite sa 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- Kreiranje projektne datoteke
Prije nego što kreirate 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 na Kreiraj projekt -> Dalje -> Naziv projekta (Ovdje imenujte naziv svog projekta) -> Vrsta projekta. Na Vrsta projekta odaberite RTL Projekt i označite na "Nemoj trenutno navoditi izvore". 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 na “” Create Block Design”, zatim pritisnite OK. kliknite znak “+” za dodavanje potrebnih IP adresa. Dodati:
- Jedan ZYNQ7 sistem za obradu Dva AXI tajmera
- Dva AXI tajmera
Korak 5: Izgradnja PWM modula- Dizajn bloka i postavljanje datoteka ograničenja (II)
Nakon dodavanja IP adresa, pokrenite automatizaciju blokova i automatizaciju veze. Nakon što je automatizacija dovršena, u bloku “axi_timer_0” kliknite desnim tasterom miša na pwm0 -> Make External. Imenujte vanjski pin pwm0 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)
Primijetite da svaki put kad završimo Block Design u Vivadu, moramo stvoriti HDL Wrapper. Budući da će to biti modul najvišeg nivoa za svaki projekat.
Korak 7: Izgradnja PWM modula- Dizajn bloka i postavljanje datoteka ograničenja (IV)
Sada moramo postaviti našu datoteku ograničenja za dodjeljivanje pinova povezanih na naš blok dijagram. Zatvorite prozor Dizajn blokova, na kartici Izvori, „Dodaj izvore“-> Dodaj ili kreiraj ograničenja-> dodaj 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 naveden u blok dijagramu. Postavka datoteke ograničenja prikazana je na slici.
Korak 9: Izgradnja 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 VS pin u Pmod CON3. Konačno, smeđa žica Gnd je uzemljena žica spojena na GND pin. Zatim umetnite Pmod CON3 u gornji red JD porta 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"-> OK 3. Pokrenite SDK: Datoteka-> Pokreni SDK.
Korak 11: Izgradnja PWM modula- Kreirajte novu aplikaciju u Xilinx SDK-u
Kreirajte novu aplikaciju:
Datoteka> Novo> Aplikacijski projekt -> Unesite naziv svog projekta -> Završi
U okviru Project Explorera trebala 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 fascikla sa podrškom za ploču. A Axis_2_PWM_SDK je naš glavni folder 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: Izgradnja 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: Izgradnja PWM modula- Pregled Project Explorera (II)
Zatim provjerite datoteke "include" i "libsrc" u mapi "Axis_2_PWM_SDK_bsp". Bibliotečke datoteke ovdje nam omogućavaju interakciju s hardverskim perifernim uređajima bez "reproduciranja" registra.
Korak 14: Izgradnja PWM modula- Pregled Project Explorera (III)
Kroz BSP dokumentaciju, xtmrctr.h se nalazi kao Xilinx Timer Control Library vezana za 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 završ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- završavanje PWM funkcije (I)
Nazad na glavnu datoteku “helloworld.c”, uključite sljedeće datoteke zaglavlja:
Korak 16: Izgradnja PWM modula- Završna funkcija PWM (II)
Definirajte osnovne adrese dva AXI TImera kroz “xparameters.h”.
Korak 17: Izgradnja PWM modula- Završna funkcija PWM (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. Period sata takođe treba dodeliti.
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
- Povežite Zybo Board putem USB priključka na računalo.
- Xilinx Tools -> Program FPGA
2. Pokrenite program
Pritisnite ikonu "Pokreni" i padajući izbornik -> Pokreni kao -> Pokreni na hardveru
3. SDK terminal
- Otvorite SDK terminal -> Poveži se na serijski port -> OK
- Pokrenite program. Ako se demo kôd uspješno pokrene, trebali biste vidjeti "Inicijalizacija je završena!" na SDK terminalu.
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: Priključite OV7670 na ZYBO
Kreirajte vezu za povezivanje ov7670 modula na ZYBO Pmods
Podaci Pmod je Pmod D
Kontrolni Pmod je Pmod C
Dodatno, povežite PmodCON3 i servo sisteme kako je navedeno u prvoj polovici ovog vodiča
Korak 22: Kreirajte 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 svom projektu.
Korak 25: Dodajte IP Repo za HLS IP
Uzmite priloženu Zip datoteku i raspakirajte je u novu mapu sa istim nazivom u novom direktoriju (folderu) 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.
Opcionalno: Kreirajte HLS video blok za 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 "Add Module …"
Slično, dodajte IP adrese:
- HLS_Video_Track
- Zapisivanje međuspremnika video okvira
- Očitavanje međuspremnika video okvira
- Video Timing kontroler
- AXI4-Stream na video izlaz
- 3 "kriške"
- Konstantno
- 2 AXI tajmera
Korak 27: Postavke IP konfiguracije
Kao što je prikazano na slikama
Korak 28: Dodajte i konfigurirajte PS IP blok
Dodajte ZYNQ7 procesni sistem u blok dijagram
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 35MHz (<= 50MHz) (CameraClock)
-
Korak 29: Dio 1. Izgradnja PWM modula za servo motore
Iznesite axi_timer_0 pwm0 na novi izlazni port pwm_Xaxis
Iznesite axi_timer_1 pwm0 na novi izlazni port pwm_Zaxis
Korak 30: Bočne veze video ulaza (aklk istaknuto)
Pravilno povežite IP blokove na strani video ulaza
(* ove veze treba stvoriti odabirom odgovarajućih opcija tokom automatizacije veze) "aclk" iz axi_stream_capture ide na:
- ap_clk na upisivanje međuspremnika video okvira
- ap_clk na bloku za obradu video toka HLS
- *aclk na AXI IP adresi smartconnect iz međuspremnika video okvira Zapišite u S_AXI_HP0
- *aclk koji odgovara kanalima AXI Interconnect IP -a za S_AXI kanale HLS video bloka za obradu i međuspremnik video okvira upisuje S_AXI_HP0_ACLK na PS blok
Signal video toka jednostavno se serijski povezuje iz bloka snimanja na Zynq memorijsko sučelje.
- Video 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 HP0 sučelje na Zynq PS bloku.
- 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 prijenosa za označavanje početka okvira video zapisa. AP_Start govori HLS bloku da započne obradu. Stoga koristimo tuser da pokrenemo HLS blok za obradu svakog kadra dolazi. Kada povezujete pojedinačni signal sabirnice i odvajate ga na ovaj način, potrebno ga je spojiti i na normalnu završnu točku ostatka sabirnice. Vivado pretpostavlja da ako povezujete signal ručno, želite prekinuti vezu s kojom bi se obično povezao.
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: Povezivanje na OV7670
Na bloku ov7670_axi_stream_capture
- Neka svi ulazi budu vanjski (desni klik na iglicu i odaberite iz menija 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 debounce bloku
- 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
- povežite out2n sa ulazom ext_reset_in na IP adresi procesorskog sistema za resetovanje za domenu takta snimanja video zapisa. (*Ovo bi moglo biti potrebno učiniti nakon generiranja tog IP -a*)
- spojite CLK na CameraClock (<= 50MHz) (FCLK_2)
Korak 32: Veze na spoljašnjoj 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 aklkciju na AXI4-Stream za video izlaz
- od vtiming_out do 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, respektivno. (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
- podešavanje raspona kriški kako je prikazano na slikama prema nazivu bloka
- spojite svaki izlaz kriške na izlaz vanjskog porta kao što je prikazano na slici.
- vid_data [23: 0] povezuje se sa 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 Connection automation za kreiranje svih IP adresa za međusobno povezivanje. Obratite posebnu pažnju na sve opcije na svakoj slici.
Na bloku debounce, povežite out2n sa domenom takta snimanja video zapisa Ponovno postavljanje sistema procesora ext_reset_in ulaz.
Korak 34: Generirajte HDL omot
Generirajte HDL omot za svoj dizajn bloka.
Postavite ga kao gornji modul.
Korak 35: Generirajte Bitstream, izvezite hardver u SDK, pokrenite SDK iz Vivada
Uključite bitstream u izvoz.
Generiranje bitstream -a 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 osnovu hardverskog dizajna. Zadane opcije bi trebale biti u redu. Uvjerite se da su generirani izvori BSP -a.
Kreirajte 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 osnovu hardverskog dizajna. Zadane opcije bi trebale biti u redu. Uvjerite se da su generirani izvori BSP -a.
Kreirajte aplikaciju kao što je prikazano na slici. (prazna aplikacija)
Izbrišite automatski generirani glavni i uvezite priložene datoteke.
Korak 38: Upute za upotrebu
Ovaj projekt je malo nezgodno pokrenuti. 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 sa bit datotekom. LED dioda Done je trebala zasvijetliti. Led0 ne bi trebao svijetliti.
- Pokrenite kôd (ne zaboravite proći početnu tačku prekida ako to radite).
U ovom trenutku trebali biste dobiti izlaz na svom VGA ekranu.
Za ponovno pokretanje (ako se javi greška ili šta već): brzo dodirnite dugme 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 ionako nastaviti.
Korak 39: Reference i veze
Xilinx referentni vodiči i dokumentacija:
- PG044 - AXI -Stream za video izlaz
- PG278 - Međuspremnik za čitanje/pisanje video okvira
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čuje se:
D4E1 - Fleksibilno inženjerstvo: Naočare protiv naginjanja 2,4: 4 koraka
D4E1 - Fleksibilno inženjerstvo: Naočare protiv naginjanja 2.4: Zdravo! Dopustite mi da počnem sa kratkim uvodom. Mi smo dvojac studenata Industial Design Design u Howest -u, 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 sa Bluetooth kontrolom i kontrolom brzine i mjerenjem udaljenosti: 8 koraka
RC automobil sa Bluetooth kontrolom i kontrolom brzine i mjerenjem udaljenosti: Kao dijete, 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
Kreiranje pomicanja pomoću Swifta: 9 koraka
Kreirajte Scroll View pomoću Swifta: Prije nekoliko mjeseci nisam znao za postojanje swift -a i Xcode -a. Danas sam uspio razviti mali dio aplikacije koju želim stvoriti. Uspio sam stvoriti nešto super, što bih želio podijeliti s vama. U ovom vodiču ću uzeti
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 zaista sam ih htio upotrijebiti da napravim nešto cool. Odlučio sam da napravim Pan and Tilt sistem za svoj DSLR fotoaparat kako bih mogao stvoriti hladne vremenske odmake. Potrebni artikli: 2x koračni motor -htt
Kako riješiti problem pomicanja Xiaomi miša: 6 koraka (sa slikama)
Kako riješiti problem pomicanja miša Xiaomi mišem: Kao i sa bilo kojim drugim alatom, računarskom mišu bi na kraju trebalo neko održavanje zbog njegove stalne upotrebe. Tipično trošenje proizvoda omogućuje mu da radi manje efikasno nego što je to bilo u vrijeme kada je nekoć b