0-1-視頻傳輸,監控,直播方案-攝像頭如何采集的圖像,MCU如何讀取的圖像數據


<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/video_transmission" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

 

說明

首先能夠使用MCU讀取攝像頭數據並不是什么高端和困難的事情!

 

攝像頭如何采集的圖像,MCU如何讀取的圖像數據

1.攝像頭都是集成了感光片和感光片采集芯片的.

感光片就是有很多采集點

如果說一個攝像頭是 240*320的

就是說橫着有240個采集點,豎着有320個采集點,共76800個采集點

 

 

2.以OV7670為例

假設使用單片機控制感光采集芯片采集240*320個像素點,模式輸出是RGB422

 

 

 

3.3V和GNG  -- 攝像頭供電

-------------------------------------------------------------------------

SDA和SCL為IIC配置攝像頭的引腳

可以設置攝像頭具體橫豎采集的像素點個數

可以設置采集模式,列如:RGB 422(就是說一個像素點用 8位數據表示 ,前面4位代表紅色,中間2位代表藍色,最后2位代表綠色)

列如: 采集的數據是  0xF0 (1111 0000)  就是純綠色

采集的數據是  0x00 (0000 1100)  就是純藍色

采集的數據是  0x00 (0000 1000)  就是不怎么藍的顏色

有可能有人會問這顏色識別的有點不好呀,分辨率有點低.其實有RGB565,但是呢為了方便敘述,咱先按照RGB422來講解.

 

 

 

 

-------------------------------------------------------------------------

VS (VSYNC) ----攝像頭工作的時候,這個引腳來一個高脈沖說明攝像頭開始采集一副圖像了(采集240*320個像素點)

 

 

注意哈,一般咱們把開始采集一副圖像就做開始采集一幀圖像

一般攝像頭采集是從左到右 從上到下采集,當然也可以使用IIC發送命令給感光片采集芯片控制它采集的模式

-------------------------------------------------------------------------

HS (HREF) ---- 當這個引腳變為高電平,說明攝像頭正在輸出某一行像素點

假設是剛開始采集,那么這個引腳第一次變為高電平,說明攝像頭正在輸出第一行的像素點(從左到右 240個)

第一行的像素點采集完了,就會變為低電平,然后開始采集第二行,這個引腳又會主動變為高電平

然后就是這樣子循環.

-------------------------------------------------------------------------

PLK ---- 當這個引腳變為高電平,說明攝像頭正在輸出一個像素點的數據

假設是剛開始采集,那么這個引腳第一次變為來一個高脈沖,說明攝像頭正在輸出第一行的第一個像素點的數據

-------------------------------------------------------------------------

D0 - D7引腳  ---- 這個是輸出實際像素點采集的數據的引腳

配合上面的 PLK引腳,當PLK引腳來一個高脈沖以后,讀取D0 - D7引腳的值

便可獲取采集的像素點的數據.假設是剛開始采集采集的數據是 1111 0000  (0xF0)

就說明采集的第一行的第一個像素點的數據是 0xF0 純綠色

 

 

3.最后總結

假設是 240*320

VS (VSYNC)  ,  HS (HREF) 和 PLK  引腳都接到單片機的中斷引腳上

D0 - D7 接到單片機的隨意8個引腳上

當檢測到 VS (VSYNC) 來了一個高脈沖說明開始采集一幀圖像了

然后檢測 HS (HREF) 引腳變為了高電平

說明開始采集一行圖像了,然后只要PLK引腳來一個高脈沖,說明攝像頭輸出了

一個像素點的數據,然后單片機讀取 D0 - D7 就獲取了數據了

然后通過 PLK 和  D0 - D7就可以獲取第一行的 240個數據

 

第一行輸出完成 HS (HREF) 引腳變為了低電平

開始輸出第二行的時候 HS (HREF) 引腳變為了高電平

然后只要PLK引腳來一個高脈沖,說明攝像頭輸出了

一個像素點的數據,然后單片機讀取 D0 - D7 就獲取了數據了

然后通過 PLK 和  D0 - D7就可以獲取第二行的 240個數據

然后就是循環采集320行數據.

 

 

4.難在哪里呢?

從上面的介紹可以看出好像挺簡單的

那難在哪里呢?

 

1.難點1

大部分人的基礎知識不夠,就是說連基本的IIC通信,中斷采集都不會

注意哈,我說的是會!!!

列如我問下: 等待芯片應答具體是啥?

發送非應答具體是啥??

 

2.難點2

攝像頭輸出的頻率實在是太快了

真的是太快了!!!!一般的單片機達不到這種速度

咱們只看 PCLK 的輸出速度哈

下圖中大概是 PCLK的高電平時間 大概是8ns

整個周期才16ns .....這是普通單片機做不到的

一般情況下就是72M主頻的STM32F103 執行中斷的時間也是約1us

即使是關閉所有的其它外設,中斷時間也只能達到 400ns

 

 

 

 

 

 

 

 

 

5,速度達不到的單片機可以選擇帶FIFO芯片的攝像頭模組

 

 

 

 

FIFO的作用是啥?

FIFO芯片是和攝像頭的感光芯片直接通信,然后把圖像緩存到FIFO芯片里面.

單片機讀取數據的時候是和FIFO芯片通信, 單片機還是需要連接VSYNC引腳

發現該引腳有個下降沿之后,給FIFO_RCK引腳持續的脈沖,數據就從D0-D7輸出了.

注意一個事情:當VSYNC來了下降沿之后一般需要延時一會再去讀取, 就是等圖像數據確實已經存儲到了FIFO.

一般單片機的主頻趕不上攝像頭采集圖像的速度,所以一直給脈沖讀取數據就可以,但是你這個需要自己測試哈

如果單片機的主頻特別快.....你可以再去檢測下HREF引腳, 然后也許需要加點延時以后再去讀取.

 

 

補充

1.關於模擬攝像頭

模擬攝像頭就是采集到數據以后變為模擬信號輸出在一根線上,具體可百度PAL

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM