文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2011)01-0038-04
近年來(lái),,隨著可編程邏輯器件(CPLD/FPGA)的迅猛發(fā)展,,可編程邏輯器件在數(shù)據(jù)采集,、邏輯接口設(shè)計(jì),、電平接口轉(zhuǎn)換和高性能數(shù)字信號(hào)處理等領(lǐng)域取得越來(lái)越廣泛的應(yīng)用。CPLD/FPGAD不僅可以解決電子系統(tǒng)小型化,、低功耗,、高可靠性等問(wèn)題,而且開(kāi)發(fā)周期短,、投入少,,同時(shí)不斷下降的芯片價(jià)格極大推動(dòng)了CPLD/FPGA器件在廣泛應(yīng)用領(lǐng)域的使用。本文介紹一種ARM微處理器+FPGA的硬件設(shè)計(jì),,融合嵌入式Linux技術(shù),,實(shí)現(xiàn)一種小型化、移動(dòng)性強(qiáng),、網(wǎng)絡(luò)耦合度高的便攜式人工地震數(shù)據(jù)采集系統(tǒng),。該系統(tǒng)以滿足人工地震觀測(cè)的需要、減小儀器尺寸和重量,、降低功耗,、降低野外工作強(qiáng)度和提高數(shù)據(jù)采集工作效率為目標(biāo)。
1 系統(tǒng)硬件設(shè)計(jì)
采集系統(tǒng)由CPU核心板,、A/D數(shù)據(jù)采集板和電源板組成,,系統(tǒng)原理如圖1所示。CPU板以Atmel AT91SAM9G20微處理器為核心,,通過(guò)總線和GPIO分別與64 MB SDRAM,、16 MB Norflas和FPGA A3P250接口。板上大容量CF卡安裝有FAT文件系統(tǒng),,用于地震波形數(shù)據(jù)的本地存儲(chǔ),。網(wǎng)絡(luò)接口提供遠(yuǎn)程登錄、數(shù)據(jù)傳輸及系統(tǒng)控制功能,,包括實(shí)時(shí)數(shù)據(jù)流傳輸,。LCD屏顯示系統(tǒng)工作參數(shù),如溫度,、經(jīng)緯度,、高程、系統(tǒng)網(wǎng)絡(luò)IP地址等信息,。串口用于輸出調(diào)試信息,,也被SAM-BA軟件用來(lái)下載燒寫(xiě)引導(dǎo)加載程序U-boot和嵌入式Linux操作系統(tǒng)內(nèi)核映像文件。A/D采集板上有三路模數(shù)轉(zhuǎn)換數(shù)據(jù)采集通道,,標(biāo)定信號(hào)發(fā)生器和檢波器控制信號(hào)調(diào)理電路,。高效的電源轉(zhuǎn)換電路是實(shí)現(xiàn)系統(tǒng)低功耗的基礎(chǔ),。電源板主要提供CPU等數(shù)字電路+3.3 V/+1.8 V電源,地震計(jì)反饋電路供電±12 V,、±4 V,,參考電壓±2.5 V,標(biāo)定電路和檢波器控制電路供電,。GPS系統(tǒng)提供時(shí)間服務(wù)和地理位置信息,。
AT91SAM9G20是Atmel公司推出的一款基于ARM926EJ-S核的低功耗SoC。ARM核工作頻率高達(dá)400 MHz,,具有DSP指令擴(kuò)展,,支持Java硬件加速,具備全功能的MMU,。內(nèi)部集成2個(gè)容量為16 KB的高速SRAM,,具有豐富的片上I/O設(shè)備,包括以太網(wǎng)MAC,、USB主機(jī)和設(shè)備接口,、通用同/異步發(fā)送接收器USART、SPI接口,、同步串行接口SSC,、多媒體存儲(chǔ)接口等。電源管理控制器(PMC)提供了CPU動(dòng)態(tài)調(diào)頻的硬件支持,。
1.1 FPGA邏輯設(shè)計(jì)
FPGA芯片的功能主要包括:(1)采集三個(gè)通道的A/D數(shù)據(jù),。當(dāng)三路數(shù)據(jù)準(zhǔn)備就緒,nDRDY1,、nDRDY2,、nDRDY3信號(hào)全部拉低,啟動(dòng)由FPGA實(shí)現(xiàn)的SPI數(shù)據(jù)傳輸狀態(tài)機(jī),,地震波形數(shù)據(jù)被緩沖到FPGA內(nèi)部的16 bit寬的FIFO_2k_ADC_DATA中,。當(dāng)FIFO_2k_ADC_DATA中數(shù)據(jù)達(dá)到一個(gè)閾值時(shí),向ARM微處理器觸發(fā)AD_INT中斷,。在中斷處理程序ad_irq_rx()中,,通過(guò)系統(tǒng)數(shù)據(jù)總線把FIFO中數(shù)據(jù)轉(zhuǎn)移到內(nèi)存緩沖區(qū)ad_data_buff[]中。之后,,調(diào)用schedule_work(&tasklet)把諸如數(shù)字信號(hào)濾波等耗時(shí)任務(wù)放到中斷下半部中進(jìn)行處理,。(2)根據(jù)標(biāo)定數(shù)據(jù)文件,控制DAC生成模擬標(biāo)定波形輸出,。標(biāo)定波形類型有正弦波,、方波等。(3)檢波器控制電路驅(qū)動(dòng)地震計(jì)調(diào)零電機(jī)動(dòng)作,。(4)IRIG讀碼,。生成IRIG-B數(shù)據(jù)幀,,通過(guò)PPS_interrupt觸發(fā)CPU中斷,pps_irq_handle()中斷處理程序負(fù)責(zé)把IRIG碼存儲(chǔ)到內(nèi)存變量irig_frame中,,等待解碼以提取時(shí)間,、經(jīng)緯度、高程等信息,。下面是spi實(shí)體的Top-level行為級(jí)VHDL語(yǔ)言描述,。
ENTITY spi IS
PORT ( CLK :in STD_LOGIC,;--4.096 MHz
CLK40 :in STD_LOGIC,;--40 MHz
SYNC :out STD_LOGIC;--PINMODE模式下,,
使用復(fù)位信號(hào)同步數(shù)據(jù)采集信號(hào)
DOUT1 :in STD_LOGIC,;
SCLK1 :out STD_LOGIC;--第一通道的
ADS1281模數(shù)轉(zhuǎn)換器的SPI時(shí)鐘
nDRDY1,,nDRDY2,,nDRDY3:in STD_LOGIC;
--ADS1281數(shù)據(jù)就緒等待采集信號(hào)
spi_clk :out STD_LOGIC;--擴(kuò)展SPI時(shí)鐘
spi_mosi :out STD_LOGIC,;--擴(kuò)展SPI主機(jī)
發(fā)送從機(jī)接收數(shù)據(jù)信號(hào)線
spi_cs1 :out STD_LOGIC,;--擴(kuò)展SPI片選
信號(hào)
EINT1,EINT2:out STD_LOGIC,;--FIFO半滿數(shù)
據(jù)采集中斷信號(hào)AD_INT,,
和DAC數(shù)據(jù)請(qǐng)求中斷信號(hào)INT
ENABLE1,A2,,A3,,A4,A5:in STD_LOGIC,;
DATA:inout STD_LOGIC_VECTOR(15 downto 0),;
--ARM處理器數(shù)據(jù)總線
led_drv:out STD_LOGIC;--LED狀態(tài)指示
PPS_interrupt:out STD_LOGIC,;--1 Hz,,
GPS秒脈沖
nRESET:in STD_LOGIC;
GPS_IRIGL:in STD_LOGIC,;--IRIG碼讀寫(xiě)
nRD:in STD_LOGIC,;--ARM讀
nWR:in STD_LOGIC;--ARM寫(xiě)
nCS:in STD_LOGIC),;--ARM片選
END spi,;
1.2 A/D數(shù)據(jù)采集通道
A/D轉(zhuǎn)換器采用TI公司的ADS1281。該A/D轉(zhuǎn)換器具有高分辨率,、高精度特性,,內(nèi)置4階穩(wěn)定的ΔΣ調(diào)制器,,可配置SINC、FIR和IIR濾波器,,數(shù)據(jù)率250 S/s~4 KS/s,,特別適合地震數(shù)據(jù)觀測(cè)環(huán)境。在本設(shè)計(jì)中,,模擬地動(dòng)波形信號(hào)經(jīng)差分放大后輸入到AD1281的AINP和AINN端,。SCLK由FPGA分頻產(chǎn)生的1.024 MHz的時(shí)鐘驅(qū)動(dòng),用于串行輸出A/D數(shù)據(jù)到FPGA FIFO,。當(dāng)A/D完成數(shù)據(jù)轉(zhuǎn)化后,,CH1_DRDY拉低向FPGA表示數(shù)據(jù)準(zhǔn)備就緒,等待讀取,。CH1_ DOUT連接至FPGA的DOUT1端口,,用于數(shù)據(jù)到FPGA FIFO的串行傳輸。AD_CLK由4.096 MHz時(shí)鐘驅(qū)動(dòng),,是A/D的工作時(shí)鐘,。A/D轉(zhuǎn)換原理電路如圖2所示。
2 系統(tǒng)軟件設(shè)計(jì)概要
Linux因其源代碼開(kāi)放性特點(diǎn),,成為嵌入式系統(tǒng)中應(yīng)用最為廣泛的操作系統(tǒng)之一,。本系統(tǒng)采用嵌入式操作系統(tǒng)Linux-2.6.30內(nèi)核,交叉編譯工具使用arm-none-linux-gnueabi-gcc,,底層硬件驅(qū)動(dòng)和數(shù)字信號(hào)FIR/IIR濾波程序使用C語(yǔ)言,,部分代碼使用嵌入式匯編語(yǔ)言,上層應(yīng)用程序開(kāi)發(fā)則使用C,、C++,。本系統(tǒng)的軟件設(shè)計(jì)主要任務(wù)包括操作系統(tǒng)的移植、驅(qū)動(dòng)程序開(kāi)發(fā)(包括數(shù)據(jù)采集驅(qū)動(dòng),、系統(tǒng)控制及標(biāo)定驅(qū)動(dòng)程序等模塊)以及嵌入式應(yīng)用軟件和上位PC機(jī)應(yīng)用軟件開(kāi)發(fā),。
2.1 嵌入式操作系統(tǒng)Linux-2.6.30的裁剪
下載解壓縮內(nèi)核源文件。修改頂層目錄下的Makefile文件,,設(shè)定目標(biāo)硬件ARCH=arm,,指定交叉編譯環(huán)境路徑CROSS_COMPILE=/usr/locaL/arm-2007q1/bin/arm-none-linux- gnueabi-。使用圖形界面或文本行界面進(jìn)行內(nèi)核配置,,根據(jù)硬件電路和軟件系統(tǒng)功能對(duì)內(nèi)核模塊進(jìn)行剪裁,,完成操作系統(tǒng)鏡像的定制、編譯與調(diào)試,,并在此環(huán)境上進(jìn)行應(yīng)用軟件和驅(qū)動(dòng)程序的開(kāi)發(fā),。在ARM中植入嵌入式linux平臺(tái),首先根據(jù)目標(biāo)設(shè)備的硬件配置及需要,對(duì)linux-2.6.30內(nèi)核進(jìn)行基本定制,,開(kāi)發(fā)并安裝驅(qū)動(dòng)程序,,增加CPU動(dòng)態(tài)調(diào)頻特性,生成鏡像文件,。JTAG將U-boot寫(xiě)入Flash后,,通過(guò)網(wǎng)卡將鏡像文件下載到目標(biāo)設(shè)備中進(jìn)行調(diào)試,最終把U-boot,、linux-2.6.30內(nèi)核及文件系統(tǒng)映像文件等燒寫(xiě)入Flash存儲(chǔ)器,。
2.2 A/D數(shù)據(jù)采集驅(qū)動(dòng)
設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)內(nèi)核與硬件之間的接口,屬于內(nèi)核的一部分,。根據(jù)功能劃分,,設(shè)備驅(qū)動(dòng)程序代碼有以下幾個(gè)部分:(1)驅(qū)動(dòng)程序的注冊(cè)與注銷;(2)設(shè)備的打開(kāi)與釋放,;(3)設(shè)備的讀/寫(xiě)操作,;(4)設(shè)備的控制操作,;(5)數(shù)據(jù)采集中斷處理程序和PPS_INTERRUPT中斷處理程序,。AD驅(qū)動(dòng)程序最終實(shí)現(xiàn)一個(gè)字符設(shè)備驅(qū)動(dòng),為了使該驅(qū)動(dòng)程序能夠被上層的應(yīng)用程序方便地調(diào)用,,需要實(shí)現(xiàn)以下的接口函數(shù):
(1)open調(diào)用:打開(kāi)數(shù)據(jù)采集通道,,需要注意的是open調(diào)用不應(yīng)該自動(dòng)啟動(dòng)AD采樣,而應(yīng)該由ioctl調(diào)用提供顯式的控制接口,。
(2)read調(diào)用:讀取采樣數(shù)據(jù),,阻塞式讀取,以字節(jié)數(shù)返回讀取到的數(shù)據(jù)量,。
(3)release調(diào)用:關(guān)閉數(shù)據(jù)采集通道,,釋放系統(tǒng)資源。
(4)ioctl調(diào)用:提供以下一些設(shè)置命令,。DS—ADC—START:?jiǎn)?dòng)AD采樣,,每次開(kāi)始都會(huì)清空上次未讀走的數(shù)據(jù)。DS—ADC—ST0P:停止AD采樣,。DS—ADC—SET—SAMPIE_RATE:設(shè)定采樣率,。DS—AdC—GET—COUNT:獲取內(nèi)存環(huán)行緩沖區(qū)中已存儲(chǔ)的采樣數(shù)據(jù)。
2.3 應(yīng)用軟件設(shè)計(jì)
應(yīng)用軟件包括嵌入式應(yīng)用軟件和PC機(jī)應(yīng)用軟件,。嵌入式應(yīng)用軟件運(yùn)行在采集器ARM處理器上,,具體實(shí)現(xiàn)為一個(gè)命令解析服務(wù)器,通過(guò)Socket接口連接到上位PC機(jī),,并接收PC機(jī)端發(fā)送來(lái)的控制命令,,執(zhí)行相應(yīng)的操作。PC機(jī)應(yīng)用軟件由主線程和數(shù)據(jù)通信線程組成。主線程為文檔—視圖結(jié)構(gòu),,實(shí)現(xiàn)參數(shù)查詢與設(shè)置操作,、實(shí)時(shí)波形顯示與波形存儲(chǔ)等功能;數(shù)據(jù)通信線程與硬件通信,,接收波形數(shù)據(jù),。主要功能包括,(1)實(shí)時(shí)接收,、存儲(chǔ)波形數(shù)據(jù),;(2)實(shí)時(shí)瀏覽波形;(3)查詢,、設(shè)置系統(tǒng)工作參數(shù),;(4)查詢GPS信息;(5)查詢,、設(shè)置標(biāo)定參數(shù),、啟動(dòng)停止標(biāo)定;(6)查詢,、設(shè)置觸發(fā)參數(shù),;(7)設(shè)置數(shù)據(jù)采集器通信參數(shù)。
3 動(dòng)態(tài)電源管理
在本設(shè)計(jì)中,,從微處理器和A/D等芯片的選型到電源系統(tǒng)設(shè)計(jì)都充分考慮低功耗設(shè)計(jì),,為了進(jìn)一步降低系統(tǒng)功耗,設(shè)計(jì)中引入了CPU動(dòng)態(tài)調(diào)頻技術(shù),。位于系統(tǒng)內(nèi)核的負(fù)載監(jiān)控器Load Monitor負(fù)責(zé)統(tǒng)計(jì)核算負(fù)載信息,,并根據(jù)系統(tǒng)負(fù)載輕重,驅(qū)動(dòng)電源管理控制器Power Controller對(duì)CUP工作頻率和相關(guān)設(shè)備能效狀態(tài)做出調(diào)整,。該模型對(duì)應(yīng)用層程序完全透明,,但應(yīng)用程序也可通過(guò)proc接口顯式調(diào)整系統(tǒng)狀態(tài)。在開(kāi)發(fā)板的初步實(shí)驗(yàn)中,在測(cè)試程序?yàn)閣hile死循環(huán)情況下,,測(cè)得系統(tǒng)在三個(gè)頻率點(diǎn)上的總功率為169 mA×12 V@400 MHz,133 mA×12 V@
200 MHz,,112 mA×12 V@99 MHz,系統(tǒng)存在可觀的降耗空間,。值得注意的是,,動(dòng)態(tài)調(diào)頻對(duì)系統(tǒng)穩(wěn)定性造成很大挑戰(zhàn),調(diào)頻代碼需進(jìn)一步完善,。
本文主要討論了基于低功耗微處理器AT91SAM9G20和可編程邏輯門(mén)陣列器件(FPGA)的地震數(shù)據(jù)采集系統(tǒng)的硬件設(shè)計(jì)和嵌入式Linux軟件開(kāi)發(fā)思路,。值得一提的是,在系統(tǒng)中引入動(dòng)態(tài)調(diào)頻技術(shù),,為進(jìn)一步降低系統(tǒng)動(dòng)態(tài)功耗以至總體功耗做了有益探索,。本設(shè)計(jì)是在對(duì)當(dāng)前地震測(cè)量技術(shù)發(fā)展研究的基礎(chǔ)上,,提出的一種功耗低、體積小,、野外使用安裝便捷的實(shí)現(xiàn)方案,,對(duì)降低數(shù)據(jù)采集成本、延長(zhǎng)系統(tǒng)有效工作時(shí)間,、提高野外工作效率有著積極意義,。
參考文獻(xiàn)
[1] 杜春雷.Arm體系結(jié)構(gòu)與編程[M].北京:清華大學(xué)出版社,2003.
[2] CHARLES H.ROTH,,Jr.數(shù)字系統(tǒng)設(shè)計(jì)與VHDL[M].北京:電子工業(yè)出版社,,2008.
[3] GROUT I著.基于FPGA和CPLD的數(shù)字系統(tǒng)設(shè)計(jì)[M].北京:電子工業(yè)出版社,2009.
[4] 劉淼.嵌入式系統(tǒng)接口設(shè)計(jì)與Linux驅(qū)動(dòng)程序開(kāi)發(fā)[M].北京:北京航空航天出版社,,2O06.
[5] 宋寶華.Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)詳解[M].北京:人民郵電出版社,,2008.
[6] Jens Ha kov,著.地震觀測(cè)技術(shù)與儀器[M].趙仲,,趙建和譯.北京:地震出版社,,2007.
[7] 張朋.嵌入式系統(tǒng)在工程地震儀的應(yīng)用研究[J].計(jì)算機(jī)與數(shù)字工程,2008,,36(2):l37-l39.