尤錦江,陶辰寧,蔡建楠,朱思宇,李 炯,陳水橋
(1.浙江大學(xué) 竺可楨學(xué)院,浙江 杭州 310027;2.浙江大學(xué) 物理學(xué)系,浙江 杭州 310027)
“激光掃描成像”,指利用平面鏡對光的反射,讓激光打在屏幕上,形成高速移動的光斑。同時,利用人眼的視覺殘留效應(yīng),讓光斑的移動軌跡在人眼中形成一個圖案。
一般來說,激光掃描都是利用兩片反射鏡來控制激光在兩個正交方向的反射角度,從而控制光斑的移動的。對于屏幕上任意一個點,可以用直角坐標(biāo)系坐標(biāo)(X,Y)來描述。經(jīng)過數(shù)學(xué)演算,可以將點(x,y)位置信息轉(zhuǎn)化為平面鏡轉(zhuǎn)動的角度θ1,θ2,然后通過兩臺電機來實現(xiàn)平面鏡的轉(zhuǎn)動[1]。
本文設(shè)計了一套基于STM32單片機和DAC8562數(shù)模轉(zhuǎn)換器的激光成像系統(tǒng)。使用兩臺伺服電機分別轉(zhuǎn)動兩片平面鏡,實現(xiàn)激光光斑在X和Y方向的移動。先在電腦上確定好激光成像的圖形、編寫相應(yīng)的代碼,然后燒錄到STM32單片機上,利用單片機產(chǎn)生坐標(biāo)的數(shù)字信號,再用DAC8562數(shù)模轉(zhuǎn)換器將數(shù)字信號轉(zhuǎn)換為模擬信號,再將模擬信號輸給振鏡電機,從而實現(xiàn)激光掃描圖像輸出。本系統(tǒng)實現(xiàn)方法簡單,操作方便,成本低廉,很適合作為實驗教學(xué)儀器[2]。
振鏡是一種特殊的擺動馬達,基本原理是通電線圈在磁場中產(chǎn)生力矩,但與旋轉(zhuǎn)電機不同,其轉(zhuǎn)子上通過機械紐簧或電子的方法加有復(fù)位力矩,大小與轉(zhuǎn)子偏離平衡位置的角度成正比,當(dāng)線圈通以一定的電流而轉(zhuǎn)子發(fā)生偏轉(zhuǎn)到一定的角度時,電磁力矩與回復(fù)力矩大小相等,故不能像普通電機一樣旋轉(zhuǎn),只能偏轉(zhuǎn),偏轉(zhuǎn)角與電流成正比,與電流計一樣,故振鏡又叫電流計掃描振鏡。
振鏡的原理是:輸入一個位置信號,擺動電機(振鏡)就會按一定電壓與角度的轉(zhuǎn)換比例擺動一定角度[3]。整個過程采用閉環(huán)反饋控制,由位置傳感器、誤差放大器、功率放大器、位置區(qū)分器、電流積分器等五大控制電路共同作用。振鏡的掃描原理見如下圖1。
圖1 振鏡掃描原理示意圖
a、b是振鏡,通過轉(zhuǎn)動振鏡a和b可以使入射光束投影到XY平面的指定位置。設(shè)a、b振鏡的X軸和Y軸的反射鏡之間的距離為e,b振鏡的軸線到視場平面坐標(biāo)原點的距離為d,當(dāng)X、Y軸的光學(xué)偏轉(zhuǎn)角分別為θx和θy時,視場平面上相應(yīng)光點坐標(biāo)為(x,y),且當(dāng)x=y=0時,θx=θy=0,則
(1)
(2)
振鏡a、b的偏轉(zhuǎn)角θx和θy與振鏡a、b的控制電壓Vx和Vy的關(guān)系為
θx=kx×Vx
(3)
θy=ky×Vy
(4)
其中kx、ky是系數(shù)[4]。
所以通過控制Vx和Vy就可以控制振鏡a、b的偏轉(zhuǎn)角度。
想要驅(qū)動振鏡,一種辦法是直接編寫代碼,讓單片機根據(jù)代碼產(chǎn)生輸出的信號。在實際應(yīng)用中,更多遇到的情形是給定一張圖片,根據(jù)圖片讓激光打出對應(yīng)的圖案[5]。
此時就要設(shè)計一個程序,輸入一張圖片,程序?qū)D片進行采樣,生成一系列用坐標(biāo)數(shù)據(jù)表示的“采樣點”。當(dāng)激光逐個掃過這些點的時候,形成的圖案正好是圖片中的物體。
具體的實現(xiàn)方法是將圖像轉(zhuǎn)化為灰度圖,進而再轉(zhuǎn)化為黑-白二值圖,最后利用一定的算法生成輪廓點。
1.2.1 灰度計算公式
計算機內(nèi)一般用RGB對顏色進行編碼。每種顏色的取值范圍為00h(對應(yīng)十進制0)~FFh(對應(yīng)十進制255)。0表示無,255表示最大光強[6]。
將某種顏色轉(zhuǎn)化為灰度值,可以使用平均值法:
(5)
但由于人眼對三原色的感知能力不同,實際應(yīng)用中更常用的是如下所示的著名心理學(xué)公式:
Gray=0.299R+0.587G+0.114B
(6)
則[Gray,Gray,Gray]就是原來[R,G,B]顏色灰化后的顏色。
1.2.2 彩色圖轉(zhuǎn)灰度圖
圖像的基本單位是一個像素,每像素又由R、G、B三種信息組成。所以,一個圖像可以視為一個H×W×3的三維數(shù)組。H為圖像的高度(垂直方向上像素個數(shù)),W為圖像寬度(水平方向上像素個數(shù)),3指RGB三種信息[7]。將圖像轉(zhuǎn)化為灰度圖,其實就是對每個像素求灰度。
下面是浙江大學(xué)徽標(biāo)彩色圖轉(zhuǎn)化灰度圖的效果圖,見圖2。
圖2 彩色圖轉(zhuǎn)灰度圖
1.2.3 灰度圖轉(zhuǎn)二值圖
灰度圖中每個像素仍然具有256種不同的信息量。為了便于采樣,還需要將灰度圖轉(zhuǎn)化為“二值圖”[8]。在二值圖中,每個像素只有兩個信息量:0和255。0代表黑色,255代表白色。
常用的轉(zhuǎn)化方式是設(shè)定一個閾值“thresh”,當(dāng)灰度超過這個閾值時,像素值設(shè)為255;小于等于這個閾值時,像素值設(shè)為0[9]。
(7)
當(dāng)閾值“thresh”取不同的值時,能夠產(chǎn)生不同的二值圖,見如下圖3。一般取能夠使圖像輪廓最清晰時的閾值,即圖3(c)。
圖3 不同的二值徽標(biāo)圖
出于“尋找輪廓”的需要,在本例中還要將圖片取反,則變成圖4所示。
圖4 圖片取反后的徽標(biāo)圖
1.2.4 尋找輪廓
本文使用在二值圖像中提取值為“1”(即白色)的區(qū)域輪廓。
首先,考慮到一個圖像中可能存在多個輪廓,因此需要對找出的輪廓進行“編號”。
定義:圖像的框架(frame),是指圖片的最外邊的矩形輪廓(由圖片的最上行、最下行、最左列、最右列像素構(gòu)成),編號為1[10]。
采用“光柵掃描”法,從左往右、從上往下,先掃描第一行、再掃描下一行的方式尋找輪廓。尋找過程中設(shè)定兩個變量:NBD記錄當(dāng)前追蹤的輪廓B的編號,LNBD記錄上一次追蹤的輪廓B′的編號。每次掃描到新的一行的最左端時,都要把LNBD重設(shè)為1,表示上一次追蹤的輪廓是frame[11]。下面是實現(xiàn)效果,見圖5所示。
圖5 徽標(biāo)輪廓
本文設(shè)計的成像系統(tǒng)由圖像取點采樣、程序燒錄、數(shù)模信號轉(zhuǎn)換和振鏡驅(qū)動四個部分。系統(tǒng)總框圖見圖6所示[12]。
圖6 系統(tǒng)總框圖
實現(xiàn)過程:(1)圖像取點采樣:根據(jù)圖像的灰度得到圖像的外部輪廓,然后得到輪廓每個點的坐標(biāo)。(2)程序燒錄:將得到的輪廓點坐標(biāo)復(fù)制到成像程序,然后燒錄進入STM32單片機中。(3)數(shù)模信號轉(zhuǎn)換:DAC8562模塊將STM32輸出的離散的數(shù)字信號轉(zhuǎn)換為連續(xù)變量的模擬信號。(4)振鏡驅(qū)動:振鏡中的伺服電機驅(qū)動器將DAC8562模塊輸出的電壓信號轉(zhuǎn)化為轉(zhuǎn)矩和轉(zhuǎn)速的控制信號,控制伺服電機運動。
2.1.1 STM32單片機
2.1.1.1 STM32基本功能
單片機是一種集成電路芯片[13]。STM32單片機是單片機的一種,它屬于一個微控制器,適用于控制類,自帶了各種常用通信接口,比如USART、I2C、SPI等,可接非常多的傳感器,可以控制很多的設(shè)備。STM32單片機具有極高的性能、強大的軟件支持、全面豐富的技術(shù)文檔等諸多優(yōu)點。
2.1.1.2 STM32模式設(shè)置
STM32可以設(shè)置GPIO模式。STM32 MCU允許 GPIO引腳被配置為8種模式,這種模式配置可以通過軟件配置來實現(xiàn),所謂GPIO即使用STM32的通用輸入輸出模式。其中,主要包含浮空輸入、下拉輸入、上拉輸入、模擬輸入、開漏復(fù)用輸出、推挽輸出、推挽復(fù)用輸出、開漏輸出等模式[14]。
同時,STM32可以進行I/O模式和速率的選擇,通過采用軟件進行編程,能夠使STM32單片機輸出50兆赫、10兆赫、2兆赫等不同的輸出功率。
2.1.1.3 STM32內(nèi)部結(jié)構(gòu)
STM32的CPU采用的是72 MHZ,是零等待處理器,即在處理數(shù)據(jù)時不需要響應(yīng)時間,在一個機器周期里就能實現(xiàn)乘除法運算[15]。
STM32內(nèi)部組成主要如下圖7所示。
圖7 STM32內(nèi)部組成
2.1.2 DAC8562數(shù)模轉(zhuǎn)換器
2.1.2.1 DAC基本原理
DAC的全稱是Digital-to-Analog Converter,中文名數(shù)模轉(zhuǎn)換器,可以將離散的數(shù)字信號轉(zhuǎn)換為連續(xù)變量的模擬信號的器件。
2.1.2.2 基本參數(shù)
DAC8562模塊精度為16bit,也就是可以轉(zhuǎn)化范圍為[0,216-1],操作的電壓為5 V,相對精度為12LSBINL。模塊有輸入邏輯單元、控制邏輯單元還有DAC。輸入數(shù)據(jù)并不直接進行轉(zhuǎn)換,而是先存到寄存器中,然后用控制邏輯單元進行控制。具體的控制時序見圖8。
圖8 DAC8562模塊控制時序
最后輸出的電壓公式為
(9)
其中,n=16,DIN就是轉(zhuǎn)換的16位二進制數(shù),VREF為DAC的參考電壓,Gain為一個參數(shù),在使用內(nèi)部參考時設(shè)置為2,不使用時設(shè)置為1。
2.1.3 DAC8562&STM32庫函數(shù)設(shè)計
在驅(qū)動振鏡時使用到了DAC8562.cpp和DAC8562.h兩個庫文件,可以進行初始化和轉(zhuǎn)化的參數(shù)。
2.1.3.1 電壓轉(zhuǎn)換函數(shù)
傳入的Voltage為連續(xù)的數(shù)據(jù),范圍為[-5,5],其中第四行的代碼調(diào)整是因為芯片的輸出范圍,第五行代碼將電壓變成[0,216-1],第六行調(diào)整了在低電壓下可能的誤差,最后返回計算完離散的電壓值。
2.1.3.2 初始化
這一段代碼使用到了SPI庫,DAC8562模塊具體接線圖見圖9。
圖9 DAC8562模塊接線圖
程序中先激活SPI,然后將SPI的模式設(shè)置為模式1,數(shù)據(jù)采樣在時鐘下降沿,數(shù)據(jù)轉(zhuǎn)移在時鐘的上升沿。并設(shè)置數(shù)據(jù)傳輸模式為從高位進入,然后開始對DAC模塊的初始化階段。
2.1.3.3 使用
使用時會調(diào)用writeA和writeB函數(shù),因為有兩個電機,因此一個函數(shù)對應(yīng)控制其中的一個電機。
軟件部分由三部分組成:DAC8562函數(shù)庫、輪廓采樣程序、STM32燒錄程序。關(guān)系如圖10所示。
圖10 軟件架構(gòu)圖
對求是鷹圖像(圖2)提取輪廓,根據(jù)所寫的采樣算法,獲得了圖像采樣點的對應(yīng)數(shù)據(jù)和成像結(jié)果,見如下圖11所示。
圖11 求是鷹激光圖
經(jīng)過分析,誤差來源主要有如下幾個方面:
(1)振鏡系統(tǒng)誤差
振鏡系統(tǒng)的標(biāo)定誤差主要來源于光平面方程誤差和系統(tǒng)安裝誤差兩個方面。由系統(tǒng)標(biāo)定原理可知,在空間中每兩條相交的激光條紋可以確定一個光平面方程,因此激光條紋坐標(biāo)的提取精度將直接決定光平面擬合的精度。系統(tǒng)安裝誤差主要來源于光平面與振鏡轉(zhuǎn)軸的安裝誤差。
(2)電機驅(qū)動能力有限
由實驗數(shù)據(jù)部分可知,在掃過一些曲率半徑小、尖角的地方(例如正方形的頂點),電機沒法在給定的時間內(nèi)轉(zhuǎn)過指定的角度,所以會導(dǎo)致一些輪廓掃描不到。這是由于電機驅(qū)動能力有限導(dǎo)致的。激光掃描過程中要求光斑移動非常迅速(這樣才能利用人眼視覺殘留效應(yīng)),但帶來的后果就是電機驅(qū)動可能跟不上。
(3)DAC精度有限
使用RSS(root sum squared)的方法來進行誤差估計,方程為
(10)
對于16位DAC8562來說,詳細參數(shù)如下表1。
表1 DAC8562詳細參數(shù)
為了計算TUE,需要將所有內(nèi)容轉(zhuǎn)換到同一個單位,轉(zhuǎn)換為的數(shù)值如下表2所示:
表2 轉(zhuǎn)換的數(shù)值
由此可以得到誤差為±23LSBs或者是1.78 mV或者0.035 6%FSR。
(4)STM32單片機運算速度不夠與STM32芯片的具體參數(shù)有關(guān)。微型計算機芯片的計算能力一般不如用戶PC機。
本文設(shè)計了一套成熟的激光掃描成像系統(tǒng),操作方便,只需要提供原始任意圖片,就能用激光掃描出對應(yīng)圖案。還需要改進的有如下幾方面:
(1)優(yōu)化輪廓采樣算法。在輪廓采樣前可以用一些圖像處理方法,消除原始圖像的邊緣噪音,這樣可以使整個輪廓變得更加光滑。
(2)優(yōu)化用戶程序,讓用戶可以手動微調(diào)、添加、刪除程序自動生成的采樣點,使用更加靈活。
(3)實現(xiàn)STM32單片機和用戶計算機之間的通訊功能。這需要給代碼加上一些通訊協(xié)議。所有的數(shù)據(jù)都從用戶計算機這里處理和發(fā)出,STM32只負責(zé)接收數(shù)據(jù)、發(fā)送數(shù)字信號。這樣順便也就解決了STM32運算能力有限和RAM有限的問題。
(4)提高伺服電機的驅(qū)動能力。