爆轟性能測試系統軟件設計_第1頁
爆轟性能測試系統軟件設計_第2頁
爆轟性能測試系統軟件設計_第3頁
爆轟性能測試系統軟件設計_第4頁
爆轟性能測試系統軟件設計_第5頁
已閱讀5頁,還剩27頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

本科畢業設計(論文)爆轟性能測試系統軟件設計SoftwareDesignofDetonationPerformanceTestSystem總計:畢業設計(論文)26頁表格:2個插圖:20幅學院(系):電子與電氣工程系專業:電子信息工程爆轟性能測試系統軟件設計[摘要]火藥性能測試系統主要是對炸藥爆炸時的各種性能參數進行有效的測試,并將這些測試參數上傳給PC機,進行數據存儲記錄。整個炸藥性能測試系統包括爆轟波數據測試和爆速數據測試兩個方面。本文對爆轟波波形數據存儲,根據實際中的條件和要求,本論文中選擇了ADC、CPLD、RAM、AT89C52單片機等模塊和串口傳輸的方案。該方案的主要思路是ADC芯片完成數據采集,CPLD模塊用于控制ADC工作及數據傳輸。RAM模塊負責數據的存儲。單片機控制模塊用于數據的讀取,然后通過串口傳輸上傳到PC機。當PC機得到所采集的數據后,對數據進行存儲。本文首先對系統功能進行了詳細分析,提出系統總體結構和設計原則。然后對高速數據采集系統、存儲器等相關控制電路進行了設計、仿真和調試。[關鍵詞]CPLD;采樣;高速數據采集;系統調試SoftwareDesignofDetonationPerformanceTestSystemAbstract:Powderperformancetestsystemmainlyforexplosiveperformanceparametersduringthetestefficiently,anduploadthemtothePC,testparameters,datastoragerecords.Performancetestsystem,includingtheexplosivedetonationandthedetonationvelocitydatatestingdatatestingtwoaspects.Thisformofdatastorageonthedetonationwave,inaccordancewiththeactualconditionsandrequirements,thepaperselectedADC,CPLD,RAM,AT89C52microcontrollermoduleandserialtransmissionofsuchprogram.Theprogram'smainideaistocompletethedataacquisitionADCchip,CPLDmoduleisusedtocontroltheADCworkanddatatransmission.RAMmodulesresponsiblefordatastorage.SCMcontrolmodulefordataread,andthenuploadedtothePCthroughtheserialportmachine.WhenthePC,thedataarecollected,thedatastorage.Thispaperfeaturesadetailedsystemanalysis,systemarchitectureanddesignprinciples.Thenhigh-speeddataacquisitionsystem,memoryandotherrelatedcontrolcircuitdesign,simulationanddebugging.Keywords:CPLD;sampling;highspeeddataacquisition;systemcommissioning

目錄1引言 12炸藥性能測試系統的設計概述 13爆轟波波形數據的采集、存儲、處理及通訊的具體實現 33.1數據采集系統的基本方案 33.1.1A/D轉換電路 33.2CPLD電路部分設計 43.2.1可編程邏輯器件 53.2.2VHDL語言 53.2.3可編程邏輯器件的開發工具 63.2.4CPLD控制器的詳細設計 63.3單片機控制模塊設計 93.3.1AT89C52的體系結構和硬件描述 93.3.2中斷系統 93.3.3RS232通訊接口的設計 104.軟件設計 104.1CPLD控制程序部分 104.1.1CPLD最小控制系統各模塊程序及仿真 114.1.2CPLD最小控制系統流程圖 184.2單片機控制程序部分 20結束語 24參考文獻 25致謝 261引言隨著無線通信與計算技術、信號處理與分析技術的發展,軍事、衛星通信等信號不斷向高頻、寬帶、數字化發展。高速采集成為制約信號處理的關鍵因素之一。今天高速數據采集技術已在雷達、通信、地震勘探、智能儀器、科學實驗等各個方面有著廣泛的應用。本文介紹了以CPLD為核心處理芯片的多路數據采集系統的實現方法。該系統通過CPLD控制ADC轉換,將采樣數據儲存到靜態存儲器(RAM)中,再由單片機從RAM中取出數據經MAX232串口上傳到PC機,由PC機完成對數據的處理。由于實驗條件,論文中實現的最高采樣率為20MSPS。本設計系統主要是完成對炸藥爆速及爆轟波數據的采集和數據處理工作,形象的反映出炸藥爆炸時的性能。具體到本文,主要是實現爆轟波數據的采集和處理。在具體的實現上,主要解決了傳感器的數據測量、模數的轉換、高速信號的緩沖處理、數據的存儲、看門狗、單片機與PC機的通信等問題。論文中側重分析了CPLD芯片FLEX10K30E在系統中的硬件應用以及軟件實現,另一個重點是主CPU模板的單片機對整個系統的控制,以及PC機的終端數據庫軟件的設計。在器件的選擇上,主要采用了FLEX10K30E和AT89C52[1]。這是從本設計的實際要求出發而考慮的。由于數據處理方面的高速要求,考慮到成本,采用了CPLD器件來作為數據緩沖的設計器件,這樣達到電路保密以及減小系統的PCB面積的目的。采用AT89C52可以以最小的成本來達到對系統全面控制的要求。本文針對炸藥性能——爆轟波數據采集的要求,首先闡明了本設計的產生和應用背景,接著討論了整個高速數據采集系統的整體實現原理,接下來主要具體講述了如何設計一種基于CPLD和單片機的卡式測試儀器。講述了可編程器件CPLD及VHDL語言的原理和設計實現,單片機及匯編語言的原理和設計實現,PC終端數據的處理。在文章的最后給出了具體設計中應該注意的一些問題。2炸藥性能測試系統的設計概述單獨使用單片機作為存儲測試系統主控元件發送數據采集和數據傳輸的指令時,單片機的工作速度很難完成采樣率達到1MS/s的數據采集工作,而且單片機的端口數目、內部定時器和中斷源的數目都有限,在應用中往往要加外圍擴展芯片,這就增加了系統硬件的復雜程度;若選擇CPLD作為系統控制核心,不僅可以簡化系統設計,而且提高了系統的整體性能和系統穩定性,但若單獨通過CPLD完成整個系統的控制功能,則需選用內部容量大,可用門數多的CPLD器件,這勢必使系統功耗和成本都有所提高[2]。而且控制時序的設計也相當復雜,應用者開發起來比較費力。因此,本設計在傳統存儲測試系統的基礎上,采用高速ADC與高速靜態隨機存取存儲器(RAM)構成的設計方案結合采用CPLD與單片機技術相結合的存儲測試系統。由于考慮研究中主要還是實驗室研究階段,是采用信號發生器產生被測信號,省去了ADC前端的濾波、放大等信號調理電路部分。經全面衡量對比,選擇了ADC+CPLD+RAM+AT89C52單片機+串口傳輸的方案。該方案的主要思路是,先采用CPLD控制高速AD轉換器把信號采集進來并同時存儲到RAM存儲器中,當RAM存儲器存滿以后,認為CPLD及ADC和RAM完成一次采集存儲任務,此為前一階段任務完成;然后通知并等待單片機將存儲器中采集的數據取走,通過串口傳輸上傳到PC機。當PC機得到所采集的數據后,對數據進行存儲。其方案框圖如圖1所示。圖1爆轟性能測試系統方案框圖該系統能夠以較高的采樣率完成對信號的采集存儲。模擬信號在CPLD時序控制下經AD轉換器轉換為數字信號,并實時存儲于靜態存儲器中。現場采集完成后(即RAM已經存儲滿),單片機將數據從存儲器中讀取出來,通過RS-232串口上傳至PC計算機作進一步的處理[3]。在通常的數據采集系統中,每次數據采集過程,單片機和A/D轉換之間都由執行指令完成數據的傳送,由于受單片機執行指令時間的限制,采集一個數據往往需要幾到幾十微秒的時間,這樣的數據采集系統難以適應高速信號采集的需要。本系統是在單片機控制下,完全由硬件自動實現數據采集的全過程。在該系統中單片機只控制數據采集的啟動和采集結束后對數據的傳輸,在數據采集的過程中,單片機并不對采集通道進行任何干預,這樣就使系統的采集速率完全不受單片機速度的限制,從而實現高速數據采集的目的。該系統具體工作原理是:作為控制器的CPLD上電以后即輸出連續的定時脈沖給A/D轉換器(ADC0809)的CLK端,使其每接受一個時間脈沖即進行一次A/D轉換,同時將CPLD內部地址發生器產生的依次連續變化的地址信號在每一定時脈沖期間經地址選擇器(在CPLD內部)直接送到存儲器,同時在每一定時脈沖期間A/D轉換器將所采集到的第n一3次的數據經數據總線直接輸入到兩片SRAM存儲器中保存,如此連續循環,完成一個一個采樣周期。重復上述過程,直到存儲器存滿,由CPLD器件引起單片機外部中斷,結束數據采集,轉入中斷處理程序進行數據處理,單片機從RAM中讀取數據并送PC機處理。系統工作原理可由圖1描述[4]。3爆轟波波形數據的采集、存儲、處理及通訊的具體實現3.1數據采集系統的基本方案開機后,CPLD發出時鐘脈沖ADCLK給ADC,控制AD轉換。每ADCLK脈沖ADC轉換一次,CPLD即刻給出OE輸出數據使能信號,將8位數據寫入存儲器中。這樣一直循環采集,直到存儲器滿。然后CPLD置低INTO通知單片機讀取數據,得到通知后,單片機將工作狀態信號置為有效以應答,然后單片機直接控制RAM讀取數據,并不斷通過串口RS232將數據上傳到PC機,當讀取完數據后,再將工作狀態信號置為無效。CPLD一直處于工作狀態,當工作狀態信號置為無效后,又開始下一次的數據寫入到存儲器。此時,PC機對上傳的數據進行處理、波形回放,如此循環。詳細原理邏輯框圖如圖2。圖2數據采集系統邏輯框圖3.1.1A/D轉換電路A/D轉換是將模擬量電信號轉換為數字信號。本文中A/D轉換單元采用ADC0809芯片實現模數轉換功能,下面分別對這種芯片的工作原理做出介紹。ADC0809是CMOS工藝,采用8位逐次逼近型8路模數轉換器,ADC0809集成了8路地址鎖存地址鎖存與譯碼8位模擬量輸入IN0~IN7ADDCALE啟動START輸出允許OE時鐘CLOCKVREF+VREF-8位輸出數字量轉換結束(中斷)EOC8路模擬開關8位A/D轉換器三態輸出緩沖器ADDAADDB圖3芯片的內部結構模擬開關,地址鎖存與譯碼器、8位A/D轉換器以及8位三態輸出鎖存器。其中IN0--IN7為8路模擬量輸入端口,D0~D0為8為數字量輸出端口,VREF(+)與VREF(9是基準參考電壓,用于確定輸入模擬量的量程范圍。CLK為時鐘信號輸入端,一個轉換周期需要64個時鐘信號。START為轉換啟動引腳,高電平有效。ALE是地址鎖存允許信號,在它的下降沿將地址打入鎖存器[5]。EOC為轉換結束信號,在轉換期間該信號為低電平,轉換結束后變為高電平。OE為數字量輸出允許信號,高電平有效。A、B、C為地址輸入端口,通過他們的二進制編碼組合選擇輸入模擬量的通道。ADC0809在一個轉換周期內,首先在ALE的作用下讀入A、B、C的數據,進而控制8路模擬開關接通所要轉換的通道,然后EOC變為低電平,被轉換信號在轉換器內同多個參考值相比較,直至找到最為接近的一個參考值,并將該參考值對應的數字量送到三態輸出鎖存器,然后EOC變為高電平,表示轉換結束。這時如果OE收到高電平信號,便將輸出鎖存起開放,送出轉換后的數字量。這一部分電路的功能是將輸入模擬信號高速數字化,并將結果存儲在RAM中,供CPU處理。本設計采用雙通道輸入。由兩個信號發生器發出的信號,通過兩路A/D轉換后,由CPLD控制送入兩片RAM中存儲。該電路的工作原理是:CPLD發出時鐘脈沖ADCLK給ADC,控制AD轉換。每ADCLK脈沖ADC轉換一次,CPLD同時即刻給出0E輸出數據使能信號,將兩路8位數經8根數據總線輸送至存儲器中。與此同時,CPLD在同時給存儲器送9位相同地址信號后再送寫信號WE,將數據同時寫入RAM中。這種并行處理方式也在一定程度上提高了系統的速度。3.2CPLD電路部分設計高速數據采集系統中,一般采用DMA方式,由于單片機本身并不支持DMA接口方式,必須外加DMA控制器和總線仲裁電路:數據采集電路中,時序控制電路、地址發生器、多路控制驅動器等芯片眾多,從而提高了硬件電路的復雜性,降低了系統的靈活性和可靠性,并且占用了大部分體積,邏輯時序復雜。用CPLD實現這些電路則使開發簡單、靈活、方便。3.2.1可編程邏輯器件在數字化的道路上,電子設計技術的發展經歷了并將繼續經歷許多重大的變革和飛躍。從應用通用數字電路芯片構成電路與系統、廣泛應用的MPU(徼處理單元)等到可編程邏輯器件(包括現場可編程門陣列(FPGA)和復雜可編程邏輯器件(CPLD)在電子設計自動化(EDA)中廣泛應用,使得電路系統在設計上發生了~系列具有里程碑意義的飛躍[6]。如果說MPU在邏輯的實現上是無限的話,那么FPCA/CPLD不但包括了MPU這一特點,而且還觸及硅片電路的物理極限,并兼有高速、大容量、高可靠性以及很寬的適用性等諸多特點。其不可替代的地位及伴隨而來的極具知識經濟特征的IP核技術的發展越來越受到電路設計人員的關注。可編程邏輯器件(FLD)是由用戶編程實現所需邏輯功能的數字集成電路。在20世紀80年代初,簡單的PLD主要用于集成多個分立邏輯器件,還可用它來實現布爾方程。如今,高密度PLD不僅可以實現系統級的電路集成,而且被看作是ASIC和ASSP的替代品。ASIC是用戶根據某一專門應用設計的,ASSP是用來實現特定功能的器件。由于大批量的生產采用了先進的工藝技術,使PLD的價格不斷降低。Altera公司提供的器件在集成度、密度、性能和成本方面都可與ASIC相比。這些因素與產品投放市場的時間和可編程的靈活性相結合,不斷地推動著高密度PLD在電子系統開發和生產中的應用[7]。在可編程邏輯器件的學習和使用中,我認識到可編程邏輯器件的學習和應用已不僅僅是單純地基于某種特定器件的開發過程,而是一種極富挑戰性和創造性的勞動,使目前許多處于計算機輔助設計(CAD)和規劃的純軟件活動變成了實實在在的設計和實體,這些設計在計算機上仿真通過后,幾乎即可應用于實際電路,大大地簡化了設計方法和調試過程。3.2.2VHDL語言VHDL最早是由美國國防部提出的。1987年12月,IEEE接受VHDL為標準的IIDL,這就是今天我們所了解的IEEESTDl076—1987[LRM87]。此后又做了一些修改,增加了一些功能,后來形成了新的版本IEEESTDl0761993。VHDL主要用于描述數字系統的結構、行為、功能和接口,其語言形式和描述風格與句法十分類似于一般的計算機高級語言。VHDL的程序結構特點是將一項工程設計,或稱設計實體(可以是一個元件、一個電路模塊或一個系統)分成外部(或稱可視部分及端口)和內部(或稱不可視部分),即涉及實體的內部功能和算法完成部分。在對一個設計實體定義了外部界面后,一旦內部開發完成,其他的設計就可以直接調用這個實體。隨著數字電路的發展,VHDL語言將承擔更多數字系統設計任務。3.2.3可編程邏輯器件的開發工具開發Altera公司的可編程邏輯器件有兩種軟件,QuartuslI和MAX+PLUSII。本設計采用QuartusII可編程邏輯器件開發軟件,它提供了一種與結構無關的全集成化設計環境,使設計者能對Altera公司的各種產品系列方便地進行設計輸入、快速處理和器件編程[8]。QuartusII開發系統具有強大的處理能力和高度的靈活性,它的優點主要表現在以下方面:(1)與結構無關:QuartusII系統的編譯程序,支持從Class到FLEXI的Altera全部系列的PLD產品,提供與結構無關的設計開發壞境,具有強大的邏輯綜合與優化功能。(2)多平臺:QuartusII可在基于Pc機的WINDOWS或WINDOWSNT環境下運行。全集成化:QuartusII的設計輸入、處理、優化和校驗功能全部集成在統一的開發環境下,可以加快動態調試,縮短開發周期。(3)硬件描述語言(HDL):Quartus11支持各種HDL輸入選項,包括ⅧDL,VerilongHDL和Altera公司自己的硬件描述語言VHDL。(4)豐富的設計庫:OuartusII提供豐富的庫單元提供設計者調用,其中包括74系列的全部器件和多種特殊的邏輯宏單元(Macro—Funtion),以及新型的參數化宏單元(Maga-Function)。調用庫單元進行設計,可以大大減輕設計工作量,設計周期成倍縮短。(5)開放的界面:QuartustI提供標準的接口,可以與其它工業標準的EDA軟件協同使用。設計者可以使用其他的EDA軟件工具進行設計輸入.再利用QuartusII的Compiler進行編譯處理,并使用其它工具進行器件和板級仿真晰朝。3.2.4CPLD控制器的詳細設計在整個高速采集系統中,CPLD起著決定性的控制作用,因為CPLD本身具有高速、并行工作的特點,所以具有很好的控制能力。下面具體說CPLD內部的工作機制。所設計的CPLD控制程序是針對基本方案的。CPLD的主要任務是:CPLD對AD進行時序控制,以采集模擬信號到CPLD,在AD進行采集的同時,CPLD將采集到的數據,按RAM的寫時序,將數據并行寫入RAM中,這樣AD每采集一次數據,CPLD立即將采集到的數據寫入RAM,直到RAM存儲滿為止,然后CPLD發出數據已滿的低跳變信號給單片機的外部中斷INTO口(通知線),通知單片機可以讀取數據了。單片機得到通知,當做好讀取數據的準備后,立刻將工作狀態置為有效以應答CPLD,表示正在采集數據,這時CPLD等待單片機從RAM取走數據。當單片機取走數據后,置工作狀態信號為無效。一旦CPLD檢測到工作狀態信號無效后,則說明單片機己讀取完數據,CPLD就立即控制AD進入下一輪的采集工作當中。經過對AD和RAM的詳細時序分析,可以據此很精確的對它們進行時序控制設計了。在CPLD中設計了兩大部分。分別是AD轉換部分與存儲控制模塊和地址計數器部分。(1)AD轉換與存儲控制模塊的功能是對AD進行時序控制和對RAM的寫時序控制。(2)地址計數器模塊的功能是輸出9位地址信號,實現對RAM尋址。引腳及功能介紹,詳細連接圖見圖4。圖4AD轉換與存儲控制模塊和地址計數器模塊框圖CLK:CPLD的全局時鐘信號輸入端,實驗初期暫時采用20MHz,以免對于調試過程給予過高苛求。D[7..0]:AD轉換器輸入到CPLD的數據端口。EOC:轉換狀態指示,低電平表示正在轉換。ALE:8個模擬信號通道地址鎖存信號。START:轉換開始信號。OE:CPLD輸送給AD轉換器的AD數據輸出使能信號。當為低時,ADC輸出所鎖存的采集的數據信號ADDA:信號通道最低位控制信號。LOCK0:觀察數據鎖存時鐘。Q[7..0]:8位數據輸出。CPLD輸出到RAM的AD轉換數據輸出端口。通過它將數據寫入RAM數據端口。WREN:RAM的寫脈沖。當為高電平時,寫有效。INTERRUPT:讀取通知信號,連接到單片機的INTO口,下跳沿有效。(4)時序和狀態機設計說明根據時序圖的特點,AD只需要供給固定的時鐘節拍就可以進行控制,同時按照RAM的寫時序的特點,設計了如下狀態機來進行基本的采集和存儲,存儲是與AD的采集時鐘完全同步的,也就是說,在每一個AD采樣周期內實現的數據存儲。設計了狀態機如圖5所示。st0st0st1st2st3st4reset圖5采集存儲狀態機圖當系統復位后,進入狀態stO,根據一定的狀態轉移條件進入下一個狀態。下面分別說明每個狀態的主要任務。stO:初始化各端口信號和等待作用。如檢測是否開始采集,復位地址計數器,將外部輸出端口信號進行復位。stl:ALE<=’1’,地址鎖存信號有效。START<=’1’,啟動AD采樣。LOCK<=’0’,轉換后數據輸出鎖存時鐘信號,此時無效。OE<=st2:ALE<=’0’;START<=’1’;LOCK<=’0’;OE<=’0’;狀態跟stl基本一樣,所不同的是在st2狀態中還要檢測EOC是否為高電平st3:ALE<=’0’;START<=’0’;LOCK<=’0’;OEst4:ALE<=’0’;START<=’0’;LOCK<=’1’,輸出數據鎖存時鐘信號;OE<=’(5)時序仿真結果與分析由時序仿真圖7可以看到,當FULL置高時,說明地址計數器到頂了,這是RAM存儲已經滿了。CPLD立刻將INTERRUPT置低產生下降沿通知單片機可以讀取數據了,此時CPLD什么都不做,除了等待單片機的應答信號。單片機響應中斷,置WREN為低電平,RAM進入讀出狀態。單片機此時進入串口通信狀態,等待串口中斷,發送數據,當數據發送完,繼續等待串口中斷,直到把RAM中的數據讀完,才關閉串口中斷。這里有個中斷優先級的區別,必須先響應外部中斷后,置RAM為讀出狀態時,再執行串口中斷程序,發送數據。之后,CPLD一直處于等待單片機讀取數據的狀態,直到檢測到WREN為高,說明單片機已經讀取完了數據。此時,CPLD將進入stO的復位狀態,為下一輪采集做好準備,又開始采集。AC0809采樣狀態工作時序仿真圖如圖6所示。圖6ADC0809采樣狀態工作時序仿真圖3.3單片機控制模塊設計單片機作為主控元件完成對RAM中數據讀取并進行通過RS一232口向Pc機上傳的功能。當單片機接收到CPLD發送的外部中斷觸發信號之后開始數據上傳工作,該中斷信號通過邊沿觸發單片機INT0引腳[9]。在數據傳輸過程中,上位機和下位機需要具有完備的握手通信協議才能保證上位機及時、準確地接收數據。單片機以校驗和的方式發送數據,以8B數據為一幀發送。3.3.1AT89C52的體系結構和硬件描述本設計中所采用的CPU為ATMEL公司生產的8位FLASH單片機系列中的AT89C52。AT89C52是一種低功耗/低電壓、高性能的8位單片機,它是ATMEL公司在AT89C51的基礎上,存儲容量、定時器和中斷能力等得到改進的型號[10]。它的主要性能如下:(1)8KB的FLASH存儲器;(2)256字節的片內RAM;(3)32條可編程I/O線;(4)3個16位定時器/計數器;(5)6個中斷源;(6)3級程序存儲器保密;(7)可編程串行接口;(8)片內時鐘振蕩器。3.3.2中斷系統AT89C52總共具有6個中斷源,兩個外部中斷(INT0、INT1)和三個內部定時器中斷(定時器0、1、2),另外還有一個串行口中斷。所有的這些中斷都屬于可屏蔽中斷,即可以通過軟件對片內特殊功能寄存器IE的設置,實現對各個中斷源中斷請求的開放(允許)或屏蔽(禁止)的控制。中斷控制寄存器IE的字節地址為A8H,可進行位尋址操作。本設計中,將用到兩個外部中斷,來實現主CPU模板對波形數據采集板和爆速數據采集板的控制[11]。3.3.3RS232通訊接口的設計RS-232C接口標準簡述:RS-232C標準時美國電子工業協會(EIA)與BELL等公司一起開發的1969年公布的通信協議[12]。它適合于數據傳輸率在0至20000b/s范圍內的通信,它具有機械特性:RS-232C接口是單端發送,單端接收,傳輸線上允許一個驅動器和一個發送器。RS-232C標準接口有25條線,其中4條數據線,11條控制線,3條定時線,7條備用線和未定義線。它所采用的電纜傳輸長度與傳輸的電容有關。它的最大傳輸距離可達30m,最大速率20kb/s,適于相距較近設備的通信。電氣特性:RS-232C標準定義-15V~-3V表示邏輯“1”,+3V~+15V表示邏輯“0”。它選擇-15V~-3V和+3V~+15V這個范圍而不采用TTL邏輯(0V~5V)的原因是為了提高抗干擾能力和增加傳輸距離,因此與TTL設備連接時需加電平轉換接口。MAX232芯片是常用的RS-232C與TTL電平轉換芯片,它的內部有電壓倍增電路和轉換電路,只需+5V電源便可實現RS-232C與TTL電平轉換,芯片連接圖如圖7:圖7采用MAX232接口的串行通信電路圖圖中TXD和RXD與AT89C52的串行通訊引腳相連接,而PCTXD和PCRXD與一9針插頭插座相連接,具體連接為PCRXD(2)、PCTXD(3)。同時,9針插頭插座的第5管腳接地,形成一個最簡單的串行異步通訊的連接方式。這個串口就是單片機與PC進行數據通訊的通信接口。4.軟件設計4.1CPLD控制程序部分本設計是利用FPGA直接控制0809對模擬信號進行采樣,然后將轉換好的8位二進制數據迅速存儲到存儲器中,在完成對模擬信號一個或數個周期的采樣后,由外部電路系統(如單片機)將存儲器中的采樣數據讀出處理。(1)元件ADCINT是控制0809的采樣狀態機。(2)元件CNT10B中有一個用于RAM的9位地址計數器,此計數器的工作時鐘CLK0由WE控制:當WE=’1’時,CLK0=LOCK0:LOCK0來自0809采樣控制器的LOCK0(每一采樣周期產生一個鎖存脈沖),(3)當WE=’0’時,處于采樣禁止階段,此時允許讀出RAM中的數據,CLKOUT=CLK0=CLK=采樣狀態機的工作時鐘(一般取65536Hz)圖8CPLD最小控制系統框圖4.1.1CPLD最小控制系統各模塊程序及仿真(1)ADC采樣模塊圖9ADCINT采樣狀態機模塊圖由狀態圖也可以看出,在狀態st2中需要對0809工作狀態信號EOC進行測試,如果為低電平,表示轉換沒有結束,在下一時鐘脈沖到來時轉向狀態3。在狀態3,由狀態機向0809發出轉換好的8位數據輸出允許命令,這一狀態周期同時可作為數據輸出穩定周期,以便能在下一狀態中向鎖存器中鎖入可靠的數據。在狀態st4,由狀態機向FPGA中的鎖存器發出鎖存信號,將0809輸出的數據進行鎖存[13]。由lock信號鎖存轉換好的數據OE=1,數據輸出有效由lock信號鎖存轉換好的數據OE=1,數據輸出有效采樣周期等待中EOC=1,轉換結束EOC=0,正在轉換啟動A/D轉換對0809初始化st0st3st4st2st1圖10控制ADC0809采樣狀態圖在時序圖中START為轉換啟動信號,高電平有效;ALE為模擬信號輸入選通端口地址鎖存信號,上升沿有效;一旦START有效后,狀態信號EOC即變為低電平,表示進入轉換狀態。轉換結束后,EOC將變為高電平。此后外部控制可以使OE由低電平變為高電平,此時0809的輸出數據總線D[7..0]從原來的高阻態變為輸出數據有效。圖11ADC0809采樣狀態機工作時序圖libraryieee;useieee.std_logic_1164.all;entityadcintisport(D:instd_logic_vector(7downto0);--來自0809轉換的8位數據CLK:instd_logic;--狀態機工作時鐘EOC:instd_logic;--轉換狀態指示,低電平表示正在轉換ALE:outstd_logic;--8個模擬信號通道地址鎖存信號START:outstd_logic;--轉換開始信號OE:outstd_logic;-數據輸出三態控制信號ADDA:outstd_logic;--信號通道最低位控制信號LOCK0:outstd_logic;--觀察數據鎖存時鐘Q:outstd_logic_vector(7downto0)--8位數據輸出);endadcint;architecturebehavofadcintistypestateis(st0,st1,st2,st3,st4);--定義各狀態子類型signalcurrent_state,next_state:state;signalregl:std_logic_vector(7downto0);signallock:std_logic;--轉換后數據輸出鎖存時鐘信號beginadda<='1';--ADDA<='0',模擬信號進入通道INO;當ADDA<='1',則進入通道IN1q<=regl;lock0<=lock;COM:process(current_state,eoc)--規定各狀態轉換方式begincasecurrent_stateiswhenST0=>ALE<='0';START<='0';LOCK<='0';OE<='0';next_state<=st1;--0809初始化whenST1=>ALE<='1';START<='1';LOCK<='0';OE<='0';next_state<=st2;--啟動采樣whenST2=>ALE<='0';START<='0';LOCK<='0';OE<='0';if(EOC='1')thennext_state<=st3;--EOC=1表明轉換結束elsenext_state<=st2;endif;--轉換未結束,繼續等待whenST3=>ALE<='0';START<='0';LOCK<='0';OE<='1';next_state<=st4;--開啟OE,輸出轉換好的數據whenST4=>ALE<='0';START<='0';LOCK<='1';OE<='1';next_state<=st0;whenothers=>next_state<=st0;endcase;endprocessCOM;REG:process(CLK)beginIF(CLK'eventandCLK='1')thencurrent_state<=next_state;endif;endprocessREG;--由信號current_state將當前狀態值帶出此進程:regLATCH1:process(lock)--此進程中在LOCK的上升沿,將轉換好的數據鎖入beginif(lock'eventandlock='1')thenregl<=d;endif;endprocessLATCH1;endbehav;(2)地址計數器模塊圖12RAM地址計數器模塊圖地址計數器模塊有兩個時鐘信號輸入LOCK0和CLK,LOCK0為寫時鐘信號,CLK為讀時鐘信號。WE為讀寫控制端,CLR為復位端。當WE為高電平的時候,CLKOUT=LOCK0,地址計數端DOUT[8..0]在時鐘上升沿開始計數,對SRAM進行尋址,計滿后DOUT[8..0]同時清零,INTERRUPT置位向單片機申請中斷請求。單片機響應中斷,控制CNT10B的WE為低電平,此時CLKOUT=CLK,CLK由單片機提供。地址計數端DOUT[8..0]又開始計數,對SRAM進行尋址,此時為單片機讀取數據提供地址。Libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityCNT10Bisport(LOCK0,CLR,CLK,WE:instd_logic;CLKOUT:outstd_logic;DOUT:outstd_logic_vector(8downto0);INTERRUPT:outstd_logic);ENDCNT10B;architecturebehavofCNT10BissignalDOUT0:std_logic_vector(8downto0);signalfull:std_logic;beginDOUT<=DOUT0;INTERRUPT<=full;process(CLK,CLR,WE)beginifCLR='0'thenDOUT0<="000000000";elseifWE='1'thenif(LOCK0'eventandLOCK0='1')thenifDOUT0="111111111"thenDOUT0<="000000000";full<='1';elseDOUT0<=DOUT0+1;full<='0';endif;endif;CLKOUT<=LOCK0;elseifDOUT0="111111111"thenDOUT0<="000000000";elseDOUT0<=DOUT0+1;endif;CLKOUT<=CLK;endif;endif;endprocess;DOUT<=DOUT0;endbehav;圖13RAM地址計數器寫工作時序仿真圖由圖可知WE為讀寫時鐘信號選擇端。當WE為高電平,CLKOUT=LOCK0。當WE為低電平,CLKOUT=CLK。在兩種時鐘信號下,地址計數器都進行計數,給數據的寫入或者讀出提供地址信號。圖14RAM地址計數器讀工作時序仿真圖當地址計數模塊接讀時鐘信號時,此時提供讀出數據的地址,需從寫地址開始。(3)存儲器模塊存儲器模塊是在QuartusII環境下定制的RAM,此RAM的數據寬度選擇為8位,地址寬度為9位,有一個地址鎖存時鐘clock和一個寫使能控制線wren。Wren為高電平時SRAM進入寫狀態,在寫時鐘控制下將數據由data[7..0]寫入。當wren為低電平時SRAM進入讀狀態,在讀時鐘控制下將數據由q[7..0]讀出[14]。存儲器模塊如圖17所示。圖15RAM模塊圖RAM在LOCK0時鐘上升沿時將數據寫入,地址計數器將LOCK0作為寫時鐘信號,在其上升沿時地址自加一,RAM寫時序如圖18所示。圖16RAM寫時序圖當寫入數據的地址加滿時,產生一個溢出信號,向單片機申請中斷信號。圖17RAM寫時序中斷信號圖RAM進入讀狀態時,此時由單片機提供讀時鐘信號,RAM寫時序如圖19所示。圖18RAM讀時序圖LIBRARYieee;USEieee.std_logic_1164.all;LIBRARYaltera_mf;USEaltera_mf.altera_mf_components.all;ENTITYRAMIS PORT (address :INSTD_LOGIC_VECTOR(8DOWNTO0); clock :INSTD_LOGIC; data :INSTD_LOGIC_VECTOR(7DOWNTO0); wren :INSTD_LOGIC; q :OUTSTD_LOGIC_VECTOR(7DOWNTO0) );ENDRAM;ARCHITECTURESYNOFRAMIS SIGNALsub_wire0 :STD_LOGIC_VECTOR(7DOWNTO0); COMPONENTaltsyncram GENERIC( intended_device_family :STRING; width_a :NATURAL; widthad_a :NATURAL; numwords_a :NATURAL; operation_mode :STRING; outdata_reg_a :STRING; outdata_aclr_a :STRING; width_byteena_a :NATURAL; clock_enable_input_a :STRING; clock_enable_output_a :STRING; power_up_uninitialized :STRING; lpm_hint :STRING; lpm_type :STRING ); PORT( wren_a :INSTD_LOGIC; clock0 :INSTD_LOGIC; address_a :INSTD_LOGIC_VECTOR(8DOWNTO0); q_a :OUTSTD_LOGIC_VECTOR(7DOWNTO0); data_a :INSTD_LOGIC_VECTOR(7DOWNTO0) ); ENDCOMPONENT;BEGIN q<=sub_wire0(7DOWNTO0); altsyncram_component:altsyncram GENERICMAP( intended_device_family=>"CycloneII", width_a=>8, widthad_a=>9, numwords_a=>512, operation_mode=>"SINGLE_PORT", outdata_reg_a=>"CLOCK0", outdata_aclr_a=>"NONE", width_byteena_a=>1, clock_enable_input_a=>"BYPASS", clock_enable_output_a=>"BYPASS", power_up_uninitialized=>"FALSE", lpm_hint=>"ENABLE_RUNTIME_MOD=YES,INSTANCE_NAME=RAM", lpm_type=>"altsyncram" ) PORTMAP( wren_a=>wren, clock0=>clock, address_a=>address, data_a=>data, q_a=>sub_wire0 );ENDSYN;4.1.2CPLD最小控制系統流程圖CPLD最小控制系統包括ADCINT模塊,地址計數器模塊和RAM存儲器模塊。ADCINT模塊控制ADC0809啟動采集數據,輸出數據鎖存時鐘信號(用于單片機讀取數據的時鐘信號)。地址計數器模塊控制RAM數據的寫入和讀出的地址計數。RAM存儲器模塊用于將ADC0809采樣的數據存儲和作為單片機的片外數據存儲器[15]。RAM存儲器的讀入和寫出狀態由WREN控制,寫入狀態下的時鐘信號由CPLD的LOCK0輸出數據鎖存信號提供,讀出狀態下的時鐘信號為狀態機的的工作時鐘信號。圖19CPLD最小控制系統流程圖4.2單片機控制程序部分AT89C51內部有一個可編程的全雙工串行接口SBUF,具有UART(通用異步接受和發送器)的全部功能。串行接口的控制寄存器有兩個,串行控制寄存器SCON和能改變波特率的特殊功能寄存器PCON,其作用如下:(1)串行控制寄存器SCON,字節地址98HSCON寄存器用于設定串行口的工作方式、接收發送控制以及設置狀態標志。各位的含義如表:表1專用寄存器SCON各位含義表D0D1D0D1D2D3D4D5D6D7RITIRB8TB8RENSM2SM1SM1SM0、SMl一串口的方式選擇位,其編碼如表2所示。REN.允許串行接受控制位。REN=l:允許串行接受,REN=0:禁止串行接受。SM2一允許方式2和方式3進行多機通信控制位。SM2=0:單機對單機,SM2=I多機通信。TB8--發送數據第9位。RB8--接收數據第9位。TI--發送中斷標志。RI--接收中斷標志。表2串口的工作方式方式SM0方式SM0SM1功能說明012300110101移位寄存器方式,波特率為fosc/128位UART,波特率可變(T=溢出率/n)8位UART,波特率為fosc/64或fosc/329位UART,波特率可變(T=溢出率/n)表中fosc為晶振頻率;UART為通用異步接受和發送器。(2)特殊功能寄存器PCON,字節地址87HPCON是電源控制寄存器,其中SMOD為串行接口波特率系數選擇位。當SMOD=1時波特率加倍。(波特率:串行接口每秒發送或接收的位數)串行口工作方式1將串行口配置為波特率可變的通用異步接收發送UART方式。本方式的數據格式為10位:一個起始位(0),8個數據位(LSB在前),一個停止位(1)。接收時,停止位進入SCON特殊功能寄存器的RB8位。工作方式1時的波特率是可變的。在51型中方式1的波特率取決于定時器1溢出率。波特率確定采用定時器1的方式2,即自動重裝的8位定時器。圖20單片機最小控制系統流程圖#include<reg952.h>#include<stdio.h>unsignedchargetdata;unsignedinttemp;inti;intj;sbitP11=P1^1;sbitP10=P1^0;//串口初始化voidcorn_initialize(void){TMOD=0x20;//設置波特率為9600的定時器1方式和初始值TLl=0xf3;THl=0xf3;SCON=0xd8;//設置串口工作方式3PCON=0x80;IT0=1;TRl=l;EA=1;EX0=1;)main(){getdata=P0;temp=getdata;corn_initialize();while(1){ SBUF=ternp;}voidint0_interrupt(void)interrupt0{ P10=0; ES=1;}voidserial_interrupt(void)interrupt4{ TI=0; i++;P11=~P11;if(i==512){ ES=0; P10=0; }}單片機的P0口用來讀取存儲器的數據,P1.0接地址計數器的WE讀寫時鐘信號選擇端和存儲器的WREN讀寫使能端,當計數器在寫時鐘狀態計滿時,申請中斷,單片機響應外部中斷,并在中斷服務子程序中將P1.0置零,即使存儲器進入讀出狀態,同時開串口中斷,準備發送數據到PC機中,讀出時鐘由單片機的P1.1提供。當讀地址計到512時,關閉串口中斷,同時使存儲器進入寫入狀態。這里存在中斷嵌套問題,必須先執行由

溫馨提示

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

評論

0/150

提交評論