a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 具有高可靠性的高速連續數據采集的設計與實施方法

具有高可靠性的高速連續數據采集的設計與實施方法

作者: 時間:2006-05-07 來源:網絡 收藏

摘要:從硬件和軟件設計兩個方面介紹保證PCI總線的高速連續采集系統的數據完整性、可靠性的實用關鍵技術及具體實施方法、應用案例,列出了大量實用的設計技術及應用程序。該設計先進、可靠,在實踐中得到了應用。

本文引用地址:http://www.j9360.com/article/242327.htm

關鍵詞:高速數據采集 可靠性和完整性 關鍵技術 設計

在許多測量與控制領域,如電力諧波測試、聲光信號處理、現代雷達系統等元均要求在線進行小波數字信號分析與處理,其中最為關鍵的是如何利用香農(Shannon)采樣理論將外部信號毫無失真地采集并轉化為計算機所用的數字信號。目前較為流行的方法是提高A/D的轉換速率和計算機的處理速度。同時,提高數據的傳輸速率也是較為關鍵的。本文以高速數轉換芯片AD1674為基礎,采用PCI總線協議,從硬件和軟件設計入手探討提高整個數據采集系統的最大采樣頻率和高可靠性的方法,其中有些方法得到了實踐證實。

一般而言,觸發A/D轉換有軟件觸發、實時器同步觸發及外部觸發三種方式。而數據的傳輸方式有軟件查詢、中斷方式、DMA方式及FIFO方式。四種數據傳輸的速率比較如下(以A/D轉換基頻10MHz為例):

軟件查詢 10~20kS/s(每秒10k次,與所用計算機的主頻有關)

中斷方式 10~30kS/s

DMA方式 200kS/s

FIFO方式(w/repeat input string) 330kS/s

在一般控制系統中,采用軟件觸發A/D、軟件查詢和中斷數據傳輸方式就能滿足測控要求。但要求高速連續數據采集的情況下,顯然不能滿足系統要求。在筆者設計的智能化高速連續數據采集系統中,采用了定時器同步觸發A/D與FIFO(帶重復字符輸入方式)數據傳輸方式相結合的方法大大提高了系統的采樣頻率和數據的可靠性,改善了在Windows環境下數據傳輸的性能。

1 高速連續數據采集系統設計的幾項關鍵技術

1.1 定時觸發脈沖源的設計

由于系統要求高可靠性、高采樣頻率以及連續采樣,利用Intel 8254定時計數功能來觸發A/D轉換,嚴格控制時序以及數據采樣間隔,合理利用Intel 8254的三個定時計數器。定時計數器0作備用,用作A/D的外部觸發源,定時器1和2配合使用。其中定時器1的輸入和定時時鐘基頻(40MHz)相聯,其輸出作為定時器2的輸入,定時器2的輸出作為A/D轉換的定時脈沖觸發源。

定時器1和2均采用方式2工作。定時計數器1和2的計數值CounterT1和CounterT2,必須滿足如下關系式:

CounterT1×CounterT2=時鐘基頻/SampleSpeed(系統的采樣頻率)。

其初始化程序如下(編程平臺為Visual C++6.0):

ucValue = 0xb4; //定時器2,方式2,ucValue為定時器2的初始化值

_outp(BaseAdr+33,ucValue); //BaseAdr為板卡的基地址

_outp(BaseAdr+32,CounterT2 0xff);

_outp(BaseAdr+32,(CounterT2 >> 8) 0xff);

ucVaue=(ucValue ~0xc0)| 0x40; //定時器1,方式2

_outp(BaseAdr+33,ucValue);

_outp(BaseAdr+31,CounterT1 0xff);

_outp(BaseAdr+31,(CounterT1 >> 8) 0xff);

1.2 雙端口RAM技術

系統要求不間斷連續要樣。為了克服常規的固定I/O端口讀寫方式容易造成丟失數據且數據傳輸速率低的缺陷,系統采用雙端口RAM技術。利用計算機內存直接映象技術,對內存物理地址直接讀寫,克服了數據傳輸的瓶頸效應,滿足了系統的實時性。在雙端口RAM設計過程中,按照標準實行全地址譯碼,以確保全地址空間的每一個存儲單元的地址在總線上唯一。

雙端口RAM采用英國ARCT公司的雙端口RAM HK12S25(8K×8bit),采樣數據與PC接口采用FIFO存儲器(先入先出存儲器)作為緩沖,系統具有FIFO全滿(FULL)、半滿(HALF)標志。HALF標志用于決定PC機什么時間開始讀取轉換結果,當PC監測到HALF信號有效,表明在FIFO中至少有4K個數據可以為PC讀取。同時FIFO至少提供4000個空間作為讀數時A/D數據存放的緩沖區。由于PC采用RAM映射方式從FIFO讀數據,通常速度為1.2M~2M字/秒,PC機有充足的時間來進行實時數據處理等操作。

寄存器的定義(BaseAdr+20):

D7 D6 D5 D4 D3 D2 D1 D0

FULL HALF 中斷標志

輸入模擬通道轉換控制采用LUT(RAM查找表)驅動模式,LUT的容量為256單元,即輸入通道轉換有256種模式。同時,LUT專門提供一條額外的控制線輸出到外部,可以為用戶提供可編程狀態標志、同步采樣保持器控制等功能。同時應特別注意LUT驅動通道轉換的功能,它可以提供非線性通道控制模式——不同的通道具有不同的采樣速度。

利用_fmemmove(data 1,data2,Samplen)將數據映射到高端內存,其中:data1為數據目的指針,指向一個內存中足夠大的空間;data2可以用FP_SEG、P_OFF來賦值;Samplen為傳輸字節長度。為了進一步提高訪問高端內存地址的速度,也可在VC++中嵌入匯編語言_asm movX1,X2。不過,假如采用面向對象的VC++編程,采用_fmemmove足夠以滿足系統的采樣要求。

1.3 多線程的數據采集軟件設計

在要求高速、高可靠性和連續采樣的情況下,一方面要求系統不間斷地進行數據采集,同時還要進行數據的在線定時處理,否則將會造成數據的丟失或不連續。在軟件設計中,引入了Windows線程的多任務處理技術(multitasking)。一個線程是程序的一條執行路徑。MFC(Microsoft Foundation Class)明確區分了兩種線程:用戶界面線程(UI)是一個消息泵,用于處理用戶界面的任務;工作者線程(Worker Thread)完成用戶自己定義的任務,可以充分利用工作者線程來完成數據的采集、傳輸以及處理,以保證數據的實時性、完整性和連續性。

在使用多線程時,如何防止兩個線程同時訪問同一個數據集(SRAM中的4K個數據可以看作是一個數據集),以及當HALF FLAG標準已出現,一個線程正在往SRAM中寫數據時,另一個線程要讀取SRAM的數據,該如何處理,是保證數據完整性和連續性的關鍵。有四種使線程編程更安全的線程同步對象,保證多個線程能在一起適當地協調工作:Critical Section(臨界區)、Mutexe(互斥)、Semaphore(信號量)以及Event(事件)。其中Critical Section是保證在某一個時刻只有一個線程能訪問SRAM的簡易方法,通過對鄰界區對象的Locking(加鎖)和Unlocking(解鎖)來使得任何線程都可以調用訪問SRAM中的數據集,同時每個線程都必須禮貌地等待他們訪問受保護的SRAM中數據的機會;Mutexe與Critical Section很相似,只是使用起來稍復雜一點;Semaphore與前兩者也很相似,但Semaphore允許多個線程同時訪問同一資源。這與前兩者在同一時刻只允許一個線程訪問一個資源的限制不同。在創建Semaphore時,需要指出允許同時訪問同一資源的最大線程數目。在本系統中,主要有數據采集、標志位辨別、數據傳輸、信號處理等線程,使用Semaphore方法已足以滿足要求。但是在設計線程時,要合理規劃多個線程對同一資源的使用順序,這可以通過設定每個線程的優先級別來實現。在本系統中數據采集具有最高的優先級,其次為數據傳輸。線程優先級常量設定如下:

THREAD_PRIORITY_ABOVE_NORMAL 設定一個比普通級高一組的優先級

THREAD_PRIORITY_BELOW_NORMAL 設定一個比普通級低一級的優先級

THREAD_PRIORITY_HIGHEST 設定一個比普通級高二級的優先級

THREAD_PRIORITY_LOWEST 設定一個比普通級低二級的優先級

THREAD_PRIORITY_NORMAL 設定為正常優先級

應用程序為:

UNIT THREADSAMPLE(LPVOID param)

{ Csemaphore Semaphore(2,6);

someResource.UseResource();

::messageBox(HWND) param;

_outp(BaseAdr+2,0x34); //選擇Pacer觸發A/D

_outp(BaseAdr+4,0x01); //啟動Pacer ……}

UNIT THREADTRANSDATA(LPVOID param)

{ float data1,data2;

someResource.UseResource();

::MessageBox(HWND) param;

_fmemmove(data1,data2,Samplen);……}

1.4 高速數據鎖存技術

在高速連續數據采集系統設計時,高速數據的鎖存一直是個難點。A/D轉換的速率越快,數據鎖存的難度越大。為確保數據的完整性,采用將數據輸出端口的數據分成四路輸出,為了補償數據的傳輸延時以及SRAM的建立時間,在進行四分頻時要推遲1~2個時鐘,數據進入SRAM后,便可以將數據分組打包傳輸給計算機進行處理。

1.5 板卡的抗干擾措施

在高速連續數據采集系統設計時,應避免各個信號之間的共模干擾以及信號的完整性。在本PCB設計時,采用了六層板設計技術,分別為布線和元件層、模擬地和±12V電源層、數字地以及ECL的VCC信號層、模擬+5V和數字+5V和+3.3V層、模擬-5V和數字-5V和+2.5V層、布線和元件層,并且使用了大面積的電源和地層可以使各信號線與地或電源平面之間形成與緊偶合以達到減少信號線之間的共模干擾。模擬信號與數字信號相互隔離,并單獨供電。這些措施的采用,有效地抑制了信號間的共模干擾。

2 實際應用

筆者設計的基于PCI總線協議的板卡已應用于某國防項目,由于篇幅的原因,省略硬件結構圖,程序框圖如圖1所示。為了加快數據的讀寫速度,采用了16Bits寄存器,在讀取A/D轉換結果時可一次讀入16Bits數據。16Bits數據格式如下:

部分關鍵源代碼如下:

#include CtrsysDoc.h #include afx.h #include afxmt.h //VC++頭文件

_outp(BaseAdr+4,0x01); //enable pacer to trig A/D convert

while ( (_inp(BaseAdr+20) 0x08 )= =0);

_outp(BaseAdr+7,0x20);

for(i=0;iFSIZE/2;i++)

{

wData = _inpw(BaseAdr); //得到FIF0數據

fData++=(wData>>4)9.98/0xfff; //轉化為實際的浮點數

*ICH++=wData 0x000f; //得到自掃描的通道數

}

隨著計算機技術的發展,具有高可靠性的高速且連續數據采集系統或板卡是一種發展趨勢。本文探討了基于PCI總線的高速數據采集卡設計的一些方法,具有一定的參考價值,經實踐證實用可靠。其中還有許多相關技術有待于研究和開發,特別是技術的發展,會更加促進這一技術的完善和發展。



評論


相關推薦

技術專區

關閉