1、引言
隨著圖像處理、工業(yè)控制、無線通信等領(lǐng)域的飛速發(fā)展,對數(shù)據(jù)采集系統(tǒng)的速度、精度等性能要求也越來越高。這些要求都對數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)提出了新的挑戰(zhàn)。目前數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)方案通常分為以下幾類:
1)以微處理器單一控制芯片和A/D轉(zhuǎn)換器形式為主,該設(shè)計(jì)方案簡單,在對性能要求不高的應(yīng)用場合為了降低成本甚至可以采用集成A/D轉(zhuǎn)換器的微處理器。
2)采用通用計(jì)算機(jī)配置數(shù)據(jù)采集卡的方式,通常需要開發(fā)計(jì)算機(jī)端應(yīng)用程序,可以完成復(fù)雜的計(jì)算,但不同的采集卡相應(yīng)的驅(qū)動(dòng)程序不同,如果需求改變需要更換采集卡時(shí),相應(yīng)的應(yīng)用程序也需要重新開發(fā)。因此,該設(shè)計(jì)方案通用性差,實(shí)時(shí)性不高。
3)以ARM和FPGA或DSP和FPGA組合方式作為采集系統(tǒng)的核心,ARM處理器適合控制領(lǐng)域,DSP處理器適合信號處理領(lǐng)域,F(xiàn)PGA器件由于其自身特點(diǎn),適合高速并行采集與處理領(lǐng)域,具有ARM或者DSP等處理器無法比擬的優(yōu)勢。這類組合方式結(jié)合各自特點(diǎn),處理能力強(qiáng),應(yīng)用范圍廣。
ARM和FPGA之間的數(shù)據(jù)交換采用雙口RAM芯片來實(shí)現(xiàn)FIFO功能。系統(tǒng)中ARM處理器作為系統(tǒng)控制核心,負(fù)責(zé)控制整個(gè)系統(tǒng)工作時(shí)序、并將數(shù)據(jù)通過網(wǎng)絡(luò)上傳到服務(wù)器中進(jìn)行存儲(chǔ)。FPGA負(fù)責(zé)A/D轉(zhuǎn)換器的模式配置,數(shù)據(jù)傳輸。該組合方式結(jié)合ARM在控制方面和FPGA在采集方面的優(yōu)勢,具有通用性強(qiáng)、配置靈活的特點(diǎn)。
2、系統(tǒng)設(shè)計(jì)
本系統(tǒng)硬件主要由信號調(diào)理電路、模數(shù)轉(zhuǎn)換器ADS1278、FPGA器件CyCLOnE系列EP1C6、雙口RAMIDT7205和處理器PXA270及外圍電路組成,系統(tǒng)結(jié)構(gòu)框圖如圖1所示。輸入信號經(jīng)過信號調(diào)理電路后,進(jìn)入A/D轉(zhuǎn)換器進(jìn)行數(shù)據(jù)轉(zhuǎn)換,將模擬信號轉(zhuǎn)換成23位尾數(shù)和一符號位的數(shù)據(jù),F(xiàn)PGA配置A/D轉(zhuǎn)換器并將轉(zhuǎn)換的數(shù)據(jù)按照順序存儲(chǔ)到雙口RAM中,當(dāng)轉(zhuǎn)換數(shù)據(jù)存儲(chǔ)滿后中斷ARM處理器,ARM處理器將數(shù)據(jù)從雙口RAM讀出進(jìn)行運(yùn)算,并通過網(wǎng)絡(luò)接口將采集數(shù)據(jù)傳輸?shù)椒?wù)器。
圖1 ?系統(tǒng)結(jié)構(gòu)
2.1、24位A/D轉(zhuǎn)換芯片ADS1278
ADS1278是德州儀器(TI)公司推出的采樣率高達(dá)128KS/S、24位8通道同步采樣Σ-ΔADC。支持多種工作模式,內(nèi)部集成線性相位數(shù)字濾波器,數(shù)據(jù)輸出接口支持SPI或可選幀同步,便于與FPGA互連??蓾M足國防、航天和醫(yī)療應(yīng)用。
ADS1278轉(zhuǎn)換器內(nèi)部集成的數(shù)字濾波器通過奈奎斯特采樣將輸入信號抽取為長度為1比特的高分辨率數(shù)字信號。8通道輸入信號分別進(jìn)入獨(dú)立的8個(gè)A/D轉(zhuǎn)換器,它內(nèi)部由高階斬波器、數(shù)字濾波器、調(diào)制器組成,可將輸入模擬信號經(jīng)過高階濾波器后得到數(shù)字信號。圖2為ADS1278的SPI格式下,時(shí)鐘和數(shù)據(jù)時(shí)序圖。
圖2 ?SPI格式下時(shí)序
2.2、ARM與FPGA的接口設(shè)計(jì)
本系統(tǒng)核心采用ARM和FPGA的組合方式,在ARM和FPGA之間采用3片雙口RAMIDT7205進(jìn)行24BIT數(shù)據(jù)傳輸,其中,F(xiàn)PGA器件控制A/D轉(zhuǎn)換,并將轉(zhuǎn)換數(shù)據(jù)按照一定順序存儲(chǔ)到雙口RAM中,當(dāng)數(shù)據(jù)存儲(chǔ)完后將中斷ARM,ARM將雙口RAM中的數(shù)據(jù)進(jìn)行讀取,比使用FIFO傳輸?shù)姆桨附档土顺杀?、提高了?shù)據(jù)傳輸?shù)耐掏铝俊?/p>
本系統(tǒng)中FPGA的設(shè)計(jì)作用如下:復(fù)位并配置ADS1278的工作模式,F(xiàn)PGA內(nèi)部設(shè)置一個(gè)地址加法器控制將A/D轉(zhuǎn)換器的數(shù)據(jù)寫入雙口RAM中,當(dāng)雙口RAM寫滿后,大小24KB,地址加法器復(fù)位。ARM與FPGA的接口方式有很多種,如IIC、SPI等串行接口或總線等并行接口,串行接口由于本身的局限性限制了其在大數(shù)據(jù)量、實(shí)時(shí)數(shù)據(jù)的傳輸?shù)膽?yīng)用,而總線的形式更合理一些,穩(wěn)定性較之更好一點(diǎn)。但ARM與FPGA通過地址、數(shù)據(jù)、控制總線直接連接的方式在大數(shù)據(jù)傳輸時(shí)會(huì)影響系統(tǒng)的效率,因此,在ARM與FPGA之間采用雙口RAM進(jìn)行連接的方式,ARM與FPGA異步工作,提供了系統(tǒng)的效率。其接口如圖3所示。
圖3 ?ARM與FPGA的接口
FPGA的控制信號WR、RD、nRESET與雙口RAMIDT7205的復(fù)位信號RS、讀寫信號WR和RD連接,數(shù)據(jù)總線D0~D23與雙口RAM的數(shù)據(jù)總線連接,F(xiàn)PGA通過內(nèi)部地址加法器依次將將A/D轉(zhuǎn)換器的數(shù)據(jù)串并轉(zhuǎn)換后寫入雙口RAM中。雙口RAM的EF、HF信號分別與PXA270的GPIO0和GPIO1連接,接受數(shù)據(jù)寫滿后產(chǎn)生的中斷。PXA270提供6個(gè)分區(qū)的靜態(tài)存儲(chǔ)器BAnK0~BAnK5,設(shè)計(jì)將雙口RAM的存儲(chǔ)空間映射到PXA270的BAnK3上。
3、驅(qū)動(dòng)程序設(shè)計(jì)
為了實(shí)現(xiàn)ARM與FPGA通過雙口RAM的數(shù)據(jù)傳輸,需要設(shè)計(jì)嵌入式LInux下的驅(qū)動(dòng)程序。當(dāng)FPGA將數(shù)據(jù)寫到雙口RAM中,根據(jù)雙口RAM中數(shù)據(jù)的狀態(tài)中斷ARM處理器進(jìn)行數(shù)據(jù)讀取。這一過程主要需要中斷和總線驅(qū)動(dòng)程序配合。
在中斷驅(qū)動(dòng)程序中,通過REquEST_IRq()函數(shù)為雙口RAM的中斷分配中斷請求(IRQ)號,當(dāng)處理器檢測到這一IRQ號對應(yīng)的中斷產(chǎn)生時(shí),將啟動(dòng)該IRQ對應(yīng)的中斷服務(wù)例程[9]。IRQ號與中斷處理例程是一一對應(yīng)的,在系統(tǒng)/PORC/InTERRuPTS文件中可以為設(shè)備選擇IRQ號。FP-GA將A/D轉(zhuǎn)換的數(shù)據(jù)寫入雙口RAM后,當(dāng)數(shù)據(jù)寫滿后會(huì)中斷ARM處理器,ARM會(huì)響應(yīng)中斷處理例程,讀取雙口RAM中的數(shù)據(jù)。中斷處理例程首先要清除PXA270的中斷寄存器相應(yīng)的位,需要通過對狀態(tài)寄存器相應(yīng)位進(jìn)行寫操作,這是為了能夠繼續(xù)響應(yīng)雙口RAM產(chǎn)生的中斷。然后是設(shè)置數(shù)據(jù)傳輸標(biāo)志位,當(dāng)主程序中檢測到標(biāo)志位,進(jìn)而調(diào)用總線驅(qū)動(dòng)程序進(jìn)行數(shù)據(jù)傳輸,這種工作方式可以避免中斷處理例程的冗長,提高系統(tǒng)傳輸效率。
由于應(yīng)用程序工作在用戶空間,它無法完成對總線的操作,而驅(qū)動(dòng)程序工作在內(nèi)核空間,可完成對總線的操作,因此,在總線驅(qū)動(dòng)程序中,必須支持應(yīng)用程序?qū)偩€的操作,以完成數(shù)據(jù)的傳輸。傳統(tǒng)的LInux應(yīng)用程序需要通過總線驅(qū)動(dòng)程序完成對總線空間的訪問方法是通過2個(gè)函數(shù)完成用戶空間與內(nèi)核空間之間的數(shù)據(jù)傳遞,其中內(nèi)核空間向用戶空間傳輸數(shù)據(jù)使用COPy_FROM_uSER函數(shù),用戶空間向內(nèi)核空間傳輸數(shù)據(jù)使用COPy_TO_uSER函數(shù)。COPy_FROM_uSER,COPy_TO_uSER等。這種方法雖然能完成2個(gè)空間的數(shù)據(jù)傳輸,但是效率不高,最好的方法是將內(nèi)核空間能訪問的物理地址直接映射到用戶空間,LInux內(nèi)核提供了REMAP_PAGE_RAnGE函數(shù),應(yīng)用程序?qū)υ撚脩艨臻g的地址訪問相當(dāng)于直接對物理地址的訪問。本文的總線驅(qū)動(dòng)程序就是直接映射的方法,來完成快速的讀寫。
下面是驅(qū)動(dòng)程序代碼段,它使用REMAP_PAGE_RAnGE()函數(shù)在驅(qū)動(dòng)程序中完成MMAP系統(tǒng)調(diào)用中物理空間到虛擬空間的映射,REMAP_PAGE_RAnGE()函數(shù)原型如下:
InTREMAP_PAGE_RAnGE(vMA_AREA_STRuCT*vMA,un-SIGnEDLOnGFROM,unSIGnEDLOnGTO,unSIGnEDLOnGSIzE,PG-PROT_TPROT);
REMAP_PAGE_RAnGE()函數(shù)的調(diào)用需要初始化。
虛擬內(nèi)存空間指針vMA、起始地址、物理地址、映射區(qū)域字節(jié)數(shù)等參數(shù)。首先計(jì)算物理地址,然后通過右移PAGE_SHIFT位,本系統(tǒng)使用PXA270的BAnK3的物理空間,起始地址0x0C000000,大小為4KB映射到虛擬空間。驅(qū)動(dòng)程序中,還需要判斷虛擬內(nèi)存大小和偏移了指定距離后物理內(nèi)存的大小,如果虛擬內(nèi)存過大,應(yīng)該返回并提示映射超出允許的內(nèi)存空間。
調(diào)用REMAP_PAGE_RAnGE()函數(shù)過程如下:REMAP_PAGE_RAnGE(vMA,vMA->vM_START,0x0C000000+vMA->vM_PGOFF<<PAGE_SHIFT,vMA->vM_EnD-vMA->vM_START,PGPROT_nOnCACHED(vMA->vM_PAGE_PROT));
應(yīng)用程序中調(diào)用MMAP系統(tǒng)就是對MMAP()函數(shù)的參數(shù)初始化。MMAP()函數(shù)原型如下:
void*MMAP(vOID*START,SIzE_TLEnGTH,InTPROT,InTFLAGS,InTFD,OFF_TOFFSET);
首先將文件描述符FD指定的設(shè)備文件與START處開始的內(nèi)存空間關(guān)聯(lián),通常將START設(shè)為0,MMAP()函數(shù)返回實(shí)際關(guān)聯(lián)的內(nèi)存地址。LEnGTH為內(nèi)存映射的字節(jié)長度,PROT為內(nèi)存保護(hù)類型,F(xiàn)LAG為映射類型,MAP_SHARED標(biāo)識符表示與其他所有映射這個(gè)對象的進(jìn)程共享內(nèi)存區(qū)域。本設(shè)計(jì)調(diào)用MMAP()函數(shù)過程如下:
BASE=(unSIGnEDLOnG*)MMAP(0,0X100,PROT_READ|PROT_WRITE,MAP_SHARED,F(xiàn)D,0);
4、系統(tǒng)實(shí)驗(yàn)結(jié)果分析
本系統(tǒng)中,F(xiàn)PGA外部晶振頻率采用32.768MHz,經(jīng)過內(nèi)部16分頻器后得到2.048MHz時(shí)鐘頻率作為ADS1278的工作時(shí)鐘。ADS1278完成8通道24位精度的采樣傳輸大約需24μS,采樣數(shù)據(jù)被FPGA寫入雙口RAM基本在采樣結(jié)束后同步完成。當(dāng)雙口RAM數(shù)據(jù)被寫滿后,中斷ARM處理器進(jìn)行數(shù)據(jù)讀取,ARM的工作頻率為520MHz,外部總線時(shí)鐘頻率為104MHz,配置PXA270外部BAnK3的MSC寄存器為0x7FF4滿足系統(tǒng)對雙口RAM時(shí)序讀寫的需要。
為了提高采集精度,首先需要對A/D轉(zhuǎn)換器進(jìn)行零偏校準(zhǔn),零偏校準(zhǔn)后,通過動(dòng)態(tài)范圍計(jì)算公式20×LG(信號電壓/噪聲電壓)得到各通道實(shí)際動(dòng)態(tài)范圍如表1所示。其中零偏電壓以轉(zhuǎn)換后的數(shù)字形式給出。從表1中動(dòng)態(tài)范圍一列中可以看出,系統(tǒng)各通道實(shí)現(xiàn)的動(dòng)態(tài)范圍都接近A/D轉(zhuǎn)換器24位采樣精度時(shí)的理想動(dòng)態(tài)范圍111DB,測量結(jié)果表明本文設(shè)計(jì)的系統(tǒng)可充分發(fā)揮A/D轉(zhuǎn)換器高精度、大動(dòng)態(tài)范圍的特性。
表1?各通道參數(shù)
系統(tǒng)測量加速度信號各通道顯示界面如圖4所示,從圖中可以看出,加速度信號實(shí)時(shí)、連續(xù)地顯示驗(yàn)證了本文提出的采用雙口RAM作為ARM與FPGA之間的數(shù)據(jù)傳輸方式及相應(yīng)的總線、中斷驅(qū)動(dòng)程序的正確性和可行性。該方案也可應(yīng)用于電力頻率測量等其他高精度采集領(lǐng)域。
圖4系統(tǒng)采集顯示界面
5、結(jié)論
充分利用ARM和FPGA各自的優(yōu)勢,設(shè)計(jì)一種ARM和FPGA組合的高精度數(shù)據(jù)采集系統(tǒng),采用雙口RAM設(shè)計(jì)了ARM與FPGA之間的數(shù)據(jù)傳輸方式,解決了使用傳統(tǒng)FIFO芯片成本高、容量小的問題,提高了ARM與FPGA傳輸吞吐量。編寫了LInux下設(shè)備的驅(qū)動(dòng)程序,采用中斷方式及用戶空間對內(nèi)核空間的直接訪問方式進(jìn)行數(shù)據(jù)傳輸,大大提高了系統(tǒng)傳輸?shù)男?。設(shè)計(jì)的基于雙口RAM的ARM與FPGA采集系統(tǒng)具有成本低、精度高、動(dòng)態(tài)范圍大等特點(diǎn),是高精度采集處理的一種高效可行的解決方案。
評論