目前,,包括移動設備在內的很多多媒體設備上都使用了攝像頭,而且還在以很快的速度更新換代,。目前使用的攝像頭分為兩種:CCD(Charge Couple Device電荷偶合器件)和 CMOS(Complementary Metal Oxide Semiconductor互補金屬氧化物半導體),。這兩種各有優(yōu)劣:目前CCD主要使用高質量的DC、DV和高檔手機上,,其圖像質量較好,,但是整個驅動模組相對比較復雜,而且目前只有曰本一些企業(yè)掌握其生產技術,,對于選用的廠商來說成本會比較高昂,,而且一些設備對與圖像質量沒有很苛刻的要求,對體積要求會高一些;而CMOS正好滿足這樣的要求,,CMOS模組則比較簡單,,目前很多廠商已經把驅動和信號處理的ISP(Image Signal Processor)集成在模組內部,這樣體積就更小,,而且其生產技術要求相對簡單,、工藝比較成熟、成本較低,、外圍電路簡單,、圖像質量也可以滿足一般的要求,所以在嵌入式市場中占有很大份額,,目前一些高端的CMOS Sensor的質量已經可以和CCD 的質量相媲美,。
首先,,要認識CMOS攝像頭的結構,。我們通常拿到的是集成封裝好的模組,一般由三個部分組成:鏡頭、感應器和圖像信號處理器構成,。一般情況下,,集成好的模組我們只看到外面的鏡頭、接口和封裝殼,這種一般是固定焦距的,。有些廠商只提供芯片,,需要自己安裝鏡頭,鏡頭要選擇合適大小的鏡頭,,如果沒有夜視要求的話,,最好選擇帶有紅外濾光的鏡頭,因為一般的sensor都能感應到紅外光線,,如果不濾掉,,會對圖像色彩產生影響,另外要注意在PCB設計時要保證鏡頭的聚焦中心點要設計在sensor的感光矩陣中心上,。除了這點 CMOS Sensor硬件上就和普通的IC差不多了,,注意不要弄臟或者磨花表面的玻璃。
其次,,CMOS模組輸出信號可以是模擬信號輸出和數字信號輸出,。模擬信號一般是電視信號輸出,PAL和NTSC都有,,直接連到電視看的;數字輸出一般會有并行和串行兩種形式,,由于圖像尺寸大小不同,所要傳輸的數據不同,,數據的頻率差異也很大,,但是串行接口的pixel clock頻率都要比并行方式高(同樣的數據量下這不難理解),較高的頻率對外圍電路也有較高的要求;并行方式的頻率就會相對低很多,,但是它需要更多引腳連線;所以這應該是各有裨益。(筆者測試使用的系統(tǒng)是8bit并行接口)另外輸出信號的格式有很多種,,視頻輸出的主要格式有:RGB,、YUV、BAYER PATTERN等,。一般CMOS Sensor模組會集成ISP在模組內部,,其輸出格式可以選擇,這樣可以根據自己使用的芯片的接口做出較適合自己系統(tǒng)的選擇,。其中,,部分sensor為了降低成本或者技術問題,sensor部分不帶ISP或者功能很簡單,,輸出的是BAYER PATTERN,,這種格式是sensor的原始圖像,因此需要后期做處理,這需要有專門的圖像處理器或者連接的通用處理器有較強的運算能力(需要運行圖像處理算法),。不管sensor模組使用何種數據格式,,一般都有三個同步信號輸出:幀同步/場同步(Frame synchronizing)、行同步(Horizontal synchronizing)和像素時鐘(pixel clock),。要保證信號的有效狀態(tài)與自己系統(tǒng)一致,,如都是場同步上升(下降)沿觸發(fā)、行同步高(低)電平有效等,。
通過以上介紹,,我們就可以根據自己的使用的系統(tǒng)選擇適合的sensor模組。要選擇接口對應(如果并行接口,,sensor模組輸出數據bit位多于接受端,,可以用丟棄低位的數據的方法連接)、數據格式可以接受或處理,、pixel clock沒有超過可接受的最高頻率(有的是可調的,,但幀率會受影響)、場同步和行同步可以調節(jié)到一致的sensor模組,,這樣才可以保證可以使用,。保證這些條件的正確性下,還要符合它的硬件電路要求,,首要的是確定它的電源,、時鐘、RESET等信號是否符合芯片要求,,其次要看所有的引腳是否連接正確,,這樣保證外圍的電路沒有錯誤情況下才可能正確顯示圖像。各個廠商生產的產品各不相同,,一些廠商的sensor模組在默認狀態(tài)下就可以輸出圖像,,而有些廠商的sensor模組必須要設置一些寄存器以后才可以得到圖像。區(qū)別是否可以直接輸出圖像,,可以通過檢測sensor 的輸出腳,,如果三個同步信號都有,數據線上也有數據,,那一般就會有默認圖像輸出,,另外也可以跟廠商聯系獲得有關信息。如果沒有默認輸出就需要設置寄存器了,,一般都是通過兩線串行方式(IIC總線使用頻率很高)設置寄存器,。寄存器設置是整個調試過程中最復雜的過程,當然要設置寄存器要先保證主芯片跟 sensor模組之間通信是正確無誤的,,然后才是具體設置值的問題,。保證通信無誤,,簡單的方法就是讀寫一致(排除部分動態(tài)變化的寄存器),就是說保證能夠每次寫進去的數據都能正確讀出來,。寄存器設置方面,,一般都會有很多寄存器,其中一些是關鍵的:例如軟件RESET,、工作狀態(tài),、輸出大小、輸出格式,、輸出信號有效性,、像素頻率等,另外一些對細調圖像質量很有用處的寄存器暫時可以不管,,還有部分寄存器比如自動暴光,、自動白平衡這些建議都選擇auto,這些功能對圖像質量影響很大,,一般模組集成了ISP的都會有這個功能,。當然不管是默認圖像還是設置以后輸出的,都需要細調,,這時如果有可能,,可以聯系sensor 模組廠商,請他們給出推薦配置或者做一些技術支持,,因為一般sensor內部都有一些寄存器是不對外公布的,,只有廠商的FAE才這些寄存器的定義;自己調節(jié)圖像時,可以從對比度,、亮度,、飽和度、銳化程度,、Gamma校正,、消除flicker等方面進行調節(jié)。如果sensor沒有集成ISP的話,,如前面提到的它的輸出是BAYER PATTERN,,這種格式就是直接將感應到的數據傳輸過來,需要處理器端進行數據轉換,,同時還需要做白平衡、暴光控制,,另外還要進行上面提到的對比度,、亮度、飽和度等等的改進,,這些改進要想得到比較好的圖像質量,,算法會比較復雜,不僅需要處理器有較強的處理能力,也對調試者有一定的要求,,但是這樣的sensor一般會比較便宜,,所以根據自己的情況做選擇比較好;不過目前有廠商設計做圖像處理的芯片,其實這就是將ISP拿出來單獨作為一顆芯片了,,它的調試就跟sensor模組差不多了,,只是大一些而已。
調試過程中,,我們還要注意一些問題,,例如YUV格式輸出時中YUV的順序、BAYER PATTERN中第一行數據的格式,、sensor模組輸出圖像的大小,、顯示圖像的大小等。一般YUV順序不對圖像是可以看到的,,只是色彩和亮度轉換了;BAYER PATTERN第一行數據格式錯了,,也就是RGB三種顏色亂了,都是可以看到圖像的;圖像輸出大小則比較重要,,因為如果設置輸入的圖像大小大于實際輸出的大小,,處理器可能會因為數據不夠一場而無法顯示,如果小于實際大小則只能輸出圖像的一部分,,但是還是可以顯示的,,當然這也可以在顯示面積不夠時做成局部放大的效果。
圖像出來以后,,就需要檢驗一些模組的質量,,個人覺得可以從下面幾個方面觀察:幀率、有無壞點,、噪聲,、暗光下的圖像、白平衡,、色彩還原能力,、暴光、邊緣等?,F在一般的sensor廠商的30萬像素的產品都可以VGA(640*480)30幀,,2M像素做到 SVGA(800*600)30幀的幀率,一般應用已經足夠,,拖影現象也控制得比較好;壞點是比較嚴重的問題,,一般是sensor硬件上有問題,而且它自身的修復算法沒有能夠修復的,,這樣對圖像會有很大的影響,,一般打開sensor工作5分鐘就還沒有的話,,基本上就可以放心了,要指出的是有的時候在一些物體的邊緣會出現“壞點”這是sensor算法的問題,,一般移動一下物體或者模組就沒有了;噪聲問題是CMOS Sensor無法躲避的問題,,由于感光部分結構跟CCD的差異,注定了同樣大小的感光面積下CMOS Sensor圖像噪聲要比CCD嚴重,,但是各個廠商技術的差異還是會噪聲控制上也會有所不同,,這時只要給個深色的背景就會看到了,同樣CMOS Sensor在低光條件下噪聲問題也比較突出,,當然可以使用一些技術加以改進;白平衡是最基礎的問題,,但是白平衡算法好壞也會影響sensor的表現,一些sensor遇到大片某個單色的畫面時可以明顯看到背景圖像顏色改變,,這就是算法不好的原因;色彩還原可以照在標準色板上,,看與原來的區(qū)別就可以看出sensor色彩還原能力了,也有一些sensor會某些顏色過了;若沒有色板也可以用色彩明亮豐富的紙來測試,,關鍵是看sensor能否真實表現這些色彩;暴光控制現在一般都的模組都集成了,,對著暗處和強光看它是否能夠調節(jié)到比較理想的狀態(tài),一般不會有問題,,但是也有例外,,筆者曾經碰到一顆sensor在強光照射下啟動時沒有辦法正確暴光,畫面很暗;邊緣好壞是一個sensor細節(jié)表現能力證明,,一些 sensor在邊緣部分會有鋸齒或者就是很模糊不清,,這都是細節(jié)表現的問題;如果整個畫面比較灰,那就是sensor對比度出了問題,。
調試 sensor是一件非常有趣的事情,,很多時候它跟一般的IC沒有太大區(qū)別,其實上我們也是把它當成一般IC來調試的,,但是收獲卻很多,。當然,調試的時候可能會遇到很多問題,,有些可能會比較棘手,,問題的解決也需要很多的經驗,但是辦法總比問題多,,問題的解決就是經驗累積的過程,、成長的過程。