1.引言
本文所介紹的數據采集系統是基于ARM的信號處理系統中的一部分,該信號處理系統用于導彈的數字式自動駕駛儀的開發研究中。整個系統由信號放大、信號濾波、信號采樣、高速數字信號處理等部分組成。其中,數據采集系統是一個重要的環節,它的高速性和準確性直接影響到整個信號處理系統的性能。傳統方法是應用CPU通過軟件控制模數轉換,這樣必將頻繁中斷系統的運行從而減弱系統的數據運算能力,數據采集的速度也將受到限制。因此,本文利用可編程邏輯控制器CPLD,由硬件控制模數轉換和數據存儲,從而最大限度地提高系統的信號采集和處理能力。
2.系統總體設計方案
數據采集系統的總體設計方案如圖1所示。基于Verilog HDL設計的自動狀態機由硬件控制A/D轉換以及自動向FIFO中存儲數據,當采樣數據達到要求時,向CPU申請中斷,ARM系統啟動DMA完成數據讀取。待CPU取走數據后,給狀態機一個復位信號,同時對采集到的數據進行高速處理。這期間數據采集不中斷,從而實現連續的實時數據采集和實時數據處理。數據采集系統由A/D芯片AD7656、邏輯控制芯片EPM7128、FIFO芯片CY7C425以及緩沖74LVT245組成,控制邏輯用Verilog HDL語言描述。
3.硬件設計
3.1 A/D轉換芯片
系統的A/D轉換芯片采用AD7656,一個AD7656芯片擁有6個16位逐次漸進模數轉換器,在5V電壓供電下采樣率為250kSPS。芯片中的采樣保持放大器最大處理輸入頻率為8MHz。轉換過程和數據獲取由CONVST信號和內部時鐘控制,三個CONVST管腳可以控制三對獨立的模數轉換器同時采樣。AD7656根據內部參考電壓2.5V可提供±10V或者±5V的雙極性模擬量輸入范圍,或者根據外部參考電壓提供不同范圍的雙極性模擬量輸入信號。
AD7656的內部轉換時序圖如圖2所示。將三個CONVST管腳連接在一起后,即可對六個A/D轉換器同時進行采樣。CONVST的上升沿觸發A/D轉換,轉換時間為3μs。轉換過程中,BUSY信號保持高電平不變,直到轉換結束時,BUSY信號由高變低,系統進入跟蹤模式,轉換結果存于輸出數據寄存器中。當片選信號 保持低電平不變時,連續六個讀信號 低電平能夠依次讀出六個A/D轉換器的轉換數據。
3.2 FIFO存儲器
系統的FIFO存儲器采用CY7C425,它是CYPRESS公司采用CMOS工藝制造的1K×9位可以實現先進先出算法,可以進行異步讀寫操作的雙端口存儲器。它提供全空 、全滿 、半滿 狀態標志,用以防止數據溢出或不足。擴展邏輯電路允許多片FIFO進行數據寬度和存儲深度的擴展而不會增加額外的時間延遲。
CY7C425的異步讀寫時序圖如圖3所示。當寫信號 為低電平時發生寫操作,A/D轉換的結果通過寫操作不斷存入FIFO中,存入一定數量的數據后,再通過讀信號 將FIFO中的數據依次讀入CPU中。采用兩片CY7C425擴展為16位1024字的高速異步FIFO存儲器,數據處理速度達到50MHz,可以實現數據的高速寫入和高速讀出。
3.3 狀態機模塊
狀態機FSM完成自動A/D轉換和數據存儲,控制芯片是EPM7128。此狀態機由系統時鐘驅動,控制A/D轉換器的轉換、FIFO的復位及寫數,并產生中斷信號通知CPU讀取數據。由于系統使用了兩片AD7656,而不同芯片的個體會有差別,同一器件也會有溫漂、時漂還有老化的問題,如果采用中斷方式取數,很有可能會引起各個通道A/D采樣率不一致并且單個通道A/D工作時采樣率也不恒定。因此,可以不管BUSY信號,只需要把各段的時序留夠足夠的裕量就可以了,譬如AD7656的轉換時間是3μs,那么,只要狀態機保持CONVST至少3μs的高電平,這樣就可以完全確定A/D轉換的結束。這樣控制器就可以不需要檢測A/D的BUSY信號,同時也能很準確地保證采樣速率了。
系統復位時,轉換信號CONVST及FIFO復位信號MR保持低電平不變,此時不進行數據采集。系統復位后,CONVST上升沿觸發轉換開始,系統進入采樣保持階段。3μs后,待A/D轉換結束,連續產生12個A/D讀脈沖,可以依次讀出12個通道的轉換結果。取數的同時產生FIFO的寫脈沖,可將讀出的數據連續寫入FIFO中。為利于CPU中處理軟件的編寫,CPLD中設置了一個計數器,可以進行32(2的5次方)次采樣。最后發送中斷信號到CPU,CPU通過DMA方式將數據全部讀入內部存儲器,數字濾波通過取和以后右移5位即可進行。
4.Verilog HDL描述
電子系統設計中一般遵循自上而下的設計思路,對系統進行設計、描述與仿真。考慮到模塊的通用性、移植性,常常使用硬件描述語言來描述數字系統,如Verilog HDL、VHDL、AHDL語言等。其中Verilog HDL語言具有結構清晰、文法簡明、功能強大、高速模擬和多庫支持等優點,被近90%的半導體公司使用,成為一種強大的設計工具。
4.1 用Verilog HDL語言描述自動狀態機
自動狀態機有兩個輸入信號和七個輸出信號。輸入信號中CLK由CPU的輸出頻率提供,產生50MHz的時鐘頻率,RST由CPU提供,負責復位狀態機。CONVST產生A/D轉換器的轉換啟動信號;ADC_CS、ADC1_RD、 ADC2_RD分別是兩個A/D轉換器的片選信號以及讀信號;FIFO_WR和 FIFO_MR控制FIFO的讀數和復位;中斷信號INT通知CPU在DMA方式下取數。程序如下:
module fsm(RST, CLK, CONVST, ADC_CS, ADC1_RD, ADC2_RD, FIFO_WR, FIFO_MR, INT);
input RST, CLK;
output CONVST, ADC_CS, ADC1_RD, ADC2_RD, FIFO_WR, FIFO_MR, INT;
reg CONVST, ADC_CS, ADC1_RD, ADC2_RD, FIFO_WR, FIFO_MR, INT;
parameter ST0=8‘b00000000, ST150=8’b10010110, ST152=8‘b10011000, ST153=8’b10011001,
ST155=8‘b10011011, ST156=8’b10011100, ST158=8‘b10011110, ST159=8’b10011111,
ST161=8‘b10100001, ST162=8’b10100010, ST164=8‘b10100100, ST165=8’b10100101,
ST167=8‘b10100111, ST168=8’b10101000, ST170=8‘b10101010, ST171=8’b10101011,
ST173=8‘b10101101, ST174=8’b10101110, ST176=8‘b10110000, ST177=8’b10110001,
ST179=8‘b10110011, ST180=8’b10110100, ST182=8‘b10110110, ST183=8’b10110111,
ST185=8‘b10111001;
reg[7:0] COUNTER;
reg[4:0] CN;
always @(posedge CLK)
if(!RST)
begin COUNTER《=0; ADC_CS《=1; ADC1_RD《=1; ADC2_RD《=1;
FIFO_WR《=1; FIFO_MR《=0; CONVST《=0; CN《=0;INT《=0; end
else if(CN》=5’b11111)
begin INT《=1; COUNTER《=0; ADC_CS《=1; ADC1_RD《=1;
ADC2_RD《=1; FIFO_WR《=1; FIFO_MR《=0; CONVST《=0; end
else
begin
if(COUNTER《8‘b11001100)
COUNTER《=COUNTER+8’b00000001;
else
begin CN《=CN+5‘b00001; COUNTER《=0; end
case(COUNTER)
ST0: begin CONVST《=1; FIFO_MR《=1; end
ST150: begin ADC_CS《=0; ADC1_RD《=0; FIFO_WR《=0; end
ST152: begin FIFO_WR《=1; ADC1_RD《=1; end
ST153: begin FIFO_WR《=0; ADC1_RD《=0; end
ST155: begin FIFO_WR《=1; ADC1_RD《=1; end
ST156: begin FIFO_WR《=0; ADC1_RD《=0; end
ST158: begin FIFO_WR《=1; ADC1_RD《=1; end
ST159: begin FIFO_WR《=0; ADC1_RD《=0; end
ST161: begin FIFO_WR《=1; ADC1_RD《=1; end
ST162: begin FIFO_WR《=0; ADC1_RD《=0; end
ST164: begin FIFO_WR《=1; ADC1_RD《=1; end
ST165: begin FIFO_WR《=0; ADC1_RD《=0; end
ST167: begin FIFO_WR《=1; ADC1_RD《=1; end
ST168: begin FIFO_WR《=0; ADC2_RD《=0; end
ST170: begin FIFO_WR《=1; ADC2_RD《=1; end
ST171: begin FIFO_WR《=0; ADC2_RD《=0; end
ST173: begin FIFO_WR《=1; ADC2_RD《=1; end
ST174: begin FIFO_WR《=0; ADC2_RD《=0; end
ST176: begin FIFO_WR《=1; ADC2_RD《=1; end
ST177: begin FIFO_WR《=0; ADC2_RD《=0; end
ST179: begin FIFO_WR《=1; ADC2_RD《=1; end
ST180: begin FIFO_WR《=0; ADC2_RD《=0; end
ST182: begin FIFO_WR《=1; ADC2_RD《=1; end
ST183: begin FIFO_WR《=0; ADC2_RD《=0; end
ST185: begin FIFO_WR《=1; ADC2_RD《=1; ADC_CS《=1; CONVST《=0; end
endcase
end
endmodule
4.2 仿真圖形
圖4為狀態機復位時的仿真圖形。由圖可以看出,當按下復位鍵時,A/D轉換信號CONVST保持為低電平,A/D轉換器不采集數據。同時,FIFO復位信號FIFO_MR也保持低電平不變,可將FIFO中的數據清空。當復位信號變高后,在外部時鐘CLK的第一個上升沿,CONVST電平升高,開始A/D轉換(存在時延)。
圖5為狀態機從A/D轉換器將數據讀入FIFO中的時序圖。由圖可知,3μs(A/D轉換器的轉換時間)后,分別通過對ADC_CS、ADC1_RD、ADC2_RD、FIFO_WR信號的控制,實現將12路通道的數據依次讀入FIFO中的操作。
5.結束語
本文提出的自動數據采集系統采用CPLD芯片,用硬件描述語言設計自動狀態機,實現硬件控制數據采集和存儲。目前采集系統應用于開發數字式自動駕駛儀的ARM實驗應用板上,省去了ARM監控A/D芯片的時間,使信號處理系統能夠高效地工作。通過調整狀態機中的采樣次數或采用轉換速率更高的A/D芯片可進一步提高系統的數據采集速度。
責任編輯:gt
評論
查看更多