劉珍珍,,汪濤,鄭雪麗
(重慶大學(xué) 物理學(xué)院,,重慶 401331)
摘要:為了提高電荷耦合器件(CCD)一維尺度非接觸測(cè)量系統(tǒng)的集成性和便攜程度,,設(shè)計(jì)了以STM32為核心的測(cè)量系統(tǒng)。使用3.7 V鋰電池供電,,用STM32產(chǎn)生線陣CCD驅(qū)動(dòng)信號(hào),,內(nèi)嵌邊緣檢測(cè)算法并設(shè)計(jì)了LCD液晶觸摸屏操作界面,實(shí)現(xiàn)了一款高精度便攜式非接觸測(cè)量?jī)x,。系統(tǒng)功能完整,、操作方便、可靠性高,。
關(guān)鍵詞:線陣CCD,;STM32;LCD液晶觸摸屏,;邊緣檢測(cè)
0引言
電荷耦合器件CCD(ChargeCoupled Device)[1]自上世紀(jì)60年代誕生以來(lái),,由于其具有精度高、功耗低,、尺寸小,、壽命長(zhǎng)等優(yōu)點(diǎn),被廣泛地應(yīng)用于自動(dòng)測(cè)量,、圖像獲取等方面,。隨著CCD應(yīng)用市場(chǎng)的擴(kuò)大,CCD測(cè)量系統(tǒng)的實(shí)現(xiàn)方法也曾出不窮?,F(xiàn)有的CCD測(cè)量系統(tǒng)多采用單片機(jī)或FPGA驅(qū)動(dòng),,用串口或USB進(jìn)行數(shù)據(jù)傳輸,用電腦上位機(jī)完成數(shù)據(jù)的處理和顯示,,供電方式則多采用5 V電壓轉(zhuǎn)換器或USB供電,。這樣的設(shè)計(jì)使得CCD測(cè)量系統(tǒng)的使用靈活程度、便攜性、實(shí)時(shí)性都受到限制,。
為解決以上問(wèn)題,,設(shè)計(jì)了一款基于STM32便攜式線陣CCD測(cè)量系統(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ù)波形和測(cè)量結(jié)果,。供電方式采用3.7 V鋰電池供電,,并設(shè)計(jì)了USB充電電路。如此設(shè)計(jì)克服了現(xiàn)有CCD測(cè)量系統(tǒng)開(kāi)發(fā)成本高,、連線復(fù)雜,、便攜性差等問(wèn)題。
1系統(tǒng)結(jié)構(gòu)
系統(tǒng)主要由ARM處理器,、電平轉(zhuǎn)換,、線陣CCD、A/D轉(zhuǎn)換,、LCD液晶觸摸顯示及SD存儲(chǔ)卡等部分組成,。
系統(tǒng)工作過(guò)程如下:ARM處理器產(chǎn)生驅(qū)動(dòng)脈沖,通過(guò)電平轉(zhuǎn)換之后驅(qū)動(dòng)線陣CCD工作,,線陣CCD的光敏單元受光的激發(fā)產(chǎn)生電信號(hào),,并在驅(qū)動(dòng)脈沖的作用下輸出離散的模擬信號(hào),此信號(hào)經(jīng)過(guò)0.1 μF的隔直耦合電容后傳入A/D轉(zhuǎn)換電路,,A/D轉(zhuǎn)換后的數(shù)字信號(hào)經(jīng)過(guò)ARM內(nèi)部的DMA快速數(shù)據(jù)傳輸通道送入片內(nèi)RAM,。在接收完一幀CCD數(shù)據(jù)之后,對(duì)數(shù)據(jù)進(jìn)行計(jì)算,,并通過(guò)LCD液晶屏顯示信號(hào)波形和測(cè)量結(jié)果,。通過(guò)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ù)雜程度和成本等問(wèn)題。
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)范圍比較大,,適用于測(cè)量系統(tǒng),。它有2 048個(gè)有效像元,像元尺寸為14 μm×14 μm,,光敏區(qū)總長(zhǎng)度為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可以通過(guò)一個(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,,無(wú)需外加驅(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)快速讀寫(xiě),寫(xiě)周期只需要33 ns,,理論上最大速度可以達(dá)到每秒3 030萬(wàn)像素,,即刷屏速度每秒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)到來(lái)前,,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)過(guò)反相器即得到φ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)過(guò)異或門(mén)SN74LVC2G86來(lái)生成所需信號(hào),。TIM3工作在PWM3模式,,設(shè)置TIM3 自動(dòng)重裝載寄存器的值為71,4個(gè)通道輸出比較值分別為36,、42,、46、52,, Channel1和Channel2經(jīng)過(guò)SN74LVC2G86取異或得到信號(hào)RS,,Channel3和Channel4經(jīng)過(guò)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,,打開(kāi)所有定時(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接口來(lái)為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)過(guò)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)用于測(cè)量縫寬的光路圖如圖3所示。用均勻光源照射待測(cè)物體,,物體反射光經(jīng)鏡頭在CCD光敏面成像,,CCD采集到的數(shù)據(jù)圖像在像的位置形成凹槽,只要檢測(cè)出凹槽的兩個(gè)邊緣位置,,即可得到像的寬度,。鏡頭在某個(gè)物像位置下的放大倍數(shù)通過(guò)定標(biāo)和曲線擬合的方法獲得,,待測(cè)縫寬可由像寬乘以放大倍數(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)過(guò)簡(jiǎn)化處理后實(shí)現(xiàn)步驟如下:
?。?)選取擬合窗口,由于實(shí)際測(cè)量光照強(qiáng)度的不確定性,,采取浮動(dòng)閾值法,,即先尋找一幀數(shù)據(jù)中的最大值Vmax與最小值Vmin,由此設(shè)定窗口閾值:
Vh=Vmin+0.8(Vmax-Vmin)
Vl=Vmin+0.2(Vmax-Vmin)
(2)邊緣粗定位,,根據(jù)邊緣成像的原理,,線陣CCD圖像的邊緣即為過(guò)渡區(qū)中灰度變化斜率最大值所在位置。線陣CCD采集得到的數(shù)字圖像是離散量,,其梯度幅值為 R(i)=|V(i)-V(i-1)|,,在窗口區(qū)域內(nèi),利用梯度算子尋找出梯度最大值,,對(duì)應(yīng)的位置即為圖像邊緣粗定位所在位置,。
(3)確定邊緣,在原窗口內(nèi),,以梯度最大值點(diǎn)的灰度V(i)為中心,,向兩邊按步長(zhǎng)m擴(kuò)張,確定擬合值:
Vl=V(i)-m(Vmax-Vmin),Vl>Vmin
Vh=V(i-1)+m(Vmax-Vmin),Vh<Vmax
從i開(kāi)始向左搜索找出第一個(gè)大于Vl的點(diǎn)n1,,從i-1開(kāi)始向右搜索找出第一個(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ù),,包括畫(huà)點(diǎn)、讀點(diǎn),、顯示字符,、觸屏讀點(diǎn)等。此屏幕分辨率為800*480,,將屏幕分為波形顯示區(qū)和按鍵區(qū)兩部分,。
4.3.1波形顯示的實(shí)現(xiàn)
首先用畫(huà)點(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)波形,,把長(zhǎng)度方向作為線陣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ù)擦除波形的方法簡(jiǎn)便快捷,,但是擦除波形的同時(shí),,會(huì)擦除一部分網(wǎng)格線。為了解決這個(gè)問(wèn)題,,使用定時(shí)器中斷,,每隔0.5 s重繪網(wǎng)格。最終得到了很好的波形顯示效果,。
4.3.2觸摸屏按鍵的實(shí)現(xiàn)
通過(guò)測(cè)量觸摸點(diǎn)電壓經(jīng)過(guò)A/D轉(zhuǎn)換的值得到觸摸點(diǎn)的橫縱坐標(biāo),。通過(guò)判斷觸摸點(diǎn)位置所在的按鍵區(qū)域,執(zhí)行相應(yīng)操作,觸摸屏操作程序流程如圖4所示,。
5結(jié)論
基于STM32設(shè)計(jì)的便攜式CCD測(cè)量?jī)x,,取代了以往設(shè)計(jì)中依賴固定電源和電腦上位機(jī)的測(cè)量系統(tǒng)。利用STM32的多種優(yōu)勢(shì),,提高了系統(tǒng)的集成度和便攜性,,內(nèi)嵌邊緣檢測(cè)算法的設(shè)計(jì)提高了系統(tǒng)的實(shí)時(shí)性和測(cè)量精度。如圖5所示為系統(tǒng)測(cè)量5 cm標(biāo)準(zhǔn)縫寬,,LCD顯示結(jié)果為4.98 cm,,測(cè)量相對(duì)誤差為0.4%。本系統(tǒng)還可以拓展到其他應(yīng)用中,,例如測(cè)量位移,、衍射法測(cè)量細(xì)絲直徑、振動(dòng)測(cè)量等,,將數(shù)據(jù)進(jìn)行灰度閾值劃分并以灰度顏色顯示還可以用于掃描圖像,。
參考文獻(xiàn)
?。?] 王慶有. CCD應(yīng)用技術(shù)[M]. 天津:天津大學(xué)出版社,2000.
?。?] 翟青涌,,黃建國(guó),程玉華. 基于梯度算子的線陣CCD圖像邊緣檢測(cè)方法研究[J].電子質(zhì)量,,2009(10):12.
?。?] 劉奮飛,趙輝,,陶衛(wèi),,等. 改進(jìn)的直線擬合線陣CCD圖像邊緣檢測(cè)方法[J].光電工程,2005,,32(3):4043.
?。?] 杜昕,汪小澄. 線陣CCD數(shù)據(jù)采集及LCD顯示[J].自動(dòng)化儀表,,2007,,28(12):3639.
[5] 余皓,,劉秉琦,,王海寬,等. 線陣CCD圖像兩種直線擬合邊緣檢測(cè)方法比較研究[J].光學(xué)儀器,,2015,,37(3):268271.
[6] 馬超,,高鵬,,楊白芹,,等. 基于STM32和uC/OSII的嵌入式數(shù)字示波器設(shè)計(jì) [J].電子技術(shù),2013(12):7375.