《電子技術應用》
您所在的位置:首頁 > 顯示光電 > 設計應用 > 基于STM32的便攜式線陣CCD測量系統(tǒng)設計
基于STM32的便攜式線陣CCD測量系統(tǒng)設計
2016年微型機與應用第11期
劉珍珍,汪濤,鄭雪麗
(重慶大學 物理學院,重慶 401331)
摘要: 為了提高電荷耦合器件(CCD)一維尺度非接觸測量系統(tǒng)的集成性和便攜程度,設計了以STM32為核心的測量系統(tǒng)。使用3.7 V鋰電池供電,用STM32產生線陣CCD驅動信號,內嵌邊緣檢測算法并設計了LCD液晶觸摸屏操作界面,實現了一款高精度便攜式非接觸測量儀。系統(tǒng)功能完整、操作方便、可靠性高。
Abstract:
Key words :

  劉珍珍,汪濤,鄭雪麗

  (重慶大學 物理學院,重慶 401331)

  摘要:為了提高電荷耦合器件(CCD)一維尺度非接觸測量系統(tǒng)的集成性和便攜程度,設計了以STM32為核心的測量系統(tǒng)。使用3.7 V鋰電池供電,用STM32產生線陣CCD驅動信號,內嵌邊緣檢測算法并設計了LCD液晶觸摸屏操作界面,實現了一款高精度便攜式非接觸測量儀。系統(tǒng)功能完整、操作方便、可靠性高。

  關鍵詞:線陣CCD;STM32;LCD液晶觸摸屏;邊緣檢測

0引言

  電荷耦合器件CCD(ChargeCoupled Device)[1]自上世紀60年代誕生以來,由于其具有精度高、功耗低、尺寸小、壽命長等優(yōu)點,被廣泛地應用于自動測量、圖像獲取等方面。隨著CCD應用市場的擴大,CCD測量系統(tǒng)的實現方法也曾出不窮?,F有的CCD測量系統(tǒng)多采用單片機或FPGA驅動,用串口或USB進行數據傳輸,用電腦上位機完成數據的處理和顯示,供電方式則多采用5 V電壓轉換器或USB供電。這樣的設計使得CCD測量系統(tǒng)的使用靈活程度、便攜性、實時性都受到限制。

  為解決以上問題,設計了一款基于STM32便攜式線陣CCD測量系統(tǒng)。系統(tǒng)驅動方式采用ARM驅動,選用意法半導體公司的STM32F103作為主控芯片完成驅動信號的生成和控制功能。采用中值濾波和基于梯度算子的直線擬合邊緣提取算法[2]處理數據,設計了LCD觸摸屏操作界面實時顯示數據波形和測量結果。供電方式采用3.7 V鋰電池供電,并設計了USB充電電路。如此設計克服了現有CCD測量系統(tǒng)開發(fā)成本高、連線復雜、便攜性差等問題。

1系統(tǒng)結構

  系統(tǒng)主要由ARM處理器、電平轉換、線陣CCD、A/D轉換、LCD液晶觸摸顯示及SD存儲卡等部分組成。

  系統(tǒng)工作過程如下:ARM處理器產生驅動脈沖,通過電平轉換之后驅動線陣CCD工作,線陣CCD的光敏單元受光的激發(fā)產生電信號,并在驅動脈沖的作用下輸出離散的模擬信號,此信號經過0.1 μF的隔直耦合電容后傳入A/D轉換電路,A/D轉換后的數字信號經過ARM內部的DMA快速數據傳輸通道送入片內RAM。在接收完一幀CCD數據之后,對數據進行計算,并通過LCD液晶屏顯示信號波形和測量結果。通過LCD觸摸屏按鍵可以選擇性地保存原始數據和屏幕截圖到SD卡。系統(tǒng)框架如圖1所示。

 

001.jpg

2系統(tǒng)硬件組成

  2.1電源模塊

  本系統(tǒng)選用的電池為單節(jié)3.7 V鋰電池,電池容量6 000 mWh。該電池電量在5%以上時電壓范圍3.45 V~4.2 V。根據系統(tǒng)需求設計了3.3 V降壓電路和5 V、12 V升壓電路。芯片選型和電路設計中主要考慮了輸入電壓范圍、電源轉換效率、輸出功率、靜態(tài)電流、電路復雜程度和成本等問題。

  2.2控制模塊

  系統(tǒng)主控芯片選用STM32F103ZET6,其為意法半導體公司推出的一款基于Cortex-M3內核的32位微處理器。該處理器最大時鐘頻率可達到72 MHz,具有64 KB靜態(tài)RAM,516 KB閃存,完全滿足系統(tǒng)對實時性以及存儲空間的要求。具備3個SPI通信接口和FSMC靈活的靜態(tài)存儲器管理系統(tǒng),方便對SD卡和LCD屏幕的操作。 帶有2個高級定時器和6個通用定時器,為CCD驅動和AD驅動時序的設計提供了支持,有112個GPIO口,可根據需求對引腳的功能進行復用,方便對系統(tǒng)進行擴展。

  2.3信號采集和A/D轉換模塊

  本設計選用的線陣CCD傳感器為東芝公司生產的TCD1209,這款CCD靈敏度高、暗信號電壓小、動態(tài)范圍比較大,適用于測量系統(tǒng)。它有2 048個有效像元,像元尺寸為14 μm×14 μm,光敏區(qū)總長度為28.4 mm。 TCD1209工作需要6路5 V電平的驅動時序,這些信號的時序關系在驅動信號設計部分介紹。

  選用AD公司生產的AD9945對線陣CCD輸出的模擬信號進行模數轉換。它是一款適合本系統(tǒng)CCD應用的完整模擬信號處理器[3]。該芯片最高采樣頻率為40 MHz,其信號鏈包括CDS(相關雙采樣器)、VGA(數字控制增益放大器)、AD(12位模數轉換器)以及暗電平鉗位。其相關雙采樣器CDS可以減小系統(tǒng)的復位噪聲、熱噪聲等,有效提高信號質量。數字控制增益放大器VGA可以通過一個10位的串行數字接口編程配置,設置CCD的信號增益,增益范圍為6~40 dB,增益調整的公式為VGA Gain(dB)=(VGA Code×0.035 dB)+5.3 dB。12位的A/D轉換器將模擬信號轉換為12 bit數字信號,實現并行輸出。

  2.4LCD顯示模塊

  本設計中顯示器選用分辨率為800×480的4.3英寸TFTLCD電容觸摸屏模塊,該模塊16位真彩色顯示,采用NT35510驅動,該芯片自帶GRAM,無需外加驅動器。TFTLCD模塊與STM32的連接采用FSMC(靈活的靜態(tài)存儲控制器),16位8080并行數據端口用于傳輸數據,5個控制端口用于驅動液晶屏,這樣的驅動模式可以實現快速讀寫,寫周期只需要33 ns,理論上最大速度可以達到每秒3 030萬像素,即刷屏速度每秒78.9幀。

3驅動信號設計

  3.1CCD驅動時序產生

  CCD工作需要的6路驅動時序包括移位脈沖φ1、φ2,信號輸出脈沖φ2b,轉移脈沖SH,復位脈沖RS,箝位脈沖CP。在這六路驅動信號協(xié)同工作下,CCD完成光的積分和轉移輸出。SH為低電平時,CCD進行光積分,此階段不發(fā)生電荷轉移。SH為高電平時,CCD將光積分信號轉移至移位寄存器,移位寄存器在φ1、φ2的作用下將電荷逐位轉移至輸出端,最后由φ2b輸出。在下一個信號到來前,RS和CP對相元中的殘余信號進行清除。CCD六路驅動信號需要滿足嚴格的時序關系,時序圖如圖2所示。

002.jpg

  φ1由STM32的高級定時器TIM1_Channel2產生。STM32時鐘主頻為72 MHz,TIM1工作在PWM1模式,設置TIM1 自動重裝載寄存器的值為71,輸出比較值為35,輸出比較極性為高,便可以產生頻率為1 MHz、占空比1∶1的時序波形。TIM1_Channel2的輸出信號經反相器SN74LVC3G04取反并轉換為5 V電平后即得到驅動信號φ1,φ1再次經過反相器即得到φ2和φ2b。

  RS和CP分別由STM32定時器3的Channel1、 Channel2和Channel3、 Channel4產生。由CCD驅動時序圖可以看出,以φ1的信號周期為標準,在一個信號周期內RS和CP信號要先上升后下降,也就是需要在一個周期內產生低—高—低電平,而STM32定時器在一個周期內只能產生高—低電平或者低—高電平。因此本設計用定時器的兩個通道輸出兩個有相位差的高—低電平,經過異或門SN74LVC2G86來生成所需信號。TIM3工作在PWM3模式,設置TIM3 自動重裝載寄存器的值為71,4個通道輸出比較值分別為36、42、46、52, Channel1和Channel2經過SN74LVC2G86取異或得到信號RS,Channel3和Channel4經過SN74LVC2G86取異或得到信號CP。

  SH配置到PA_10,由TIM2中斷控制產生,TIM2工作在TIM1觸發(fā)模式,TIM1計數器滿則觸發(fā)TIM2計數器加1,TIM2預裝載寄存器的值設置為3 000,TIM2計數器溢出進入中斷函數。關閉所有定時器,將PA_10置0,延時3 μs,將PA_10置1,打開所有定時器,退出中斷。PA_10輸出信號經SN74LVC3G04取反并轉換為5 V電平后即得到驅動信號SH。

  3.2A/D驅動工作控制

  AD9945工作包括數字控制增益放大器的配置、相關雙采樣和12位AD轉換。配置VGA(數字控制增益放大器)需要三路時序信號SL、SCK、SDATA,這三路信號滿足SPI協(xié)議,所以利用STM32的SPI2接口來為SL、SCK、SDATA提供時序脈沖。

  AD9945的相關雙采樣功能的實現和暗電平鉗位功能的實現需要驅動信號SHP、SHD、DATACLK和PBCLK、CLPOB。SHP和SHD的采樣頻率應該與CCD的頻率一致,才能保證各個信號被有效采集。在本系統(tǒng)中,SHP、SHD和SDATA分別由STM32 TIM4的Chanel1、Chanel2和Chanel3控制。TIM4工作在PWM2輸出模式,預裝載寄存器的值為71,3個通道輸出比較值分別為38、60、20,即得到滿足時序關系的SHP、SHD和SDATA信號,這三路信號經過SN74LVC3G04電平轉換增強驅動能力。

  PBCLK、CLPOB分別由定時器2的Channel1、Channel2和Channel3、Channel4產生,TIM2工作在PWM2模式,預裝載寄存器的值為3 000,4個通道的輸出比較值分別為14、28、14、2 088,信號CLPOB由定時器2的Channel1、Channel2兩路輸出信號經SN74LVC2G86取異或得到,信號PBCLK由定時器2的Channel2、Channel3兩路輸出信號經SN74LVC2G86取異或得到。

4圖像處理和LCD顯示

  本系統(tǒng)用于測量縫寬的光路圖如圖3所示。用均勻光源照射待測物體,物體反射光經鏡頭在CCD光敏面成像,CCD采集到的數據圖像在像的位置形成凹槽,只要檢測出凹槽的兩個邊緣位置,即可得到像的寬度。鏡頭在某個物像位置下的放大倍數通過定標和曲線擬合的方法獲得,待測縫寬可由像寬乘以放大倍數得到。

003.jpg

  4.1數據預處理

  CCD采集的數據中通常帶有高頻噪聲,這些噪聲的存在會影響算法的執(zhí)行效率。中值濾波是最常用的處理高頻信號的方法,它能夠在除去高頻噪聲的同時保留圖像邊緣細節(jié)。因此需要先對原始數據進行中值濾波處理。

  4.2邊緣提取

  理想的邊緣信號是一階躍函數[4],而CCD采集到的實際邊緣信號是一個漸變信號,為準確地提取邊緣信號,采用基于梯度算子的直線擬合法[5]。算法經過簡化處理后實現步驟如下:

  (1)選取擬合窗口,由于實際測量光照強度的不確定性,采取浮動閾值法,即先尋找一幀數據中的最大值Vmax與最小值Vmin,由此設定窗口閾值:

  Vh=Vmin+0.8(Vmax-Vmin)

  Vl=Vmin+0.2(Vmax-Vmin)

  (2)邊緣粗定位,根據邊緣成像的原理,線陣CCD圖像的邊緣即為過渡區(qū)中灰度變化斜率最大值所在位置。線陣CCD采集得到的數字圖像是離散量,其梯度幅值為 R(i)=|V(i)-V(i-1)|,在窗口區(qū)域內,利用梯度算子尋找出梯度最大值,對應的位置即為圖像邊緣粗定位所在位置。

  1.png

  (3)確定邊緣,在原窗口內,以梯度最大值點的灰度V(i)為中心,向兩邊按步長m擴張,確定擬合值:

  Vl=V(i)-m(Vmax-Vmin),Vl>Vmin

  Vh=V(i-1)+m(Vmax-Vmin),Vh<Vmax

  從i開始向左搜索找出第一個大于Vl的點n1,從i-1開始向右搜索找出第一個小于Vh的點n2,點(n1,Vl)與點(n2,Vh)所連直線的中點位置X1作為圖像邊緣。

  O2CN(_XE)UVD1@W2FZ5$6E7.png

  (4)重復步驟(3)3次,得到5個邊緣值X0、X1、X2、X3、X4,將5個邊緣值按順序排列取中值作為最終確定的邊緣X。

  4.3LCD顯示

  LCD選用ALINTAK 4.3英寸電容觸摸屏模塊,模塊自帶底層驅動,提供了豐富的操作函數,包括畫點、讀點、顯示字符、觸屏讀點等。此屏幕分辨率為800*480,將屏幕分為波形顯示區(qū)和按鍵區(qū)兩部分。

  4.3.1波形顯示的實現

  首先用畫點函數LCD_DrawPoint( px[i], py[i]) 繪制網格并顯示坐標。接著繪制數據波形,CCD輸出的一幀有效數據為2 048個,每個數據都是12 bit,即范圍在0~4 096。在600×400的點陣范圍顯示信號波形,把長度方向作為線陣CCD的像素序號橫坐標,寬度方向作為縱坐標,對應像元灰度值。橫坐標方向上數據抽樣顯示,縱坐標方向對灰度值進行壓縮。具體實現如下:

  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]);

  為實現波形實時顯示,需要完成波形的自動擦除和重繪[6]。定義了一個數組 iTemp[600]={0} 用于存儲上一幀數據,定義一個8 bit變量Py_Used用于標志屏幕上是否有波形顯示。在繪制波形前先檢查Py_Used是否為1,若為1則用背景色繪制iTemp[600]存儲的數據并將Py_Used置0。繪完一幀波形后將當前的數據存入iTemp[600],以備下一次擦除波形使用。

  用背景色繪制上一幀數據擦除波形的方法簡便快捷,但是擦除波形的同時,會擦除一部分網格線。為了解決這個問題,使用定時器中斷,每隔0.5 s重繪網格。最終得到了很好的波形顯示效果。

  4.3.2觸摸屏按鍵的實現

  通過測量觸摸點電壓經過A/D轉換的值得到觸摸點的橫縱坐標。通過判斷觸摸點位置所在的按鍵區(qū)域,執(zhí)行相應操作,觸摸屏操作程序流程如圖4所示。

  

004.jpg

5結論

  基于STM32設計的便攜式CCD測量儀,取代了以往設計中依賴固定電源和電腦上位機的測量系統(tǒng)。利用STM32的多種優(yōu)勢,提高了系統(tǒng)的集成度和便攜性,內嵌邊緣檢測算法的設計提高了系統(tǒng)的實時性和測量精度。如圖5所示為系統(tǒng)測量5 cm標準縫寬,LCD顯示結果為4.98 cm,測量相對誤差為0.4%。本系統(tǒng)還可以拓展到其他應用中,例如測量位移、衍射法測量細絲直徑、振動測量等,將數據進行灰度閾值劃分并以灰度顏色顯示還可以用于掃描圖像?! ?/p>

005.jpg

參考文獻

 ?。?] 王慶有. CCD應用技術[M]. 天津:天津大學出版社,2000.

  [2] 翟青涌,黃建國,程玉華. 基于梯度算子的線陣CCD圖像邊緣檢測方法研究[J].電子質量,2009(10):12.

  [3] 劉奮飛,趙輝,陶衛(wèi),等. 改進的直線擬合線陣CCD圖像邊緣檢測方法[J].光電工程,2005,32(3):4043.

 ?。?] 杜昕,汪小澄. 線陣CCD數據采集及LCD顯示[J].自動化儀表,2007,28(12):3639.

 ?。?] 余皓,劉秉琦,王海寬,等. 線陣CCD圖像兩種直線擬合邊緣檢測方法比較研究[J].光學儀器,2015,37(3):268271.

 ?。?] 馬超,高鵬,楊白芹,等. 基于STM32和uC/OSII的嵌入式數字示波器設計 [J].電子技術,2013(12):7375.


此內容為AET網站原創(chuàng),未經授權禁止轉載。