賀有智,王大正,吳 晨,劉福才
(燕山大學,工業(yè)計算機控制工程河北省重點實驗室,河北秦皇島 066004)
在實驗中,經(jīng)常需要觀察一個短暫的波形,如電容、電感放電信號等等,這類波形有作用時間短和發(fā)生時刻相對不確定兩個共同的特點。在以往的觀察實驗中,通常是在PC計算機上使用PCI接口的數(shù)據(jù)采集卡,利用高級語言程序控制記錄,由于高級語言程序運行時的不確定性,并不能準確地記錄下所需要的波形,為了保證數(shù)據(jù)的完整性,只能連續(xù)采集并篩選,這樣浪費了大量的系統(tǒng)資源,而且計算機的處理能力直接限制采樣周期和數(shù)據(jù)精度[1]。從實現(xiàn)的角度來分析,PC計算機波形記錄系統(tǒng)又有成本高,體積大,在相對惡劣的條件下不能連續(xù)工作等缺陷,不利于實際應用。
文中以在2.4 ms的時間內使用FIFO記錄8路0~5 V的電壓信號為例,設計了數(shù)字波形記錄系統(tǒng),其中每路存儲1000組12bit精度的數(shù)據(jù)。系統(tǒng)把數(shù)據(jù)采集和數(shù)據(jù)上傳分成了2個獨立的過程,實現(xiàn)了脫機數(shù)據(jù)采集,數(shù)據(jù)最終可以通過USB總線傳至上位計算機系統(tǒng),用于分析和處理。系統(tǒng)受外信號觸發(fā),在觸發(fā)之后的2.4576ms內以300ns為一個采樣周期連續(xù)記錄8 000組數(shù)據(jù),其中每路1 000組數(shù)據(jù),多出的數(shù)據(jù)用于彌補系統(tǒng)延時從而保證波形的完整性。
系統(tǒng)總體結構方案如圖1所示。8路模擬量通過多路復用器ADG608按順序循環(huán)進入模數(shù)轉換器AD9220,CPLD負責提供多路復用器的3bit選路信號(地址信號),與此同時,為模數(shù)轉換器提供與選路信號有一定相位差的時鐘信號,以確保采集到準確的模擬量[2]。模數(shù)轉換器輸出的12 bit數(shù)據(jù)與3 bit選路信號組成15 bit數(shù)據(jù)包被動存入FIFO,其中低12 bit為數(shù)據(jù),13~15 bit為地址。FIFO芯片選用CY7C6255,由CPLD控制讀取15 bit數(shù)據(jù)包,存入自身RAM序列。
圖1 系統(tǒng)總體框圖
CLPD負責整個系統(tǒng)的數(shù)據(jù)采集與存儲過程,數(shù)據(jù)的采集隨系統(tǒng)的上電而開始,掉電而結束;數(shù)據(jù)的存儲則受FIFO的狀態(tài)影響,即存滿為止。外界觸發(fā)信號經(jīng)過CLPD間接連至FIFO的復位管腳,當滿足特定的外界觸發(fā)條件(由CPLD配置決定)時,F(xiàn)IFO被復位,之后在2.4576 ms內存滿8 192組數(shù)據(jù),實現(xiàn)了一次8路波形記錄過程。當多次觸發(fā)時,F(xiàn)IFO記錄的是最后一次觸發(fā)時的波形。
數(shù)據(jù)的上傳,采用EZ-USB FX2方案實現(xiàn)[3],芯片CY7C68013A收到上位PC計算機經(jīng)過USB總線發(fā)送的數(shù)據(jù)請求時,會通過GPIF方式從外FIFO中讀取數(shù)據(jù)并上傳到上位PC計算機。
上位機使用了相對成熟和穩(wěn)定的通用驅動ezusb.sys作為USB的硬件驅動程序,Visual C++程序可以像打開讀取文件一樣借助驅動程序經(jīng)過USB總線讀取波形數(shù)據(jù)信息,之后對所得波形數(shù)據(jù)進行拆分處理、繪圖顯示和數(shù)據(jù)保存。
2.1模擬通路的設計
8路模擬信號經(jīng)過ADG608的通道選擇,經(jīng)過集成運算放大器的調整進入模數(shù)轉換芯片AD9220,其結構如圖2所示。
圖2 模擬通路示意圖
AD9220模數(shù)轉換芯片在同一時刻只能轉換一路的模擬量,為了處理8路模擬量的輸入,需要多路復用器以一定時序對不同的模擬通道分別選通。
模擬多路復用器選用的ADG608是一個由8個單通道構成的獨立的CMOS模擬多路復用器,它可以根據(jù)A0、A1、A2管腳上的3位地址來選擇8路模擬輸入其中相應的一路作為輸出,ADG608具有低導通電阻(最大30 Ω)、高速換路(ton最大75 ns,toff最大45 ns)、低功耗、換路前自動關斷(Break-Before-Make Switching Action)、TTL/CMOS電平兼容等特點,其工作電壓和導通模擬信號的電壓范圍滿足設計要求[7]。
模擬多路副復用器相比機械開關有很大的導通電阻Ron,最大可以到30 Ω,而機械開關的導通電阻一般在“mΩ”級別,導通電阻對模擬信號傳輸精度以及放大器的增益倍數(shù)都會有影響,在實際使用中應當設法減小其值。根據(jù)ADG608的典型特性,在一定范圍內導通電阻Ron與電源電壓成反比,與溫度成正比,特性曲線如圖3所示。
圖3 ADG608導通電阻隨電源電壓及溫度變化曲線
ADG608的換路行為受CPLD驅動,由于ADG608在換路前自動關斷模擬通路,CPLD只需發(fā)送新的地址,而不需要特意控制關斷模擬通路。
在一般情況下,模數(shù)轉換芯片的電壓輸入信號符合輸入電壓范圍的要求,但是通常需要一個集成運算放大器來提高某些弱信號的驅動能力,減小這些信號受多路復用器導通電阻Ron以及模數(shù)轉換器的輸入電阻的影響。
模數(shù)轉換芯片選用的AD9220為新一代高性能、12位模數(shù)轉換器,采用單電源供電。具有真12位線性度和溫度漂移性能(不包括內部基準電壓),以及11.5位或更佳的交流性能(取決于模擬輸入配置)。AD9220采用高速、低成本的單CMOS工藝及新穎的架構,器件為完整的單芯片ADC,內置片內高性能、低噪聲采樣保持放大器和可編程基準電壓源,也可以選用外部基準電壓,以滿足應用的直流精度與溫度漂移要求。器件采用多級差分流水線架構,內置數(shù)字輸出糾錯邏輯,在額定數(shù)據(jù)速率時可提供12位精度,并保證在整個工作溫度范圍內無失碼[6]。其差分輸入結構使單端輸入和差分輸入采樣接口均支持各種輸入范圍。采樣保持(SHA)放大器既適用于在連續(xù)通道中切換滿量程電平的多路復用系統(tǒng),也適合采用最高Nyquist速率及更高的頻率對單通道輸入進行采樣。AD9220采用一個單時鐘輸入來控制所有內部轉換,數(shù)字輸出數(shù)據(jù)格式為標準二進制,超量程(OTR)信號表示溢出狀況,可由最高有效位來確定是下溢還是上溢。
AD9220的配置如圖2所示,集成運算放大器在同相增益流入VINA的電壓信號的驅動能力;內置參考電壓VREF驅動VINB管腳;在VINA和VINB上串聯(lián)一個30~50 Ω的電阻可以從一定程度上減小噪聲帶寬或者限制過電壓時的灌入電流。
AD9220模數(shù)轉換器的內部是將VINA與VINB做差得到電壓VCORE送入模數(shù)轉換核心,VCORE的取值范圍在+VREF到-VREF之間,即:
-VREF 在圖3的配置中,SENSE接地啟用內置2.5 V參考電壓,即VREF管腳的輸出電平為2.5 V,則VINB管腳的輸入電壓也為2.5 V.根據(jù)上述公式 -2.5 V 求得輸入電壓VINA的范圍為0~5 V,符合設計要求。 AD9220的工作時鐘信號CLK由CPLD提供。 2.2CPLD協(xié)調電壓波形記錄系統(tǒng)的實現(xiàn) 邏輯可編程器件CPLD負責協(xié)調整個波形記錄系統(tǒng)的工作,其選用Max 7000系列邏輯可編程器件EPM7604,EPM7064 CPLD基于先進的多陣列矩陣第二代MAX架構,為大量應用提供了世界級的高性能解決方案。基于電可擦除可編程只讀存儲器(EEPROM)的EPM7064采用先進的CMOS工藝制造,具有64個宏單元的密度范圍,速度達3.5 ns的管腳到管腳延遲。EPM7064支持在系統(tǒng)可編程能力(ISP),并具有調試接口(JTAG),可以在現(xiàn)場輕松進行重配置。 EPM7064 CPLD對錄波系統(tǒng)的控制包括為FIFO提供讀數(shù)據(jù)控制信號,對模數(shù)轉換器提供時鐘信號,對多路復用器提供選路地址信號,同時選路地址信號也將作為數(shù)字量的地址一同被存入FIFO中。其連接如圖4所示。 圖4 CPLD與各錄波功能模塊連接圖 為了波形能夠正確的記錄,CPLD的協(xié)調工作需要做到以下幾點: (1)多路復用器換路完成后模數(shù)轉換器鎖存模擬信號。 (2)模數(shù)轉換器數(shù)字量輸出信號穩(wěn)定后FIFO讀取數(shù)據(jù)。 (3)FIFO讀取數(shù)據(jù)時不能改變地址信號。 其中各功能模塊的相關工作時序如圖5~圖7所示。 圖5 ADG608換路時序 圖6 AD9220模數(shù)轉換時序 圖7 CY7C4255V-15寫操作時序 為了滿足要求,將CPLD的控制輸出波形設計如圖8所示。 圖8 CPLD輸出驅動信號時序圖 外部時鐘信號源的頻率為20MHz,AD時鐘信號為外部時鐘信號的二分頻(10 MHz)。實驗證明換路之后的第一次AD轉換值不準確,這里我們取第三次的轉換值,與此同時也可以使FIFO記錄的地址與實際地址相同。這樣每路轉換需要6個時鐘周期,一共8路,可用cnt信號來計數(shù)6個時鐘周期,用adrCnt來計數(shù)8路。 程序定義了cnt和adrCnt兩個計數(shù)器。受時鐘信號上升沿的驅動和條件語句的控制,cnt的值以000→001→010→011→100→111→000依次循環(huán),adclk取cnt的最低位,實現(xiàn)了對時鐘信號的二分頻。在cnt信號一次循環(huán)結束之后,地址信號遞增1,并輸出。需要注意的是由于VHDL程序是并行執(zhí)行的,所以語句的先后順序并非執(zhí)行順序。 FIFO的復位信號為FIFO的復位管腳保持低電平最少10~25 ns(CY7C4255V-15為15 ns),在該設計中外部觸發(fā)信號可以滿足這個要求,所以在CLPD內部將其直接連接。 3.1CY7C68013AUSB2.0從接口模塊 EZ-USB FX2系列芯片是世界上第一個集成USB2.0協(xié)議的微處理器,它支持12Mb/s的全速傳輸和480Mb/s的高速傳輸,可以使用4種USB傳輸方式:控制傳輸、中斷傳輸、批量傳輸和同步傳輸;完全使用USB2.0,并向下兼容USB1.1。 EZ-USB FX2主要包括USB2.0收發(fā)器、串行接口引擎(SIE)、增強型8501、16KB的RAM、4KB的內部FIFO存儲器、I/O接口、數(shù)據(jù)總線和通用可編程接口(GPIF)[4-5]。 設計采用GPIF接口方式從外部FIFO CY7C4255中讀取數(shù)據(jù),在GPIF方式中,GPIF作為CY7C68013A的端點(EP6)FIFO的內部控制器[8],在這種方式下,CPU不會干涉數(shù)據(jù)的傳輸,從而提高了傳輸效率,降低了程序開銷。其硬件連接方式如圖9所示。 圖9 GPIF方式下EZ-USB FX2與FIFO連接圖 固件采用官方例程FX2_to_extsyncFIFO,其方便之處在于可以只修改GPIF波形圖(該設計不需要修改)便能實現(xiàn)功能,如果不需要特殊功能,則不需要修改固件,GPIF讀取外FIFO的波形如圖10所示。 圖10 GPIF方式讀取外FIFO波形圖 3.2下位機固件程序分析 固件程序為官方提供的例程,未經(jīng)修改,所以包含了一些未使用的功能,例如對外FIFO寫入等等。 程序在初始化之后進入無限循環(huán)狀態(tài),在循環(huán)中依次判斷是否有來自上位機的命令和是否滿足對外FIFO讀寫的條件,一旦接到命令或滿足條件便執(zhí)行相應的代碼。其流程圖如圖11所示。 圖11 下位機固件程序流程圖 由流程圖可知對外FIFO的寫入操作主要取決于EP2端口是否有數(shù)據(jù)包;對外FIFO的讀取操作則主要取決于in傳輸標志是否為真。由于只需要讀取外FIFO中的數(shù)據(jù),所以上位計算機需要向下位機發(fā)送B3命令(啟動in傳輸),隨后外FIFO的數(shù)據(jù)會被讀取到EP6 FIFO中,上位計算機程序通過USB總線讀取EP6 FIFO中的數(shù)據(jù)便可獲得錄波系統(tǒng)記錄的波形信息。 3.3上位機數(shù)據(jù)讀取 上位機采用Windows平臺PC計算機,界面程序使用Microsoft Visual C++開發(fā)。由于系統(tǒng)的數(shù)據(jù)上傳負荷較小,這里使用相對成熟和穩(wěn)定的通用驅動程序ezusb.sys與硬件通訊。 通俗的講,通用驅動是將EZ-USB設備被當作一個路徑為.EZUSB-x的文件(其中x為阿拉伯數(shù)字形式的設備編號,按EZ-USB設備連接順序從0開始由小到大排列),界面應用程序只需以特定的方式打開這個“文件”,并對這個“文件”進行特定的操作,便能獲得相關外部設備中的數(shù)據(jù),在本設計中,讀取到的是外部FIFO CY7C4255中的數(shù)據(jù)。 打開文件(設備)使用API函數(shù)CreateFile(),該函數(shù)返回被打開的文件句柄,用于將來讀取文件(設備)。 定義函數(shù)返回值傳遞給hDevice,那么當hDevice !=INVALID_HANDLE_VALUE時設備打開成功。打開失敗的原因主要是設備沒有正確連接或者失去響應,斷開重連便能解決。(注!之后代碼使用的hDevice句柄為上述設備正確打開之后的句柄,不再重復說明) 為了進入外FIFO讀取狀態(tài),設備打開之后需要啟動IN傳輸,即通過API函數(shù)DeviceIoControl()函數(shù)向EZ-USB設備發(fā)送一個特定命令(0xB3)。 當DeviceIoControl()返回值為0時說明IN傳輸沒有成功啟動,失敗原因主要為固件程序錯誤。停止IN傳輸?shù)拇a類似,只是命令代碼為0xB4。 數(shù)據(jù)的讀取依然采用DeviceIoControl()函數(shù),讀取上來的數(shù)據(jù)將存在outBuffer中,512個數(shù)值,每個數(shù)值16位,讀取32次便可獲得全部8K的波形數(shù)據(jù)。如果DeviceIoControl()返回0,說明讀取失敗,原因主要是EZ-USB芯片與外FIFO連接錯誤,多出現(xiàn)在間接連接的系統(tǒng)中。 在實際界面程序中,數(shù)據(jù)的讀取在CreatThread生成的獨立的線程中進行,讀取成功后用SetEvent設置事件通知主線程,并通過全局數(shù)組將數(shù)據(jù)共享給主線程;在觸發(fā)之后需要進行33次讀取操作,并丟棄第一次讀取到的數(shù)據(jù),因為該數(shù)據(jù)為EP6 FIFO中的陳舊數(shù)據(jù),這是由固件程序的特殊性造成的。 數(shù)據(jù)經(jīng)過一定的運算可以分離地址和數(shù)據(jù)并進行相應的處理,其中通道編號channel =(dat>0x0fff)+ (dat>0x1fff)+ (dat>0x2fff)+ (dat>0x3fff)+ (dat>0x4fff)+ (dat>0x5fff)+ (dat>0x6fff)+ (dat>0x7fff),dat為原始數(shù)據(jù),原始數(shù)據(jù)的量的部分可以通過與運算屏蔽地址部分獲得;波形的繪制通過MFC中CDC的LineTo函數(shù)實現(xiàn);數(shù)據(jù)的保存與讀取可以通過文件操作的相關函數(shù)實現(xiàn)。界面運行效果如圖12所示。 圖12 上位機界面 文中的設計實現(xiàn)了獨立的波形記錄系統(tǒng),克服了傳統(tǒng)基于PCI總線+數(shù)據(jù)采集卡的波形記錄系統(tǒng)的不方便部署、成本高等缺陷。考慮到實驗要求并不嚴峻,設計降低了工作性能以降低成本和提高精度,系統(tǒng)還有一定的升級空間,即使用更高速的A/D;使用更大的FIFO,如CY7C4285;利用ADG726實現(xiàn)16路差分信號的輸入等。 參考文獻: [1]劉昌偉,邵左文,畢文.基于LABVIEW的USB接口多路高速數(shù)據(jù)采集系統(tǒng)的設計.世界電子元器件,2008(12):85-88. [2]劉靜.某雷達A/D轉換器AD9220及其應用.火控雷達技術,2003,9:26-28;50. [3]李英偉.USB2.0原理與工程開發(fā).北京:國防工業(yè)出版社,2007. [4]EZ-USB FX2 Technical Reference Manual.Cypress Semicondctor,2003. [5]EZ-USB? FX2TMGPIF Primer.Cypress Semiconductor Corporation,2003. [6]Complete 12-Bit 1.5/3.0/10.0 MSPS Monolithic A/D Converters.Analog Devices,2003. [7]3 V/5 V,4/8 Channel High Performance Analog Multiplexers.Analog Devices,1995. [8]32 K/64 K×18 Low Voltage Deep Sync FIFOs.Cypress Semiconductor Corporation,2008.3 數(shù)據(jù)上傳與處理的實現(xiàn)
4 結論