傳統的虛擬儀器由一塊基于PCI總線的直接利用A/D和D/A芯片構成的數據采集板卡和相應的軟件組成,但隨著計算機網絡技術的迅速發展,越來越多的數據需要由計算機處理、存儲和傳輸,由于通用計算機本身的特點,它們通常不適于進行實時性要求很高的數字信號處理,因此這種虛擬儀器不能滿足現實應用對數據實時處理能力、數據傳輸能力以及數據管理能力所提出的越來越高的要求。 與此同時,隨著數字信號處理器(DSP)性價比的不斷提高,其應用領域飛速擴展,從而使基于PCI總線和DSP技術的新型虛擬儀器應運而生。 系統的基本框架 筆者設計的基于PCI總線和DSP技術的虛擬儀器的基本框架如圖1所示。 整個系統是基于模塊化的設計理念來實現的,該系統的開發主要有以下幾步:1)設計一塊基于PCI總線的母板,該板上有自己定義的總線接插件,以及整個系統的邏輯控制單元和數據緩沖存儲芯片;2)設計數據采集模塊和數據輸出模塊;3)開發PCI母板的Windows驅動程序,使PC能正常識別該板卡并分配所需系統資源;4)開發系統下位機DSP數據采集模塊的程序,實現對模擬信號的采集以及數據的FFT算法處理;5)開發系統上位機PC的控制軟件,實現數據波形顯示、端口配置、內存讀寫以及對儀器的控制功能。 圖1 虛擬儀器系統的基本框架 系統的硬件設計 由圖1可見,本虛擬儀器系統首先要有一塊基于PCI總線的母板,該板上有自定義的總線接插件,可以插接其他基于該總線的數據采集DSP子板,此外,該板上還有整個系統的邏輯控制單元以及數據緩沖存儲芯片;其他各個功能模塊都基于該擴展板來實現;各個模塊之間數據的存儲和傳輸可以通過雙端口RAM來實現,我們選用Cypress公司8K×16b高速雙口RAM芯片CY7C025V,因為它的時序與DSP時序相配,特別適用于DSP與PC之間大量數據的高速雙向傳送。 1 PCI接口的實現 在PCI總線適配卡的設計中,采用專用的PCI接口芯片來實現PCI接口,設計者不需要將精力投入到復雜的PCI接口功能設計和驗證測試上。專用的接口芯片可以實現完整的PCI主控模塊和目標接口功能,將復雜的PCI接口轉換為簡單的接口。在本設計中選用PLX公司通用接口芯片PCI9052,它包含讀和寫FIFO,以便將32bit、33MHz的PCI總線與總線寬度有可能比它窄或總線速度有可能比它慢的局部總線進行匹配。PCI9052有最大5個局部地址空間和4個片選支持,圖2為PCI9052的信號接口模塊圖。 圖2 PCI9052信號接口 PCI分配資源的數據來源是通過外擴的EEPROM來實現的,根據PCI9052接口芯片的要求,選用Microchip公司支持三線串行接口的EEPROM。在電源上電期間,PCI的RST#信號復位PCI9052內部寄存器。而PCI9052也輸出局部復位信號(LRESET#)并檢查是否存在外部EEPROM,如果存在并且第一個16位字不是FFFFH,則PCI9052加載EEPROM中的數據到PCI9052的內部寄存器中;否則默認值被使用。PCI9052配置寄存器僅能由EEPROM或PCI主機處理器寫。在EEPROM初始化期間,PCI9052用RETRY信號來響應PCI目標訪問。圖3給出了本設計中EEPROM(93CS46)和PCI9052的連接電路圖。 圖3 EEPROM和PCI9052的連接電路圖 EEPROM中配置的主要信息包括:設備識別號、供應商代號、四個局部總線空間的大小以及空間的基地址等。可以事先通過編程器將配置信息寫入配置EEPROM中,也可在系統啟動后用PLXMon對EEPROM進行操作。 2 系統控制邏輯的實現 由于CPLD器件掉電后可保存芯片內部程序,無須煩瑣的重復燒寫,因此本設計采用Altera公司的CPLD器件,作為PCI接口芯片及存儲芯片的邏輯控制。考慮到需要使用局部地址/數據各16根線,控制信號線22根,還要為數據采集電路預留些I/O引腳,最后決定采用144腳TQFP封裝的EPM3128。 在本系統中,EPM3128的主要功能是實現PCI Local端的地址譯碼、DSPLocal端對各個DRAM控制的地址譯碼、對板上功能選擇開關的狀態進行譯碼,從而實現對系統功能的配置以及對各芯片的控制信號進行邏輯譯碼。所有的譯碼工作都通過VHDL編程語言來實現。綜合和編譯工作是在Altera公司的QuartusII集成編譯環境中完成的。 3 數據采集電路的實現 數據采集電路是本系統的關鍵,數據采集電路設計的好壞將直接影響到本系統的性能。為了實現系統功能的可配置和可擴展性,數據采集模塊設計成可配置的模式插接在總線接口母板上,實現對外部信號的數據采集。數據采集模塊由高速16位adc(LTC1608)和高性能DSP芯片(TMS320C6713)構成,LTC1608的并行數字接口可方便地與包括TMS320C6713在內的多種DSP通信,并可連接3V或5V邏輯。 由于對采集精度的高要求,在信號進入ADC之前,需要對模擬信號進行一系列的處理以保證信號的可靠性:模擬信號首先經過電壓跟隨運算放大器增加輸入阻抗,再經過電壓比例放大和一階RC低通濾波,最后輸入到ADC。 圖4 輸入信號處理電路原理圖 圖5 LTC1608 A/D芯片引腳連接電路圖 具體的信號處理電路如圖4和圖5所示。 系統軟件設計 正如圖1所示,硬件設計完成后,要使整個系統工作還需要軟件的支持,這些軟件包括PCI設備驅動程序、數據處理算法程序和系統控制軟件。 1 設備驅動程序設計 設備驅動程序不是單獨存在的,而是相關操作系統內核的一部分,所以需要對操作系統有一定的了解。Windows2000操作系統是32位的多任務非實時操作系統。對整個系統底層的操作和用戶與硬件打交道的權力被屏蔽,必須通過操作系統統一管理設備驅動程序和其他內核訪問來實現應用軟件對硬件的訪問。在設計和使用PCI設備時,經常要在軟件中對系統資源進行訪問,因此只有編制設備驅動程序才能實現對PCI總線設備的完全訪問。 應用程序對設備I/O進行Win32調用,這個調用由I/O系統服務接收。I/O管理器從這個請求構造一個合適的I/O請求包(IRP)。在最簡單的情況下,I/O管理器只是把IRP傳遞給一個設備驅動程序,這個驅動程序與硬件打交道,并完成IRP的處理。I/O管理器把數據和結果返回給Win32和用戶應用程序。而一個IRP由一個分層的設備驅動程序棧處理是很常見的。每個驅動程序把該請求劃分成更簡單的請求。最高層的驅動程序(如文件系統驅動程序)知道文件如何在磁盤上表示,但不知道如何得到數據的細節;中間層次的驅動程序進一步處理請求;最低層的驅動程序與硬件實際打交道。 本設計選擇的硬件驅動程序開發工具是Compuware公司提供的一個驅動程序集成開發包(DriverStudio)。利用其中的DriverWorks工具可以生成一個PCI總線驅動框架,然后在WDM中實現輸入輸出處理,可以用KIoRange類來實現。 在驅動程序框架生成的過程中,我們可以通過向導聲明驅動程序中將要使用的資源;通過調用KIoRange類的Initialize()函數,可以對資源進行初始化(映射PCI局部空間);應用層通過DeviceIoControl函數向驅動程序發命令來調用KIoRange的成員函數實現應用層對I/O空間的處理。開發PCI母板的windows驅動程序,就是使PC能正常識別該板卡并分配所需的系統資源。 2 FFT算法的實現 系統需要針對DSP數據采集模塊,開發并實現對模擬信號的采集以及對數據進行FFT(快速傅立葉變換)算法處理的程序。 作為一般的情況,設:x(n)和X(k)都是復數,因為從實際計算過程看,實數和復數沒有區別,唯一不同的是:實數的虛部為零,表達式簡單些。而運算過程所有的計算都是對實數進行的,如果信號或頻譜是復數,就把最后計算的結果再組合成為復數分量。FFT運算的基本單元是“蝶形單元”,其蝶形運算的基本形式如下式所示: 所有蝶形單元的運算可統一表示為 (1) 式(1)中,A和B是蝶形單元的輸入,C和D是輸出。同時將表示為 (2) 式(1)可以表示為虛部和實部形式,帶下標R的字符表示實部,帶下標I的為虛部,即 (3) 根據算法原理和上面的說明,用C語言編制出一個按時間抽取的FFT算法程序,結構上分為幾個部分:首先是碼位的倒置,然后根據計算的點數確定蝶形運算的級數,接著是逐級進行蝶形運算,完成FFT運算。 3 應用控制軟件的設計 圖6 控制軟件功能模塊框圖 整個應用控制軟件的功能模塊框圖如圖6所示。 基于以上的控制功能模塊圖,選擇使用VC++來實現本系統應用軟件的人機界面以及對系統的控制功能。VC++的開發環境集編輯、編譯、連接、調試、向導等多項功能于一體,并且提供了目前成為業界標準的MFC(MicrosoftApplication Foundation Classes)類庫。 我們開發的虛擬儀器系統PC端控制軟件可實現數據波形顯示、端口配置、內存讀寫以及對儀器的控制功能,其主界面如圖7所示。 圖7 程序主界面 結語 本設計實現了基于DSP技術與PCI總線的數據采集處理卡,開發了虛擬式實時多通道FFT頻譜分析儀的應用程序以及主機監控界面。通過在數據采集卡上集成DSP,使得該卡不但能實時不掉點地采集外界信號,而且能在卡上實現數字濾波、FFT頻譜分析。 整個系統經過綜合調試和嚴格測試后,達到設計需求,業已投入實際使用。 |