1 引言 數據采集系統是計算機測控系統中不可或缺的組成部分,是影響測控系統的精度等性能 指標的關(guān)鍵因素之一。隨著(zhù)新的器件不斷推出,新的技術(shù)不斷應用,數據采集技術(shù)及其相關(guān) 電路得到了迅速的發(fā)展。如何提供更高的采樣速率,更高的精確度和更大的靈活性是當前數 據采集系統需要解決的問(wèn)題。FPGA 的迅猛發(fā)展,使FPGA 器件性能得到了不斷的提升,已 逐步取代單片機、DSP,在數據采集系統中的得到了廣泛的應用。 本系統采集的對象是微應變傳感器,由于微應變傳感器自身的制造誤差、貼片產(chǎn)生的初 始應力、結構安裝時(shí)產(chǎn)生的附加應力等,都會(huì )產(chǎn)生一個(gè)比較大的零點(diǎn),可能超出A/D 芯片 的量程范圍。若這個(gè)零點(diǎn)過(guò)大,會(huì )使得信號放大器、ADC 的輸出出現飽和現象,使數據采 集無(wú)法正常進(jìn)行。通常對零點(diǎn)的修正有硬件與軟件兩種方法。如果只用軟件測量校正的辦法 無(wú)法解決ADC 芯片的飽和問(wèn)題,只用硬件解決的話(huà)需要的硬件成本較高。因此如何準確的 測量微應變信號的零點(diǎn),是本系統需要解決的關(guān)鍵問(wèn)題。 2 數據采集系統的設計方案 本文設計的數據采集系統可以實(shí)現數據的采集、處理和存儲功能。整個(gè)系統主要由 Atmel 公司的AT91RM9200 微處理器芯片, Xilinx 公司的FPGA 芯片XC3S200AN, TI 公司的 ADC 芯片TLC2551、DAC 芯片TLV5* 及信號調理電路等外圍電路組成。系統硬件簡(jiǎn)圖 如圖1 所示。ARM 輸出控制信號,控制FPGA。當ARM 啟動(dòng)FPGA 開(kāi)始數據采集后,FPGA 輸出通道地址,經(jīng)過(guò)32 路模擬通道多路開(kāi)關(guān),選擇某一通道,FPGA 控制DAC 芯片輸出模 擬量對這一通道的輸入量進(jìn)行粗調零。然后由FPGA 控制ADC 芯片進(jìn)行模數轉換。將轉換 得到的12 位數字量串行輸送給FPGA。在FPGA 內部將12 位數據由串行改為并行,進(jìn)行細 調零等相應的數據處理,然后加上4 位標明通道的數據送入FIFO 中。當FIFO 達到半滿(mǎn)時(shí), ARM 將數據讀出進(jìn)行相應的處理,整個(gè)數據采集的過(guò)程完成。 3 FPGA 的功能模塊 FPGA使用的是Xilinx 公司Spartan3AN 系列的XC3S200AN芯片,片內集成了4M Flash, 288K 的塊狀RAM,集成密度高,可以將程序直接下載在片內ROM 上,無(wú)需片外ROM, 節省電路板面積。FPGA 在整個(gè)系統中負責數字信號的采集控制、處理,控制信號和時(shí)序信 號的產(chǎn)生,數據的緩存和異步輸出,在整個(gè)數據采集系統中起到至關(guān)重要的作用。根據FPGA 的功能,將其模塊化為數據處理模塊、時(shí)序控制模塊,通道控制模塊、A/D 和D/A 芯片控 制模塊、異步FIFO 緩存模塊、接口和總線(xiàn)模塊,具體模塊結構如圖2 所示。 (1)接口總線(xiàn)模塊 此模塊負責 FPGA 和CPU 的通信以及內部各模塊之間的通信。CPU 和FPGA 之間通過(guò) 16 位雙向數據總線(xiàn)和地址線(xiàn)通信,CPU 向FPGA 輸入讀、寫(xiě)、復位、開(kāi)始等控制信號。FPGA 內部各模塊設計成可由CPU 讀寫(xiě)的模塊,直接與內部數據總線(xiàn)連接。這樣ARM 可以通過(guò) 向各模塊寫(xiě)入數值實(shí)時(shí)的改變采樣的各參數,并通過(guò)讀各模塊的參數實(shí)時(shí)監控系統的運行狀 態(tài)。由于內部各模塊眾多,CPU 與FPGA 之間信息交互頻繁,為了簡(jiǎn)化時(shí)序控制,避免各 模塊之間的競爭、冒險,在FPGA 內部將16 位雙向數據總線(xiàn)獨立為16 位讀總線(xiàn)(Readbus) 和16 位寫(xiě)總線(xiàn)(Writebus)。當CPU 輸入寫(xiě)信號有效時(shí),FPGA 內部寫(xiě)總線(xiàn)從與ARM 通信 的雙向數據線(xiàn)讀數,將數據送給內部各模塊;當輸入讀信號有效時(shí),雙向數據總線(xiàn)從內部讀 總線(xiàn)讀數,向外輸出給CPU,當讀信號無(wú)效時(shí),內部讀總線(xiàn)為高阻狀態(tài)。內部各模塊都將 可讀的參數值輸出到多選一數據選擇器,讀總線(xiàn)根據地址譯碼讀出某個(gè)參數值送給雙向數據 總線(xiàn)輸出。 (2) 時(shí)序控制模塊 此模塊控制通道采樣頻率和內部的時(shí)序邏輯,有兩個(gè)主要信號,掃描時(shí)鐘(scan_clock) 和采樣時(shí)鐘(sample_clock),都是由FPGA 主時(shí)鐘分頻而得。scan_clock 為高電平時(shí),對各 通道信號采樣保持,ADC 準備轉換。當sample_clock 上升沿到來(lái)時(shí),ADC 開(kāi)始轉換某一通 道的信號,sample_clock 的下一上升沿到來(lái)時(shí),ADC 轉換下一個(gè)通道的信號。通過(guò)改寫(xiě) scan_clock 和sample_clock 可以改變采樣的頻率。由于通道數也是可以修改的,當掃描時(shí)鐘 和采樣時(shí)鐘未變,采樣通道數由25 變?yōu)?2 個(gè)時(shí),scan_clock 高電平有效時(shí)間被浪費。為了 解決這個(gè)問(wèn)題,在設定的通道數轉換完成后,就將掃描時(shí)鐘置為零,節省了時(shí)間。如圖3 所示,當采樣通道數設置為12 時(shí),采樣完第12 個(gè)通道后就將scan_clock 置為零。 (3) 通道控制模塊 此模塊控制通道間的轉換,輸出當前采樣通道號。內部有通道計數器,計算當前的通道 號。為了減少每一通道所用時(shí)間,當A/D 還未結束時(shí),就提前給通道計數器信號EOC 進(jìn)行 通道轉換,AD 轉換和通道轉換并行進(jìn)行,當AD 轉換完成時(shí),通道控制模塊也已準備好當 前通道號。通過(guò)寫(xiě)數據總線(xiàn)向此模塊寫(xiě)通道控制字可以改變需要采樣的通道個(gè)數,采樣的起 始通道。 (4) 控制AD 和控制DA 模塊 此模塊控制 AD 和DA 芯片,產(chǎn)生使AD 和DA 芯片工作的控制信號和時(shí)序邏輯。由于 需要采樣的通道數多,達25 個(gè),為節省印制電路板面積和成本,采用單片AD 芯片加多路 模擬開(kāi)關(guān)進(jìn)行模擬數字量的轉換。AD 芯片TLC2551,是TI(Texas Instrument)公司生產(chǎn)的 精度為12 位的,單通道采樣、低功耗芯片。其工作時(shí)序如圖4 所示。時(shí)鐘信號SCLK、控 制信號CS 都由FPGA 產(chǎn)生,時(shí)鐘主頻為19.2M,采樣一次需要44 個(gè)時(shí)鐘周期。 DA 芯片采用TI 公司生產(chǎn)的TLV5*,它是一個(gè)帶參考電壓源的8 位DAC,數字接口為SPI 接口。FPGA 控制DA 芯片,使DAC 的輸出與ADC 輸入模擬電壓相加,抵消輸入的 零點(diǎn),產(chǎn)生0-4.096V 有效輸出送到ADC 輸入端進(jìn)行轉換。TLV5* 的工作時(shí)序如圖5 所示。 時(shí)鐘信號SCLK 和控制信號CS,信號FS 由FPGA 產(chǎn)生,每次轉換需要16 個(gè)時(shí)鐘周期。 (5) 數據處理模塊 由ADC 芯片輸出的12 位串行數據,經(jīng)過(guò)此模塊,轉化為12 位并行數據,然后完成數 據的細調零。細調零也由FPGA 完成,在數據處理模塊中有一片分布式可讀寫(xiě)的RAM,里 面存儲了由ARM寫(xiě)入的各通道的零點(diǎn)數據。在每個(gè)通道完成ADC 轉換時(shí),自動(dòng)由零點(diǎn)RAM 中讀出給定通道的零點(diǎn)數據,由FPGA 完成減法運算,完成細調零。 (6) 雙端口異步FIFO 緩存模塊 由于 ARM 和FIFO 的時(shí)鐘不同,ARM 讀速度遠遠大于FPGA 采集數據的速度,因此設 計用FIFO 在A(yíng)RM 和FPGA 間的跨時(shí)鐘域數據傳輸中起緩存的作用。模塊由兩個(gè)深度為8K, 寬度為16 位的異步雙端口FIFO 組成,數據存儲總量為256K。若用FPGA 內部邏輯資源實(shí) 現FIFO,所有邏輯資源將全被耗盡,因此用芯片內部自帶的288K Block Ram 來(lái)實(shí)現。設計 中,采用19.2M 主時(shí)鐘做FIFO 的時(shí)鐘,且為上升沿有效。ARM 的讀信號有時(shí)無(wú)法被時(shí)鐘 上升沿捕捉到,就產(chǎn)生了數據傳輸不可靠的問(wèn)題。為解決這個(gè)問(wèn)題,采用握手協(xié)議將讀信號 延長(cháng)。輸入到FIFO 端口的讀信號一直到時(shí)鐘上升沿有效,才置為低電平,具體如圖6 所示。 需要采集的實(shí)際通道數為 25 個(gè),需用5 位數據標明當前通道值,AD 轉換的有效數據 為12 位,而數據線(xiàn)為16 位,只有四位數據可供通道地址使用。為了完整標示當前的通道值, 根據通道值最低位的奇偶性把數據分別儲存在FIFO0 和FIFO1 中。這樣CPU 從FIFO0 讀出 的數據就是偶數通道的采樣值,從FIFO1 讀出的數據就是奇數通道的采樣值。 4 ARM 程序的編寫(xiě) 編程軟件環(huán)境為 CodeWarrior for ARM Developer Suite,編程語(yǔ)言為C 語(yǔ)言。ARM 程序 主要通過(guò)和FPGA 的通信,控制FPGA 進(jìn)行數據采集,適時(shí)改變FPGA 的各參數,向FPGA RAM 中寫(xiě)入粗調零,細調零的數據,并從FPGA 讀取采樣完的數據進(jìn)行相應的處理。 5 零點(diǎn)的校準 FPGA 有兩片專(zhuān)門(mén)可讀寫(xiě)分布式RAM,一片用來(lái)儲存8 位粗調零的數據,一片儲存12 位細調零的數據,各通道的通道號就是調零數據存儲在RAM 中的地址。DAC 的數據在通 道轉換時(shí),根據當前通道值,從粗調零分布式RAM 中讀出,寫(xiě)到DAC 寄存器中,由FPGA 控制DAC 芯片轉化成模擬量輸出到ADC 芯片的輸入端,與輸入電壓相加實(shí)現粗調零。然 后在FPGA 內部把轉化得到的12 位數據減去存儲在RAM 中的細調零值,所得的數據才是 真正有效的數據。 為了確定某一路微應變信號的零點(diǎn),ARM 首先在通道地址寫(xiě)入數值0x7F,使DAC 輸 出其可輸出電壓的中間值,然后啟動(dòng)ADC 芯片開(kāi)始轉換。此時(shí)的ADC 芯片工作在數據直 通模式,轉換得到的12 位數據不經(jīng)過(guò)數據處理和FIFO,直接由數據總線(xiàn)傳送給ARM。ARM 根據讀得的轉換值,若發(fā)現依然是過(guò)飽和狀態(tài),則加大寫(xiě)入粗調零存儲器的數值,直到讀得 的ADC 數據為正常數值。DAC 模擬量輸出值加ADC 測得的模擬量輸入值既是此通道的零 點(diǎn)值。零點(diǎn)確定后,通過(guò)FPGA 輸出模擬量和FPGA 內部數字量調節的方式,實(shí)現了8 位 DAC 芯片對12 位ADC 芯片零點(diǎn)的校準。 6 結論 本文介紹了一種基于 FPGA 和ARM 的數據采集系統。FPGA 程序全部采用Verilog-HDL 語(yǔ)言自頂向下模塊化編寫(xiě),在Xilinx ISE 集成開(kāi)發(fā)環(huán)境下進(jìn)行編譯和仿真,整個(gè)系統和所有 功能模塊均可在符合條件的FPGA 產(chǎn)品中應用,具有良好的可移植性。已應用在某機載數 據采集儀中,獲得了很好的應用效果。 本文的創(chuàng )新點(diǎn)在于用 FPGA 芯片通過(guò)模擬量調節和數字量調節的方法,用較低的成本 實(shí)現了對微應變數據的零點(diǎn)校準,提高了采集的精度。并且ARM 和FPGA 的交互,實(shí)現了 可由ARM 在線(xiàn)實(shí)時(shí)改寫(xiě)和監控FPGA 中的各項采集參數,無(wú)需對FPGA 芯片重新下載編程, 大大提高了數據采集系統的靈活性。 |