Sadržaj:

ZYBO OV7670 kamera sa kontrolom pomicanja/naginjanja: 39 koraka (sa slikama)
ZYBO OV7670 kamera sa kontrolom pomicanja/naginjanja: 39 koraka (sa slikama)

Video: ZYBO OV7670 kamera sa kontrolom pomicanja/naginjanja: 39 koraka (sa slikama)

Video: ZYBO OV7670 kamera sa kontrolom pomicanja/naginjanja: 39 koraka (sa slikama)
Video: Understand MIPI-CS2 camera connector on ZYBO Z7 2024, Juli
Anonim
Image
Image
ZYBO OV7670 Kamera sa Pan/tilt kontrolom
ZYBO OV7670 Kamera sa Pan/tilt kontrolom

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

Izgradnja PWM modula- Vivado postavljanje
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

Izgradnja PWM modula- Kreiranje projektne datoteke
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)

Izgradnja PWM modula- Dizajn bloka i postavljanje datoteke ograničenja (I)
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)

Izgradnja PWM modula- Dizajn bloka i postavljanje datoteke ograničenja (II)
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” 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)

Izgradnja PWM modula- Dizajn bloka i postavljanje datoteke ograničenja (III)
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)

Izgradnja PWM modula- Dizajn bloka i postavljanje datoteka ograničenja (IV)
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)

Izgradnja PWM modula- Dizajn bloka i postavljanje datoteke ograničenja (V)
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

Izgradnja PWM modula- Instalacija hardvera
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

Izgradnja PWM modula- Kreirajte novu aplikaciju u Xilinx SDK-u
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)

Izgradnja PWM modula- Pregled Project Explorera (I)
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)

Izgradnja PWM modula- Pregled Project Explorera (II)
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)

Izgradnja PWM modula- Pregled Project Explorera (III)
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)

Izgradnja PWM modula- završna funkcija PWM (I)
Izgradnja PWM modula- završna funkcija PWM (I)

Nazad na glavnu datoteku “helloworld.c”, uključite sljedeće datoteke zaglavlja:

Korak 16: Izgradnja PWM modula- Završna funkcija PWM (II)

Izgradnja PWM modula- završna funkcija PWM (II)
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)

Izgradnja PWM modula- završna funkcija PWM (III)
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

Kompletan blok dijagram
Kompletan blok dijagram

Ovo prikazuje potpuni dijagram svih veza i IP blokova u projektu

Korak 21: Priključite OV7670 na ZYBO

Priključite OV7670 na ZYBO
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

Kreirajte dizajn blokova
Kreirajte dizajn blokova

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

Dodajte IP Repo za HLS IP
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 i IP
Dodajte module i IP
Dodajte module i IP
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

Postavke IP konfiguracije
Postavke IP konfiguracije
Postavke IP konfiguracije
Postavke IP konfiguracije
Postavke IP konfiguracije
Postavke IP konfiguracije

Kao što je prikazano na slikama

Korak 28: Dodajte i konfigurirajte PS IP blok

Dodajte i konfigurirajte PS IP blok
Dodajte i konfigurirajte PS IP blok
Dodajte i konfigurirajte PS IP blok
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)

Bočne veze video ulaza (aklk istaknuto)
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

Priključci na OV7670
Priključci 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 na spoljašnjoj strani videa
Priključci na spoljašnjoj strani videa
Priključci na spoljašnjoj strani videa
Priključci na spoljašnjoj strani videa
Priključci na spoljašnjoj strani videa
Priključci na spoljašnjoj strani videa
Priključci na spoljašnjoj strani videa
Priključci 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 Automatizaciju blokiranja i povezivanja
Pokrenite Automatizaciju blokiranja i povezivanja
Pokrenite Automatizaciju blokiranja i povezivanja
Pokrenite Automatizaciju blokiranja i povezivanja
Pokrenite Automatizaciju blokiranja i povezivanja
Pokrenite Automatizaciju blokiranja i povezivanja

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
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)

SDK (nema FreeRTOS -a)
SDK (nema 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

Implementacija FreeRTOS -a
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

  1. Uključite svoj ZYBO. LED dioda Done ne bi trebala svijetliti.
  2. Programirajte FPGA sa bit datotekom. LED dioda Done je trebala zasvijetliti. Led0 ne bi trebao svijetliti.
  3. 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: