畢業(yè)設計---高速數據采集系統(tǒng)設計_第1頁
已閱讀1頁,還剩27頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  目 錄</b></p><p><b>  1.緒論1</b></p><p>  1.1 課題研究的意義1</p><p>  1.2 數據采集技術的發(fā)展歷程和現狀1</p><p>  1.3 本文的研究內容2</p><p>  1

2、.4 系統(tǒng)設計涉及的理論分析2</p><p><b>  2.系統(tǒng)設計4</b></p><p><b>  2.1方案選擇4</b></p><p><b>  2.2系統(tǒng)框圖5</b></p><p>  3.單元電路設計6</p><p&g

3、t;  3.1信號調理電路6</p><p>  3.2高速A/D模塊7</p><p>  3.3 FPGA模塊設計8</p><p>  3.4MCU模塊設計8</p><p>  3.5數據采集通道總體原理圖9</p><p>  3.6硬件電路總體設計9</p><p>&l

4、t;b>  4.軟件設計10</b></p><p>  4.1 信號采集與存儲控制電路工作原理10</p><p>  4.2 信號采集與存儲控制電路的FPGA實現11</p><p>  4.3 原理圖中的各底層模塊采用VHDL語言編寫12</p><p>  4.3.1三態(tài)緩沖器模塊TS812</p&g

5、t;<p>  4.3.2分頻器模塊fredivid13</p><p>  4.3.3地址鎖存器模塊dlatch814</p><p>  4.3.4地址計數器模塊addrcount15</p><p>  4.3.5雙口RAM模塊lpm_ram_dp16</p><p>  4.4 數據顯示模塊設計18</p

6、><p>  4.4.1 主程序18</p><p>  4.4.2 INT0中斷服務程序19</p><p>  4.4.3 INT1中斷服務程序19</p><p>  4.5軟件仿真20</p><p>  4.5.1三態(tài)緩沖器模塊TS820</p><p>  4.5.2分頻器模塊

7、fredivid20</p><p>  4.5.3地址鎖存器模塊dlatch821</p><p>  4.5.4地址計數器模塊addrcount21</p><p><b>  5.系統(tǒng)調試21</b></p><p>  5.1 單片機子系統(tǒng)調試21</p><p>  5.2 F

8、PGA子系統(tǒng)調試22</p><p>  5.3 高速A/D模塊的調試22</p><p><b>  6 總結22</b></p><p><b>  致謝22</b></p><p><b>  參考文獻23</b></p><p><

9、;b>  附錄25</b></p><p>  高速數據采集系統(tǒng)設計</p><p>  摘要:隨著數字技術的飛速發(fā)展,高速數據采集系統(tǒng)也迅速地得到了廣泛的應用。在生產過程中,應用這一系統(tǒng)可以對生產現場的工藝參數進行采集、監(jiān)視和記錄,為提高生產質量,降低成本提供了信息和手段。在科學研究中,應用數據采集系統(tǒng)可以獲取大量的動態(tài)數據,是研究瞬間物理過程的有力工具,為科學活動提

10、供了重要的手段。而當前我國對高速數據采集系統(tǒng)的研究開發(fā)都處于起步階段,因此,開發(fā)出高速數據采集系統(tǒng)就顯得尤為重要了。本文針對高速數據采集系統(tǒng)中的實時性、采集速率等問題提出了一種結合FPGA與單片機的低成本高速數據采集系統(tǒng)設計方案。該系統(tǒng)以高速SOC單片機C8051F360和FPGA EP2C8T144為核心,運用模塊化設計方法,實現軟硬件設計,具有一定的實用價值。</p><p>  關鍵詞:C8051F360;

11、EP2C8T144;ADC;數據采集;高速</p><p><b>  1.緒論</b></p><p>  1.1 課題研究的意義</p><p>  隨著信息技術的飛速發(fā)展,各種數據的實時采集和處理在現代工業(yè)控制中已成為必不可少的。這就為我們的設計提出了兩個方面的要求:一方面,要求接口簡單靈活且有較高的數據傳輸率;另一方面,由于數據量通常都

12、較大,要求主機能夠對實時數據做出快速響應,并及時進行分析和處理。</p><p>  FPGA與單片機相比,有著頻率高,內部延時小,內部存儲容量大等優(yōu)點,比單片機更適應與高速數據采集的場合。比如在某些高沖擊、高振蕩場合下,需要對沖擊過程的加速度數據進行回收,包括實時采集、存儲以及事后回讀分析。在這樣的環(huán)境下,要求數據回收系統(tǒng)具有采集的高速、實時性;存儲的及時、正確性。FPGA(現場可編程邏輯門陣列)在高速數據采集

13、方面具有單片機和DSP所不具備的優(yōu)點。FPGA所要完成的功能完全由內部可編程硬件電路實現,具有并行執(zhí)行、速度快、多功能、低功耗、可現場反復編程等特點。使用FPGA構成數據采集系統(tǒng)還可以減化外圍控制電路,使系統(tǒng)更加簡潔有效。</p><p>  1.2 數據采集技術的發(fā)展歷程和現狀</p><p>  在數字技術日新月異的今天,數據采集技術的重要性是十分顯著的。它是數字世界和外部物理世界連接

14、的橋梁。而隨著現代工業(yè)和科學技術的發(fā)展,對數據采集技術的要求日益提高,在雷達、聲納、圖像處理、語音識別、通信、信號測試等科研實踐領域中,都需要高精度,高數據率的數據采集系統(tǒng)。它的關鍵技術為高速高精度的ADC技術,高數據率的存儲和緩存技術以及系統(tǒng)高可靠性保證等。</p><p>  通過數據采集技術,科研人員在實驗現場可以根據需要實時記錄原始數據,用于實驗室后期的分析和處理,對工程實踐和理論分析探索具有重大意義。正

15、是由于目前數據采集技術廣泛應用在科研實踐和工業(yè)生產中的各個領域,當前國外對采集技術的研究和發(fā)展比較成熟。按通道數分有單通道的、雙通道的、多通道的(多達上百通道);按采樣率分可從幾kHz到高達幾個GHz;按分辨率分有8位、10位、12位、14位還有16位。在一些高端的示波器,頻譜儀等測試儀器中,其采樣率可達幾個GHz,甚至幾十個GHz。而國內由于發(fā)展時間短,芯片技術等一些方面的限制,目前沒有高水平的采集器出現?,F在從高校到研究所到公司對采

16、集器的需求越來越多,性能要求也越來越高。這種情況給我們研發(fā)和設計高速數據采集系統(tǒng)提供了很多機遇。</p><p>  1.3 本文的研究內容</p><p>  設計一個高速數據采集系統(tǒng),輸入模擬信號為正弦信號,頻率為200kHz,Vp-p小于等于0.5V。每次數據采集以20MHz的固定采樣頻率連續(xù)采集128點數據,采集完畢以后,用LCD模塊回放顯示采集信號波形。該系統(tǒng)具有實時采集、存儲以

17、及傳輸功能。</p><p> ?。?)硬件設計:硬件部分包括FPGA最小系統(tǒng)電路、數據的實時采集電路、數據緩存部分以及與單片機通信接口部分電路等。</p><p> ?。?)軟件設計:通過編寫程序,主要實現實時采集(A/D采樣)功能、數據緩存、與單片機進行通信等功能。</p><p> ?。?)仿真結果及分析:主要是針對實時采集部分、數據緩存部分、與PC機通信部分

18、進行時序仿真和功能仿真,根據仿真結果對設計進行分析。</p><p>  1.4 系統(tǒng)設計涉及的理論分析</p><p><b>  1.4.1采樣理論</b></p><p>  根據奈奎斯特定理,在進行模擬/數字信號的轉換過程中,只有采樣頻率fs大于被采樣信號中最高頻率fmax的2倍時,才能保證數字信號完整地保留了原始信號中的信息,實際應用

19、中必須保證采樣頻率為信號最高頻率的5~10倍。對于高頻信號(f>3MHz),則必須達到10MHz以上的采樣速率。</p><p>  1.4.2模數轉換(ADC)基本原理及常用A/D轉換技術</p><p>  模數轉換器ADC用來把連續(xù)變化的模擬信號轉換為一定格式的數字量。ADC轉換器實際上就是一個編碼器,輸入的模擬量經過信號調理電路,抗混濾波電路進入A/D轉換電路,A/D轉換電路

20、將模擬信號轉換為數字信號送入數據處理系統(tǒng)。A/D轉換部分通常包括采樣和保持,量化和編碼兩個部分組成。</p><p>  (1)采樣和保持:由于被轉換的電壓是一個隨時間不斷地變換的模擬量,也就是,在各個不同的瞬間它的大小是不同的。同時,要把一定幅度的電壓轉換為數字量都需要一定的時間。通常以一定的時間間隔周期地“讀取”輸入信號的大小,并轉換為與其大小對應的數字量。這個過程被稱為采樣。采樣定理告訴我們,一個頻譜有限的

21、模擬信號,其采樣頻率必須至少大于等于模擬信號最高有效頻率分量的兩倍,防止出現頻譜的失真。由于采樣脈沖的寬度往往都是很小的,而實現轉換是需要時間的,為使后續(xù)電路能很好的對這個采樣結果進行處理,通常要把采樣值保存下來,直到下一次采樣再更新,這個過程為保持。</p><p>  (2)量化和編碼:通過采樣保持電路,輸入信號雖然已經不是一個平滑的連續(xù)變化的電壓,但它還是一個在某個區(qū)間范圍內任意取值的模擬量。因此,用數字量

22、來表示模擬量時就需要一個類似與四舍五入的過程,即量化。顯然此過程,量化前后的值是不相等的,這個差值為量化誤差。而且量化的等級越細,量化誤差越小。量化后的信號,雖然是一個離散量,但是為了使數字系統(tǒng)可以對其進行傳輸和處理,還必須用若干位二進制代碼來表示量化結果,這個過程就是編碼。</p><p>  AD轉換器的主要技術指標如下:</p><p>  (1)分辯率(Resolution)指數字

23、量變化一個最小量時模擬信號的變化量,定義為滿刻度與n的平方的比值。分辯率又稱精度,通常以數字信號的位數來表示。</p><p>  (2)轉換速率(Conversion Rate)是指完成一次從模擬轉換到數字的AD轉換所需的時間的倒數。積分型AD的轉換時間是毫秒級屬低速AD,逐次比較型AD是微秒級屬中速AD,全并行/串并行型AD可達到納秒級。采樣時間則是另外一個概念,是指兩次轉換的間隔。為了保證轉換的正確完成,采

24、樣速率(Sample Rate)必須小于或等于轉換速率。因此有人習慣上將轉換速率在數值上等同于采樣速率也是可以接受的。常用單位是ksps和Msps,表示每秒采樣千/百萬次。</p><p>  (3)量化誤差(Quantizing Error)由于AD的有限分辯率而引起的誤差,即有限分辯率AD的階梯狀轉移特性曲線與無限分辯率AD(理想AD)的轉移特性曲線(直線)之間的最大偏差。通常是1個或半個最小數字量的模擬變化

25、量,表示為1LSB、1/2LSB。</p><p>  (4)偏移誤差(Offset Error)輸入信號為零時輸出信號不為零的值,可外接電位器調至最小。</p><p>  (5)滿刻度誤差(Full Scale Error)滿度輸出時對應的輸入信號與理想輸入信號值之差。</p><p>  (6)線性度(Linearity)實際轉換器的轉移函數與理想直線的最大偏

26、移,不包括以上三種誤差。</p><p>  1.4.3現場可編程門陣列(FPGA)基礎知識</p><p>  現場可編程門陣列(FiledProgrammable GateArray),簡稱FPGA,是在CPLD的基礎上發(fā)展起來的高性能可編程器件。其集成度很高,密度從數萬門系統(tǒng)到數千萬門系統(tǒng)不等,可以完成及其復雜的時序和組合邏輯電路功能,適用于高速,高密度的高端數字邏輯設計領域。<

27、;/p><p>  FPGA產品一般分為兩種類型,一類是基于乘積項(Product.Term)技術,用電可擦除可編程只讀存儲器(EEPROM)或閃存(Flash)制造,多用于5000門一下的小規(guī)模設計。另一類基于查找表(Look.Up table)技術,用靜態(tài)存取存儲器(SRAM)工藝制造,密度高,觸發(fā)器多,多用于10000 門以上的大規(guī)模設計。采用SRAM工藝制造的FPGA,掉電后數據會消失,因此,調試期間可以用下

28、載電纜配置FPGA器件,調試完成后,需要將數據固化到一個專用的EEPROM中,上電后,由這片配置EEPROM先對FPGA加載數據,十幾個毫秒后,FPGA就可正常工作。</p><p>  FPGA的基本組成部分有可編程輸入輸出單元,基本可編程邏輯單元,嵌入式RAM,豐富的布線資源,底層嵌入功能單元,內嵌專用硬核等。</p><p>  (1)可編程輸入/輸出單元</p>&l

29、t;p>  輸入輸出單元(Input/Output)簡稱YO單元,它們是芯片與外界電路的接口部分,完成不同的電氣特性下對輸入/輸出信號的驅動和匹配需求。為了使FPGA有更靈活的應用,目前大多數FPGA的I/O單元被設計為可編程模式,即通過軟件的靈活配置,可以適配不同的電氣標準與YO物理特性;可以調整匹配阻抗特性,上下拉電阻;可以調整輸出驅動電流的大小等。</p><p>  (2)基本可編程邏輯單元<

30、/p><p>  基本可編程邏輯單元是可編程邏輯的主體,可以根據設計靈活的改變其內部連接和配置,完成不同的邏輯功能。FPGA一般是基于SRAM工藝的,其基本可編程邏輯單元幾乎都是由查找表(LUT,Look-Up table)和寄存器(Register)組成的。查找表一般完成純組合邏輯功能。組合邏輯的輸入作為地址線連接到查找表,查找表中已經事先寫入了所有可能的邏輯結果,通過地址查找到相應的邏輯。寄存器用于完成同步時序邏

31、輯設計。</p><p><b>  (3)嵌入式RAM</b></p><p>  目前大多數FPGA內部都內嵌了塊RAM(Block RAM)。FPGA內部嵌入可編程RAM模塊,大大的擴展了FPGA的應用范圍和使用靈活性。FPGA內部的RAM可以靈活配置為單端口RAM,雙端口RAM,FIFO等常用存儲結構。通過對RAM賦予初值,還可以實現ROM的功能。</p

32、><p>  (4)豐富的布線資源</p><p>  布線資源連通FPGA內部所有單元,連線的長度和工藝決定著信號在連線上的驅動能力和傳輸速度。FPGA內部有著非常豐富的布線資源,這些布線資源根據工藝,長度,寬度和分布位置的不同而被劃分為不同的等級。有一些是全局性的布線資源,用于完成器件內部的全局時鐘和全局復位/置位的布線;一些叫做長線資源,用作完成器件Bank(分區(qū))間的一些高速信號和一些

33、第二全局時鐘信號的布線;還有一些叫做短線資源,用以完成基本邏輯單元之間的邏輯互聯和布線等。在實現過程中,設計者一般不用直接選擇布線資源,而是由布局布線器自動根據輸入的邏輯網表的拓撲結構和約束條件選擇可用的布線資源連通所用的底層單元模塊,所以往往容易比忽略。其實布線資源的優(yōu)化與使用和設計的實現結果有直接關系。</p><p>  (5)底層嵌入功能單元</p><p>  隨著FPGA的發(fā)展

34、,PLL,DLL,DSP,CPU等模塊越來越多的被嵌入到FPGA的內部,以滿足不同場合的需要。</p><p><b>  (6)內嵌專用硬核</b></p><p>  這里的內嵌專用硬核與前面的“底層嵌入單元”是有區(qū)別的,這里講的內嵌專用硬核主要是指那些通用性相對較弱,不是所有FPGA器件都包含硬核。</p><p>  FPGA的主要器件

35、供應商有Xilinx,Altera,Lattic,Actel和Atmel等。</p><p><b>  2.系統(tǒng)設計</b></p><p><b>  2.1方案選擇</b></p><p>  隨著數據采集對速度性能指標越來越高,高速數據采集系統(tǒng)在自動控制、電氣測量、地質物探、航空航天等工程實踐中得到了十分廣泛的應用

36、。高速數據采集系統(tǒng)一般分為數據采集和數據處理兩部分。在數據采集時,必須以很高的速度采集數據,但在數據處理時并不需要以同樣的速度來進行。因此,高速數據采集需要有一個數據緩存單元,現將采集的數據有效地存儲,然后根據系統(tǒng)需求進行數據處理。</p><p>  傳統(tǒng)的數據采集系統(tǒng)通常采用單片機直接控制A/D轉換器完成數據采集。用單片機控制A/D轉換器,一般要通過啟動A/D轉換、讀取A/D轉換值、將數據存入存儲器、修改存儲

37、器地址指針、判斷數據采集是否完成等過程。從本質上來說,基于單片機的數據采集系統(tǒng)是通過軟件來實現特定功能的。在許多情況下,采用軟件解決方案其速度限制是很難克服的。MCS-51單片機大多數指令的執(zhí)行時間需要1~2個機器周期,完成一次A/D轉換大約需要幾十微秒。即使對于單片機機器周期、時鐘頻率可達100MHz的C8051F360單片機,如果用來控制高速A/D轉換器,也很難達到幾MHz以上的采樣速率。</p><p> 

38、 通常構成高速緩存的方案有三種:第一種是高速SRAM切換方式。高速SRAM只有一組數據、地址和控制總線,可通過三態(tài)緩沖門分別接到A/D轉換器和單片機上。但A/D采樣時,SRAM由三態(tài)門切換到A/D轉換器一側,以使采樣數據寫入其中。當A/D采樣結束后,SRAM再由三態(tài)門切換到單片機一側進行讀寫。這種方式下的優(yōu)點是SRAM可隨機存取,同時較大容量的高速SRAM有現成的產品可供選擇,但硬件電路較復雜。第二種是FIFO(先進先出)方式。FIFO

39、存儲器就像數據管道一樣,數據從管道的一頭流入,從另一頭流出,先進入的數據先流出。FIFO具有兩套數據線而無地址線,可在其一端寫操作而在另一端讀操作,數據在其中順序移動,因而能夠達到很高的傳輸速度和效率。第三種是雙口RAM方式。雙口RAM具有兩組獨立的數據、地址和控制總線,因而可從兩個端口同時讀寫而互不干擾,并可將采樣數據從一個端口寫入,而由單片機從另一個端口讀出。雙口RAM也能達到很高的傳輸速度,并且具有隨機存取的優(yōu)點。</p&g

40、t;<p>  可編程邏輯器件的應用,為了實現高速數據采集提供了一種理想的途徑。利用可編程邏輯器件高速性能和本身集成的幾萬個邏輯門和嵌入式存儲器塊,把數據采集系統(tǒng)中的數據緩存、地址發(fā)生器、控制等電路全部集成進一片可編程邏輯器件芯片中,大大減少了系統(tǒng)的體積,降低了成本,提高了可靠性。同時,可編程邏輯器件實現邏輯重構,而且可實現在系統(tǒng)編程以及有眾多功能強大的EDA軟件的支持,使得系統(tǒng)具有升級容易、開發(fā)周期短等優(yōu)點。</p

41、><p>  由于本設計的高速采集系統(tǒng),采樣頻率要求達到20MHz,同時要求采集的信號在LCD模塊上顯示模型,故采用單片機和FPGA相結合的設計方案。模擬信號經過調理以后送高速A/D轉換器,由FPGA完成高速A/D轉換器的控制和數據存儲,單片機從FPGA存儲器中讀取數據,經處理后在LCD上顯示波形。</p><p><b>  2.2系統(tǒng)框圖</b></p>

42、<p>  高速數據采集系統(tǒng)采用單片機和FPGA相結合的設計方案。系統(tǒng)框圖如圖2.2所示。模擬信號經過調理后送高速A/D轉換器,由FPGA內部的控制邏輯實現對高速A/D轉換器的控制和數據存儲,單片機通過系統(tǒng)總線實現與FPGA的接口,通過該接口獲取原始數據,然后通過算法完成對數據的處理及應用。整個系統(tǒng)由信號調理電路、A/D轉換器、FPGA模塊、MCU模塊、鍵盤及LCD顯示模塊等組成。數據采集系統(tǒng)首先對采集的信號進行前端處理,如

43、信號放大、濾波、直流電平位移等預處理,以滿足A/D轉換器對模擬信號的要求。FPGA模塊主要實現對高速ADC的控制及數據存儲,單片機通過與FPGA器件的數據交換獲得采集到數字信息,再進行相關的處理,并通過LCD顯示及鍵盤接口實現較靈活的人機交換。</p><p>  圖2.2 高速數據采集系統(tǒng)框圖 </p><p><b>  3.單元電路設計</b></p>

44、;<p><b>  3.1信號調理電路</b></p><p>  在數據采集中,因AD轉換器對模擬信號的幅度有一定的要求范圍。ADS930在單端工作方式下,輸入的模擬信號應在1~2V之間,為了使A/D轉換器能正常工作,確保最小的相對誤差,在信號進行模數轉換前,對輸入的信號進行預處理,使之滿足A/D轉換器的幅度要求。</p><p>  信號調理電路由

45、射極跟隨器、增益可調放大器、低通濾波器幾部分組成。</p><p><b> ?。?)射極跟隨器</b></p><p>  本設計采用射極跟隨器,既可獲得較高的輸入阻抗,還可以在被測信號源與數據采集電路之間起到隔離作用。其原理圖如圖3.1.1所示。跟隨器可以獲得很高的輸入阻抗,但是為了對信號源呈穩(wěn)定的負載,在電路的輸入端并聯了一個電阻R1,這時,前置放大器的等效輸入

46、電阻約等于R1。</p><p><b>  增益可調放大器 </b></p><p>  為了滿足后接A/D轉換器輸入電壓范圍的要求,因此對放大器的要求是增益可調,直流電平可調。根據以上要求,設計的放大電路原理圖如圖3.1.2所示。 </p><p>  增益可調放大器采用反相放大器的結構,放大倍數的計算公式如下:</p>&l

47、t;p>  A=-RP1/R2 </p><p>  其中,RP1為精密電位器,調節(jié)RP1就可以調節(jié)放大器的增益。如果R2取1k,RP1取10k,則增益的可調范圍為0~-10 。</p><p>  來自前置放大器的是雙極性的交流信號,而A/D對輸入信號的要求通常是單極性的。為了適合A/D的要求,本放大器中加了電平移位電路。電平位移電路有RP2組成,C1用于濾除高頻噪聲。調節(jié)Rp2就

48、可以改變Vos的值,不過注意,Vos的值要經過1+RP1/R2倍的放大才送到輸出端,因此,調節(jié)放大倍數的同時也會改變放大器輸出端的直流偏移量。</p><p>  上述放大器中電位器RP1、RP2需手動調節(jié),如果采用數控電位器代替,就可以得到程控放大器,這在自動化儀表設計非常重要。</p><p>  為了滿足模擬輸入信號的要求,整個信號調理電路應該有足夠的帶寬。為了防止信號中的無用分量(

49、如高頻干擾信號)也經過通道被采樣,信號在進入A/ D 之前要進行抗混疊低通濾波。為了簡化電路,本設計中抗混疊濾波器采用了RC低通濾波,如圖中所示R3和C2構成。低通濾波器的截止頻率計算公式如下:</p><p>  f =1/(2pi*R3*C2) </p><p>  圖3.1.1 射極跟隨器</p><p>  圖3.1.2增益可調放大器</p>

50、<p>  3.2高速A/D模塊</p><p>  首先,A/D的轉換速率取決于模擬信號的頻率范圍,根據設計題目要求,A/D轉換速率應大于10MHz,為留有余量選擇30MHz采樣頻率的ADC器件。</p><p>  其次,根據A/D轉換原理,轉換過程中存在量化誤差。量化誤差取決于量化位數,位數越多量化誤差越小。題目對模擬信號的轉換精度沒有特別的要求,因此,選用常見的8位A

51、/D轉換器。</p><p>  最后,FPGA為3V器件,故優(yōu)先選用3V工作電壓下的ADC器件,以簡化電源設計和電平匹配。</p><p>  因此,我們采樣了BURR—BROWN公司的ADS930器件,該器件為8位30MHz采樣AD轉換器,具有單端/差動輸入、內部基準、高速寬跟蹤/捕捉的高速流水ADC器件。工作電壓3V一5V,單端輸入電壓1V~ 2V。</p><p

52、>  ADC的模擬輸入采用單端輸入、交流耦合方式,此時其IN(24)引腳與其內部參考電壓的分壓輸出端CM(26)引腳相連,以保證1.5V的偏置電壓。數字端主要包括數據輸出DO~D7,時鐘CLK和數據輸出使能/OE等,與FPGA器件相連,根據時序受FPGA控制。</p><p>  3.3 FPGA模塊設計</p><p>  在高速數據采集方面,FPGA具有單片機和DSP無法比擬的優(yōu)

53、勢,FPGA的時鐘頻率高,內部延時小,而且速度快、效率高、組成形式靈活。FPGA內的嵌入式陣列塊(EAB)可作為存儲器使用,構成雙口RAM或FIFO。設計中使用了Altera公司EP2C8T144,內含8256個基本邏輯單元(LE),18個嵌入式可編程RAM模塊可靈活配置成單口RAM、雙口RAM、FIFO等,滿足大部分數字系統(tǒng)的設計要求。系統(tǒng)圖如圖3.3所示,其中與單片機接口的信號包括數據總線、地址鎖存ALE、片選CS2、讀使能RD、A

54、D啟動控制START和批量轉換結束應答EOC等,與ADS930接口的信號包括ADC的8位數據、ADC讀使能ADC OE和ADC時鐘等??刂撇僮鲿r通過START啟動AD轉換,之后由FPGA控制ADS930進行模數轉換,其轉換時鐘由40MHz有源晶振經FPGA內部鎖相環(huán)2分頻獲得,實現20MHz的采樣速率,每個時鐘將AD轉換的結果數據在存儲到FPGA內部的雙口RAM,同時地址計數器加1,以指向下一個RAM地址,供下次寫入數;當雙口RAM存儲

55、滿時輸出EOC有效,通知單片機獲取批量數據。采用EP2C8TI</p><p>  3.4MCU模塊設計</p><p>  本設計中單片機采用采用了Silicon Labs公司推出增強型51單片機C8051F360,解決了傳統(tǒng)單片機系統(tǒng)的各種問題。</p><p>  由于C8051F360單片機內部集成了眾多功能模塊,幾乎不需要外部電路就能構成最小系統(tǒng),因此MC

56、U模塊僅設計了一片CPLD器件(EPM3064),主要實現鍵盤接口、LCD接口及地址譯碼等。CPLD的內部邏輯用VHDL語言和ALERTA的參數化模塊實現,采用CPLD使電路具有很大的靈活性 。</p><p>  圖3.3 信號采集與存儲控制電路系統(tǒng)圖</p><p>  3.5數據采集通道總體原理圖</p><p>  根據上述各部分的電路設計,可以得到如圖3.

57、5所示的數據采集通道原理圖。運算放大器單位增益帶寬為150MHz,當放大器的增益為10時,帶寬為15MHz,不但滿足設計要求,而且留有余地。ADS930的數據引腳、時鐘引腳與FPGA I/O引腳直接相連。</p><p>  3.6硬件電路總體設計</p><p>  在前面設計的基礎上,可以得到附錄1的硬件電路總體原理圖。單片機與FPGA的連線除了并行總線外,還包括啟動信號START和數

58、據采集結束信號EOC。START信號從單片機的P3.2引腳發(fā)出,送到FPGA的I/O引腳(第60腳),EOC信號從FPGA的I/O引腳(第44腳)發(fā)出,送到單片機的外部引腳中斷引腳INT1。</p><p>  高速數據采集系統(tǒng)的顯示器件采用LCD模塊LCD12864.LCD模塊的數據線D0~D7與單片機的數據總線相連,RS、RW和E等控制信號由FPGA內部邏輯電路產生,因此LCD模塊的E、RS和RW信號線與FP

59、GA的I/O引腳相連。高速數據采集系統(tǒng)只需要一只用于啟動數據采集的按鍵。對于這種簡單的按鍵,可以采用兩種設計方案:一種是將按鍵直接與單片機的I/O引腳相連,通過軟件定時檢測按鍵是否閉合,并進行消抖處理,如鍵有效,則執(zhí)行鍵處理程序。該方案的不足之處是需要單片機較多的軟件開銷。另一種方案是將按鍵與FPGA的I/O引腳相連,然后在FPGA內部設置一消抖計數器,消抖計數器輸出作為外部中斷信號與單片機的INT0相連。單片機在INT0中斷服務程序中

60、實現按鍵處理。顯然,該方案有效地簡化了單片機軟件設計。</p><p>  圖3.5 數據采集通道原理圖</p><p><b>  4.軟件設計</b></p><p>  4.1 信號采集與存儲控制電路工作原理</p><p>  雙口RAM作為高速緩存,是信號采集與存儲控制電路的核心部件。雙口RAM模塊一方面存儲A

61、/D轉換產生的數據,另一方面向單片機傳輸數據,因此,雙口RAM的一個端口(讀端口)與單片機并行總線相連,另一端口(寫端口)直接與高速A/D的數據相連。由于高速數據采集系統(tǒng)每次只需要采集128字節(jié)的數據,因此,雙口RAM的容量設為128*8即可。在雙口RAM和單片機的接口中,地址所存模塊用于鎖存單片機并行總線低8位地址,或非門將片選信號/CS(來自地址譯碼器)和寫信號/WR相或非得到高電平有效的雙口RAM讀使能信號。</p>

62、<p>  高速A/D轉換器ADS930是在輸入時鐘信號的控制下進行A/D轉換的。ADS930要求它的的輸入時鐘信號有盡量小的抖動,50%的占空比,輸入時鐘的邊沿越陡越好。在所示原理框圖中,ADS930的時鐘信號通過參考時鐘CLK0分頻得到。在FPGA系統(tǒng)中,CLK0可以是直接由外部有源晶振產生的時鐘信號,也可以是通過內部PLL產生的時鐘信號。</p><p>  為了將高速A/D輸出的數字量依次存入

63、雙口RAM中,專門設計了一地址計數器模塊。</p><p>  地址計數器模塊實際上是一個7位二進制計數器,其輸出作為雙口RAM寫端口的地址。地址計數器和高速A/D轉換器采用同一時鐘信號,這樣地址的變化與A/D轉換器輸出數據變化同步。將高速A/D轉化器時鐘ADCCLK反相后作為雙口RAM寫端口的寫使能信號,保證了寫使能信號有效時數據是穩(wěn)定的。地址計數器除了產生地址信號之外,還有兩根與單片機連接的信號線START和

64、EOC。START信號由單片機I/O引腳發(fā)出。當START信號為低電平時,地址計數器清零,恢復為高電平后,地址計數器從0開始計數,計到127時停止計數,并發(fā)出由高到低的EOC信號作為單片機的外部中斷請求信號。</p><p>  進行一次數據采集的過程是,單片機發(fā)出START信號(負脈沖有效),地址計數器從0開始計數,在計數過程中,A/D轉換數據被存入雙口RAM。當計數器計到127時停止計數,發(fā)出EOC信號作為單

65、片機的外部中斷信號,單片機通過執(zhí)行中斷服務程序從雙口RAM中讀入數據。整個數據采集過程的時序關系如圖4.1所示。</p><p>  圖4.1 觸發(fā)控制模塊各信號時序關系</p><p>  4.2 信號采集與存儲控制電路的FPGA實現</p><p>  如圖4.2所示為由FPGA實現的信號采集與存儲控制電路頂層原理圖。在本設計中,雙口RAM的存儲容量為128*8

66、,因此,lpm-ram-dp的數據寬度選為8位,地址總線寬度選為7位。lpm-ram-dp的數據輸出端q[7..0]無三態(tài)輸出功能,為了能夠與單片機數據總線相連,數據輸出需要加一個三態(tài)門TS8,以實現輸出三態(tài)控制。利用單片機系統(tǒng)的片選信號和讀信號/RD實現對三態(tài)門的選通。需要注意,由于加了三態(tài)門控制,lpm-ram-dp中已不需要讀使能信號rden,可在對lpm-ram-dp參數設置時取消rden信號,等效于rden始終為高電平。lpm

67、-ram-dp的端口采用寄存器輸入和輸出,為同步型存儲器,使用時必須采用一同步時鐘clk0實現地址、數據等信息的輸入輸出。lpm-ram-dp沒有BUSY端,當寫地址和讀地址相同時,數據為沖突,讀寫不能正常工作,實際使用時應避免出現這種情況。</p><p>  圖4.2信號采集與存儲控制電路頂層圖</p><p>  4.3 原理圖中的各底層模塊采用VHDL語言編寫</p>

68、<p>  4.3.1三態(tài)緩沖器模塊TS8</p><p>  三態(tài)緩沖器電路頂層圖如圖4.3.1</p><p>  圖4.3.1三態(tài)緩沖器</p><p><b>  源代碼如下:</b></p><p>  library ieee; </p><p>  use ieee.st

69、d_logic_1164.all; </p><p>  use ieee.std_logic_unsigned.all; </p><p>  entity ts8 is </p><p><b>  port( </b></p><p>  en: in std_logic; </p><p&g

70、t;  di: in std_logic_vector(7 downto 0); </p><p>  do: out std_logic_vector(7 downto 0) ); </p><p><b>  end ts8; </b></p><p>  architecture one of ts8 is </p><

71、;p><b>  begin </b></p><p>  process(en,di) </p><p><b>  begin </b></p><p>  if en='1' then </p><p><b>  do<=di; </b>&l

72、t;/p><p><b>  else </b></p><p>  do<="ZZZZZZZZ"; </p><p><b>  END IF; </b></p><p>  END PROCESS; </p><p><b>  END;

73、</b></p><p>  4.3.2分頻器模塊fredivid</p><p>  分頻器電路頂層圖如圖4.3.2</p><p>  圖4.3.2 分頻器</p><p><b>  源代碼如下:</b></p><p>  LIBRARY IEEE; </p>&

74、lt;p>  use ieee.std_logic_1164.all; </p><p>  use ieee.std_logic_unsigned.all; </p><p>  entity fredivid is </p><p>  port(clkin:in std_logic; </p><p>  clkout: out

75、std_logic </p><p><b>  ); </b></p><p>  end fredivid; </p><p>  architecture one of fredivid is </p><p>  signal q:std_logic_vector(2 downto 0);</p>

76、<p><b>  begin </b></p><p>  process(clkin) </p><p><b>  begin </b></p><p>  if(clkin'event and clkin='1') </p><p><b>  

77、then </b></p><p>  if(q="11")then </p><p><b>  q<="00"; </b></p><p><b>  else </b></p><p><b>  q<=q+1; <

78、;/b></p><p><b>  end if; </b></p><p><b>  end if; </b></p><p>  end process; </p><p>  process(q) </p><p><b>  begin </

79、b></p><p>  if(q(1)='1') then </p><p>  clkout<='1'; </p><p><b>  else </b></p><p>  clkout<='0'; </p><p><

80、b>  end if; </b></p><p>  end process; </p><p><b>  end; </b></p><p>  4.3.3地址鎖存器模塊dlatch8</p><p>  地址鎖存器電路頂層圖如圖4.3.3</p><p>  圖4.3.3

81、地址鎖存器</p><p><b>  源代碼如下:</b></p><p>  library ieee; </p><p>  use ieee.std_logic_1164.all; </p><p>  use ieee.std_logic_unsigned.all; </p><p> 

82、 entity dlatch8 is </p><p><b>  port( </b></p><p>  cp: in std_logic; </p><p>  d: in std_logic_vector(7 downto 0); </p><p>  q: out std_logic_vector(7 down

83、to 0) </p><p><b>  ); </b></p><p>  end dlatch8; </p><p>  architecture one of dlatch8 is </p><p><b>  begin </b></p><p>  process(

84、cp,d) </p><p><b>  begin </b></p><p>  if(cp='1') then </p><p><b>  q<=d; </b></p><p><b>  end if; </b></p><p&

85、gt;  end process; </p><p><b>  end;</b></p><p>  4.3.4地址計數器模塊addrcount</p><p>  地址計數器電路頂層圖如圖4.3.4</p><p>  圖4.3.4地址計數器</p><p><b>  源代碼如下:

86、</b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  use ieee.std_logic_arith.all;</p><

87、p>  entity addrcount is</p><p>  port(clr,clk:in std_logic;</p><p>  eoc:out std_logic;</p><p>  q:buffer std_logic_vector(6 downto 0)</p><p><b>  );</b>

88、</p><p><b>  end;</b></p><p>  architecture one of addrcount is</p><p><b>  begin </b></p><p>  process(clr,clk)</p><p><b>  

89、begin </b></p><p>  if(clk'event and clk='1') then</p><p>  if clr='0' then</p><p>  q<="0000000";</p><p>  elsif(q<="111

90、1111") then</p><p>  q<="1111111";</p><p><b>  else</b></p><p><b>  q<=q+1;</b></p><p><b>  end if;</b></p&

91、gt;<p><b>  end if;</b></p><p>  end process;</p><p>  process(q)</p><p><b>  begin</b></p><p>  if(q="1111111") then</p&

92、gt;<p><b>  eoc<='0';</b></p><p><b>  else</b></p><p><b>  eoc<='1';</b></p><p><b>  end if;</b></p&g

93、t;<p>  end process;</p><p>  end one; </p><p>  4.3.5雙口RAM模塊lpm_ram_dp </p><p>  雙口RAM電路頂層圖如圖4.3.5</p><p>  圖4.3.5 雙口RAM</p><p><b>  源代碼如下

94、:</b></p><p>  LIBRARY ieee; </p><p>  USE ieee.std_logic_1164.all; </p><p>  LIBRARY altera_mf; </p><p>  USE altera_mf.all; </p><p>  ENTITY  lpm_r

95、am_dp IS </p><p><b>  PORT </b></p><p><b>  ( </b></p><p>  clock: IN STD_LOGIC ; </p><p>  data: IN STD_LOGIC_VECTOR (7 DOWNTO 0); </p&g

96、t;<p>  rdaddress: IN STD_LOGIC_VECTOR (7 DOWNTO 0); </p><p>  wraddress: IN STD_LOGIC_VECTOR (7 DOWNTO 0); </p><p>  wren: IN STD_LOGIC := '1'; </p><p>  q:

97、 OUT STD_LOGIC_VECTOR (7 DOWNTO 0) </p><p><b>  ); </b></p><p>  END lpm_ram_dp; </p><p>  ARCHITECTURE SYN OF lpm_ram_dp IS </p><p>  SIGNAL sub_wire0: ST

98、D_LOGIC_VECTOR (7 DOWNTO 0); </p><p>  COMPONENT altsyncram </p><p>  GENERIC ( </p><p>  address_aclr_a: STRING; </p><p>  address_aclr_b: STRING; </p><

99、p>  address_reg_b: STRING; </p><p>  indata_aclr_a: STRING; </p><p>  intended_device_family: STRING; </p><p>  lpm_type: STRING; </p><p>  numwords_a: NAT

100、URAL; </p><p>  numwords_b: NATURAL; </p><p>  operation_mode: STRING; </p><p>  outdata_aclr_b: STRING; </p><p>  outdata_reg_b: STRING; </p><p> 

101、 power_up_uninitialized: STRING; </p><p>  read_during_write_mode_mixed_ports: STRING; </p><p>  widthad_a: NATURAL; </p><p>  widthad_b: NATURAL; </p><p>  wid

102、th_a: NATURAL; </p><p>  width_b: NATURAL; </p><p>  width_byteena_a: NATURAL; </p><p>  wrcontrol_aclr_a: STRING </p><p><b>  ); </b></p>&l

103、t;p><b>  PORT ( </b></p><p>  wren_a: IN STD_LOGIC ; </p><p>  clock0: IN STD_LOGIC ; </p><p>  address_a: IN STD_LOGIC_VECTOR (7 DOWNTO 0); </p><p> 

104、 address_b: IN STD_LOGIC_VECTOR (7 DOWNTO 0); </p><p>  q_b: OUT STD_LOGIC_VECTOR (7 DOWNTO 0); </p><p>  data_a: IN STD_LOGIC_VECTOR (7 DOWNTO 0) </p><p><b>  ); </b>

105、;</p><p>  END COMPONENT; </p><p><b>  BEGIN </b></p><p>  q<= sub_wire0(7 DOWNTO 0); </p><p>  altsyncram_component : altsyncram </p><p>  

106、GENERIC MAP ( </p><p>  address_aclr_a => "NONE", </p><p>  address_aclr_b => "NONE", </p><p>  address_reg_b => "CLOCK0", </p><p&g

107、t;  indata_aclr_a => "NONE", </p><p>  intended_device_family => "Cyclone", </p><p>  lpm_type => "altsyncram", </p><p>  numwords_a => 256

108、, </p><p>  numwords_b => 256, </p><p>  operation_mode => "DUAL_PORT", </p><p>  outdata_aclr_b => "NONE", </p><p>  outdata_reg_b => &

109、quot;CLOCK0", </p><p>  power_up_uninitialized => "FALSE", </p><p>  read_during_write_mode_mixed_ports => "DONT_CARE", </p><p>  widthad_a => 8, &

110、lt;/p><p>  widthad_b => 8, </p><p>  width_a => 8, </p><p>  width_b => 8, </p><p>  width_byteena_a => 1, </p><p>  wrcontrol_aclr_a => "

111、;NONE" ) </p><p>  PORT MAP ( </p><p>  wren_a => wren, </p><p>  clock0 => clock, </p><p>  address_a => wraddress, </p><p>  address_b =>

112、; rdaddress, </p><p>  data_a => data, </p><p>  q_b => sub_wire0 </p><p><b>  ); </b></p><p><b>  END SYN; </b></p><p>  4.4

113、 數據顯示模塊設計</p><p>  根據要求,每一次數據采集通過按鍵來啟動。采集完128點數據以后,數據采集單元向單片機發(fā)出中斷請求,單片機通過中斷服務程序從雙口RAM中讀入128點采集數據;將讀入的128點采集數據存放在單片機高128字節(jié)內部RAM中;對128字節(jié)數據進行處理,在LCD上顯示與采集數據對應的波形。根據數據采集的工作過程,高速數據采集系統(tǒng)控制軟件分為主程序、INT0中斷服務程序、INT1中斷服

114、務程序三部分。</p><p><b>  4.4.1 主程序</b></p><p>  主要完成C8051F360單片機內部資源初始化、在LCD上顯示采集數據的波形,其主程序流程圖如圖4.4.1所示。</p><p>  圖4.4.1 主程序流程圖</p><p>  4.4.2 INT0中斷服務程序 </p&

115、gt;<p>  INT0中斷服務程序的功能是讀入鍵值,執(zhí)行功能。本數據采集只定義了一個功能鍵KEY0,當該鍵有效時,P3.2引腳產生一個負脈沖。</p><p>  4.4.3 INT1中斷服務程序 </p><p>  當數據采集系統(tǒng)完成128點數據采集后,將啟動一次外部中斷INT1。INT1中斷服務程序的功能就是從FPGA的雙口RAM中讀取128字節(jié)的采集的數據,并將其

116、存放在單片機內部RAM的高128字節(jié)(地址80H~FFH)。讀取完畢以后,設置一標志。</p><p><b>  源程序如下:</b></p><p>  INT1: PUSH A</p><p><b>  PUSH PSW</b></p><p><b>  PUSH DPH

117、</b></p><p><b>  PUSH DPL</b></p><p>  MOV DPTR,#CS1</p><p>  MOV R7,#80H</p><p>  MOV R0,#80H</p><p>  INTT1: MOVX A,@DPTR<

118、/p><p>  MOV @R0,A</p><p>  INC R0</p><p>  INC DPTR</p><p>  DJNZ R7,INTT1</p><p>  SETB XSBZ</p><p>  POP DPL&l

119、t;/p><p>  POP DPH</p><p>  POP PSW</p><p>  POP A</p><p><b>  RETI</b></p><p><b>  4.5軟件仿真</b></p><p>

120、;  4.5.1三態(tài)緩沖器模塊TS8</p><p>  圖4.5.1三態(tài)緩沖器仿真圖 </p><p>  三態(tài)緩沖器模塊TS8功能:lpm-ram-dp的數據輸出端q[7..0]無三態(tài)輸出功能,為了能夠與單片機數據總線相連,數據輸出需要加一個三態(tài)門TS8,以實現輸出三態(tài)控制。</p><p>  4.5.2分頻器模塊fredivid</p><

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論