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