劉珍珍,汪濤,鄭雪麗
(重慶大學(xué) 物理學(xué)院,重慶 401331)
摘要:為了提高電荷耦合器件(CCD)一維尺度非接觸測量系統(tǒng)的集成性和便攜程度,設(shè)計(jì)了以STM32為核心的測量系統(tǒng)。使用3.7 V鋰電池供電,用STM32產(chǎn)生線陣CCD驅(qū)動(dòng)信號(hào),內(nèi)嵌邊緣檢測算法并設(shè)計(jì)了LCD液晶觸摸屏操作界面,實(shí)現(xiàn)了一款高精度便攜式非接觸測量儀。系統(tǒng)功能完整、操作方便、可靠性高。
關(guān)鍵詞:線陣CCD;STM32;LCD液晶觸摸屏;邊緣檢測
0引言
電荷耦合器件CCD(ChargeCoupled Device)[1]自上世紀(jì)60年代誕生以來,由于其具有精度高、功耗低、尺寸小、壽命長等優(yōu)點(diǎn),被廣泛地應(yīng)用于自動(dòng)測量、圖像獲取等方面。隨著CCD應(yīng)用市場的擴(kuò)大,CCD測量系統(tǒng)的實(shí)現(xiàn)方法也曾出不窮?,F(xiàn)有的CCD測量系統(tǒng)多采用單片機(jī)或FPGA驅(qū)動(dòng),用串口或USB進(jìn)行數(shù)據(jù)傳輸,用電腦上位機(jī)完成數(shù)據(jù)的處理和顯示,供電方式則多采用5 V電壓轉(zhuǎn)換器或USB供電。這樣的設(shè)計(jì)使得CCD測量系統(tǒng)的使用靈活程度、便攜性、實(shí)時(shí)性都受到限制。
為解決以上問題,設(shè)計(jì)了一款基于STM32便攜式線陣CCD測量系統(tǒng)。系統(tǒng)驅(qū)動(dòng)方式采用ARM驅(qū)動(dòng),選用意法半導(dǎo)體公司的STM32F103作為主控芯片完成驅(qū)動(dòng)信號(hào)的生成和控制功能。采用中值濾波和基于梯度算子的直線擬合邊緣提取算法[2]處理數(shù)據(jù),設(shè)計(jì)了LCD觸摸屏操作界面實(shí)時(shí)顯示數(shù)據(jù)波形和測量結(jié)果。供電方式采用3.7 V鋰電池供電,并設(shè)計(jì)了USB充電電路。如此設(shè)計(jì)克服了現(xiàn)有CCD測量系統(tǒng)開發(fā)成本高、連線復(fù)雜、便攜性差等問題。
1系統(tǒng)結(jié)構(gòu)
系統(tǒng)主要由ARM處理器、電平轉(zhuǎn)換、線陣CCD、A/D轉(zhuǎn)換、LCD液晶觸摸顯示及SD存儲(chǔ)卡等部分組成。
系統(tǒng)工作過程如下:ARM處理器產(chǎn)生驅(qū)動(dòng)脈沖,通過電平轉(zhuǎn)換之后驅(qū)動(dòng)線陣CCD工作,線陣CCD的光敏單元受光的激發(fā)產(chǎn)生電信號(hào),并在驅(qū)動(dòng)脈沖的作用下輸出離散的模擬信號(hào),此信號(hào)經(jīng)過0.1 μF的隔直耦合電容后傳入A/D轉(zhuǎn)換電路,A/D轉(zhuǎn)換后的數(shù)字信號(hào)經(jīng)過ARM內(nèi)部的DMA快速數(shù)據(jù)傳輸通道送入片內(nèi)RAM。在接收完一幀CCD數(shù)據(jù)之后,對(duì)數(shù)據(jù)進(jìn)行計(jì)算,并通過LCD液晶屏顯示信號(hào)波形和測量結(jié)果。通過LCD觸摸屏按鍵可以選擇性地保存原始數(shù)據(jù)和屏幕截圖到SD卡。系統(tǒng)框架如圖1所示。
2系統(tǒng)硬件組成
2.1電源模塊
本系統(tǒng)選用的電池為單節(jié)3.7 V鋰電池,電池容量6 000 mWh。該電池電量在5%以上時(shí)電壓范圍3.45 V~4.2 V。根據(jù)系統(tǒng)需求設(shè)計(jì)了3.3 V降壓電路和5 V、12 V升壓電路。芯片選型和電路設(shè)計(jì)中主要考慮了輸入電壓范圍、電源轉(zhuǎn)換效率、輸出功率、靜態(tài)電流、電路復(fù)雜程度和成本等問題。
2.2控制模塊
系統(tǒng)主控芯片選用STM32F103ZET6,其為意法半導(dǎo)體公司推出的一款基于Cortex-M3內(nèi)核的32位微處理器。該處理器最大時(shí)鐘頻率可達(dá)到72 MHz,具有64 KB靜態(tài)RAM,516 KB閃存,完全滿足系統(tǒng)對(duì)實(shí)時(shí)性以及存儲(chǔ)空間的要求。具備3個(gè)SPI通信接口和FSMC靈活的靜態(tài)存儲(chǔ)器管理系統(tǒng),方便對(duì)SD卡和LCD屏幕的操作。 帶有2個(gè)高級(jí)定時(shí)器和6個(gè)通用定時(shí)器,為CCD驅(qū)動(dòng)和AD驅(qū)動(dòng)時(shí)序的設(shè)計(jì)提供了支持,有112個(gè)GPIO口,可根據(jù)需求對(duì)引腳的功能進(jìn)行復(fù)用,方便對(duì)系統(tǒng)進(jìn)行擴(kuò)展。
2.3信號(hào)采集和A/D轉(zhuǎn)換模塊
本設(shè)計(jì)選用的線陣CCD傳感器為東芝公司生產(chǎn)的TCD1209,這款CCD靈敏度高、暗信號(hào)電壓小、動(dòng)態(tài)范圍比較大,適用于測量系統(tǒng)。它有2 048個(gè)有效像元,像元尺寸為14 μm×14 μm,光敏區(qū)總長度為28.4 mm。 TCD1209工作需要6路5 V電平的驅(qū)動(dòng)時(shí)序,這些信號(hào)的時(shí)序關(guān)系在驅(qū)動(dòng)信號(hào)設(shè)計(jì)部分介紹。
選用AD公司生產(chǎn)的AD9945對(duì)線陣CCD輸出的模擬信號(hào)進(jìn)行模數(shù)轉(zhuǎn)換。它是一款適合本系統(tǒng)CCD應(yīng)用的完整模擬信號(hào)處理器[3]。該芯片最高采樣頻率為40 MHz,其信號(hào)鏈包括CDS(相關(guān)雙采樣器)、VGA(數(shù)字控制增益放大器)、AD(12位模數(shù)轉(zhuǎn)換器)以及暗電平鉗位。其相關(guān)雙采樣器CDS可以減小系統(tǒng)的復(fù)位噪聲、熱噪聲等,有效提高信號(hào)質(zhì)量。數(shù)字控制增益放大器VGA可以通過一個(gè)10位的串行數(shù)字接口編程配置,設(shè)置CCD的信號(hào)增益,增益范圍為6~40 dB,增益調(diào)整的公式為VGA Gain(dB)=(VGA Code×0.035 dB)+5.3 dB。12位的A/D轉(zhuǎn)換器將模擬信號(hào)轉(zhuǎn)換為12 bit數(shù)字信號(hào),實(shí)現(xiàn)并行輸出。
2.4LCD顯示模塊
本設(shè)計(jì)中顯示器選用分辨率為800×480的4.3英寸TFTLCD電容觸摸屏模塊,該模塊16位真彩色顯示,采用NT35510驅(qū)動(dòng),該芯片自帶GRAM,無需外加驅(qū)動(dòng)器。TFTLCD模塊與STM32的連接采用FSMC(靈活的靜態(tài)存儲(chǔ)控制器),16位8080并行數(shù)據(jù)端口用于傳輸數(shù)據(jù),5個(gè)控制端口用于驅(qū)動(dòng)液晶屏,這樣的驅(qū)動(dòng)模式可以實(shí)現(xiàn)快速讀寫,寫周期只需要33 ns,理論上最大速度可以達(dá)到每秒3 030萬像素,即刷屏速度每秒78.9幀。
3驅(qū)動(dòng)信號(hào)設(shè)計(jì)
3.1CCD驅(qū)動(dòng)時(shí)序產(chǎn)生
CCD工作需要的6路驅(qū)動(dòng)時(shí)序包括移位脈沖φ1、φ2,信號(hào)輸出脈沖φ2b,轉(zhuǎn)移脈沖SH,復(fù)位脈沖RS,箝位脈沖CP。在這六路驅(qū)動(dòng)信號(hào)協(xié)同工作下,CCD完成光的積分和轉(zhuǎn)移輸出。SH為低電平時(shí),CCD進(jìn)行光積分,此階段不發(fā)生電荷轉(zhuǎn)移。SH為高電平時(shí),CCD將光積分信號(hào)轉(zhuǎn)移至移位寄存器,移位寄存器在φ1、φ2的作用下將電荷逐位轉(zhuǎn)移至輸出端,最后由φ2b輸出。在下一個(gè)信號(hào)到來前,RS和CP對(duì)相元中的殘余信號(hào)進(jìn)行清除。CCD六路驅(qū)動(dòng)信號(hào)需要滿足嚴(yán)格的時(shí)序關(guān)系,時(shí)序圖如圖2所示。
φ1由STM32的高級(jí)定時(shí)器TIM1_Channel2產(chǎn)生。STM32時(shí)鐘主頻為72 MHz,TIM1工作在PWM1模式,設(shè)置TIM1 自動(dòng)重裝載寄存器的值為71,輸出比較值為35,輸出比較極性為高,便可以產(chǎn)生頻率為1 MHz、占空比1∶1的時(shí)序波形。TIM1_Channel2的輸出信號(hào)經(jīng)反相器SN74LVC3G04取反并轉(zhuǎn)換為5 V電平后即得到驅(qū)動(dòng)信號(hào)φ1,φ1再次經(jīng)過反相器即得到φ2和φ2b。
RS和CP分別由STM32定時(shí)器3的Channel1、 Channel2和Channel3、 Channel4產(chǎn)生。由CCD驅(qū)動(dòng)時(shí)序圖可以看出,以φ1的信號(hào)周期為標(biāo)準(zhǔn),在一個(gè)信號(hào)周期內(nèi)RS和CP信號(hào)要先上升后下降,也就是需要在一個(gè)周期內(nèi)產(chǎn)生低—高—低電平,而STM32定時(shí)器在一個(gè)周期內(nèi)只能產(chǎn)生高—低電平或者低—高電平。因此本設(shè)計(jì)用定時(shí)器的兩個(gè)通道輸出兩個(gè)有相位差的高—低電平,經(jīng)過異或門SN74LVC2G86來生成所需信號(hào)。TIM3工作在PWM3模式,設(shè)置TIM3 自動(dòng)重裝載寄存器的值為71,4個(gè)通道輸出比較值分別為36、42、46、52, Channel1和Channel2經(jīng)過SN74LVC2G86取異或得到信號(hào)RS,Channel3和Channel4經(jīng)過SN74LVC2G86取異或得到信號(hào)CP。
SH配置到PA_10,由TIM2中斷控制產(chǎn)生,TIM2工作在TIM1觸發(fā)模式,TIM1計(jì)數(shù)器滿則觸發(fā)TIM2計(jì)數(shù)器加1,TIM2預(yù)裝載寄存器的值設(shè)置為3 000,TIM2計(jì)數(shù)器溢出進(jìn)入中斷函數(shù)。關(guān)閉所有定時(shí)器,將PA_10置0,延時(shí)3 μs,將PA_10置1,打開所有定時(shí)器,退出中斷。PA_10輸出信號(hào)經(jīng)SN74LVC3G04取反并轉(zhuǎn)換為5 V電平后即得到驅(qū)動(dòng)信號(hào)SH。
3.2A/D驅(qū)動(dòng)工作控制
AD9945工作包括數(shù)字控制增益放大器的配置、相關(guān)雙采樣和12位AD轉(zhuǎn)換。配置VGA(數(shù)字控制增益放大器)需要三路時(shí)序信號(hào)SL、SCK、SDATA,這三路信號(hào)滿足SPI協(xié)議,所以利用STM32的SPI2接口來為SL、SCK、SDATA提供時(shí)序脈沖。
AD9945的相關(guān)雙采樣功能的實(shí)現(xiàn)和暗電平鉗位功能的實(shí)現(xiàn)需要驅(qū)動(dòng)信號(hào)SHP、SHD、DATACLK和PBCLK、CLPOB。SHP和SHD的采樣頻率應(yīng)該與CCD的頻率一致,才能保證各個(gè)信號(hào)被有效采集。在本系統(tǒng)中,SHP、SHD和SDATA分別由STM32 TIM4的Chanel1、Chanel2和Chanel3控制。TIM4工作在PWM2輸出模式,預(yù)裝載寄存器的值為71,3個(gè)通道輸出比較值分別為38、60、20,即得到滿足時(shí)序關(guān)系的SHP、SHD和SDATA信號(hào),這三路信號(hào)經(jīng)過SN74LVC3G04電平轉(zhuǎn)換增強(qiáng)驅(qū)動(dòng)能力。
PBCLK、CLPOB分別由定時(shí)器2的Channel1、Channel2和Channel3、Channel4產(chǎn)生,TIM2工作在PWM2模式,預(yù)裝載寄存器的值為3 000,4個(gè)通道的輸出比較值分別為14、28、14、2 088,信號(hào)CLPOB由定時(shí)器2的Channel1、Channel2兩路輸出信號(hào)經(jīng)SN74LVC2G86取異或得到,信號(hào)PBCLK由定時(shí)器2的Channel2、Channel3兩路輸出信號(hào)經(jīng)SN74LVC2G86取異或得到。
4圖像處理和LCD顯示
本系統(tǒng)用于測量縫寬的光路圖如圖3所示。用均勻光源照射待測物體,物體反射光經(jīng)鏡頭在CCD光敏面成像,CCD采集到的數(shù)據(jù)圖像在像的位置形成凹槽,只要檢測出凹槽的兩個(gè)邊緣位置,即可得到像的寬度。鏡頭在某個(gè)物像位置下的放大倍數(shù)通過定標(biāo)和曲線擬合的方法獲得,待測縫寬可由像寬乘以放大倍數(shù)得到。
4.1數(shù)據(jù)預(yù)處理
CCD采集的數(shù)據(jù)中通常帶有高頻噪聲,這些噪聲的存在會(huì)影響算法的執(zhí)行效率。中值濾波是最常用的處理高頻信號(hào)的方法,它能夠在除去高頻噪聲的同時(shí)保留圖像邊緣細(xì)節(jié)。因此需要先對(duì)原始數(shù)據(jù)進(jìn)行中值濾波處理。
4.2邊緣提取
理想的邊緣信號(hào)是一階躍函數(shù)[4],而CCD采集到的實(shí)際邊緣信號(hào)是一個(gè)漸變信號(hào),為準(zhǔn)確地提取邊緣信號(hào),采用基于梯度算子的直線擬合法[5]。算法經(jīng)過簡化處理后實(shí)現(xiàn)步驟如下:
(1)選取擬合窗口,由于實(shí)際測量光照強(qiáng)度的不確定性,采取浮動(dòng)閾值法,即先尋找一幀數(shù)據(jù)中的最大值Vmax與最小值Vmin,由此設(shè)定窗口閾值:
Vh=Vmin+0.8(Vmax-Vmin)
Vl=Vmin+0.2(Vmax-Vmin)
(2)邊緣粗定位,根據(jù)邊緣成像的原理,線陣CCD圖像的邊緣即為過渡區(qū)中灰度變化斜率最大值所在位置。線陣CCD采集得到的數(shù)字圖像是離散量,其梯度幅值為 R(i)=|V(i)-V(i-1)|,在窗口區(qū)域內(nèi),利用梯度算子尋找出梯度最大值,對(duì)應(yīng)的位置即為圖像邊緣粗定位所在位置。
(3)確定邊緣,在原窗口內(nèi),以梯度最大值點(diǎn)的灰度V(i)為中心,向兩邊按步長m擴(kuò)張,確定擬合值:
Vl=V(i)-m(Vmax-Vmin),Vl>Vmin
Vh=V(i-1)+m(Vmax-Vmin),Vh<Vmax
從i開始向左搜索找出第一個(gè)大于Vl的點(diǎn)n1,從i-1開始向右搜索找出第一個(gè)小于Vh的點(diǎn)n2,點(diǎn)(n1,Vl)與點(diǎn)(n2,Vh)所連直線的中點(diǎn)位置X1作為圖像邊緣。
(4)重復(fù)步驟(3)3次,得到5個(gè)邊緣值X0、X1、X2、X3、X4,將5個(gè)邊緣值按順序排列取中值作為最終確定的邊緣X。
4.3LCD顯示
LCD選用ALINTAK 4.3英寸電容觸摸屏模塊,模塊自帶底層驅(qū)動(dòng),提供了豐富的操作函數(shù),包括畫點(diǎn)、讀點(diǎn)、顯示字符、觸屏讀點(diǎn)等。此屏幕分辨率為800*480,將屏幕分為波形顯示區(qū)和按鍵區(qū)兩部分。
4.3.1波形顯示的實(shí)現(xiàn)
首先用畫點(diǎn)函數(shù)LCD_DrawPoint( px[i], py[i]) 繪制網(wǎng)格并顯示坐標(biāo)。接著繪制數(shù)據(jù)波形,CCD輸出的一幀有效數(shù)據(jù)為2 048個(gè),每個(gè)數(shù)據(jù)都是12 bit,即范圍在0~4 096。在600×400的點(diǎn)陣范圍顯示信號(hào)波形,把長度方向作為線陣CCD的像素序號(hào)橫坐標(biāo),寬度方向作為縱坐標(biāo),對(duì)應(yīng)像元灰度值。橫坐標(biāo)方向上數(shù)據(jù)抽樣顯示,縱坐標(biāo)方向?qū)叶戎颠M(jìn)行壓縮。具體實(shí)現(xiàn)如下:
for(i=0;i<600;i++)
{
px[i]=i+Left;
py[i]=( ccd_data [i*2048/600]*400)>>12;
}
LCD_DrawPoint( px[i], py[i]);
為實(shí)現(xiàn)波形實(shí)時(shí)顯示,需要完成波形的自動(dòng)擦除和重繪[6]。定義了一個(gè)數(shù)組 iTemp[600]={0} 用于存儲(chǔ)上一幀數(shù)據(jù),定義一個(gè)8 bit變量Py_Used用于標(biāo)志屏幕上是否有波形顯示。在繪制波形前先檢查Py_Used是否為1,若為1則用背景色繪制iTemp[600]存儲(chǔ)的數(shù)據(jù)并將Py_Used置0。繪完一幀波形后將當(dāng)前的數(shù)據(jù)存入iTemp[600],以備下一次擦除波形使用。
用背景色繪制上一幀數(shù)據(jù)擦除波形的方法簡便快捷,但是擦除波形的同時(shí),會(huì)擦除一部分網(wǎng)格線。為了解決這個(gè)問題,使用定時(shí)器中斷,每隔0.5 s重繪網(wǎng)格。最終得到了很好的波形顯示效果。
4.3.2觸摸屏按鍵的實(shí)現(xiàn)
通過測量觸摸點(diǎn)電壓經(jīng)過A/D轉(zhuǎn)換的值得到觸摸點(diǎn)的橫縱坐標(biāo)。通過判斷觸摸點(diǎn)位置所在的按鍵區(qū)域,執(zhí)行相應(yīng)操作,觸摸屏操作程序流程如圖4所示。
5結(jié)論
基于STM32設(shè)計(jì)的便攜式CCD測量儀,取代了以往設(shè)計(jì)中依賴固定電源和電腦上位機(jī)的測量系統(tǒng)。利用STM32的多種優(yōu)勢,提高了系統(tǒng)的集成度和便攜性,內(nèi)嵌邊緣檢測算法的設(shè)計(jì)提高了系統(tǒng)的實(shí)時(shí)性和測量精度。如圖5所示為系統(tǒng)測量5 cm標(biāo)準(zhǔn)縫寬,LCD顯示結(jié)果為4.98 cm,測量相對(duì)誤差為0.4%。本系統(tǒng)還可以拓展到其他應(yīng)用中,例如測量位移、衍射法測量細(xì)絲直徑、振動(dòng)測量等,將數(shù)據(jù)進(jìn)行灰度閾值劃分并以灰度顏色顯示還可以用于掃描圖像?! ?/p>
參考文獻(xiàn)
[1] 王慶有. CCD應(yīng)用技術(shù)[M]. 天津:天津大學(xué)出版社,2000.
?。?] 翟青涌,黃建國,程玉華. 基于梯度算子的線陣CCD圖像邊緣檢測方法研究[J].電子質(zhì)量,2009(10):12.
?。?] 劉奮飛,趙輝,陶衛(wèi),等. 改進(jìn)的直線擬合線陣CCD圖像邊緣檢測方法[J].光電工程,2005,32(3):4043.
?。?] 杜昕,汪小澄. 線陣CCD數(shù)據(jù)采集及LCD顯示[J].自動(dòng)化儀表,2007,28(12):3639.
[5] 余皓,劉秉琦,王海寬,等. 線陣CCD圖像兩種直線擬合邊緣檢測方法比較研究[J].光學(xué)儀器,2015,37(3):268271.
[6] 馬超,高鵬,楊白芹,等. 基于STM32和uC/OSII的嵌入式數(shù)字示波器設(shè)計(jì) [J].電子技術(shù),2013(12):7375.