Isi kandungan:

Kamera ZYBO OV7670 Dengan Kawalan Pan / tilt: 39 Langkah (dengan Gambar)
Kamera ZYBO OV7670 Dengan Kawalan Pan / tilt: 39 Langkah (dengan Gambar)

Video: Kamera ZYBO OV7670 Dengan Kawalan Pan / tilt: 39 Langkah (dengan Gambar)

Video: Kamera ZYBO OV7670 Dengan Kawalan Pan / tilt: 39 Langkah (dengan Gambar)
Video: Seeing and differentiating colors using DEO-Nano and OV7670 camera 2024, November
Anonim
Image
Image
Kamera ZYBO OV7670 Dengan Kawalan Pan / tilt
Kamera ZYBO OV7670 Dengan Kawalan Pan / tilt

Mulakan pada langkah pertama untuk perincian hanya dengan membuat pengawal PWM servo 2 paksi.

Mulakan pada gambarajah blok besar-besaran (Langkah 19) untuk projek penuh.

Penyediaan kamera + Pan / tilt yang kami gunakan:

PmodCON3 dari Digilent digunakan untuk menghubungkan servos.

Langkah 1: Membina Modul PWM- Fail Sumber

Langkah 2: Membangun Modul PWM- Persediaan Vivado

Membina Modul PWM- Persediaan Vivado
Membina Modul PWM- Persediaan Vivado

Pertama, muat turun laman web Vivado Design Suite From Xilinx. Pasang semua rangkaian reka bentuk, termasuk Vivado Software Development Kit (SDK). Projek ini menggunakan versi 2017.2.

Sementara itu, Digilent Adept 2 juga harus dipasang sebagai pemacu papan Zybo.

Langkah 3: Membangun Modul PWM- Buat Fail Projek

Membina Modul PWM- Buat Fail Projek
Membina Modul PWM- Buat Fail Projek

Sebelum membuat fail projek, anda harus memastikan bahawa anda sudah memasang fail Zybo dengan betul sebagai tutorial di sini:

Versi Vivado 2015.1 dan Pemasangan Fail Papan Kemudian

Buka Vivado 2017.2. Pada Permulaan Pantas, klik Buat Projek -> Seterusnya -> Nama Projek (Namakan nama projek anda di sini) -> Jenis Projek. Pada Jenis Projek, pilih Projek RTL dan tandai pada "Jangan tentukan sumber pada masa ini". Selanjutnya, untuk Bahagian Lalai, pilih "Papan" dan "Zybo" sebagai Nama Paparan. Seterusnya, Klik Selesai untuk memulakan projek.

Langkah 4: Membina Modul PWM- Reka Bentuk Blok dan Tetapan Fail Kekangan (I)

Membina Modul PWM- Reka Bentuk Blok dan Tetapan Fail Kekangan (I)
Membina Modul PWM- Reka Bentuk Blok dan Tetapan Fail Kekangan (I)

Pada Flow Navigator, klik pada "" Buat Blok Reka Bentuk ", kemudian tekan OK. klik tanda "+" untuk menambah IP yang diperlukan. Tambah:

  • Sistem Pemprosesan Satu ZYNQ7 Dua Pemasa AXI
  • Dua Pemasa AXI

Langkah 5: Membina Modul PWM- Reka Bentuk Reka Bentuk dan Pengaturan Fail Kekangan (II)

Membangun Modul PWM- Reka Bentuk Blok dan Tetapan Fail Kekangan (II)
Membangun Modul PWM- Reka Bentuk Blok dan Tetapan Fail Kekangan (II)

Setelah Menambah IP, Jalankan Automasi Blok dan automasi sambungan. Setelah automasi selesai, pada blok "axi_timer_0", klik kanan pada pwm0 -> Buat Luaran. Namakan pin luaran pwm0 sebagai pwm_Xaxis. Juga, ulangi proses di atas pada blok “axi_timer_1” dan namakan pin luaran pwm0 sebagai pwm_Zaxis.

Langkah 6: Membangun Modul PWM- Reka Bentuk Blok dan Tetapan Fail Kekangan (III)

Membangun Modul PWM- Tetapan Fail Reka Bentuk dan Kekangan (III)
Membangun Modul PWM- Tetapan Fail Reka Bentuk dan Kekangan (III)

Perhatikan bahawa setiap kali kita menyelesaikan Reka Bentuk Blok di Vivado, kita perlu membuat Pembungkus HDL. Oleh kerana ia akan menjadi modul peringkat teratas untuk setiap projek.

Langkah 7: Membangun Modul PWM- Reka Bentuk Blok dan Tetapan Fail Kekangan (IV)

Membina Modul PWM- Reka Bentuk Blok dan Tetapan Fail Kekangan (IV)
Membina Modul PWM- Reka Bentuk Blok dan Tetapan Fail Kekangan (IV)

Sekarang, kita perlu menyediakan fail kekangan kita untuk menetapkan pin yang disambungkan ke rajah blok kita. Tutup tetingkap Reka Bentuk, tab Di Sumber, "Tambah Sumber" -> Tambah atau buat kekangan-> tambahkan Zybo-Master.xdc sebagai fail kekangan kami.

Langkah 8: Membangun Modul PWM- Reka Bentuk Blok dan Tetapan Fail Kekangan (V)

Membangun Modul PWM- Reka Bentuk Blok dan Tetapan Fail Kekangan (V)
Membangun Modul PWM- Reka Bentuk Blok dan Tetapan Fail Kekangan (V)

Buka fail kekangan Zybo-Master.xdc dari folder Kekangan, lepaskan port yang ingin kami tentukan sebagai isyarat output dan namakan semula "get_ports {XXXX}", yang XXXX menunjukkan pin luaran yang dinamakan dalam Blok Diagram. Pengaturan fail kekangan ditunjukkan dalam gambar.

Langkah 9: Membangun Modul PWM- Pemasangan Perkakasan

Membina Modul PWM- Pemasangan Perkakasan
Membina Modul PWM- Pemasangan Perkakasan

Sambungkan motor servo ke Pmod CON3. TowerPro SG90 adalah model motor servo yang kami gunakan dalam projek ini. Untuk wayar motor servo, wayar oren mewakili isyarat PWM, disambungkan ke pin SIG di Pmod CON3. Vcc wayar merah adalah wayar kuasa yang disambungkan ke pin VS di Pmod CON3. Akhirnya, wayar coklat Gnd adalah wayar tanah yang disambungkan ke pin GND. Seterusnya, masukkan Pmod CON3 ke baris atas port JD di Papan Zybo.

Langkah 10: Membangun Modul PWM- Hasilkan Bitstream dan Lancarkan SDK

1. Di tab Project Navigator, jalankan Hasilkan BitStream.

2. Eksport perkakasan: Fail> Eksport> Eksport Perkakasan-> tanda pada "sertakan bitstream" -> OK 3. Lancarkan SDK: Fail -> Lancarkan SDK.

Langkah 11: Membangun Modul PWM- Buat Aplikasi Baru di Xilinx SDK

Membangun Modul PWM- Buat Aplikasi Baru di Xilinx SDK
Membangun Modul PWM- Buat Aplikasi Baru di Xilinx SDK

Buat aplikasi baru:

Fail> Baru> Projek Aplikasi -> Masukkan nama projek anda -> Selesai

Di bawah Project Explorer, terdapat tiga folder.

Dalam kes ini, "design_1_wrapper_hw_platform_0" adalah folder yang sebelumnya dieksport oleh Vivado. Axis_2_PWM_SDK_bsp adalah folder pakej sokongan papan. Dan Axis_2_PWM_SDK adalah folder projek utama kami di SDK. Anda dapat melihat fail "helloworld.c" di bawah folder "src" Axis_2_PWM_SDK, di mana "helloworld.c" adalah fail utama.

Langkah 12: Membangun Modul PWM- Gambaran Keseluruhan Project Explorer (I)

Membina Modul PWM- Gambaran Keseluruhan Project Explorer (I)
Membina Modul PWM- Gambaran Keseluruhan Project Explorer (I)

Mari kita periksa beberapa fail di bawah Project Explorer. Pertama, dalam folder "design_1_wrapper_hw_platform_0", buka "system.hdf". Fail ini menunjukkan peta alamat untuk pemproses ps7_cortex9 dan blok IP yang terdapat dalam reka bentuk kami.

Langkah 13: Membangun Modul PWM- Gambaran Keseluruhan Project Explorer (II)

Membangun Modul PWM- Gambaran Keseluruhan Project Explorer (II)
Membangun Modul PWM- Gambaran Keseluruhan Project Explorer (II)

Kemudian, periksa fail "sertakan" dan "libsrc" di bawah folder "Axis_2_PWM_SDK_bsp". Fail perpustakaan di sini membolehkan kita berinteraksi dengan peranti perkakasan tanpa daftar "bermain".

Langkah 14: Membangun Modul PWM- Gambaran Keseluruhan Project Explorer (III)

Membina Modul PWM- Gambaran Keseluruhan Project Explorer (III)
Membina Modul PWM- Gambaran Keseluruhan Project Explorer (III)

Melalui dokumentasi BSP, xtmrctr.h dijumpai sebagai Perpustakaan Kawalan Pemasa Xilinx yang berkaitan dengan Pemasa AXI. Biasanya, kita dapat menemui fungsi PWM yang diingini di sini. Namun, jika anda membaca dokumentasi "tmrctr_v4_3", ini menunjukkan bahawa pemandu tidak menyokong operasi PWM pada masa ini. Kerana kekurangan fungsi PWM, kita harus menyelesaikan fungsi PWM kita dengan bantuan Panduan Produk IP LogiCORE xtmrctr.h dan AXI Timer v2.0.

Langkah 15: Membangun Modul PWM- Membungkus Fungsi PWM (I)

Membangun Modul PWM- Membungkus Fungsi PWM (I)
Membangun Modul PWM- Membungkus Fungsi PWM (I)

Kembali ke fail utama "helloworld.c", sertakan fail tajuk berikut:

Langkah 16: Membangun Modul PWM- Membungkus Fungsi PWM (II)

Membangun Modul PWM- Membungkus Fungsi PWM (II)
Membangun Modul PWM- Membungkus Fungsi PWM (II)

Tentukan alamat asas dua AXI TImer melalui "xparameters.h".

Langkah 17: Membangun Modul PWM- Membungkus Fungsi PWM (III)

Membina Modul PWM- Membungkus Fungsi PWM (III)
Membina Modul PWM- Membungkus Fungsi PWM (III)

Bina fungsi PWM yang diingini.

Duty_val: menukar nilai darjah menjadi kitaran tugas. PWM_Freq_Duty: tetapkan frekuensi dan kitaran tugas yang dikehendaki untuk menghasilkan PWM. Tempoh jam juga harus diberikan.

PWM_START: berikan alamat pendaftaran PWM dan mula menghasilkan PWM.

PWM_STOP: berikan alamat daftar PWM dan berhenti menghasilkan PWM.

Selebihnya kod demo ditunjukkan dalam "helloworld.c" di bawah "Axis_2_PWM_SDK"

Langkah 18: Membina Modul PWM- Jadikannya Berjalan

1. Program FPGA melalui SDK

  • Sambungkan Zybo Board melalui port USB ke PC.
  • Alat Xilinx -> Program FPGA

2. Jalankan program

Klik pada ikon "Jalankan" dan turunkan menu -> Jalankan Sebagai -> Lancarkan pada Perkakasan

3. Terminal SDK

  • Buka Terminal SDK -> Sambungkan ke Serial Port -> OK
  • Jalankan program. Sekiranya kod demo berjaya dijalankan, anda akan melihat "Permulaan selesai!" di Terminal SDK.

Langkah 19: Menstrimkan Pemprosesan Video di Digilent ZYBO Dengan OV7670

Fail arkib lengkap dilampirkan.

Langkah 20: Gambarajah Blok Lengkap

Gambarajah Blok Lengkap
Gambarajah Blok Lengkap

Ini menunjukkan gambarajah lengkap semua sambungan dan blok IP dalam projek

Langkah 21: Sambungkan OV7670 ke ZYBO

Sambungkan OV7670 ke ZYBO
Sambungkan OV7670 ke ZYBO

Buat sambungan untuk memasangkan modul ov7670 ke ZYBO Pmods

Data Pmod ialah Pmod D

Control Pmod ialah Pmod C

Selain itu, sambungkan PmodCON3 dan servo seperti yang dinyatakan pada separuh pertama tutorial ini

Langkah 22: Buat Reka Bentuk Blok

Buat Reka Bentuk Blok
Buat Reka Bentuk Blok

Di Flow Navigator, klik "Buat Reka Bentuk Blok", kemudian tekan OK.

Langkah 23: Tambahkan Fail VHDL untuk Kawalan dan Tangkap Kamera OV7670

Tambahkan fail VHDL yang dilampirkan pada langkah ini ke projek

Langkah 24: Tambah Fail Kekangan

Tambahkan fail kekangan yang dilampirkan ke projek anda.

Langkah 25: Tambahkan IP Repo untuk IP HLS

Tambah Repo IP untuk IP HLS
Tambah Repo IP untuk IP HLS

Ambil fail Zip yang dilampirkan dan unzip ke folder baru yang dinamakan serupa dalam direktori baru (folder) yang disebut "HLS_repo".

Tambahkan repositori IP ke projek anda dengan pergi ke katalog IP dan klik kanan memilih "Tambah Repositori …"

Navigasi ke direktori "HLS_repo" anda dan pilih.

Pilihan: Buat blok pemprosesan video HLS untuk diri anda sendiri!

Langkah 26: Tambahkan Modul dan IP

Tambah Modul dan IP
Tambah Modul dan IP
Tambah Modul dan IP
Tambah Modul dan IP

Tambahkan modul ov7670_axi_stream_capture, debounce dan ov7670_controller ke diagram blok dengan mengklik kanan latar belakang dan memilih "Tambah Modul…"

Begitu juga, tambahkan IP:

  • HLS_Video_Track
  • Penulisan Bingkai Video Menulis
  • Pembacaan Bingkai Video Dibaca
  • Pengawal Pemasaan Video
  • AXI4-Streaming ke Video Out
  • 3 daripada "Potongan"
  • Pemalar
  • 2 dari Pemasa AXI

Langkah 27: Tetapan Konfigurasi IP

Tetapan Konfigurasi IP
Tetapan Konfigurasi IP
Tetapan Konfigurasi IP
Tetapan Konfigurasi IP
Tetapan Konfigurasi IP
Tetapan Konfigurasi IP

Seperti yang ditunjukkan dalam gambar

Langkah 28: Tambah dan Konfigurasikan Blok IP PS

Tambah dan Konfigurasikan Blok IP PS
Tambah dan Konfigurasikan Blok IP PS
Tambah dan Konfigurasikan Blok IP PS
Tambah dan Konfigurasikan Blok IP PS

Tambahkan Sistem Pemprosesan ZYNQ7 ke rajah blok

edit konfigurasi:

  • Konfigurasi PS-PL

    • HP

      • Dayakan S HP 0
      • Dayakan S HP 1
  • Konfigurasi jam

    • Jam Kain PL

      • FCLK_0 pada 100MHz
      • FCLK_1 pada 25MHz (OutputClock)
      • FLCK_2 pada 35MHz (<= 50MHz) (CameraClock)

Langkah 29: Bahagian 1. Membangun Modul PWM untuk Servo Motors

Keluarkan axi_timer_0 pwm0 ke port output baru pwm_Xaxis

Keluarkan axi_timer_1 pwm0 ke port output baru pwm_Zaxis

Langkah 30: Sambungan Sisi Input Video (aclk Diserlahkan)

Sambungan Sisi Input Video (aclk Diserlahkan)
Sambungan Sisi Input Video (aclk Diserlahkan)

Sambungkan blok IP sisi input video dengan betul

(* sambungan ini harus dibuat dengan memilih pilihan yang tepat semasa automasi sambungan) "aclk" dari axi_stream_capture pergi ke:

  • ap_clk pada penampan bingkai video
  • ap_clk pada blok pemprosesan aliran video HLS
  • * aclk pada AXI smartconnect IP dari Penyangga Bingkai Video Tulis ke S_AXI_HP0
  • * aclk sesuai dengan saluran IP Interkoneksi AXI untuk saluran S_AXI dari blok pemprosesan video HLS dan penyangga bingkai video tulis S_AXI_HP0_ACLK pada blok PS

Isyarat aliran video hanya dihubungkan secara bersiri dari blok tangkapan ke antara muka memori Zynq.

  • Video beralih dari blok tangkapan ke blok pemprosesan HLS.
  • Video yang diproses dari blok HLS menuju ke blok penulisan bingkai penyangga.
  • * Blok tulis penyangga bingkai menyambung ke antara muka HP0 pada blok Zynq PS.
  • Isyarat m_axis_tuser dari output blok tangkapan secara manual disambungkan ke kedua isyarat input video_in_TUSER pada blok pemprosesan HLS dan isyarat ap_start pada blok yang sama.

Isyarat TUSER (tuser) digunakan oleh protokol aliran video AXI untuk menunjukkan permulaan bingkai video. AP_Start memberitahu blok HLS untuk memulakan pemprosesan. Oleh itu, kami menggunakan tuser untuk mencetuskan blok HLS untuk memproses setiap bingkai kerana ia masuk. Semasa menyambungkan satu isyarat bas dan memisahkannya dengan cara ini, perlu juga menghubungkannya sebagai titik penamatan normal dari bas yang lain. Vivado menganggap bahawa jika anda menyambungkan isyarat secara manual bahawa anda ingin memutuskan sambungannya.

Tetapan konfigurasi blok IP:

Penanda bingkai video menulis:

Format video: RGB8

1 sampel setiap jam Lajur maksimum: 1280 (> = 640) Baris maksimum: 960 (> = 480) Lebar data maksimum: 8

Langkah 31: Sambungan ke OV7670

Sambungan ke OV7670
Sambungan ke OV7670

Pada blok ov7670_axi_stream_capture

  • Jadikan semua input luaran (klik kanan pada pin dan pilih dari menu, atau klik kiri-> ctrl + T)
  • Tinggalkan nama sebagaimana adanya

Pada blok ov7670_controller

  • Jadikan semua output blok menjadi luaran
  • Namakan semula port config_finished ke led0
  • sambungkan clk ke CameraClock (<= 50MHz) (FCLK_2)

Pada blok debounce

  • sambungkan input button1 ke port input luaran yang disebut btn0
  • sambungkan out1 ke talian hantar semula di blok IP ov7670_controller
  • sambungkan input button2 ke port input luaran yang disebut btn3
  • sambungkan out2n ke input ext_reset_in pada IP Reset Sistem Pemproses untuk domain jam tangkap video. (* Ini mungkin perlu dilakukan setelah IP dihasilkan *)
  • sambungkan clk ke CameraClock (<= 50MHz) (FCLK_2)

Langkah 32: Sambungan di Bahagian Luar Video

Sambungan di Bahagian Luar Video
Sambungan di Bahagian Luar Video
Sambungan di Bahagian Luar Video
Sambungan di Bahagian Luar Video
Sambungan di Bahagian Luar Video
Sambungan di Bahagian Luar Video
Sambungan di Bahagian Luar Video
Sambungan di Bahagian Luar Video

Sambungan untuk blok Video Timing Controller (VTC), AXI4-Stream to Video Out, dan slice

  • Gunakan jam 25MHz (FCLK_1) untuk vid_io_out_clk dan VTC clk
  • Gunakan jam 100MHz (FCLK_0) untuk aclk pada AXI4-Stream ke Video Out
  • vtiming_out to vtiming_in
  • Video Frame Buffer Baca m_axis_video menuju ke AXI4-Streaming ke Video Out video_in
  • vtg_ce pergi ke gen_clken
  • Ikat VTC clken, aclken, vid_io_out_ce ke Constant dout [0: 0]
  • Bawa vid_hsync dan vid_vsync ke port output luaran, masing-masing vga_hs dan vga_vs. (tidak bergambar)

Potongan:

  • Potongan harus disiapkan seperti yang ditunjukkan dalam gambar yang dilampirkan

    • ganti nama blok menjadi slice_red, slice_green, dan slice_blue
    • susunan slice berkisar seperti yang ditunjukkan dalam gambar mengikut nama blok
    • sambungkan setiap output slice ke output port luaran seperti yang ditunjukkan dalam gambar.
  • vid_data [23: 0] menyambung ke input untuk setiap slice (Din [23: 0])

Langkah 33: Jalankan Automasi Blok dan Sambungan

Jalankan Automasi Blok dan Sambungan
Jalankan Automasi Blok dan Sambungan
Jalankan Automasi Blok dan Sambungan
Jalankan Automasi Blok dan Sambungan
Jalankan Automasi Blok dan Sambungan
Jalankan Automasi Blok dan Sambungan

Jalankan Automasi Blok untuk menghubungkan perkara dari blok ZYNQ7 PS. Seperti yang ditunjukkan oleh gambar.

Jalankan automasi Connection untuk membuat semua IP interkoneksi. Perhatikan semua pilihan dalam setiap gambar.

Pada blok debounce, sambungkan out2n ke domain jam rakaman video Prosesor Sistem Reset input ext_reset_in.

Langkah 34: Hasilkan Pembungkus HDL

Hasilkan Pembungkus HDL
Hasilkan Pembungkus HDL

Hasilkan Pembungkus HDL untuk reka bentuk blok anda.

Tetapkannya sebagai modul teratas.

Langkah 35: Hasilkan Bitstream, Eksport Perkakasan ke SDK, Lancarkan SDK Dari Vivado

Pastikan memasukkan bitstream dalam eksport.

Penjanaan bitstream mungkin memerlukan masa yang sangat lama.

Kemudian lancarkan SDK

Langkah 36: SDK (tiada FreeRTOS)

SDK (tiada FreeRTOS)
SDK (tiada FreeRTOS)

Versi ini melakukan segalanya tanpa menggunakan FreeRTOS, memadatkan kodnya dengan baik.

Buat BSP yang berdiri sendiri berdasarkan reka bentuk perkakasan. Pilihan lalai mestilah baik. Pastikan sumber BSP telah dihasilkan.

Buat Aplikasi seperti yang ditunjukkan dalam Gambar. (permohonan kosong)

Padam utama yang dihasilkan secara automatik dan import fail yang dilampirkan.

Langkah 37: Pelaksanaan FreeRTOS

Pelaksanaan FreeRTOS
Pelaksanaan FreeRTOS

Versi ini menggunakan FreeRTOS. Buat FreeRTOS901 BSP berdasarkan reka bentuk perkakasan. Pilihan lalai mestilah baik. Pastikan sumber BSP telah dihasilkan.

Buat Aplikasi seperti yang ditunjukkan dalam Gambar. (permohonan kosong)

Padam utama yang dihasilkan secara automatik dan import fail yang dilampirkan.

Langkah 38: Arahan Penggunaan

Projek ini agak sukar untuk dijalankan. Ikuti langkah mengikut urutan.

Pastikan ZYBO anda tidak memuat sendiri apa-apa semasa dihidupkan. Ini bermakna LED Selesai tidak boleh menyala. Salah satu cara untuk melakukannya adalah dengan menetapkan jumper sumber but ke JTAG.

Buka projek (FreeRTOS atau tidak) yang ingin anda aturkan dari SDK

  1. Hidupkan ZYBO anda. LED Selesai tidak boleh menyala.
  2. Program FPGA dengan fail bit. LED Selesai harus menyala. Led0 tidak boleh menyala.
  3. Jalankan kod (ingat untuk melewati titik permulaan jika anda melakukannya).

Pada ketika ini anda seharusnya mendapat output pada paparan VGA anda.

Untuk memulakan semula (jika bug atau apa sahaja): ketik butang PS-SRST dengan cepat atau matikan ZYBO dan kemudian hidupkan semula. Teruskan dari langkah 2.

Menghentikan pemproses dengan penyahpepijat akan menyebabkan Kamera menahan kedudukan daripada bergerak. Aliran video akan berterusan.

Langkah 39: Rujukan dan Pautan

Panduan rujukan dan dokumentasi Xilinx:

  • PG044 - AXI-Strim ke Video Out
  • PG278 - Penyangga Bingkai Video Baca / Tulis

Pautan lain:

  • Blog Lauri - input VDMA
  • Blog Lauri - OV7670 hingga output VGA menggunakan BRAM
  • Wiki Hamsterworks, oleh Mike Fields, sumber asal kod OV7670
  • Lembar data yang menunjukkan spesifikasi masa asas

Disyorkan: