具有高可靠性的高速連續(xù)數(shù)據(jù)采集的設(shè)計(jì)與實(shí)施方法
;;; 摘要:從硬件和軟件設(shè)計(jì)兩個(gè)方面介紹保證PCI總線的高速連續(xù)采集系統(tǒng)的數(shù)據(jù)完整性、可靠性的實(shí)用關(guān)鍵技術(shù)及具體實(shí)施方法、應(yīng)用案例,列出了大量實(shí)用的設(shè)計(jì)技術(shù)及應(yīng)用程序。該設(shè)計(jì)先進(jìn)、可靠,在實(shí)踐中得到了應(yīng)用。 ;;; 關(guān)鍵詞:高速數(shù)據(jù)采集 可靠性和完整性 關(guān)鍵技術(shù) 設(shè)計(jì) 在許多測量與控制領(lǐng)域,如電力諧波測試、聲光信號(hào)處理、現(xiàn)代雷達(dá)系統(tǒng)等元均要求在線進(jìn)行小波數(shù)字信號(hào)分析與處理,其中最為關(guān)鍵的是如何利用香農(nóng)(Shannon)采樣理論將外部信號(hào)毫無失真地采集并轉(zhuǎn)化為計(jì)算機(jī)所用的數(shù)字信號(hào)。目前較為流行的方法是提高A/D的轉(zhuǎn)換速率和計(jì)算機(jī)的處理速度。同時(shí),提高數(shù)據(jù)的傳輸速率也是較為關(guān)鍵的。本文以高速數(shù)轉(zhuǎn)換芯片AD1674為基礎(chǔ),采用PCI總線協(xié)議,從硬件和軟件設(shè)計(jì)入手探討提高整個(gè)數(shù)據(jù)采集系統(tǒng)的最大采樣頻率和高可靠性的方法,其中有些方法得到了實(shí)踐證實(shí)。 一般而言,觸發(fā)A/D轉(zhuǎn)換有軟件觸發(fā)、實(shí)時(shí)器同步觸發(fā)及外部觸發(fā)三種方式。而數(shù)據(jù)的傳輸方式有軟件查詢、中斷方式、DMA方式及FIFO方式。四種數(shù)據(jù)傳輸?shù)乃俾时容^如下(以A/D轉(zhuǎn)換基頻10MHz為例): 軟件查詢 10~20kS/s(每秒10k次,與所用計(jì)算機(jī)的主頻有關(guān)) 中斷方式 10~30kS/s DMA方式 200kS/s FIFO方式(w/repeat input string) 330kS/s 在一般控制系統(tǒng)中,采用軟件觸發(fā)A/D、軟件查詢和中斷數(shù)據(jù)傳輸方式就能滿足測控要求。但要求高速連續(xù)數(shù)據(jù)采集的情況下,顯然不能滿足系統(tǒng)要求。在筆者設(shè)計(jì)的智能化高速連續(xù)數(shù)據(jù)采集系統(tǒng)中,采用了定時(shí)器同步觸發(fā)A/D與FIFO(帶重復(fù)字符輸入方式)數(shù)據(jù)傳輸方式相結(jié)合的方法大大提高了系統(tǒng)的采樣頻率和數(shù)據(jù)的可靠性,改善了在Windows環(huán)境下數(shù)據(jù)傳輸?shù)男阅堋? 1 高速連續(xù)數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)的幾項(xiàng)關(guān)鍵技術(shù) 1.1 定時(shí)觸發(fā)脈沖源的設(shè)計(jì) 由于系統(tǒng)要求高可靠性、高采樣頻率以及連續(xù)采樣,利用Intel 8254定時(shí)計(jì)數(shù)功能來觸發(fā)A/D轉(zhuǎn)換,嚴(yán)格控制時(shí)序以及數(shù)據(jù)采樣間隔,合理利用Intel 8254的三個(gè)定時(shí)計(jì)數(shù)器。定時(shí)計(jì)數(shù)器0作備用,用作A/D的外部觸發(fā)源,定時(shí)器1和2配合使用。其中定時(shí)器1的輸入和定時(shí)時(shí)鐘基頻(40MHz)相聯(lián),其輸出作為定時(shí)器2的輸入,定時(shí)器2的輸出作為A/D轉(zhuǎn)換的定時(shí)脈沖觸發(fā)源。 定時(shí)器1和2均采用方式2工作。定時(shí)計(jì)數(shù)器1和2的計(jì)數(shù)值CounterT1和CounterT2,必須滿足如下關(guān)系式: CounterT1×CounterT2=時(shí)鐘基頻/SampleSpeed(系統(tǒng)的采樣頻率)。 其初始化程序如下(編程平臺(tái)為Visual C++6.0): ucValue = 0xb4; //定時(shí)器2,方式2,ucValue為定時(shí)器2的初始化值 _outp(BaseAdr+33,ucValue); //BaseAdr為板卡的基地址 _outp(BaseAdr+32,CounterT2 & 0xff); _outp(BaseAdr+32,(CounterT2 >> 8)& 0xff); ucVaue=(ucValue & ~0xc0)| 0x40; //定時(shí)器1,方式2 _outp(BaseAdr+33,ucValue); _outp(BaseAdr+31,CounterT1 & 0xff); _outp(BaseAdr+31,(CounterT1 >> 8) & 0xff); 1.2 雙端口RAM技術(shù) 系統(tǒng)要求不間斷連續(xù)要樣