線性掃描相機是數(shù)碼相機的一種。這種相機一般在各種機器中作為組成部分發(fā)揮作用,一般來說不容易在實際生活中獨立見到。這個制作能幫助你DIY并且進一步了解線性掃描相機。
線性CCD傳感器(Charge-coupled Device line sensor,線性電荷耦合傳感器)是線性掃描相機中最為重要的部分。我十多年前就在電子城中買下了它。但是想要制作一臺小體積的便攜線性掃描相機有些困難,電路部分需要高性能的微處理器和大容量存儲器,在當時一般的個人制作對這些昂貴的高級貨只能敬而遠之。于是它被我扔到一個破爛盒子里,連我自己都幾乎忘記了。
十年的時間之后,拜飛速發(fā)展的半導體工業(yè)所賜,芯片們的價格終于降到了可以接受的地步。現(xiàn)在即使是入門的新手也能隨意享受到32位的微處理器和海量的存儲卡,所以我依靠最新的技術重新開始了這個項目!
圖 自己動手做數(shù)碼相機
圖 自己動手做數(shù)碼相機
[page]
1、線性掃描相機
1.1、相機原理
圖 普通平面相機和線性相機的比較
線性掃描相機是數(shù)碼相機的一種,它使用線性CCD傳感器(一維CCD器件)作為圖像傳感器。普通的數(shù)碼相機用一個平面CCD器件(二維CCD器件)捕捉焦平面上的圖像,獲取的圖案是一個二維的平面。而對線性掃描相機來說,它所獲取的圖案是一條一維的線!
即使每次獲得的圖像只有一條線,線性掃描相機還是有能力獲得完整的圖像。在制作一臺線性掃描相機時,需要不斷移動相機或者被攝物——這樣每次獲得的部分數(shù)據(jù)被存儲在內存里,并最終像織布一樣一條線一條線地拼湊成完整的圖像。
在過去的膠片時代有一種狹縫相機。它和這里說的線性掃描相機類似,通過一條窄縫(一維的窗口)成像,拼合一維圖像獲取完整的二維圖像。
1.2、功能應用
線性掃描相機具有下面這些功能:
?。?高分辨率。即使便宜的傳感器也能做到10000點以上的分辨率。
?。?簡單緊湊的光學系統(tǒng)。不需要掃描桌。
?。?對物體的尺寸和長度沒有限制,對很長的物體也能正確成像。
由于這些功能,線性掃描相機在很多地方得到了廣泛應用,你可以在許多重要的設備上發(fā)現(xiàn)它們。比如:
?。?復印機
- 圖像掃描儀
?。?傳真機
- 機器視覺(檢查長形物體)
?。?衛(wèi)星(比如拍下google地圖的那些)
?。?終點攝影(體育比賽)
[page]
2、硬件構成
2.1、功能模塊
圖 線性掃描相機的各個功能模塊
上圖展示了構成線性掃描相機的各個功能模塊。線性CCD傳感器將收集的光感信息傳遞到AD(模擬-數(shù)字)轉換器數(shù)字化,然后以數(shù)字信號形式輸入控制器。這些數(shù)據(jù)可以顯示在顯示屏上,或者傳輸?shù)酱鎯ζ骼?。掃描的頻率在500線每秒到2000線每秒之間可調,視CCD器件的種類而定。
電路部分被分成三大部分,每塊之間通過柔性印刷電路排線相連。我經(jīng)常不使用定制的PCB因為它們太貴而且沒有DIY精神,設計麻煩,之后有改動也麻煩。這種一次性的制作在洞洞板上相機行事最好了。
這是何等的飛線功力……
2.2、光路和外殼
圖 光路和外殼
上圖展示了如何為這個線性掃描相機制作外殼。這是從一個高知電子(Takachi electric industrial)的SW-85B塑料盒改造而來的外殼,這個項目的光路需要控制的非常精確,所以設計,加工,裝配的時候都需要特別注意。這里有 外殼的圖紙 。帶有線性傳感器的模擬部分電路板安裝在可動的螺釘上,這樣就能隨意調整距離。
這次使用的透鏡是C-mount接環(huán)的,它是工業(yè)攝像頭中使用的標準鏡頭之一,但是不那么好弄到。我用了一個C-CS的轉接環(huán)來將鏡頭裝到殼體上。一個UNC(英制統(tǒng)一螺紋粗牙系列)螺母粘在盒子的底面上用來固定攝像頭。盒內涂了一層導電涂料做電磁屏蔽。
2.3、模擬電路部分
圖 模擬電路
上圖是這個制作中的模擬電路部分,它包含線性掃描相機中最為重要的器件。上面安裝了一個CCD線性傳感器和模擬電路。CCD線性傳感器是一枚東芝的TCD132D單色CCD,它對紅外光也敏感,所以為了獲得與人眼感覺相近的圖像需要一個紅外濾鏡(IRCF)。CCD線性傳感器需要一個來自主控電路板的時鐘信號驅動。傳感器的模擬圖像信號輸出先經(jīng)過一個可變增益放大器(AD8830),再由一個模數(shù)轉換器(ADC1173)轉化為數(shù)字信號。ADC1173的8位數(shù)字信號輸出送入主控電路板。像素采集率從0.5MHZ到2MHZ可變,但是模數(shù)轉換器必須在工作在至少兩倍采樣率的時鐘頻率下。每兩次采樣之后,向主控電路板輸出一次數(shù)字信號。
圖 模擬電路部分的電路圖
[page]
2.4、主控電路部分
圖 主控電路部分
主控電路板包括一個微處理器(MCU),一個可編程邏輯器件(PLD)和電源部分。微處理器的芯片是一個NXP的LPC2368,它集成了一個在72MHZ下工作的ARM7TDMI核心,512K字節(jié)內存,32K+16K+8K字節(jié)的SRAM,還有給力的外圍設備。它可以通過一個集成的SD卡控制器在4位原生模式下控制外置的MicroSD存儲卡。LPC系列的ARM微處理器廣泛用在現(xiàn)在的電子制作中,因為它的市場政策很對路,物美價廉。
一個可編程邏輯器件(LC4256V)被用來驅動CCD線性傳感器。PLD里配置了一個用來給傳感器提供時鐘的時鐘產(chǎn)生器和一個先入先出隊列。電源供應部分提供了數(shù)字電源(3.3V)。和模擬部分的電源(12V)。
圖 主控電路部分電路圖
2.5、顯示電路部分
圖 顯示電路部分
[page]
顯示部分電路安裝在盒子的背面,它提供了相機的操作界面。上面的器件包括一個OLED顯示屏,開關。五向鍵和一個MicroSD插槽。打開盒蓋就能安裝或者移除SD卡。
圖 顯示電路部分的電路圖
圖 內視圖、 底視圖
圖 鏡頭接口視圖
[page]
3、軟件構成
3.1、數(shù)據(jù)處理
AD轉換器的像素采集率可以高達2.1M像素每秒。首先,圖像數(shù)據(jù)被存儲在微處理器的緩沖存儲器里。因為每秒2.1M的數(shù)據(jù)量對軟件來說實在太過分,圖像數(shù)據(jù)會存儲到PLD的先進先出隊列里。隊列半滿時觸發(fā)微處理器的DRDT中斷,然后微處理器一次接受一半隊列的數(shù)據(jù)。隊列的大小是16字節(jié),也就是說軟件的操作周期只要有像素采集率的1/8就足夠。這對觸發(fā)中斷來說不算太快,但是仍然需要微處理器高速運行。這個項目里用了ARM7TDMI核心的快速中斷請求功能(FIQ,fast interrpt request,通過編組寄存器產(chǎn)生低延遲中斷),可惜在Cortex-M3核心中這一功能被去掉了。
當微處理器響應FIQ請求時,一些寄存器切換到FIQ的編組寄存器狀態(tài),然后FIQ例程可以直接進入/離開而省去了切換過程。為了最大化執(zhí)行效率,一般來說FIQ例程是用匯編語言寫的。在啟用這一功能的 數(shù)據(jù)波形圖 里,可以觀察到8位的數(shù)據(jù)在不用存儲的時候只需要0.8微秒處理,加上DMA模式下從總線寫入SD卡也只用了2微秒,這樣的延遲可以接受。
在每一行數(shù)據(jù)中有1094個像素,但其中有效的只有1024個。這些數(shù)據(jù)被存入內存,中斷信號SYNC#在每一行數(shù)據(jù)的開始輸出,用來同步第一個像素的數(shù)據(jù)。
3.2、重建圖像
捕捉到的數(shù)據(jù)可以用通用的8位灰度BMP位圖格式存儲在MicroSD卡里,寬1024像素,長視拍攝時間而定。存儲的格式是DCIMLCAMYnnnn.BMP(nnnn 是編號),和普通的數(shù)碼相機幾乎一樣。
在使用廉價的微處理器將圖像數(shù)據(jù)存入SD卡時會遇到一些困難,主要是輸入的數(shù)據(jù)要在極短的時間內存進文件。這個制作中的最大數(shù)據(jù)傳輸率是2MB每秒。幸運的是LPC2368有一個MCI(SD/MMC卡的原生控制模式),它能提供8MB/s的數(shù)據(jù)讀取和6MB/s的數(shù)據(jù)寫入能力。但是這是指讀寫大文件時的平均速度,事實上每次讀寫之間都需要一些死時間用在SD卡的內部處理和文件系統(tǒng)上,為了避免這些浪費,一個數(shù)據(jù)緩沖器被用來在死時間中暫存數(shù)據(jù),但是微處理器系統(tǒng)的內存大小是有限的,不一定有足夠的空間進行緩沖。
讓我們估計一下每次寫數(shù)據(jù)操作所能容許的時間耗費。在這個制作里,所有32K的SRAM都用來做數(shù)據(jù)緩沖器,而程序在16K的ethernet RAM上運行。數(shù)據(jù)緩沖器分成兩半,其中一塊填充數(shù)據(jù)的時候另一塊將數(shù)據(jù)寫入閃存。 這要求在每8毫秒里寫入16KB的數(shù)據(jù),每次操作必須在下次操作之前完成 。接下來的軟件技巧可以解決這個問題。
數(shù)據(jù)寫入過程中最重要的延遲發(fā)生在集群分配時,在實時操作系統(tǒng)里這是個很大的問題,集群分配導致的死時間視情況不同可能高達數(shù)秒鐘。這個制作里使用集群預分配(寫入數(shù)據(jù)時用f-lseek函數(shù)申請一個比目前需要大很多的空間)來避免寫入數(shù)據(jù)時進入分區(qū)表重新定位。每次寫入操作都包含一個用來結束操作的集群邊界條件。想象一下SD卡里的文件預先整理出一塊整齊的空間給數(shù)據(jù),這就避免了寫入數(shù)據(jù)過程中大量導致延遲的未知問題。
盡管有這些用來盡可能減小死時間的方法,SD卡或多或少還有一些內部處理時間。在挑選SD卡的時候需要挑寫入速度盡可能快的SD卡。我在許多牌子之間做過比較,結果發(fā)現(xiàn)東芝產(chǎn)SD卡有最小的寫入延遲,也有最穩(wěn)定的表現(xiàn)。
3.3、顯示圖像
圖 顯示圖像
由于獲得的圖像數(shù)據(jù)都是一維的線條,它不能像傳統(tǒng)平面成像的二維圖像一樣顯示。為了這個問題需要一些特別的顯示模式。
其中一種是范圍視圖,輸入的圖像信號連接到Y軸,就像像示波器的輸入。Y軸信號表示亮度,X軸信號表示各點在線性傳感器上的位置。這個模式適于用來觀察感光度和聚焦情況。不同點之間數(shù)據(jù)的差距可以用來幫助對焦,當圖像聚焦時,波形圖上產(chǎn)生許多峰谷,出現(xiàn)最大的峰峰值表明焦距已經(jīng)對上。這是現(xiàn)在數(shù)碼相機里自動對焦功能的原型。
另外一種是卷動視圖,圖像向上卷動,新掃描到的圖像出現(xiàn)在屏幕底部。這個模式能夠用來調整線分辨率。最后生成的二維圖像的高寬比決定于線分辨率和物體移動的速度。卷動視圖能夠展現(xiàn)出捕捉到的2D景象,但是如果被攝物體不移動就只剩下水平的線了,所以相機或者物體之一一定要在給定的運動速度下拍攝,這樣才能一邊觀察一邊調節(jié)線分辨率。
[page]
4、使用說明
線性掃描相機的一般用途同膠片時代的狹縫相機類似。狹縫相機很容易在性能上擊敗線性掃描相機,它的感光顆粒直徑14um,遠遠小于CCD中單元的直徑,意味著極好的分辨率。但是玩狹縫相機意味著你要足夠的取景,對焦,拍攝和沖印能力,非老鳥不能為。
相機位置
這個相機需要被固定在合適的角度,這樣物體所成的像可以掃過線性傳感器。比如說,但物體橫向移動或者橫方向特別長的話,相機最好固定在線性傳感器處于垂直的位置。這個角度必須精確,否則拍出的圖片會出現(xiàn)類似平行四邊形的扭曲。
調節(jié)焦距
這個線性掃描相機由一個5向搖桿控制(上下左右和中鍵),向右按可以切換顯示模式(范圍模式或者卷動模式)。首先,輸入信號的電平可以通過光圈或者增益控制(上下點擊)。增益控制也可以通過左鍵自動調整。接下來,通過對焦環(huán)調節(jié)焦距直到信號的峰峰值最大。
調整傳感器線分辨率
在卷動模式下可以調節(jié)相機匹配傳感器線分辨率。調節(jié)直到屏幕上顯示的是正確的高寬比。傳感器線分辨率也可以通過物體移動的速度,物體離鏡頭的距離和焦距來計算,這略微有些誤差,但數(shù)字圖片是可以通過后期處理來修正的。當然如果傳感器線分辨率實在太低的話,這個過程會損失一些信息。通常來說傳感器線分辨率高不是壞事,就是靈敏度可能低些。傳感器線分辨率影響曝光時間(靈敏度),所以輸入電平的增益需要和不同的線分辨率匹配。
獲得圖像
中間的按鈕用來開始/停止拍攝。按下按鈕就可以開始記錄圖像。集群預分配會在0.5秒內完成,然后暫停直到松開。松開按鈕時會開始記圖像錄,然后在任意按鈕按下時停止或者直到寫入數(shù)據(jù)到達了集群預分配區(qū)域的邊界。預分配的大小被配置到10萬行(大約100MB),但是可以根據(jù)拍攝物的尺寸改變。生成的圖像文件可以在電腦上進行預處理,調節(jié)圖片朝向,高寬比或者做伽瑪校正。
5、實拍效果展示
圖 實拍效果圖像
相關閱讀:
入門級單反數(shù)碼相機成新的增長點
http://m.1151434.com/opto-art/80002267
FSA642:飛兆開發(fā)出高速MIPI開關用于數(shù)碼相機顯示器和取景器
http://m.1151434.com/gptech-art/80009954