數碼相機都白菜價了?現在白菜都快趕上房價了!所以,立志要成為德藝雙馨攝影大師的,無論普通、文藝還是二逼的青年攝影師們,我們還是自己動手吧! DIYer:ChaN 制作時間:半個月 制作難度:★★★★☆ GEEK指數:★★★★★ 線性CCD傳感器(Charge-coupled Device line sensor,線性電荷耦合傳感器)是線性掃描相機中最為重要的部分。我十多年前就在電子城中買下了它。但是想要制作一臺小體積的便攜線性掃描相機有些困難,電路部分需要高性能的微處理器和大容量存儲器,在當時一般的個人制作對這些昂貴的高級貨只能敬而遠之。于是它被我扔到一個破爛盒子里,連我自己都幾乎忘記了。 十年的時間之后,拜飛速發展的半導體工業所賜,芯片們的價格終于降到了可以接受的地步。現在即使是入門的新手也能隨意享受到32位的微處理器和海量的存儲卡,所以我依靠最新的技術重新開始了這個項目! 1、線性掃描相機 1.1、相機原理 普通平面相機和線性相機的比較 線性掃描相機是數碼相機的一種,它使用線性CCD傳感器(一維CCD器件)作為圖像傳感器。普通的數碼相機用一個平面CCD器件(二維CCD器件)捕捉焦平面上的圖像,獲取的圖案是一個二維的平面。而對線性掃描相機來說,它所獲取的圖案是一條一維的線!即使每次獲得的圖像只有一條線,線性掃描相機還是有能力獲得完整的圖像。在制作一臺線性掃描相機時,需要不斷移動相機或者被攝物——這樣每次獲得的部分數據被存儲在內存里,并最終像織布一樣一條線一條線地拼湊成完整的圖像。 在過去的膠片時代有一種狹縫相機。它和這里說的線性掃描相機類似,通過一條窄縫(一維的窗口)成像,拼合一維圖像獲取完整的二維圖像。 1.2、功能應用 線性掃描相機具有下面這些功能: - 高分辨率。即使便宜的傳感器也能做到10000點以上的分辨率。 - 簡單緊湊的光學系統。不需要掃描桌。 - 對物體的尺寸和長度沒有限制,對很長的物體也能正確成像。 由于這些功能,線性掃描相機在很多地方得到了廣泛應用,你可以在許多重要的設備上發現它們。比如: - 復印機 - 圖像掃描儀 - 傳真機 - 機器視覺(檢查長形物體) - 衛星(比如拍下google地圖的那些) - 終點攝影(體育比賽) 2、硬件構成 2.1、功能模塊 電路部分被分成三大部分,每塊之間通過柔性印刷電路排線相連。我經常不使用定制的PCB因為它們太貴而且沒有DIY精神,設計麻煩,之后有改動也麻煩。這種一次性的制作在洞洞板上相機行事最好了。 這是何等的飛線功力…… 2.2、光路和外殼 這次使用的透鏡是C-mount接環的,它是工業攝像頭中使用的標準鏡頭之一,但是不那么好弄到。我用了一個C-CS的轉接環來將鏡頭裝到殼體上。一個UNC(英制統一螺紋粗牙系列)螺母粘在盒子的底面上用來固定攝像頭。盒內涂了一層導電涂料做電磁屏蔽。 2.3、模擬電路部分 這是模擬電路部分的電路圖。 2.4、主控電路部分一個可編程邏輯器件(LC4256V)被用來驅動CCD線性傳感器。PLD里配置了一個用來給傳感器提供時鐘的時鐘產生器和一個先入先出隊列。電源供應部分提供了數字電源(3.3V)。和模擬部分的電源(12V)。 這是主控電路部分的電路圖。 2.5、顯示電路部分 這是顯示電路部分的電路圖。 內視圖 底視圖 鏡頭接口視圖 3、軟件構成3.1、數據處理 AD轉換器的像素采集率可以高達2.1M像素每秒。首先,圖像數據被存儲在微處理器的緩沖存儲器里。因為每秒2.1M的數據量對軟件來說實在太過分,圖像數據會存儲到PLD的先進先出隊列里。隊列半滿時觸發微處理器的DRDT中斷,然后微處理器一次接受一半隊列的數據。隊列的大小是16字節,也就是說軟件的操作周期只要有像素采集率的1/8就足夠。這對觸發中斷來說不算太快,但是仍然需要微處理器高速運行。這個項目里用了ARM7TDMI核心的快速中斷請求功能(FIQ,fast interrpt request,通過編組寄存器產生低延遲中斷),可惜在Cortex-M3核心中這一功能被去掉了。 當微處理器響應FIQ請求時,一些寄存器切換到FIQ的編組寄存器狀態,然后FIQ例程可以直接進入/離開而省去了切換過程。為了最大化執行效率,一般來說FIQ例程是用匯編語言寫的。在啟用這一功能的 數據波形圖 里,可以觀察到8位的數據在不用存儲的時候只需要0.8微秒處理,加上DMA模式下從總線寫入SD卡也只用了2微秒,這樣的延遲可以接受。 在每一行數據中有1094個像素,但其中有效的只有1024個。這些數據被存入內存,中斷信號SYNC#在每一行數據的開始輸出,用來同步第一個像素的數據。 3.2、重建圖像 捕捉到的數據可以用通用的8位灰度BMP位圖格式存儲在MicroSD卡里,寬1024像素,長視拍攝時間而定。存儲的格式是DCIMLCAMYnnnn.BMP(nnnn 是編號),和普通的數碼相機幾乎一樣。 在使用廉價的微處理器將圖像數據存入SD卡時會遇到一些困難,主要是輸入的數據要在極短的時間內存進文件。這個制作中的最大數據傳輸率是2MB每秒。幸運的是LPC2368有一個MCI(SD/MMC卡的原生控制模式),它能提供8MB/s的數據讀取和6MB/s的數據寫入能力。但是這是指讀寫大文件時的平均速度,事實上每次讀寫之間都需要一些死時間用在SD卡的內部處理和文件系統上,為了避免這些浪費,一個數據緩沖器被用來在死時間中暫存數據,但是微處理器系統的內存大小是有限的,不一定有足夠的空間進行緩沖。 讓我們估計一下每次寫數據操作所能容許的時間耗費。在這個制作里,所有32K的SRAM都用來做數據緩沖器,而程序在16K的ethernet RAM上運行。數據緩沖器分成兩半,其中一塊填充數據的時候另一塊將數據寫入閃存。 這要求在每8毫秒里寫入16KB的數據,每次操作必須在下次操作之前完成 。接下來的軟件技巧可以解決這個問題。 數據寫入過程中最重要的延遲發生在集群分配時,在實時操作系統里這是個很大的問題,集群分配導致的死時間視情況不同可能高達數秒鐘。這個制作里使用集群預分配(寫入數據時用f-lseek函數申請一個比目前需要大很多的空間)來避免寫入數據時進入分區表重新定位。每次寫入操作都包含一個用來結束操作的集群邊界條件。想象一下SD卡里的文件預先整理出一塊整齊的空間給數據,這就避免了寫入數據過程中大量導致延遲的未知問題。 盡管有這些用來盡可能減小死時間的方法,SD卡或多或少還有一些內部處理時間。在挑選SD卡的時候需要挑寫入速度盡可能快的SD卡。我在許多牌子之間做過比較,結果發現東芝產SD卡有最小的寫入延遲,也有最穩定的表現。 3.3、顯示圖像 其中一種是范圍視圖,輸入的圖像信號連接到Y軸,就像像示波器的輸入。Y軸信號表示亮度,X軸信號表示各點在線性傳感器上的位置。這個模式適于用來觀察感光度和聚焦情況。不同點之間數據的差距可以用來幫助對焦,當圖像聚焦時,波形圖上產生許多峰谷,出現最大的峰峰值表明焦距已經對上。這是現在數碼相機里自動對焦功能的原型。 另外一種是卷動視圖,圖像向上卷動,新掃描到的圖像出現在屏幕底部。這個模式能夠用來調整線分辨率。最后生成的二維圖像的高寬比決定于線分辨率和物體移動的速度。卷動視圖能夠展現出捕捉到的2D景象,但是如果被攝物體不移動就只剩下水平的線了,所以相機或者物體之一一定要在給定的運動速度下拍攝,這樣才能一邊觀察一邊調節線分辨率。 4、使用說明 線性掃描相機的一般用途同膠片時代的狹縫相機類似。狹縫相機很容易在性能上擊敗線性掃描相機,它的感光顆粒直徑14um,遠遠小于CCD中單元的直徑,意味著極好的分辨率。但是玩狹縫相機意味著你要足夠的取景,對焦,拍攝和沖印能力,非老鳥不能為。 相機位置 這個相機需要被固定在合適的角度,這樣物體所成的像可以掃過線性傳感器。比如說,但物體橫向移動或者橫方向特別長的話,相機最好固定在線性傳感器處于垂直的位置。這個角度必須精確,否則拍出的圖片會出現類似平行四邊形的扭曲。 調節焦距 這個線性掃描相機由一個5向搖桿控制(上下左右和中鍵),向右按可以切換顯示模式(范圍模式或者卷動模式)。首先,輸入信號的電平可以通過光圈或者增益控制(上下點擊)。增益控制也可以通過左鍵自動調整。接下來,通過對焦環調節焦距直到信號的峰峰值最大。 調整傳感器線分辨率 在卷動模式下可以調節相機匹配傳感器線分辨率。調節直到屏幕上顯示的是正確的高寬比。傳感器線分辨率也可以通過物體移動的速度,物體離鏡頭的距離和焦距來計算,這略微有些誤差,但數字圖片是可以通過后期處理來修正的。當然如果傳感器線分辨率實在太低的話,這個過程會損失一些信息。通常來說傳感器線分辨率高不是壞事,就是靈敏度可能低些。傳感器線分辨率影響曝光時間(靈敏度),所以輸入電平的增益需要和不同的線分辨率匹配。 獲得圖像 中間的按鈕用來開始/停止拍攝。按下按鈕就可以開始記錄圖像。集群預分配會在0.5秒內完成,然后暫停直到松開。松開按鈕時會開始記圖像錄,然后在任意按鈕按下時停止或者直到寫入數據到達了集群預分配區域的邊界。預分配的大小被配置到10萬行(大約100MB),但是可以根據拍攝物的尺寸改變。生成的圖像文件可以在電腦上進行預處理,調節圖片朝向,高寬比或者做伽瑪校正。 5、實拍效果展示 一列火車——橫向運動拍攝。此圖為拼圖效果。 來源:電子工程網 |
喜歡,我收藏了,謝謝了,樓主,加個好友,和你學習一下 |
收藏了!棒極了!!!! |
超級牛 |
謝謝樓主無私奉獻! |
這個IC焊接的導線用的是什么線?是漆包線嗎?怎么焊的呀? |
哥!這個太猛了!頂一下! |
樓主的DIY能力太強了, 真是佩服 ! |
"隊列的大小是16字節,也就是說軟件的操作周期只要有像素采集率的1/8就足夠。" 這個是什么原理 ? 我理解如果軟件寫入的速度比采樣速度慢的話, 即使設置了緩沖區, 時間一長也會滿的啊 ? |
樓主太牛了~~~佩服吖~~~ |
元器件不太容易找齊呀 |
lihai 佩服 |
謝謝樓主無私奉獻! |
佩服 |