本原創(chuàng)教程由芯驛電子科技(上海)有限公司(ALINX)創(chuàng)作,版權(quán)歸本公司所有,如需轉(zhuǎn)載,需授權(quán)并注明出處(http://www.alinx.com)。
1. 實(shí)驗(yàn)簡(jiǎn)介
本實(shí)驗(yàn)將采用500萬(wàn)像素的OV5640攝像頭模組(模塊型號(hào):AN5640)為大家顯示更高分辨率的視頻畫(huà)面。OV5640攝像頭模組最大支持QSXGA (2592x1944)的拍照功能,支持1080P、720P、VGA、QVGA視頻圖像輸出。本實(shí)驗(yàn)將OV5640配置為RGB565輸出,先將視頻數(shù)據(jù)寫(xiě)入外部存儲(chǔ)器,再?gòu)耐獠看鎯?chǔ)器讀取送到VGA、LCD等顯示模塊。
2.實(shí)驗(yàn)原理
2.1 OV5640傳感器簡(jiǎn)介
OV5640攝像頭模組采用美國(guó)OmniVision(豪威)CMOS芯片圖像傳感器OV5640,支持自動(dòng)對(duì)焦的功能。OV5640芯片支持DVP 和MIPI 接口,本實(shí)驗(yàn)所用 OV5640攝像頭模組通過(guò)DVP接口和FPGA連接實(shí)現(xiàn)圖像的傳輸。
2.2 OV5640的參數(shù)說(shuō)明
像素:硬件像素500W;
感光芯片:OV5640;
感光尺寸:1/4;
功能支持:自動(dòng)對(duì)焦, 自動(dòng)曝光控制(AEC),自動(dòng)白平衡(AWB);
圖像格式 : RAW RGB, RGB565/555/444, YUV422/420和JPEG壓縮;
捕獲畫(huà)面:QSXGA(2592x1944), 1080p, 1280x960, VGA(640x480), QVGA(320x240);
工作溫度:-30~70℃, 穩(wěn)定工作溫度為0~50℃
2.3 OV5640的寄存器配置
OV5640的寄存器配置是通過(guò)FPGA的I2C(也稱為SCCB接口)接口來(lái)配置。用戶需要配置正確的寄存器值讓OV5640輸出我們需要的圖像格式,實(shí)驗(yàn)中我們把攝像頭輸出分辨率和顯示設(shè)備分辨率配置成一樣的, OV5640的攝像頭輸出的數(shù)據(jù)格式在以下的0x4300的寄存器里配置,在我們的例程中OV5640配置成RGB565的輸出格式。

關(guān)于OV5640的寄存器還有很多很多,但很多寄存器用戶無(wú)需去了解,寄存器的配置用戶可以按照OV5640的應(yīng)用指南來(lái)配置就可以了。如果您想了解更多的寄存器的信息,可以參考OV5640的datasheet中的寄存器說(shuō)明。
2.4 OV5640的RGB565輸出格式
OV5640在HREF信號(hào)為高時(shí)輸出一行的圖像數(shù)據(jù),輸出數(shù)據(jù)在PCLK的上升沿的時(shí)候有效。因?yàn)镽GB565顯示每個(gè)像數(shù)為16bit, 但OV5640每個(gè)PCLK輸出的是8bit,所以每個(gè)圖像的像數(shù)分兩次輸出,第一個(gè)Byte輸出為R4~R0和G5~G3, 第二個(gè)Byte輸出為G2~G0和B4~B0,將前后2個(gè)字節(jié)拼接起來(lái)就是16Bit RGB565數(shù)據(jù)。

3. 程序設(shè)計(jì)
前面的實(shí)驗(yàn)已經(jīng)為本實(shí)驗(yàn)做了大量的鋪墊,包括I2C寄存器的配置、外部存儲(chǔ)器的讀寫(xiě),本程序一個(gè)比較關(guān)鍵的地方在于視頻同時(shí)讀寫(xiě),如何做到讀寫(xiě)不沖突?在設(shè)計(jì)幀讀寫(xiě)模塊時(shí)就已經(jīng)考慮到這點(diǎn),所以有幀基地址選擇,最大4幀選擇,每次讀視頻幀地址和正在寫(xiě)的幀地址是不同的,而是上次寫(xiě)入一幀數(shù)據(jù)的地址,這樣就可以避免讀寫(xiě)沖突,避免視頻畫(huà)面裂開(kāi)錯(cuò)位。

cmos_8_16bit模塊完成攝像頭輸入的2個(gè)8bit數(shù)據(jù)轉(zhuǎn)換到一個(gè)16bit數(shù)據(jù)(一個(gè)像素),數(shù)據(jù)位寬變成2倍,時(shí)鐘頻率不變,所以16bit數(shù)據(jù)是隔一個(gè)時(shí)鐘周期有效,并不是每個(gè)時(shí)鐘一直有效。
信號(hào)名稱 | 方向 | 說(shuō)明 |
rst | in | 異步復(fù)位輸入,高復(fù)位 |
pclk | in | 傳感器像素時(shí)鐘輸入 |
pdata_i | in | 傳感器8bit數(shù)據(jù)輸入 |
de_i | in | 數(shù)據(jù)有效(HREF) |
pdata_o | out | 16bit數(shù)據(jù)輸出 |
hblank | out | de_i延時(shí)一個(gè)時(shí)鐘周期 |
de_o | out | 數(shù)據(jù)輸出有效 |
cmos_8_16bit模塊端口
cmos_write_req_gen模塊通過(guò)判斷攝像頭的列同步信號(hào)cmos_vsync的上升沿,生成ov5640數(shù)據(jù)寫(xiě)入的請(qǐng)求信號(hào),表示一幀圖像開(kāi)始寫(xiě)入請(qǐng)求。另外生成write_addr_index寫(xiě)地址選擇和read_addr_index讀地址選擇,這里read_addr_index的值會(huì)比write_addr_index的值延遲一幀,使得讀和寫(xiě)的地址不沖突。
信號(hào)名稱 | 方向 | 說(shuō)明 |
rst | in | 異步復(fù)位輸入,高復(fù)位 |
pclk | in | 傳感器像素時(shí)鐘輸入 |
cmos_vsync | in | 場(chǎng)同步輸入,每一幀視頻都會(huì)變化一次,可以用于一幀的開(kāi)始或結(jié)束 |
write_req | out | 寫(xiě)數(shù)據(jù)請(qǐng)求 |
write_addr_index | out | 寫(xiě)幀地址選擇 |
read_addr_index | out | 讀幀地址選擇 |
write_req_ack | in | 寫(xiě)請(qǐng)求應(yīng)答 |
cmos_write_req_gen模塊端口
frame_read_write模塊我們已經(jīng)在前面的例程中使用過(guò),在這里就是把攝像頭采集的數(shù)據(jù)存入寫(xiě)FIFO里,然后產(chǎn)生DDR3的Burst寫(xiě)請(qǐng)求,寫(xiě)入到DDR3中,另外讀也是一樣,當(dāng)讀FIFO里的數(shù)據(jù)小于一定值時(shí),產(chǎn)生DDR3的Burst讀請(qǐng)求。在這里我們實(shí)例化了2個(gè)frame_read_write模塊,分別對(duì)應(yīng)2路視頻的數(shù)據(jù)存儲(chǔ)和讀取。這里每路視頻的DDR3的存儲(chǔ)地址是不一樣的。
第一路視頻的存儲(chǔ)地址如下:

第二路視頻的存儲(chǔ)地址如下:

video_rect_read_data模塊功能跟HDMI字符顯示osd_display模塊的功能類似,本例程中是把從DDR3里讀取的視頻圖像跟彩條圖像疊加,因?yàn)閍x7035使用的是雙目攝像頭,所以需要調(diào)用2個(gè)video_rect_read_data模塊。
信號(hào)名稱 | 方向 | 說(shuō)明 |
video_clk | in | 視頻的像素時(shí)鐘 |
rst | in | 復(fù)位信號(hào) |
video_left_offset | in | 視頻顯示的水平偏移地址 |
video_top_offset | in | 視頻顯示的垂直偏移地址 |
video_width | in | 視頻的寬度 |
video_height | in | 視頻的高度 |
read_req | out | 讀一幀圖像數(shù)據(jù)請(qǐng)求 |
read_req _ack | in | 讀請(qǐng)求應(yīng)答 |
read_en | out | 讀數(shù)據(jù)使能 |
read_data | in | 讀到的數(shù)據(jù) |
timing_hs | in | 輸入的行同步信號(hào) |
timing_vs | in | 輸入的列同步信號(hào) |
timing_de | in | 輸入的數(shù)據(jù)有效信號(hào) |
timing_data | in | 輸入的數(shù)據(jù)信號(hào) |
hs | out | 輸出的行同步信號(hào) |
vs | out | 輸出的列同步信號(hào) |
de | out | 輸出的數(shù)據(jù)有效信號(hào) |
vout_data | out | 輸出的數(shù)據(jù)信號(hào) |
4. 實(shí)驗(yàn)現(xiàn)象
1)將攝像頭模塊插入開(kāi)發(fā)板,保證1腳對(duì)齊,1腳在焊盤形狀和其他引腳是有明顯區(qū)別的,是方形的。
AN5640攝像頭模塊連接開(kāi)發(fā)板連接圖
AN5642攝像頭模塊連接開(kāi)發(fā)板連接圖
2)如果使用HDMI來(lái)顯示,連接好HDMI顯示器,如果使用液晶屏顯示,插入液晶屏模塊,連接方法在《HDMI測(cè)試實(shí)驗(yàn)教程》中已講述。
3)下載實(shí)驗(yàn)程序,可以看到攝像頭模塊輸出的視頻。注意:ov5640模塊焦距是可調(diào)的,如果焦距不合適,圖像會(huì)模糊,旋轉(zhuǎn)鏡頭,可以調(diào)節(jié)焦距。攝像頭模塊要輕拿輕放,不要用手觸摸元器件。
實(shí)驗(yàn)效果圖
-
FPGA
+關(guān)注
關(guān)注
1635文章
21837瀏覽量
608348 -
視頻
+關(guān)注
關(guān)注
6文章
1964瀏覽量
73322 -
攝像頭
+關(guān)注
關(guān)注
60文章
4883瀏覽量
96749 -
OV5640
+關(guān)注
關(guān)注
1文章
19瀏覽量
14235 -
紫光同創(chuàng)
+關(guān)注
關(guān)注
5文章
89瀏覽量
27671
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
飛凌嵌入式-ELFBOARD OV5640攝像頭講解第2期
【小梅哥FPGA】OV5640攝像頭資料,含應(yīng)用手冊(cè),1280*720P分辨率,30幀應(yīng)用工程
ov5640攝像頭采集的圖像顯示出來(lái)是錯(cuò)誤的
STM32H750是如何獲取OV5640攝像頭圖像及上位機(jī)解碼的
實(shí)驗(yàn)教程:雙目攝像頭——紫光盤古50K開(kāi)發(fā)板配套教程
紫光同創(chuàng)FPGA入門指導(dǎo):OV5640 雙目攝像頭——紫光盤古系列50K開(kāi)發(fā)板實(shí)驗(yàn)教程
微雪電子OV5640 攝像頭模塊C型簡(jiǎn)介

微雪電子OV5640 攝像頭模塊B型簡(jiǎn)介

基于OmniVision的OV5640設(shè)計(jì)的USB攝像頭模塊

【正點(diǎn)原子FPGA連載】第十五章 窗口門狗(WWDG)實(shí)驗(yàn) -摘自【正點(diǎn)原子】新起點(diǎn)之FPGA開(kāi)發(fā)指南_V2.1

評(píng)論