李亞威, 陸永華, 劉斌
(南京航空航天大學機電學院,南京210016)
電荷耦合元件CCD(Charge-coupled Device)傳感器,是一種半導體器件,能夠把光學影像轉化為模擬電壓輸出,CCD由于精度高、分辨率高、性能穩定、功耗低、壽命長等特點,廣泛應用于圖像傳感和非接觸測量領域[1]。在CCD傳感器的應用中,能否產生正確合理的驅動信號是關鍵,常用的線陣CCD驅動實現方式通常有:EPROM驅動、IC驅動、單片機驅動法、FPGA驅動,但以上方法普遍存在程序設計復雜、驅動頻率低等缺陷。使用基于Cortex-M3內核的STM32F103VET6微控制器產生CCD驅動信號,在KeiluVersion4平臺上基于STM32固件庫開發驅動程序以產生CCD傳感器驅動信號并完成采集后數據處理工作,具有驅動頻率高、開發便利、驅動信號穩定的優點。
微控制器需要完成產生驅動信號、數據處理、人機交互界面刷新等任務,為滿足多任務并發性的要求,在STM32微控制器上移植了μC/OS-Ⅱ操作系統,基于操作系統創建各任務,由操作系統的通信機制及任務調度功能保證各任務的協調運行。
系統采用TOSHIBA公司的TCD1208AP線陣CCD傳感器,該型傳感器具有靈敏度高、暗電流低的特點。系統總體結構圖如圖1所示。系統選用ST公司生產的基于Cortex-M3內核的STM32微控制器,其產生的3.3 V驅動信號經電平轉換電路轉化為5 V的信號驅動線陣CCD傳感器。STM32芯片內集成A/D轉換器的外接參考電壓為3.3 V,線陣CCD輸出的最高為5 V的模擬電壓經差分放大電路降壓后接入A/D轉換器采樣通道進行采樣轉換。STM32控制液晶控制器和觸摸控制器進而為觸控液晶顯示器提供驅動信號,完成系統啟停控制、顯示采樣結果等人機交互任務。

圖1 系統結構框圖
TCD1208AP是一種二相雙溝道線陣CCD圖像傳感器芯片,其驅動信號如圖2所示。四路驅動信號分別為:轉移脈沖SH,復位脈沖RS,時鐘脈沖Φ1、Φ2。SH為高電平時信號電荷轉移到CCD模擬移位寄存器,SH跳變為低電平后在時鐘脈沖Φ1、Φ2交變作用下OS逐個按位輸出像元電壓信號,隨后發出RS脈沖去掉信號輸出緩沖器中的殘余電荷為下一像元電壓輸出做準備。根據傳感器結構安排,TCD1208AP在一個采樣周期中首先輸出40個啞元信號,之后輸出2160個有效像元輸出,其后又輸出12個啞元信號后一個輸出周期結束,因此一個采樣周期中至少包含2212次時鐘信號交變和2212個復位脈沖RS。CCD傳感器對驅動信號的頻率有嚴格要求[2],其時鐘特性如表1所示。

圖2 TCD1208AP驅動信號時序圖

表1 TCD1208AP驅動信號時鐘特性
STM32驅動信號產生方法有兩種:a.設定通用定時器產生;b.直接設置IO口模擬。第一種方法計時準確,通過設置相應定時器的預分頻寄存器精度可達0.05 μs,但通用定時器同步困難,需要使用中斷來實現,操作困難且由于CCD交變時鐘信號工作頻率高而難以保證準確同步[3]。系統采用庫函數直接設置CPU寄存器控制IO口的方法輸出驅動信號,通過設置鎖相環PLL,STM32的指令執行速度高達72MHz,克服了以往單片機直接驅動頻率低的問題。IO跳變時間只有28 ns,采用CPU空指令_nop()延時,精度為13ns,完成一個采樣周期最快只需5ms左右,通過庫函數設置相應GPIO口的GPIOx_BSRR寄存器實現相應端口同時輸出高或低電平可以確保各端口滿足驅動信號同步性要求。
通過分析TCD1208AP驅動信號時序圖可以看出除去SH中斷位在一個Φ1或Φ2周期內可以將信號分為6種狀態[4],如圖 3 所示,Φ1、Φ2 相位相反,周期為 2 倍的RS。因此可以采用循環狀態分割法讓STM32周期性的輸電平的要求。

圖3 時序細分圖
調整延時函數的輸入參數,在示波器上可以得到輸出驅動信號的時序圖如圖4所示。
CCD正常工作時有兩路輸出信號:輸出信號OS和補償信號 DOS,但出大于 1106(2212/2)個Φ1周期內的這6種狀態即可完成一次采樣。根據圖3可以列出各狀態的時序變化值,如表2所示。通過調整每種狀態的延時時間進而得到復合CCD傳感器驅動信號頻率要求的信號,在實際測量中,延時函數的輸入參數可以隨時調整,以取得最佳采樣結果。STM32的引腳輸出高電平為3.3 V,輸出信號經由74LS04P芯片組成的電平轉換電路放大到5 V后接入CCD傳感器相應引腳,以滿足傳感器對驅動信號該信號有效信號幅值小,且存在周期性的復位脈沖串擾。系統采用差分運算方式處理輸出信號,差分運算放大器選用AD公司的AD8031芯片,它是一款低功耗、高速的單電源電壓反饋性放大器,小信號帶寬為80 MHz,壓擺率為30 V/μs,建立時間為125 ns。采用+5 V電源時,對于2V峰值、1MHz輸出信號的總諧波失真(THD)為-62dBc,完全可以滿足系統需要。將CCD的輸出信號OS和補償輸出信號DOS分別接到芯片的+IN引腳和-IN引腳可以有效去除OS中含有的復位噪聲。由于AD8031差分運算放大器的最小放大倍數為1,CCD傳感器的最高模擬電壓輸出為5 V,而STM32芯片內集成A/D轉換器的外接參考電壓VREF+為3.3 V,因此需要對經過差分處理的模擬信號進行降壓處理以滿足A/D轉換器的量程要求。輸出電壓信號處理電路如圖5所示,圖中R1=R2=R3=R4=10 kΩ,R6=2R5=20 kΩ。[5]

表2 時序狀態變化表

圖4 示波器采集驅動信號時序圖

圖5 輸出信號處理電路圖
線陣CCD傳感器輸出信號頻率高,因此需要AD傳感器有較高的轉換速率,系統將時鐘ADCCLK配置為9 MHz,同時把所用ADC1通道11配置為7.5個采樣周期,根據STM32的ADC采樣時間計算公式:TCONV采樣周期+12.5個周期[6]得系統所用ADC1轉換通道的轉換時間為:TCONV=(55.5+7.5)×1÷9=7 μs,完全滿足線陣 CCD 傳感器對轉換速率的要求。同時將ADC1設置為自動DMA傳輸模式,每次轉換完成后會自動開啟DMA傳輸功能將所得數據采用硬件方式轉移到STM32內存預設位置的數據存儲數組中,這個過程不需要CPU的參與,不影響CPU產生驅動信號。ADC1采用軟件啟動模式,編程時在時序狀態變化表的特定時刻插入ADC_SoftwareStartConvCmd()庫函數啟動ADC轉換。
系統采用2.4寸(240×320)TFT液晶顯示器,由于STM32內部沒有集成專用的液晶屏和觸摸屏的控制接口,所以需要外接專用芯片來控制顯示面板,系統采用ILI9325和TSC2046芯片。由STM32的FSMC(靜態存儲控制器)的NOR/PSRAM模式模擬產生ILI9325的8080接口通信時序,通過對FSMC的操作向ILI9325寫入控制命令或GRAM數據。通過配置STM32的SPI接口向四線電阻觸摸屏控制器TSC2046寫入控制字和接收控制器返回的屏幕X、Y方向的觸電電壓值。
根據系統硬件功能設計,系統軟件主要有3個模塊組成:驅動信號產生模塊、數據處理模塊、液晶顯示模塊。為了使3個模塊協調運行、更好地管理微處理器及縮短軟件開發周期,系統在STM32微處理器平臺上移植了μC/OS-Ⅱ實時操作系統[7]。根據所完成任務性質及特性的不同,3個模塊有不同的優先級及運行頻率,其中驅動信號產生模塊擁有最高優先級,可剝奪型的實時內核在任何時候都運行就緒了的最高優先級任務,數據處理模塊的運行是基于驅動信號產生的基礎之上,優先級次低,窗口顯示模塊對實時性要求最低,可設置最低的優先級。驅動采樣任務、數據處理任務及顯示任務的流程如圖6所示。
液晶顯示處理任務負責及時按指定格式顯示出處理后的數據及完成通過觸摸屏控制系統的運行啟停等人機交互任務,為了簡化開發步驟和提高程序開發效率,系統在μC/OS-Ⅱ操作系統的基礎上移植了uCGUI嵌入式圖形支持系統。uCGUI設計用于為任何使用LCD圖形顯示的應用提供高效且獨立于處理器及LCD控制器的圖形用戶接口。 uCGUI可以在任何的CPU上運行,因為它是100%的標準C代碼編寫的。系統的控制顯示界面如圖7所示。
系統采用高分辨率、高靈敏度的CCD傳感器,低成本、易實現的STM32微控制器,配以μC/OS-Ⅱ和uCGUI操作及圖形處理系統,因此該嵌入式CCD數據采集系統可以不依賴于上位機實現任意時間、地點的靈活性數據采集。試驗表明,該數據采集系統簡單易行、成本低、分辨率高、開發方便,可為基于線陣CCD的數據采集工作提供一種有效便捷、運行可靠的解決方法。

圖6 系統軟件流程圖

圖7 采集系統界面
[1] 王慶有.圖像傳感器應用技術[M].北京:電子工業出版社,2003:46-49,128-134.
[2] Toshiba CCD linear image sensor TCD1206 data manual[M].Toshiba,2001.
[3] 吳呂憲.基于線陣CCD及STM32的滾針直徑精確測量的研究[D].南京:南京理工大學,2012:11-13
[4] 周根榮,姜平.基于線陣CCD的織物圖像采集系統[J].儀表技術與傳感器,2007(8):51-52.
[5] 秦曾煌,姜三勇.電工學:下冊[M].7版.北京:高等教育出版社,2009:103-107.
[6] 劉火良,楊森.STM32庫開發實戰指南[M].北京:機械工業出版社,2009:136-138.
[7] 劉淼,王田苗.基于μC/OS-Ⅱ的嵌入式數控系統實時性分析[J].計算機工程,2006(22):222-226.