Taula de continguts:
- Pas 1: crear un mòdul PWM: fitxer font
- Pas 2: Construir un mòdul PWM: configuració de Vivado
- Pas 3: Construir un mòdul PWM: crear un fitxer de projecte
- Pas 4: Construir un mòdul PWM: disseny de blocs i configuració de fitxers de restricció (I)
- Pas 5: Construir un mòdul PWM: disseny de blocs i configuració de fitxers de restricció (II)
- Pas 6: Construir un mòdul PWM: disseny de blocs i configuració de fitxers de restricció (III)
- Pas 7: Construir un mòdul PWM: disseny de blocs i configuració de fitxers de restricció (IV)
- Pas 8: Construir un mòdul PWM: disseny de blocs i configuració de fitxers de restricció (V)
- Pas 9: Construir un mòdul PWM: instal·lació de maquinari
- Pas 10: Construir un mòdul PWM: genera bitstream i llança l'SDK
- Pas 11: Creació d'un mòdul PWM: creeu una nova aplicació a l'SDK de Xilinx
- Pas 12: construcció d'un mòdul PWM: visió general de l'Explorador de projectes (I)
- Pas 13: construcció d'un mòdul PWM: visió general de l'Explorador de projectes (II)
- Pas 14: construcció d'un mòdul PWM: visió general de l'Explorador de projectes (III)
- Pas 15: construcció d'un mòdul PWM: funció PWM de recopilació (I)
- Pas 16: construcció d'un mòdul PWM: funció PWM de recopilació (II)
- Pas 17: Construir un mòdul PWM: funció PWM de finalització (III)
- Pas 18: construir un mòdul PWM: feu-lo funcionar
- Pas 19: Streaming de processament de vídeo a Digilent ZYBO amb OV7670
- Pas 20: completeu el diagrama de blocs
- Pas 21: connecteu l'OV7670 al ZYBO
- Pas 22: Creeu disseny de blocs
- Pas 23: afegiu fitxers VHDL per al control i la captura de la càmera OV7670
- Pas 24: Afegiu un fitxer de restriccions
- Pas 25: afegiu IP Repo per a IP HLS
- Pas 26: afegiu mòduls i IP
- Pas 27: paràmetres de configuració d'IP
- Pas 28: afegiu i configureu el bloc IP de PS
- Pas 29: Part 1. Construir un mòdul PWM per a servomotors
- Pas 30: connexions laterals d'entrada de vídeo (aclk ressaltat)
- Pas 31: connexions a OV7670
- Pas 32: connexions a la sortida de vídeo
- Pas 33: executeu el bloc i l'automatització de la connexió
- Pas 34: generar embolcall HDL
- Pas 35: generar Bitstream, exportar maquinari a SDK, iniciar SDK des de Vivado
- Pas 36: SDK (sense FreeRTOS)
- Pas 37: Implementació de FreeRTOS
- Pas 38: instruccions d'ús
- Pas 39: referències i enllaços
Vídeo: Càmera ZYBO OV7670 amb control panoràmic / inclinable: 39 passos (amb imatges)
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:16
Comenceu al primer pas per obtenir informació detallada sobre la creació d’un controlador PWM servo de 2 eixos.
Comenceu pel diagrama de blocs massiu (pas 19) per al projecte complet.
Configuració de càmera + panoràmica / inclinació que hem utilitzat:
El PmodCON3 de Digilent es va utilitzar per connectar els servos.
Pas 1: crear un mòdul PWM: fitxer font
Pas 2: Construir un mòdul PWM: configuració de Vivado
En primer lloc, descarregueu el lloc web Vivado Design Suite From Xilinx. Instal·leu tota la suite de disseny, inclòs el kit de desenvolupament de programari (SDK) de Vivado. Aquest projecte utilitza la versió 2017.2.
Mentrestant, Digilent Adept 2 també s’hauria d’instal·lar com a controlador de placa Zybo.
Pas 3: Construir un mòdul PWM: crear un fitxer de projecte
Abans de crear un fitxer de projecte, assegureu-vos que ja heu instal·lat correctament el fitxer Zybo com a tutorial aquí:
Versió Vivado 2015.1 i posterior Instal·lació de fitxers de placa
Obert Vivado 2017.2. A l’inici ràpid, feu clic a Crea projecte -> Següent -> Nom del projecte (anomeneu aquí el nom del vostre projecte) -> Tipus de projecte. A Tipus de projecte, seleccioneu Projecte RTL i marqueu "No especifiqueu fonts en aquest moment". A continuació, per a la part per defecte, seleccioneu "Taulers" i "Zybo" com a nom visible. A continuació, feu clic a Finalitza per iniciar el projecte.
Pas 4: Construir un mòdul PWM: disseny de blocs i configuració de fitxers de restricció (I)
A Flow Navigator, feu clic a "" Crea un disseny de blocs "i, a continuació, premeu D'acord. feu clic al signe "+" per afegir les adreces IP necessàries. Afegeix:
- Un sistema de processament ZYNQ7 amb dos temporitzadors AXI
- Dos temporitzadors AXI
Pas 5: Construir un mòdul PWM: disseny de blocs i configuració de fitxers de restricció (II)
Després d'afegir IP, executeu l'automatització de blocs i l'automatització de la connexió. Un cop finalitzada l'automatització, al bloc “axi_timer_0”, feu clic amb el botó dret a pwm0 -> Fes extern. Anomeneu el pin extern pwm0 com pwm_Xaxis. A més, repeteix el procés anterior al bloc "axi_timer_1" i posa el nom del pin extern pwm0 com a pwm_Zaxis.
Pas 6: Construir un mòdul PWM: disseny de blocs i configuració de fitxers de restricció (III)
Tingueu en compte que cada vegada que acabem el disseny de blocs a Vivado, hem de crear un embolcall HDL. Ja que serà el mòdul de nivell superior per a cada projecte.
Pas 7: Construir un mòdul PWM: disseny de blocs i configuració de fitxers de restricció (IV)
Ara, hem de configurar el nostre fitxer de restriccions per assignar pins connectats al nostre diagrama de blocs. Tanqueu la finestra Disseny de blocs, a la pestanya Fonts, "Afegeix fonts" -> Afegiu o creeu restriccions-> afegiu el Zybo-Master.xdc com a fitxers de restricció.
Pas 8: Construir un mòdul PWM: disseny de blocs i configuració de fitxers de restricció (V)
Obriu el fitxer de restriccions Zybo-Master.xdc de la carpeta Constraints, descomenteu els ports que volem especificar com a senyals de sortida i canvieu el nom de "get_ports {XXXX}", que XXXX designa el pin extern anomenat al diagrama de blocs. La configuració del fitxer de restricció es mostra a la figura.
Pas 9: Construir un mòdul PWM: instal·lació de maquinari
Connecteu els servomotors al Pmod CON3. TowerPro SG90 és el model de servomotor que hem utilitzat en aquest projecte. Per als cables del servomotor, el cable taronja representa el senyal PWM, connectat al pin SIG del Pmod CON3. El cable vermell Vcc és un cable d'alimentació connectat al pin VS del Pmod CON3. Finalment, el fil marró Gnd és un fil de terra connectat al pin GND. A continuació, inseriu el Pmod CON3 a la fila superior del port JD a la placa Zybo.
Pas 10: Construir un mòdul PWM: genera bitstream i llança l'SDK
1. A la pestanya Project Navigator, executeu Generate BitStream.
2. Exporteu maquinari: Fitxer> Exporta> Exporta maquinari-> marqueu a "inclou bitstream" -> D'acord 3. Inicieu l'SDK: Fitxer -> Inicieu l'SDK.
Pas 11: Creació d'un mòdul PWM: creeu una nova aplicació a l'SDK de Xilinx
Creeu una aplicació nova:
Fitxer> Nou> Projecte d'aplicació -> Introduïu el nom del vostre projecte -> Finalitza
A Project Explorer, hi hauria d’haver tres carpetes.
En aquest cas, "design_1_wrapper_hw_platform_0" és la carpeta exportada anteriorment per Vivado. Axis_2_PWM_SDK_bsp és la carpeta de paquets de suport de la placa. I Axis_2_PWM_SDK és la nostra carpeta principal del projecte a l’SDK. Podeu veure el fitxer "helloworld.c" a la carpeta "src" d'Axis_2_PWM_SDK, on "helloworld.c" és el fitxer principal.
Pas 12: construcció d'un mòdul PWM: visió general de l'Explorador de projectes (I)
Consulteu alguns fitxers a Project Explorer. Primer, a la carpeta "design_1_wrapper_hw_platform_0", obriu el "system.hdf". Aquest fitxer mostra el mapa d'adreces del processador ps7_cortex9 i els blocs IP presents al nostre disseny.
Pas 13: construcció d'un mòdul PWM: visió general de l'Explorador de projectes (II)
A continuació, comproveu els fitxers "inclou" i "libsrc" a la carpeta "Axis_2_PWM_SDK_bsp". Els fitxers de biblioteca aquí ens permeten interactuar amb perifèrics de maquinari sense "reproduir" registres.
Pas 14: construcció d'un mòdul PWM: visió general de l'Explorador de projectes (III)
A través de la documentació BSP, xtmrctr.h es troba com una biblioteca de control del temporitzador Xilinx relacionada amb el temporitzador AXI. Normalment, aquí podríem trobar la funció PWM desitjada. Tanmateix, si llegiu la documentació "tmrctr_v4_3", es mostra que el controlador actualment no admet l'operació PWM del dispositiu. A causa de la deficiència de la funció PWM, hem de completar la nostra funció PWM amb l'ajut de xtmrctr.h i AXI Timer v2.0 LogiCORE IP Product Guide.
Pas 15: construcció d'un mòdul PWM: funció PWM de recopilació (I)
De nou al fitxer principal "helloworld.c", incloeu els fitxers de capçalera següents:
Pas 16: construcció d'un mòdul PWM: funció PWM de recopilació (II)
Definiu les adreces base de dos AXI TImer mitjançant "xparameters.h".
Pas 17: Construir un mòdul PWM: funció PWM de finalització (III)
Construïu la funció PWM desitjada.
Duty_val: converteix el valor del grau en cicle de treball. PWM_Freq_Duty: estableix la freqüència i el cicle de treball desitjats per generar PWM. També s’ha d’assignar el període de rellotge.
PWM_START: assigneu l'adreça del registre PWM i comenceu a generar PWM.
PWM_STOP: assigneu l'adreça del registre PWM i deixeu de generar PWM.
La resta de codi de demostració es mostra a "helloworld.c" a "Axis_2_PWM_SDK"
Pas 18: construir un mòdul PWM: feu-lo funcionar
1. Programa el FPGA mitjançant SDK
- Connecteu la placa Zybo a través del port USB al PC.
- Eines Xilinx -> Programa FPGA
2. Executeu el programa
Feu clic a la icona "Executa" i desplegueu el menú -> Executa com -> Inicia al maquinari
3. Terminal SDK
- Obriu el terminal de l'SDK -> Connectar al port sèrie -> D'acord
- Executeu el programa. Si el codi de demostració s'executa correctament, hauríeu de veure "Inicialització feta". al terminal SDK.
Pas 19: Streaming de processament de vídeo a Digilent ZYBO amb OV7670
S'adjunta l'arxiu d'arxiu complet.
Pas 20: completeu el diagrama de blocs
Es mostra el diagrama complet de totes les connexions i blocs IP del projecte
Pas 21: connecteu l'OV7670 al ZYBO
Creeu una connexió per connectar el mòdul ov7670 als ZYBO Pmods
Pmod de dades és Pmod D.
El control Pmod és Pmod C
A més, connecteu el PmodCON3 i els servos tal com s’especifica a la primera meitat d’aquest tutorial
Pas 22: Creeu disseny de blocs
A Flow Navigator, feu clic a "Crea disseny de blocs" i premeu D'acord.
Pas 23: afegiu fitxers VHDL per al control i la captura de la càmera OV7670
Afegiu al projecte els fitxers VHDL adjunts a aquest pas
Pas 24: Afegiu un fitxer de restriccions
Afegiu el fitxer de restriccions adjunt al vostre projecte.
Pas 25: afegiu IP Repo per a IP HLS
Agafeu el fitxer Zip adjunt i descomprimiu-lo a una nova carpeta anomenada de manera similar en un nou directori (carpeta) anomenat "HLS_repo".
Afegiu un dipòsit d'IP al vostre projecte anant al catàleg d'IP i fent clic amb el botó dret seleccionant "Afegeix un dipòsit …"
Aneu al directori "HLS_repo" i seleccioneu-lo.
Opcional: creeu el bloc de processament de vídeo HLS.
Pas 26: afegiu mòduls i IP
Afegiu els mòduls ov7670_axi_stream_capture, debounce i ov7670_controller al diagrama de blocs fent clic dret al fons i seleccionant "Afegeix mòdul …"
De la mateixa manera, afegiu les adreces IP:
- HLS_Video_Track
- Escriptura de memòria intermèdia de vídeo
- Lectura de memòria intermèdia de vídeo
- Controlador de sincronització de vídeo
- AXI4-Stream a sortida de vídeo
- 3 de "llesca"
- Constant
- 2 del temporitzador AXI
Pas 27: paràmetres de configuració d'IP
Com es mostra a les imatges
Pas 28: afegiu i configureu el bloc IP de PS
Afegiu el sistema de processament ZYNQ7 al diagrama de blocs
editeu la configuració:
-
Configuració PS-PL
-
HP
- Activa S HP 0
- Activa S HP 1
-
-
Configuració del rellotge
-
Rellotges de tela PL
- FCLK_0 a 100 MHz
- FCLK_1 a 25 MHz (OutputClock)
- FLCK_2 a 35 MHz (<= 50 MHz) (CameraClock)
-
Pas 29: Part 1. Construir un mòdul PWM per a servomotors
Traieu axi_timer_0 pwm0 al nou port de sortida pwm_Xaxis
Traieu axi_timer_1 pwm0 al nou port de sortida pwm_Zaxis
Pas 30: connexions laterals d'entrada de vídeo (aclk ressaltat)
Connecteu correctament els blocs IP del costat d’entrada de vídeo
(* aquestes connexions haurien de crear-se seleccionant les opcions adequades durant l'automatització de la connexió) "aclk" de la captura axi_stream_ va a:
- ap_clk a l'escriptura de memòria intermèdia del marc de vídeo
- ap_clk al bloc de processament de flux de vídeo HLS
- * Feu clic a IP AXI smartconnect des de la memòria intermèdia del marc de vídeo Escriviu al S_AXI_HP0
- * aclk corresponent als canals de l'IP d'interconnexió AXI per als canals S_AXI del bloc de processament de vídeo HLS i la memòria intermèdia del marc de vídeo escriu S_AXI_HP0_ACLK al bloc PS
El senyal de transmissió de vídeo simplement es connecta en sèrie des del bloc de captura a la interfície de memòria Zynq.
- El vídeo passa del bloc de captura al bloc de processament HLS.
- El vídeo processat del bloc HLS es dirigeix al bloc d’escriptura de memòria intermèdia de fotogrames.
- * El bloc d'escriptura de memòria intermèdia de marcs es connecta a la interfície HP0 del bloc Zynq PS.
- El senyal m_axis_tuser de la sortida del bloc de captura es connecta manualment al senyal d'entrada video_in_TUSER del bloc de processament HLS i al senyal ap_start del mateix bloc.
El senyal TUSER (tuser) l’utilitza el protocol de flux de vídeo AXI per indicar l’inici d’un fotograma del vídeo. AP_Start indica al bloc HLS que comenci a processar. Per tant, fem servir el tuser per activar el bloc HLS per processar cada fotograma tal com es fa. entra. Quan es connecta un senyal únic d'un autobús i es divideix d'aquesta manera, cal connectar-lo també al punt de finalització normal de la resta del bus. Vivado assumeix que, si esteu connectant el senyal manualment, voleu desconnectar a què es connectaria normalment.
Configuració dels blocs IP:
Escriptura de memòria intermèdia de marcs de vídeo:
Formats de vídeo: RGB8
1 mostra per rellotge Màxima de columnes: 1280 (> = 640) Màxima fila: 960 (> = 480) Amplada màxima de dades: 8
Pas 31: connexions a OV7670
Al bloc ov7670_axi_stream_capture
- Feu que totes les entrades siguin externes (feu clic amb el botó dret a un pin i seleccioneu al menú o feu clic esquerre-> ctrl + T)
- Deixeu els noms tal com són
Al bloc ov7670_controller
- Feu que totes les sortides del bloc siguin externes
- Canvieu el nom del port config_finished a led0
- connect clk al CameraClock (<= 50 MHz) (FCLK_2)
Al bloc de rebounce
- connecteu l’entrada button1 a un port d’entrada extern anomenat btn0
- connecteu l’out1 a la línia de reenviament del bloc IP ov7670_controller
- connecteu l’entrada button2 a un port d’entrada extern anomenat btn3
- connecteu out2n a l'entrada ext_reset_in a la IP de reinici del sistema del processador per al domini del rellotge de captura de vídeo. (* Pot ser que calgui fer-ho després de generar aquesta IP *)
- connect clk al CameraClock (<= 50 MHz) (FCLK_2)
Pas 32: connexions a la sortida de vídeo
Connexions per a blocs Video Timing Controller (VTC), AXI4-Stream to Video Out i talls
- Utilitzeu un rellotge de 25 MHz (FCLK_1) per a vid_io_out_clk i VTC clk
- Utilitzeu un rellotge de 100 MHz (FCLK_0) per acclk a AXI4-Stream to Video Out
- vtiming_out a vtiming_in
- Límit de memòria intermèdia de vídeo m_axis_video va a AXI4-Stream to Video Out video_in
- vtg_ce va a gen_clken
- Vincula clken VTC, aclken, vid_io_out_ce a Constant dout [0: 0]
- Traieu vid_hsync i vid_vsync als ports de sortida externs vga_hs i vga_vs, respectivament. (no apareix a la foto)
Llesques:
-
Els talls s'han de configurar tal com es mostra a les imatges adjuntes
- canvieu el nom dels blocs a slice_red, slice_green i slice_blue
- configureu els intervals de la secció tal com es mostra a les imatges segons el nom del bloc
- connecteu cada sortida de tall a una sortida de port extern com es mostra a la imatge.
- vid_data [23: 0] es connecta a les entrades de cada segment (Din [23: 0])
Pas 33: executeu el bloc i l'automatització de la connexió
Executeu Block Automation per connectar les coses del bloc ZYNQ7 PS. Com mostra la imatge.
Executeu l'automatització de la connexió per crear tota la IP d'interconnexió. Preste molta atenció a totes les opcions de cada imatge.
Al bloc de rebounce, connecteu out2n al domini del rellotge de captura de vídeo Processador Restabliment del sistema entrada ext_reset_in.
Pas 34: generar embolcall HDL
Genereu l’embolcall HDL per al disseny del vostre bloc.
Establiu-lo com a mòdul superior.
Pas 35: generar Bitstream, exportar maquinari a SDK, iniciar SDK des de Vivado
Assegureu-vos d’incloure el flux de bits a l’exportació.
La generació de flux de bits pot trigar molt de temps.
A continuació, inicieu l'SDK
Pas 36: SDK (sense FreeRTOS)
Aquesta versió ho fa tot sense utilitzar FreeRTOS, condensant el codi molt bé.
Creeu un BSP autònom basat en el disseny de maquinari. Les opcions per defecte haurien d’estar bé. Assegureu-vos que s’hagin generat fonts BSP.
Creeu una aplicació tal com es mostra a la imatge. (aplicació buida)
Suprimiu la pàgina principal autogenerada i importeu els fitxers adjunts.
Pas 37: Implementació de FreeRTOS
Aquesta versió utilitza FreeRTOS. Crea un FreeRTOS901 BSP basat en el disseny del maquinari. Les opcions per defecte haurien d’estar bé. Assegureu-vos que s’hagin generat fonts BSP.
Creeu una aplicació tal com es mostra a la imatge. (aplicació buida)
Suprimiu la pàgina principal autogenerada i importeu els fitxers adjunts.
Pas 38: instruccions d'ús
Aquest projecte és una mica difícil d’executar. Seguiu els passos en ordre.
Assegureu-vos que el ZYBO no es carrega res quan s’encén. Això significa que el LED Fet no s'hauria d'encendre. Una manera de fer-ho és establir el pont d’origen d’arrencada a JTAG.
Obriu el projecte (FreeRTOS o no) que voleu programar des de l'SDK
- Enceneu el ZYBO. El LED Fet no s’ha d’encendre.
- Programa el FPGA amb el fitxer de bits. El LED Fet hauria d’encendre’s. El led0 no s’ha d’encendre.
- Executeu el codi (recordeu-vos de superar el punt d’interrupció inicial si ho feu).
En aquest punt hauríeu d’obtenir una sortida a la pantalla VGA.
Per reiniciar (si es produeix un error o qualsevol altra cosa): toqueu ràpidament el botó PS-SRST o apagueu el ZYBO i torneu-lo a encendre. Continueu des del pas 2.
Si atureu el processador amb el depurador, la càmera es mantindrà en lloc de moure’s. El flux de vídeo continuarà igualment.
Pas 39: referències i enllaços
Guies i documentació de referència Xilinx:
- PG044: transmissió AXI a sortida de vídeo
- PG278: lectura / escriptura de memòria intermèdia de vídeo
Altres enllaços:
- Blog de Lauri: entrada VDMA
- Blog de Lauri: sortida OV7670 a VGA mitjançant BRAM
- Wiki Hamsterworks, de Mike Fields, la font original del codi OV7670
- Full de dades que mostra les especificacions bàsiques de temps
Recomanat:
Laberint LEGO inclinable amb micro: bit: 9 passos
Inclinar el laberint de LEGO amb Micro: bit: no és cap secret, el LEGO és increïble i no hi ha res més que estimar que afegir elements electrònics divertits als nostres kits de LEGO per fer-los encara més increïbles. El nostre laberint LEGO té poms en dos dels costats per permetre inclinar la meitat superior i maniobrar una pilota
Controlador panoràmic Arduino Time-Lapse: 8 passos (amb imatges)
Controlador panoràmic Arduino Time-Lapse: controlador panoràmic per a càmeres GoPro El controlador farà girar el GoPro sobre un angle establert durant una durada determinada o us farà girar GoPro per fer una rotació completa durant una durada determinada. Aquest projecte es basa en la instrucció original de Tyler Winegarner Veure
Control de control de control de càmera [Arduino Nano]: 4 passos
Control de control de control de càmera [Arduino Nano]: necessiteu un control de control de càmera per obtenir fotografies d'acció realment interessants en què construïu alguna cosa, un producte o fins i tot el que heu creat? Servocity ofereix un bon kit de control de control, però no té cap - Assemblea de controls fets per a això. En aquest post es descriurà com
Com construir un capçal de trípode per 10 dòlars que sigui panoràmic: 5 passos (amb imatges)
Com construir un capçal de trípode per 10 dòlars que és panoràmic: el programari de costura i les càmeres digitals fan que les fotos panoràmiques siguin molt més fàcils que mai. Tot i això, per obtenir els millors resultats, necessiteu un capçal de trípode especial. Aquests poden costar centenars de dòlars, però fer-ne un no és tan difícil. Encara millor, és di
Caixa de llum inclinable LED: 5 passos (amb imatges)
Quadre de llum inclinable LED: aquest instructiu us mostrarà com fer una placa de circuit senzilla amb un interruptor de mercuri (interruptor inclinable) i LEDs i, a continuació, una petita caixa de fusta amb una finestra per col·locar-la