劉珍珍,,汪濤,鄭雪麗
(重慶大學(xué) 物理學(xué)院,,重慶 401331)
摘要:為了提高電荷耦合器件(CCD)一維尺度非接觸測量系統(tǒng)的集成性和便攜程度,,設(shè)計(jì)了以STM32為核心的測量系統(tǒng)。使用3.7 V鋰電池供電,,用STM32產(chǎn)生線陣CCD驅(qū)動信號,,內(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)用于自動測量、圖像獲取等方面,。隨著CCD應(yīng)用市場的擴(kuò)大,,CCD測量系統(tǒng)的實(shí)現(xiàn)方法也曾出不窮。現(xiàn)有的CCD測量系統(tǒng)多采用單片機(jī)或FPGA驅(qū)動,,用串口或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ū)動方式采用ARM驅(qū)動,,選用意法半導(dǎo)體公司的STM32F103作為主控芯片完成驅(qū)動信號的生成和控制功能,。采用中值濾波和基于梯度算子的直線擬合邊緣提取算法[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存儲卡等部分組成,。
系統(tǒng)工作過程如下:ARM處理器產(chǎn)生驅(qū)動脈沖,通過電平轉(zhuǎn)換之后驅(qū)動線陣CCD工作,,線陣CCD的光敏單元受光的激發(fā)產(chǎn)生電信號,,并在驅(qū)動脈沖的作用下輸出離散的模擬信號,此信號經(jīng)過0.1 μF的隔直耦合電容后傳入A/D轉(zhuǎn)換電路,A/D轉(zhuǎn)換后的數(shù)字信號經(jīng)過ARM內(nèi)部的DMA快速數(shù)據(jù)傳輸通道送入片內(nèi)RAM,。在接收完一幀CCD數(shù)據(jù)之后,,對數(shù)據(jù)進(jìn)行計(jì)算,并通過LCD液晶屏顯示信號波形和測量結(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)對實(shí)時(shí)性以及存儲空間的要求,。具備3個(gè)SPI通信接口和FSMC靈活的靜態(tài)存儲器管理系統(tǒng),方便對SD卡和LCD屏幕的操作,。 帶有2個(gè)高級定時(shí)器和6個(gè)通用定時(shí)器,,為CCD驅(qū)動和AD驅(qū)動時(shí)序的設(shè)計(jì)提供了支持,有112個(gè)GPIO口,,可根據(jù)需求對引腳的功能進(jìn)行復(fù)用,,方便對系統(tǒng)進(jìn)行擴(kuò)展。
2.3信號采集和A/D轉(zhuǎn)換模塊
本設(shè)計(jì)選用的線陣CCD傳感器為東芝公司生產(chǎn)的TCD1209,,這款CCD靈敏度高,、暗信號電壓小、動態(tài)范圍比較大,,適用于測量系統(tǒng),。它有2 048個(gè)有效像元,像元尺寸為14 μm×14 μm,,光敏區(qū)總長度為28.4 mm,。 TCD1209工作需要6路5 V電平的驅(qū)動時(shí)序,這些信號的時(shí)序關(guān)系在驅(qū)動信號設(shè)計(jì)部分介紹。
選用AD公司生產(chǎn)的AD9945對線陣CCD輸出的模擬信號進(jìn)行模數(shù)轉(zhuǎn)換,。它是一款適合本系統(tǒng)CCD應(yīng)用的完整模擬信號處理器[3],。該芯片最高采樣頻率為40 MHz,其信號鏈包括CDS(相關(guān)雙采樣器),、VGA(數(shù)字控制增益放大器),、AD(12位模數(shù)轉(zhuǎn)換器)以及暗電平鉗位。其相關(guān)雙采樣器CDS可以減小系統(tǒng)的復(fù)位噪聲,、熱噪聲等,,有效提高信號質(zhì)量。數(shù)字控制增益放大器VGA可以通過一個(gè)10位的串行數(shù)字接口編程配置,,設(shè)置CCD的信號增益,,增益范圍為6~40 dB,增益調(diào)整的公式為VGA Gain(dB)=(VGA Code×0.035 dB)+5.3 dB,。12位的A/D轉(zhuǎn)換器將模擬信號轉(zhuǎn)換為12 bit數(shù)字信號,,實(shí)現(xiàn)并行輸出。
2.4LCD顯示模塊
本設(shè)計(jì)中顯示器選用分辨率為800×480的4.3英寸TFTLCD電容觸摸屏模塊,,該模塊16位真彩色顯示,,采用NT35510驅(qū)動,該芯片自帶GRAM,,無需外加驅(qū)動器,。TFTLCD模塊與STM32的連接采用FSMC(靈活的靜態(tài)存儲控制器),16位8080并行數(shù)據(jù)端口用于傳輸數(shù)據(jù),,5個(gè)控制端口用于驅(qū)動液晶屏,,這樣的驅(qū)動模式可以實(shí)現(xiàn)快速讀寫,寫周期只需要33 ns,,理論上最大速度可以達(dá)到每秒3 030萬像素,,即刷屏速度每秒78.9幀。
3驅(qū)動信號設(shè)計(jì)
3.1CCD驅(qū)動時(shí)序產(chǎn)生
CCD工作需要的6路驅(qū)動時(shí)序包括移位脈沖φ1,、φ2,,信號輸出脈沖φ2b,轉(zhuǎn)移脈沖SH,,復(fù)位脈沖RS,,箝位脈沖CP。在這六路驅(qū)動信號協(xié)同工作下,,CCD完成光的積分和轉(zhuǎn)移輸出,。SH為低電平時(shí),CCD進(jìn)行光積分,,此階段不發(fā)生電荷轉(zhuǎn)移,。SH為高電平時(shí),,CCD將光積分信號轉(zhuǎn)移至移位寄存器,移位寄存器在φ1,、φ2的作用下將電荷逐位轉(zhuǎn)移至輸出端,,最后由φ2b輸出。在下一個(gè)信號到來前,,RS和CP對相元中的殘余信號進(jìn)行清除,。CCD六路驅(qū)動信號需要滿足嚴(yán)格的時(shí)序關(guān)系,時(shí)序圖如圖2所示,。
φ1由STM32的高級定時(shí)器TIM1_Channel2產(chǎn)生,。STM32時(shí)鐘主頻為72 MHz,TIM1工作在PWM1模式,,設(shè)置TIM1 自動重裝載寄存器的值為71,,輸出比較值為35,輸出比較極性為高,,便可以產(chǎn)生頻率為1 MHz,、占空比1∶1的時(shí)序波形。TIM1_Channel2的輸出信號經(jīng)反相器SN74LVC3G04取反并轉(zhuǎn)換為5 V電平后即得到驅(qū)動信號φ1,,φ1再次經(jīng)過反相器即得到φ2和φ2b,。
RS和CP分別由STM32定時(shí)器3的Channel1、 Channel2和Channel3,、 Channel4產(chǎn)生,。由CCD驅(qū)動時(shí)序圖可以看出,以φ1的信號周期為標(biāo)準(zhǔn),,在一個(gè)信號周期內(nèi)RS和CP信號要先上升后下降,,也就是需要在一個(gè)周期內(nèi)產(chǎn)生低—高—低電平,而STM32定時(shí)器在一個(gè)周期內(nèi)只能產(chǎn)生高—低電平或者低—高電平,。因此本設(shè)計(jì)用定時(shí)器的兩個(gè)通道輸出兩個(gè)有相位差的高—低電平,,經(jīng)過異或門SN74LVC2G86來生成所需信號。TIM3工作在PWM3模式,,設(shè)置TIM3 自動重裝載寄存器的值為71,4個(gè)通道輸出比較值分別為36,、42,、46、52,, Channel1和Channel2經(jīng)過SN74LVC2G86取異或得到信號RS,,Channel3和Channel4經(jīng)過SN74LVC2G86取異或得到信號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輸出信號經(jīng)SN74LVC3G04取反并轉(zhuǎn)換為5 V電平后即得到驅(qū)動信號SH。
3.2A/D驅(qū)動工作控制
AD9945工作包括數(shù)字控制增益放大器的配置,、相關(guān)雙采樣和12位AD轉(zhuǎn)換,。配置VGA(數(shù)字控制增益放大器)需要三路時(shí)序信號SL、SCK,、SDATA,,這三路信號滿足SPI協(xié)議,所以利用STM32的SPI2接口來為SL,、SCK,、SDATA提供時(shí)序脈沖。
AD9945的相關(guān)雙采樣功能的實(shí)現(xiàn)和暗電平鉗位功能的實(shí)現(xiàn)需要驅(qū)動信號SHP,、SHD,、DATACLK和PBCLK、CLPOB,。SHP和SHD的采樣頻率應(yīng)該與CCD的頻率一致,,才能保證各個(gè)信號被有效采集。在本系統(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信號,,這三路信號經(jīng)過SN74LVC3G04電平轉(zhuǎn)換增強(qiáng)驅(qū)動能力。
PBCLK,、CLPOB分別由定時(shí)器2的Channel1,、Channel2和Channel3,、Channel4產(chǎn)生,TIM2工作在PWM2模式,,預(yù)裝載寄存器的值為3 000,4個(gè)通道的輸出比較值分別為14,、28、14,、2 088,,信號CLPOB由定時(shí)器2的Channel1、Channel2兩路輸出信號經(jīng)SN74LVC2G86取異或得到,,信號PBCLK由定時(shí)器2的Channel2,、Channel3兩路輸出信號經(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ù)中通常帶有高頻噪聲,這些噪聲的存在會影響算法的執(zhí)行效率,。中值濾波是最常用的處理高頻信號的方法,,它能夠在除去高頻噪聲的同時(shí)保留圖像邊緣細(xì)節(jié)。因此需要先對原始數(shù)據(jù)進(jìn)行中值濾波處理,。
4.2邊緣提取
理想的邊緣信號是一階躍函數(shù)[4],,而CCD采集到的實(shí)際邊緣信號是一個(gè)漸變信號,為準(zhǔn)確地提取邊緣信號,,采用基于梯度算子的直線擬合法[5],。算法經(jīng)過簡化處理后實(shí)現(xiàn)步驟如下:
(1)選取擬合窗口,,由于實(shí)際測量光照強(qiá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),,利用梯度算子尋找出梯度最大值,,對應(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ū)動,提供了豐富的操作函數(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)陣范圍顯示信號波形,,把長度方向作為線陣CCD的像素序號橫坐標(biāo),,寬度方向作為縱坐標(biāo),對應(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í)顯示,,需要完成波形的自動擦除和重繪[6],。定義了一個(gè)數(shù)組 iTemp[600]={0} 用于存儲上一幀數(shù)據(jù),,定義一個(gè)8 bit變量Py_Used用于標(biāo)志屏幕上是否有波形顯示。在繪制波形前先檢查Py_Used是否為1,,若為1則用背景色繪制iTemp[600]存儲的數(shù)據(jù)并將Py_Used置0,。繪完一幀波形后將當(dāng)前的數(shù)據(jù)存入iTemp[600],以備下一次擦除波形使用,。
用背景色繪制上一幀數(shù)據(jù)擦除波形的方法簡便快捷,,但是擦除波形的同時(shí),會擦除一部分網(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,,測量相對誤差為0.4%,。本系統(tǒng)還可以拓展到其他應(yīng)用中,例如測量位移,、衍射法測量細(xì)絲直徑,、振動測量等,將數(shù)據(jù)進(jìn)行灰度閾值劃分并以灰度顏色顯示還可以用于掃描圖像,?! ?/p>
參考文獻(xiàn)
[1] 王慶有. CCD應(yīng)用技術(shù)[M]. 天津:天津大學(xué)出版社,,2000.
?。?] 翟青涌,黃建國,,程玉華. 基于梯度算子的線陣CCD圖像邊緣檢測方法研究[J].電子質(zhì)量,,2009(10):12.
[3] 劉奮飛,趙輝,,陶衛(wèi),,等. 改進(jìn)的直線擬合線陣CCD圖像邊緣檢測方法[J].光電工程,2005,,32(3):4043.
[4] 杜昕,,汪小澄. 線陣CCD數(shù)據(jù)采集及LCD顯示[J].自動化儀表,,2007,28(12):3639.
?。?] 余皓,,劉秉琦,王海寬,,等. 線陣CCD圖像兩種直線擬合邊緣檢測方法比較研究[J].光學(xué)儀器,,2015,37(3):268271.
?。?] 馬超,,高鵬,楊白芹,,等. 基于STM32和uC/OSII的嵌入式數(shù)字示波器設(shè)計(jì) [J].電子技術(shù),,2013(12):7375.