董 杰,苗長云,楊彥利,李現(xiàn)國
(天津工業(yè)大學(xué)電子與信息工程學(xué)院,天津 300387)
線陣CCD以其視場大、分辨率高、價格低廉的特點,已被廣泛應(yīng)用于工業(yè)上動態(tài)、非接觸測量和監(jiān)測[1]。CCD正常工作需要特定的、精確的驅(qū)動脈沖。傳統(tǒng)的驅(qū)動方法一般采用分立式器件實現(xiàn),調(diào)試?yán)щy、靈活性差,而單片機驅(qū)動方式雖然編程較為靈活,但驅(qū)動頻率較低,往往不能滿足實際要求[2]。
由于工業(yè)現(xiàn)場環(huán)境的差異,需要調(diào)節(jié)CCD的某些特定參數(shù)。以單個FPGA作為核心處理器的CCD信號采集系統(tǒng)往往不能滿足較為復(fù)雜的人機交互需求。現(xiàn)場采集的CCD數(shù)據(jù)需要遠(yuǎn)距離傳輸,而目前大多數(shù)線陣CCD信號采集系統(tǒng)多采用USB接口傳輸,不能組成網(wǎng)絡(luò),實現(xiàn)數(shù)據(jù)的遠(yuǎn)距離傳輸[1]。
本設(shè)計研制了一種基于FPGA和ARM的線陣CCD信號采集器,實現(xiàn)了線陣CCD信號的采集、存儲、處理,以及通過以太網(wǎng)傳輸?shù)缴衔粰C的功能,具有采集信號質(zhì)量好、可靠性高、傳輸速率高、人機交互好、組網(wǎng)方便等優(yōu)點。
采用以FPGA和ARM聯(lián)合作為中央處理器的方案。FPGA選用的是XC3S500E,內(nèi)部含有10476個邏輯單元、1164個可配置邏輯模塊、73Kb分布式RAM、360Kb塊RAM、20個可選擇的18*18的乘法器、232個用戶接口和92對差分接口[3]。ARM選用S3C2440芯片,這是一款低功耗、低成本、高性能的精簡指令集微處理器。通過ARM強大的片內(nèi)功能和良好的人機交互能力,可實現(xiàn)數(shù)據(jù)的高速傳輸和復(fù)雜指令的接收處理。
線陣CCD信號采集器是由線陣CCD,電平匹配模塊,模擬前端處理模塊、FPGA采集存儲模塊、ARM處理傳輸模塊和網(wǎng)絡(luò)接口組成,其組成框圖如圖1所示。
圖1 采集器組成框圖
選用TCD1209D線陣CCD為本采集器的圖像傳感器,F(xiàn)PGA采集存儲模塊為其提供驅(qū)動脈沖時序。CCD輸出信號進入模擬前端處理模塊,由此輸出的數(shù)字信號按照奇偶幀,分別寫入FPGA的2個雙口RAM中。ARM處理傳輸模塊通過由FPGA采集存儲模塊產(chǎn)生的2個中斷信號分別讀取2個雙口RAM中的數(shù)據(jù),并通過網(wǎng)絡(luò)接口將數(shù)據(jù)發(fā)送至上位機。
采集器選用TCD1209D線陣CCD。它具有2 048個有效像素,最高驅(qū)動頻率可達(dá)20 MHz[4]。正常工作時,需要外部為其提供準(zhǔn)確、特定、嚴(yán)格的驅(qū)動時序,分別為轉(zhuǎn)移脈沖SH、相位脈沖Q1、Q2和Q2B、復(fù)位脈沖RS和鉗位脈沖CP等6路脈沖信號。
采用現(xiàn)場可編程門陣列和外部電平匹配電路驅(qū)動線陣CCD工作。通過XC3S500E芯片的通用輸入輸出管腳為CCD提供驅(qū)動脈沖信號。這種通過FPGA為線陣CCD提供驅(qū)動脈沖信號方法在硬件上連接簡單,在軟件上調(diào)試容易、靈活性高、移植方便。
FPGA的I/O提供的是LVCMOS電平信號,而TCD1209D需要5 V的驅(qū)動脈沖,因此需要在兩者之間加一級電平匹配。本設(shè)計選用的電平匹配芯片是74VHCT04A。
74VHCT04A是一款融合了亞微米硅柵與雙層金屬布線C2MOS技術(shù)的高速CMOS反相器。芯片提供了6路反向輸出,可將LVCMOS電平轉(zhuǎn)化為CMOS電平,恰好滿足本設(shè)計中線陣CCD所需的6路驅(qū)動信號。信號在芯片中的傳播時延典型值(1 MHz頻率下)為4.7 ns,可以滿足TCD1209D的驅(qū)動信號頻率要求。
TCD1209D輸出的是模擬圖像信號,目前一般采用集成的模擬前端處理芯片對線陣CCD的輸出信號做相應(yīng)處理。采集器所選的芯片為AD9945。
AD9945是一款應(yīng)用于電荷耦合器件的模擬信號處理芯片,最高采樣頻率為40MHz。芯片內(nèi)部主要由相關(guān)雙采樣(CDS)、10位可調(diào)增益放大器(VGA)、低噪聲黑電平鉗位電路和12位A/D轉(zhuǎn)換器組成[5]。通過為AD9945提供驅(qū)動信號可完成芯片的配置,其主要的驅(qū)動時序包括:串行數(shù)字接口(SCK、SDATA、SL),用于配置操作寄存器、控制寄存器、電平鉗位寄存器、可調(diào)增益放大寄存器和啟動寄存器;相關(guān)雙采樣信號SHP、SHD,數(shù)據(jù)鎖存信號DATACLK;暗電平鉗位脈沖CLPOB、預(yù)置零脈沖PBLK。
為了通過以太網(wǎng)實現(xiàn)數(shù)據(jù)的遠(yuǎn)距離傳輸,本設(shè)計選用的網(wǎng)絡(luò)接口芯片是DM9000。這是一款擁有通用處理器接口、10/100M自適應(yīng)功能和4K雙字節(jié)SRAM的以太網(wǎng)控制器芯片,支持8位、16位、32位不同方式訪問。
硬件上DM9000與S3C2440 ARM處理傳輸模塊的控制總線、地址總線、數(shù)據(jù)總線相連,同時需要連接以太網(wǎng)接頭RJ45。連接示意圖如圖2所示。
FPGA是采集器中核心處理器之一,主要功能包含驅(qū)動線陣CCD工作,配置模擬前端處理芯片,完成數(shù)據(jù)“乒乓”存儲。
圖2 DM9000連接示意圖[6]
3.1.1 線陣CCD驅(qū)動設(shè)計
采集器中FPGA所用外部晶振頻率為50 MHz,通過內(nèi)部鎖相環(huán)將其倍頻到80 MHz。CCD所需脈沖信號全部通過80 MHz時鐘脈沖計數(shù)器CNT得到。由CNT控制時鐘脈沖信號周期得到SH脈沖信號。將80 MHz的信號八分頻為10 MHz,同時由CNT控制與SH周期關(guān)系就可得到Q1脈沖信號。將Q1反向得到Q2和Q2B。通過另一計數(shù)器控制占空比,同時由CNT控制周期,得到滿足要求的RS與CP脈沖信號。
需要注意的是,在2 048個有效像元輸出之前會有32個啞元輸出,有效像元輸出之后會有8個啞元輸出。這一現(xiàn)象不僅會影響以后相關(guān)雙采樣信號與CCD輸出信號的關(guān)系,而且會對雙口RAM存儲信號造成影響。
3.1.2 模擬前端處理芯片配置
FPGA需要為模擬前端處理芯片AD9945提供8路配置信號。
內(nèi)部寄存器配置:對80 MHz基準(zhǔn)信號8分頻可以得到SCK;當(dāng)SL為低電平時,應(yīng)對SDATA寫入配置數(shù)據(jù),配置數(shù)據(jù)可通過數(shù)據(jù)手冊得到。
采樣信號及時鐘配置:數(shù)據(jù)鎖存時鐘DATACLK必須與TCD1209D像素輸出嚴(yán)格同步,調(diào)試時可通過修改FPGA中的代碼,同時觀察示波器中CCD輸出信號完成配置。SHP、SHD占空比為3∶1,利用8分頻器中0~7的不同組合得到SHP和SHD。
CLPOB和PBLK主要用于消除CCD輸出信號中無效像元的影響,可在TCD1209D輸出32個啞元時將CLPOB和PBLK同時置為低電平,PBLK在芯片配置時是可選的。具體調(diào)試時,可根據(jù)實際情況縮短CLPOB低電平時間,或者不用PBLK功能。
需要注意的是:(1)串行數(shù)字時鐘SCK的最高頻率不得超過10 MHz[7];(2)SHP、SHD的信號頻率應(yīng)與TCD1209D輸出信號頻率相同,并且應(yīng)在輸出32個啞元之后進行相關(guān)雙采樣;(3)輸出的12位數(shù)字信號會比信號輸入時延遲10個像元輸入時間,因此往雙口RAM中寫數(shù)據(jù)的使能信號要推遲10個像元時間。
3.1.3 FPGA中數(shù)據(jù)存儲的實現(xiàn)
由于CCD輸出信號頻率較高,ARM不能對FPGA采集到的數(shù)據(jù)同時讀取。因此,本設(shè)計利用FPGA的內(nèi)部資源,開辟2塊寬度為16 bit,深度為2 048的雙口RAM,分別存儲CCD輸出信號的奇數(shù)幀與偶數(shù)幀數(shù)據(jù)。
如圖3所示,通過data_select模塊實現(xiàn)輸入數(shù)據(jù)的奇偶幀分離。其中ST為數(shù)據(jù)選擇信號,由TCD1209D的轉(zhuǎn)移脈沖SH上升沿判斷得到;datain為輸入的16位數(shù)據(jù)信號,高四位補為0;data16_1、data16_2分別為奇數(shù)幀數(shù)據(jù)、偶數(shù)幀數(shù)據(jù)。
圖3 數(shù)據(jù)選擇模塊
采用乒乓操作,對雙口RAM1存儲奇數(shù)幀數(shù)據(jù)的同時,發(fā)送中斷2信號通知ARM對存儲在雙口RAM2中的偶數(shù)幀數(shù)據(jù)進行讀取;對雙口RAM2存儲偶數(shù)幀數(shù)據(jù)的同時,發(fā)送中斷1信號通知ARM對存儲在雙口RAM1中的奇數(shù)幀數(shù)據(jù)進行讀取。
FPGA與ARM總線接口模塊如圖4所示,arm_hclk為ARM的讀時鐘信號,arm_nOE為ARM的讀使能信號,arm_nGCS為ARM的片選信號,arm_addr_bus為ARM的11位讀地址總線。ram_clk、ram_addr分別連接雙口RAM1的讀時鐘與讀地址總線,ram_data連接雙口RAM1的數(shù)據(jù)輸出,arm_data_bus輸出奇數(shù)幀數(shù)據(jù),為之后與偶數(shù)幀數(shù)據(jù)合并做準(zhǔn)備。waddr11_generator模塊用于產(chǎn)生寫地址信號。偶數(shù)幀數(shù)據(jù)讀取模塊連接方式與奇數(shù)幀相同。
由于ARM計算地址是按8位方式,而此時連接的FPGA是作為一個16位的外部存儲器掛載到ARM的總線上[8],因此要將ARM高一位地址線依次連接到FPGA低一位地址線上,否則輸出的數(shù)據(jù)會間隔一個地址輸出,造成數(shù)據(jù)不能正確讀取。
圖4 FPGA與ARM總線接口模塊(奇數(shù)幀部分)
為實現(xiàn)工業(yè)現(xiàn)場設(shè)備組成以太網(wǎng)進行通信的需求,本設(shè)計采用ARM嵌入式系統(tǒng)。ARM嵌入式系統(tǒng)具有良好的人機交互功能,方便擴展參數(shù)控制接口,而且容易實現(xiàn)網(wǎng)絡(luò)通信功能。設(shè)備可通過網(wǎng)絡(luò)接口完成網(wǎng)絡(luò)互聯(lián),既可組成局域網(wǎng),也可連接至互聯(lián)網(wǎng),實現(xiàn)指令和數(shù)據(jù)傳輸。
從ARM的角度看,F(xiàn)PGA是一段地址連續(xù)的16位儲存設(shè)備。在硬件上,F(xiàn)PGA掛載到了 ARM的 BANK3上,因此,在ARM的0X18000000-0X18003FFFF上分別先后存儲了CCD輸出信號的奇數(shù)幀與偶數(shù)幀數(shù)據(jù)。通過編寫ARM裸機程序完成系統(tǒng)初始化、對FPGA總線控制和數(shù)據(jù)讀取,并經(jīng)過DM9000網(wǎng)絡(luò)接口芯片,實現(xiàn)數(shù)據(jù)的以太網(wǎng)傳輸。
設(shè)計所采用的網(wǎng)絡(luò)通信協(xié)議為UDP協(xié)議,其優(yōu)點是[9]:(1)面向無連接的協(xié)議,速度快;(2)可使用廣播方式多地址發(fā)送數(shù)據(jù);(3)所占傳輸網(wǎng)絡(luò)帶寬小。
由于每一幀數(shù)據(jù)是2 048個像素,每個像素是16 bit,因此一幀數(shù)據(jù)的大小為4 kB。而UDP數(shù)據(jù)報的長度最大為1 500 B,因此必須將一幀數(shù)據(jù)拆分成4部分,即512像素點為一包,一共4包,進行數(shù)據(jù)傳輸。同時在數(shù)據(jù)最后加入2 B的數(shù)據(jù)標(biāo)識,1B用作識別是第幾幀數(shù)據(jù);1 B用作是一幀中的第幾包。需要注意的是,每一個像素是16位,在對高8位、低8位拆分并發(fā)送時,大小端格式應(yīng)與網(wǎng)絡(luò)中的格式相匹配。
線陣CCD信號采集系統(tǒng)由線陣CCD信號采集器和上位機測試平臺組成。
上位機測試平臺由Ethereal軟件和基于LABVIEW編寫的上位機兩部分構(gòu)成。Ethereal是一種數(shù)據(jù)包嗅探軟件,可以完成對采集器發(fā)送的UDP數(shù)據(jù)包的抓取?;贚ABVIEW編寫的上位機主要完成將高低8位數(shù)據(jù)重組為原16位數(shù)據(jù)并顯示的任務(wù)。通過將Ethereal抓取到的數(shù)據(jù)導(dǎo)入基于LABVIEW編寫的上位機中,可以完成數(shù)據(jù)的顯示和采集器的測試。
XILINX ISE14.1是本采集器中FPGA的開發(fā)環(huán)境,各模塊仿真時序如下所示。圖5為FPGA輸出到反向器的信號,即TCD1209D所需的各個驅(qū)動脈沖的反向信號,其中CLK為系統(tǒng)時鐘,SH為反向轉(zhuǎn)移脈沖,Q1、Q2和Q2B是反向相位脈沖,RS是反向復(fù)位脈沖,CP是反向鉗位脈沖。圖6為AD9945所需的驅(qū)動脈沖信號。圖7為雙口RAM所需的時鐘信號,其中ST為奇數(shù)幀與偶數(shù)幀分離信號,WECLK為雙口RAM寫時鐘信號,F(xiàn)RAME_SYN為幀同步信號,WE1、WE2分別為雙口RAM1、雙口RAM2的寫使能信號,RE1、RE2為通知ARM讀取數(shù)據(jù)的中斷信號。
圖5 TCD1209D反向驅(qū)動時序
為了驗證 FPGA產(chǎn)生脈沖信號是否正確,需要測試TCD1209D輸出端信號。圖8為TCD1209D輸出的模擬信號,說明了采集器提供的CCD驅(qū)動信號的正確性。
圖6 AD9945驅(qū)動時序
圖7 讀寫雙口RAM所需的信號
圖8 CCD信號輸出
通過對線陣CCD信號采集系統(tǒng)進行實驗,可驗證線陣CCD信號采集器能否正常工作。實驗方法是將線陣CCD部分遮擋,觀察傳輸?shù)缴衔粰C數(shù)據(jù)的顯示結(jié)果。圖9為基于LABVIEW編寫的上位機的顯示結(jié)果。通過顯示結(jié)果說明,采集器完成了信號的正確采集、存儲、處理及通過以太網(wǎng)傳輸?shù)裙δ堋?/p>
圖9 上位機顯示結(jié)果
本設(shè)計采用了以FPGA和ARM聯(lián)合作為中央處理器的設(shè)計方案。分析了TCD1209D線陣CCD的驅(qū)動時序要求,介紹了使用FPGA產(chǎn)生驅(qū)動的方法和過程。討論了模擬前端處理芯片AD9945的配置方法,闡述了FPGA對信號采集、存儲的實現(xiàn),F(xiàn)PGA和ARM總線接口的實現(xiàn)、ARM系統(tǒng)及網(wǎng)絡(luò)通信功能的實現(xiàn)。結(jié)合網(wǎng)絡(luò)接口技術(shù),采集器實現(xiàn)了人機交互好、組網(wǎng)方便等優(yōu)點,在工業(yè)生產(chǎn)監(jiān)測中有廣闊的應(yīng)用前景。但采集器不能通過環(huán)境的變化,自動調(diào)節(jié)某些CCD參數(shù),完成數(shù)據(jù)的自適應(yīng)采集,需要以后進一步的研究與完善。
[1]何云龍,彭章君,李眾立.基于網(wǎng)絡(luò)的線陣CCD信號采集系統(tǒng)的設(shè)計.儀表技術(shù)與傳感器,2012(4):85-87.
[2]喻依虎,孟麗婭,岳陳平.基于FPGA的高速線陣CCD的驅(qū)動設(shè)計.微型機與應(yīng)用,2013,32(10):26 -28.
[3]孫鑫明.基于以太網(wǎng)的大型鍛件多路超聲檢測器的研究:[學(xué)位論文].天津:天津工業(yè)大學(xué),2013.
[4]王慶友.圖像傳感器應(yīng)用技術(shù).北京:電子工業(yè)出版社,2003.
[5]洪冰心,鄭力新.一種基于FPGA的AD9945驅(qū)動設(shè)計.微型機與應(yīng)用,2011,30(18):23 -25.
[6]李劍雄,張策,楊軍.基于ARM和DM9000的網(wǎng)卡接口設(shè)計與實現(xiàn).微計算機信息,2008,24(14):123 -124;138.
[7]ANALOG DEVICES Corp.AD9945 DATASHEET,2013.
[8]陳曦.基于ARM9和FPGA的高速便攜式數(shù)據(jù)采集前端的設(shè)計:[學(xué)位論文].南京:南京航空航天大學(xué),2010.
[9]孫鑫明,苗長云,白華,等.基于ARM和FPGA的高擴展性超聲波檢測模塊設(shè)計與實現(xiàn).電子技術(shù)應(yīng)用,2012,38(10):26-29.