高速高精度多功能數(shù)據(jù)采集卡的設(shè)計
作者/代威威 董文岳 珠海歐比特控制工程股份有限公司(廣東 珠海 519080)
本文引用地址:http://www.ex-cimer.com/article/201802/375432.htm數(shù)據(jù)采集卡是模-數(shù)信號轉(zhuǎn)換與信號處理系統(tǒng)的關(guān)鍵部分。在要求不高的工控應(yīng)用場合中,大多數(shù)應(yīng)用采樣速率均低于1 Msps的中、低速數(shù)據(jù)采集卡;采樣速率高于1 Msps的高速或者超高速數(shù)據(jù)采集卡,則主要應(yīng)用于要求較高的工控領(lǐng)域中。而PCI總線通用性與廣泛性表明其在未來的十年工控領(lǐng)域中它仍占主導(dǎo)地位。高速數(shù)據(jù)采集卡目前分成兩類:一種是以高采樣速率采集一定深度的數(shù)據(jù)后,再把數(shù)據(jù)通過PCI總線傳輸給上位機(jī),這類的采集卡由于不是即時的且并不是捕獲所有的數(shù)據(jù),因此采樣速率往往可以高達(dá)100 Msps甚至200 Msps以上;另一種則是捕獲所有的數(shù)據(jù)且即時顯示在上位機(jī)上,這類的采集卡研發(fā)一直是工控領(lǐng)域研發(fā)的難點,受限于PCI帶寬,采樣速率國內(nèi)一直并沒有突破5 Msps的產(chǎn)品,而歐比特公司的產(chǎn)品具備邊沿觸發(fā)方式,結(jié)合上位機(jī)的虛擬示波器技術(shù),可以實現(xiàn)雙通道10 Msps/單通道20 Msps的全速不間斷采樣。
基于以上的原因,利用PLX公司PCI9056-66BA,珠海歐比特公司在超高的數(shù)據(jù)采集系統(tǒng)中做了一些研究,設(shè)計12 bit分辨率的超高速高精度數(shù)據(jù)采集PCI板卡EMBC2000- PCI-AD485CAN。該數(shù)據(jù)采集板卡遵循PCI 2.3標(biāo)準(zhǔn),同時支持5 V/3.3 V 標(biāo)準(zhǔn)32位PCI接口,已實現(xiàn)雙通道10 Msps/單通道20 Msps的全速不間斷采樣,且采集的數(shù)據(jù)可利用CAN或者RS485總線進(jìn)行遠(yuǎn)程數(shù)據(jù)傳輸,滿足了高端工控領(lǐng)域的應(yīng)用要求。
1 EMBC2000-PCI-AD485CAN的硬件功能結(jié)構(gòu)
EMBC2000-PCI-AD485CAN(以下簡稱EMBC2000-PCI)硬件結(jié)構(gòu)主要由6個部分組成:模擬信號垂直調(diào)理電路、數(shù)據(jù)采集及主控電路、本地數(shù)據(jù)緩存電路、PCI總線接口電路、隔離型CAN/RS485接口電路、電源電路,實現(xiàn)了雙通道模擬信號輸入,其結(jié)構(gòu)圖如圖1所示。
圖1 EMBC2000-PCI硬件電路結(jié)構(gòu)圖
1.1模擬信號垂直通道設(shè)計
模擬信號垂直調(diào)理電路允許輸入的模擬電平范圍在0~±25 V之間,輸入阻抗可在1 MΩ與50 Ω之間切換,同時具備DC/AC/GND三種耦合方式。
由于允許輸入的模擬電平范圍較大,而ADC允許輸入電平范圍較小,所以必須先對輸入信號進(jìn)行衰減,然后根據(jù)需要進(jìn)行放大,使當(dāng)前輸入信號的峰值接近或者等于ADC的最大量程。因此,就要求前端衰減電路的輸入阻抗要高,同時在板卡的整個通頻帶內(nèi)的衰減分壓比不變。要實現(xiàn)這樣的要求僅簡單地采用電阻分壓是達(dá)不到目的。因為在下一級的輸入以及PCB走線中均存在分布電容,這個分布電容的存在對被測信號的高頻分量有嚴(yán)重的衰減,造成信號的高頻分量的失真(脈沖上升時間變慢)。為此必須采用如圖2所示的阻容補(bǔ)償式分壓電路,圖中R1、R2為分壓電阻(R2包括下一級的輸入電阻),C1、C2為補(bǔ)償電容(C2包括下一級的輸入電容)。調(diào)節(jié)C2,當(dāng)滿足時,分壓比K在整個通頻帶內(nèi)是均勻的,它被表示為,這樣的分壓電路做成的衰減器就可以無畸變地傳輸窄脈沖信號,僅僅是信號幅度變?yōu)樵瓉淼?/K。
圖2阻容分壓電路圖
大多數(shù)數(shù)據(jù)采集設(shè)備的輸入電阻Ri都設(shè)計在1MΩ左右,它的大小主要決定于R1,因為,而R1遠(yuǎn)大于R2。輸入電容Ci為C1和C2的串聯(lián)值和引線的分布電容C0的并聯(lián)值。本板卡的輸入電阻Ri=1MΩ,輸入電容Ci=25 pF。
為了使探頭接入被測電路不影響被測電路的工作,即前端衰減電路到下一級的可變增益放大電路應(yīng)當(dāng)是開路的,這可以通過加入一個輸入阻抗很大的射隨運放來實現(xiàn),這里選用ADI公司的AD8027,其輸入阻抗高達(dá)6 MΩ。
對衰減后的信號進(jìn)行放大有三種方式:
1) 使用高精度運放,通過繼電器或者模擬開關(guān)選擇反饋電阻或者輸入電阻的大小來實現(xiàn)不同的增益,缺點是需要較大的布線空間,不利于小型化,且高精度運放的輸入帶寬往往較窄,減小系統(tǒng)的重用性;
2) 使用數(shù)控可變增益放大器,這種方式利于控制且精度較高,缺點是增益的范圍是不連續(xù)的;
3) 使用壓控可變增益放大器,這種方式優(yōu)點在于增益的范圍是連續(xù),缺點是要額外增加一個高精度DAC。
綜合各方面的考慮,最終選用ADI公司的壓控可變增益放大器AD8336及搭配TI公司的16位DAC DAC8552。
TI公司的DAC8552輸出公式(1):
(1)
D范圍為0~65536,Vref根據(jù)需要外接基準(zhǔn),但不能超出DAC電源電壓。
AD8336的增益分為固定增益和壓控增益兩個部分,其中固定增益根據(jù)帶寬的選擇已經(jīng)精密電阻外接配置成4倍,則其總的增益為:
(2)
Gpra即為固定增益,單位為分貝(dB)。分貝與放大倍數(shù)的增益換算關(guān)系如下:
(3)
Vgpos與Vgneg由DAC8552輸出得到,所以僅需根據(jù)選擇的ADC的量程,算出對當(dāng)前信號的增益需要,從而推導(dǎo)出DAC兩端所需輸出的電平大小,利用FPGA或者其它處理器控制即可。
最后還需把單端信號轉(zhuǎn)成差分信號,原因有三:
1) 對ADC來說,差分輸入信號采樣精度更高;
2) 提高抗干擾能力;
3) 利于阻抗匹配。
1.2 數(shù)據(jù)采集及主控電路
選擇高精度的ADC是構(gòu)成一個優(yōu)秀的測量系統(tǒng)的三個要素之一。衡量一個測試量與實際理想值的誤差時,需要兩個量來表述: accuracy 和 precision。前者一般稱為精度,后者最好叫做可重復(fù)性。
Accuracy實際是測量中一個平均過程的概念。一般是衡量多次測量后的平均值接近理想值的程度。所以它隱含的是測試的DC量綱。在ADC的數(shù)據(jù)手冊中的以下參量是一個DC的概念:Offset, gain error, INL, DNL等。它們衡量了做直流參量測量時的誤差水平。
Precision是指在同樣測試條件下,測試結(jié)果的一致性。同樣的A/D系統(tǒng)中,以下參量是一個AC的概念:Dynamic Range, SNR, TDH等。它們衡量了做非直流參量測量時的誤差水平。
所以對ADC的選型并不是10位分辨率的性能就一定優(yōu)于8位的分辨率的性能,更不是說對一個10位的AD系統(tǒng)輸入5 V信號,其誤差就在。實際上ADC的精度其主要決定于兩個參數(shù):INL和ENOB。
INL是直流測量時要主要考慮的參數(shù)。一般ADC的其它直流測量誤差諸如offset,gain error等可以通過校準(zhǔn)而削掉。這時INL成了影響測試的主要誤差來源。比如一個10 bit的ADC,INL=1.5 bit,則整個ADC的實際可得到的最好精度是。
ENOB是非DC信號模數(shù)轉(zhuǎn)換或交流測試時一個A/D的有效bit數(shù)。它主要跟SNR有關(guān)。其存在下列的公式:
(4)
其中的SNR更精確的說應(yīng)該是SINAD(SNR & THD:信噪比和總諧波失真)。上邊公式也隱含了如果系統(tǒng)的SNR變差,則總的測量precision也會變差。
經(jīng)過對比對ADI、MAXIM、TI等公司的ADC,最終選擇了ADI公司的AD9238,其INL僅為0.7 LSB,SNR達(dá)到70 dB。
ADC采集到數(shù)據(jù)通過數(shù)據(jù)總線傳輸給處理器。處理器方面,由于還涉及到CAN、RS485、PCI接口的設(shè)計,因此市面上并沒通用的處理器提供。歐比特公司作為一家專注工控航空航天的公司,依托基于SPARC架構(gòu)的IC設(shè)計,對FPGA的應(yīng)用已十分成熟。針對成本、系統(tǒng)頻率、資源及IO管腳的需求,最終選用了Altera公司的EP3C40作為處理器的IP核載體。
1.3 本地緩存及PCI接口電路
如前所述,國內(nèi)工控方面的不間斷數(shù)據(jù)采集研究,一直受限于PCI帶寬。雖然PCI總線理論傳輸速率可高達(dá),但這僅僅是理論值。實際上的PCI總線開發(fā),能達(dá)到40 MByte/s的傳輸速率已經(jīng)是相當(dāng)不錯的數(shù)據(jù)。歐比特公司在S698處理器、EMBC1000系列等產(chǎn)品的研發(fā)過程中積累相當(dāng)豐富的PCI總線開發(fā)經(jīng)驗。經(jīng)過努力,基于PLX公司的PCI9056可實現(xiàn)60 Mbyte/s的PCI傳輸速率,傳輸數(shù)據(jù)穩(wěn)定有效、不丟數(shù)。
根據(jù)木桶理論,PCI總線的實際傳輸效率是一塊短板,在這短板得以加長后,研發(fā)的難度就集中在另外一塊短板——上位機(jī)取數(shù)上。也就是說即使PCI總線真的能夠傳輸很快,但是上位機(jī)是否能都把數(shù)據(jù)讀到?由于EMBC2000-PCI板卡是基于WinXP/Win2000操作系統(tǒng)的,有過PCI總線開發(fā)經(jīng)驗的人都知道,在大規(guī)模的連續(xù)數(shù)據(jù)傳輸中是不適宜使用中斷方式的,因為這很容易導(dǎo)致CPU占用率過高,而導(dǎo)致系統(tǒng)進(jìn)入假死狀態(tài)。而使用查詢方式,與即時的Linux系統(tǒng)不同,Windows操作系統(tǒng)是個分時操作系統(tǒng),也就是說它的線程占用的時間是個不確定的值,就算單獨為讀操作開一個線程,但是也必須使數(shù)據(jù)在板卡緩存一端時間后,再由上位機(jī)查詢到滿狀態(tài)后讀走。但上位機(jī)讀數(shù)據(jù)的過程中,A/D系統(tǒng)仍在不間斷地采集數(shù)據(jù),由于操作系統(tǒng)中沒有一個線程能一直獨占CPU。也就是說上位機(jī)并不能查詢到一次滿后,就一直在讀數(shù),每次讀操作中必然存在一個間隔,也就是說PCI總線的傳輸速率需高于或者至少不低于采樣速率。那么在這個間隔中,采集數(shù)據(jù)同樣需要緩存在板卡的本地緩存中。
通過對WinXP系統(tǒng)的深入分析及驅(qū)動開發(fā),最終確定需在板卡上緩存8 ms的采集數(shù)據(jù),并在每個通道的緩存數(shù)據(jù)處理上采用“乒乓模式”,也就是說FPGA將ADC采集的數(shù)據(jù)輪流填到每個通道對應(yīng)的緩存A與緩存B內(nèi),而當(dāng)緩存A第一次滿后,上位機(jī)開始查詢讀操作,輪流讀走緩存A與緩存B的數(shù)據(jù)。依上,則所需要單個緩存的容量大小為。另外考慮到選擇如SDRAM、DDR-SDRAM、DDR2-SDRAM、SRAM布線復(fù)雜,且需要FPGA提供過多的IO及資源。由于一方面這會增加PCB的層數(shù);另一方面只有高端的FPGA才會具備使用上述的緩存所需的IO口數(shù)量,而高端FPGA的價格通常是低成本FPGA價格的是十倍甚至更多。出于成本的考慮,選擇了IDT公司的雙口SRAM IDT70V659作為外部緩存,其容量達(dá)到512 KByte,速率達(dá)100 MByte/s,滿足系統(tǒng)設(shè)計的需求。
1.4 隔離型CAN/RS485接口電路
考慮到工控場合通常存在浪涌電壓,EMBC2000-PCI板卡的CAN和RS485做了隔離處理,可防浪涌電壓達(dá)1000 V,并針對RS485常出現(xiàn)的由于第三態(tài)存在而導(dǎo)致接收端輸出處于不定態(tài)做了相應(yīng)處理。
CAN邏輯方面,由FPGA搭載歐比特公司自研的OBT-CAN軟核,支持BasicCAN和PeliCAN模式。在PeliCAN模式下,支持CAN2.0B的擴(kuò)展特征。并具備1 KByte本地緩存,通訊速率最高達(dá)1 MByte。寄存器、性能方面完全兼容PHILIPS公司的SJA1000。
RS485邏輯方面,采用UART16550軟核,并具備了64 Byte本地緩存,通訊速率最高達(dá)115200 bps,最大傳輸距離約為1200米。
3 EMBC2000-PCI-AD485CAN的硬件邏輯
EMBC2000-PCI的硬件邏輯設(shè)計分成8個部分:ADC模塊、DAC模塊、CAN模塊、UART16550模塊、HOST I/F模塊、PCI I/F模塊、RST-IRQ模塊、CLK_GEN模塊。其中ADC模塊及DAC模塊是用于控制模擬信號垂直調(diào)理通道及對采集數(shù)據(jù)進(jìn)行處理,兩個通道的模塊完全相同,僅需在頂層文件上進(jìn)行復(fù)用即可。具體邏輯框圖如圖3。
圖3 EMBC2000-PCI硬件邏輯框圖
ADC模塊負(fù)責(zé)控制ADC并對ADC的采集數(shù)據(jù)進(jìn)行相關(guān)處理。為了降低成本,EMBC2000-PCI并沒有設(shè)計專門的觸發(fā)電路,而是在FPGA內(nèi)部實現(xiàn)觸發(fā)。該部分邏輯集成在ADC模塊中。通過用戶預(yù)設(shè)的邊沿觸發(fā)方式及觸發(fā)電平,F(xiàn)PGA對采集數(shù)據(jù)尋找滿足觸發(fā)電平的對應(yīng)點,然后再結(jié)合該點前后的數(shù)據(jù)進(jìn)行趨向分析,判斷是否是所需的上升沿或下降沿觸發(fā)。當(dāng)找到觸發(fā)點后,F(xiàn)PGA才把采集數(shù)據(jù)按照用戶預(yù)設(shè)的觸發(fā)深度把數(shù)據(jù)存至本地緩存中。
DAC模塊負(fù)責(zé)通過控制DAC從而控制可變增益放大器;CAN模塊/UART16550模塊分別實現(xiàn)了CAN2.0B協(xié)議、RS485通訊;RST-IRQ模塊用于產(chǎn)生各種PCI中斷信號;CLK_GEN模塊用于進(jìn)行鎖相環(huán)倍頻及產(chǎn)生全局同步時鐘。
如前所述,由于采集數(shù)據(jù)是先存至本地緩存,然后由上位機(jī)直接讀走,不再經(jīng)過FPGA。所以FPGA與PCI橋PCI9056之間是一個異步系統(tǒng),因此PCI接口與其它模塊并需通過一個緩沖來實現(xiàn)同步。PCI I/F模塊用于實現(xiàn)與PCI橋之間的通訊,而HOST I/F模塊用于實現(xiàn)PCI通訊與內(nèi)部其它邏輯之間的同步。
整個IP核運行速率為120 MHz,完整實現(xiàn)了板卡各類邏輯。
4軟件設(shè)計
EMB2000-PCI的驅(qū)動基于Jungo公司的WinDriver開發(fā),在上層軟件運用如SinC/C插值法、交替描點法等算法實現(xiàn)波形的還原、描繪、計算,并可把波形進(jìn)行實時游標(biāo)測量、打印。EMBC2000-PCI通過DLL文件提供接口函數(shù)供二次開發(fā)。
5 結(jié)論
EMBC2000-PCI多功能數(shù)據(jù)處理板卡采用雙數(shù)據(jù)存儲方式、內(nèi)部軟觸發(fā)方式實現(xiàn)了高達(dá)單通道20Msps/雙通道10Msps的不間斷數(shù)據(jù)采集能力,分辨率高12bit。板卡上的阻抗匹配與控制保證了數(shù)據(jù)采集的信號完整性。在數(shù)據(jù)采集方面已接近國際代表廠商美國Measurement Computing公司最高端產(chǎn)品PCI-DAS4020/12型板卡。CAN、RS485接口使數(shù)據(jù)可以進(jìn)行遠(yuǎn)距離傳輸。EMBC2000-PCI的出現(xiàn),較好地填補(bǔ)了國內(nèi)在基于PCI總線的不間斷數(shù)據(jù)采集方面的空白。
參考文獻(xiàn):
[1]PCI-DAS4020-12-UG.Measurement Computing,2009.
[2]PCI_9056BA_Data_Book_v1.3.PLX,2009.
[3]EMBC2000-PCI-AD485CAN用戶手冊 . 珠海歐比特控制工程股份有限公司,2010.
評論