基于FPGA上下限可設置報警溫度計_第1頁
基于FPGA上下限可設置報警溫度計_第2頁
基于FPGA上下限可設置報警溫度計_第3頁
基于FPGA上下限可設置報警溫度計_第4頁
基于FPGA上下限可設置報警溫度計_第5頁
已閱讀5頁,還剩50頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、EDA課程設計課設名稱: 報警溫度計課設日期: 姓 名:學 號:哈爾濱工業(yè)大學(威海)信電學院電子信息工程2014.目錄一、所用軟硬與硬件介紹21.2硬件介紹2二系統(tǒng)設計22.1 設計思想22.1.1課題背景22.1.2 設計目的32.2工作原理及系統(tǒng)框圖32.3子模塊輸入輸出和功能4時鐘模塊4報警模塊:4復位5溫度采集模塊:5溫度顯示模塊:5溫度仲裁模塊:7溫度設定模塊:7三軟件設計73.1 程序流程圖和狀態(tài)機83.2 程序清單9時鐘模塊9報警模塊:10溫度采集模塊:12溫度顯示模塊:24溫度仲裁模塊:28溫度設定模塊:29四調試及結果304.1 模塊仿真304.2分析運行結果30五. 設計

2、總結305.1錯誤分析315.2心得體會31一、所用軟硬與硬件介紹1.1軟件介紹本次課程設計所使用軟件是QuartusII,Quartus II 是Altera公司的綜合性PLD/FPGA開發(fā)軟件,支持原理圖、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多種設計輸入形式,內嵌自有的綜合器以及仿真器,可以完成從設計輸入到硬件配置的完整PLD設計流程。Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl腳本完成設計流程外,提供了完善的用戶圖形界面設計方式。具有運行速度快,界面統(tǒng)一,功能集中,易學

3、易用等特點。Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模塊庫,使用戶可以充分利用成熟的模塊,簡化了設計的復雜性、加快了設計速度。對第三方EDA工具的良好支持也使用戶可以在設計流程的各個階段使用熟悉的第三方EDA工具。此外,Quartus II 通過和DSP Builder工具與Matlab/Simulink相結合,可以方便地實現(xiàn)各種DSP應用系統(tǒng);支持Altera的片上可編程系統(tǒng)(SOPC)開發(fā),集系統(tǒng)級設計、嵌入式軟件開發(fā)、可編程邏輯設計于一體,是一種綜合性的開發(fā)平臺。Altera Quartus II 作為一種可編程邏輯的設計環(huán)境, 由于其強

4、大的設計能力和直觀易用的接口,越來越受到數(shù)字系統(tǒng)設計者的歡迎。1.2硬件介紹本次課程設計使用的硬件器材是哈爾濱工業(yè)大學EDA實驗箱,該實驗箱由11個模塊組成,分別是:電源模塊,發(fā)光二極管,8段8數(shù)碼管,16*16點陣,核心板,擴展口,喇叭,撥碼按鍵開關,4*4鍵盤矩陣,溫度傳感器,紅外線傳感器。而報警溫度計的設計只要電源模塊,發(fā)光二極管,8段8數(shù)碼管,喇叭,溫度傳感器,4*4鍵盤矩陣。二系統(tǒng)設計2.1 設計思想基于FPGA,設計一個測量溫度的溫度計,能夠精確實時的顯示溫度,并且達到溫度上下限可報警。2.1.1課題背景隨著社會的發(fā)展,科技的進步,以及測溫儀器在各個領域的應用,智能化已是現(xiàn)代溫度控

5、制系統(tǒng)發(fā)展的主流方向。溫度測試控制系統(tǒng),控制對象是溫度。溫度控制在日常生活及工業(yè)領域應用相當廣泛,比如溫室、水池、發(fā)酵缸、電源等場所的溫度控制。而以往溫度控制是由人工完成的而且不夠重視,其實在很多場所溫度都需要監(jiān)控以防止發(fā)生意外。針對此問題,本系統(tǒng)設計的目的是實現(xiàn)一種可連續(xù)高精度調溫的溫度控制系統(tǒng),它應用廣泛,功能強大,小巧美觀,便于攜帶,是一款既實用又廉價的控制系統(tǒng)。特別是近年來,溫度控制系統(tǒng)已應用到人們生活的各個方面,但溫度控制一直是一個未開發(fā)的領域,卻又是與人們息息相關的一個實際問題。2.1.2 設計目的1、設計一個數(shù)字溫度計能夠測試環(huán)境溫度。2、顯示環(huán)境溫度。3、能設置溫度的報警范圍,

6、當前溫度高于或低于設置的上下限時候,喇叭報警。2.2工作原理及系統(tǒng)框圖溫度顯示復位時鐘分頻溫度采集溫度設定溫度仲裁喇叭報警 本次設計共有6大模塊,分別為時鐘分頻clk1111,溫度顯示display,溫度采集T_SENSOR,溫度仲裁compare,喇叭報警beep,以及溫度設定setting。其中時鐘分頻產生100Hz(供給setting模塊),1MHz(供給T_SENSOR和beep模塊)和25MHZ(供給compare和display模塊)的時鐘頻率。復位時,setting2.3子模塊輸入輸出和功能時鐘模塊由于溫度顯示,溫度采集,溫度仲裁和喇叭報警都需要一個時鐘信號,而且各部分所需的時鐘

7、不同,所以通過一個分頻器為各模塊提供時鐘。Clock輸入clk輸入50MHz時鐘rst_n復位輸出clk_1us輸出25MHz時鐘clk_dis輸出1MHz時鐘clk_sitting輸出100Hz時鐘報警模塊:通過獲得系統(tǒng)控制模塊的數(shù)據(jù),直接決定是否報警。因此該模塊顯得特別簡單,直接獲得系統(tǒng)控制模塊得到的電平作為使能端。beep輸入clk輸入1us時鐘信號en使能信號啟動報警輸出Signal_out輸出報警信號復位 將按鍵開關K8設置為復位開關。溫度采集模塊:溫度測量傳感器采用DALLAS公司DS18B20的單總線數(shù)字化溫度傳感器,測溫范圍為-55125,可編程為9位12位A/D轉換精度,測溫

8、分辨率達到0.0625,采用寄生電源工作方式,CPU只需一根口線便能與DS18B20通信,占用CPU口線少,可節(jié)省大量引線和邏輯電路溫度采集輸入clk_1us1us時鐘輸入rst_n復位信號輸出temperature15.0輸出16位溫度數(shù)據(jù)one_wire單總線溫度顯示模塊:溫度的顯示可以通過8個8段數(shù)碼管來實現(xiàn),因為是動態(tài)顯示,所以每次只有一個數(shù)碼管顯示。由于掃描顯示速率夠快,人的視覺有余暉效應,使人感覺所有的數(shù)碼管都在同時顯示。 溫度數(shù)據(jù)轉換 輸入up顯示上限down顯示下限tup15.0溫度上限tdown15.0溫度下限clk_dis輸入1ms時鐘rst_n復位信號temperatur

9、e15.0輸入溫度數(shù)據(jù) 輸出wela7.0片選信號dula7.0數(shù)碼顯示左邊數(shù)碼管信號輸入接口分布溫度數(shù)字信號輸入aDula0Pin_152bDula1Pin_143cDula2Pin_145dDula3Pin_160eDula4Pin_162f Dula5Pin_150gDula6Pin_147dpDula7Pin_171片選信號輸入左S4wela7Pin_185S3wela6Pin_181S2wela5Pin_173S1wela4Pin_170右S4wela4Pin_168右S3wela4Pin_179S2wela4Pin_164S1wela4Pin_175溫度仲裁模塊: Compare

10、輸入tup15:0溫度上限tdown15:0溫度下限clk_dis1ms時鐘temperature15:0輸入溫度數(shù)據(jù)rst_n復位輸出en報警觸發(fā)溫度設定模塊:setting輸入up(K5)上下限加1Down(K6)上下限減1tup(SW1)設定溫度上限Tdown(SW2)設定溫度下限clk_setting0.2s時鐘reset復位輸出seta15:0輸出溫度上限setb15:0輸出溫度下限三軟件設計3.1 程序流程圖和狀態(tài)機 設計原理圖 開始 設置上下限顯示溫度溫度采集超過溫度范圍限報警 Yes No返回 程序流程圖3.2 程序清單時鐘模塊module clock1111( clk, rs

11、t_n, clk_1us, clk_dis, clk_setting); input clk;input rst_n;output clk_1us;output clk_dis;output clk_setting;reg clk_1us;reg clk_dis;reg clk_setting;reg 3:0 count;reg 24:0 count1;reg 24:0 count2;always (posedge clk or negedge rst_n)begin if(!rst_n) /如果沒復位 begin count=0; clk_1us=0; end /沒意義則結束 else be

12、gin if(count=12) begin clk_1us=clk_1us; /取反,1變成0 count=0; end else count=count+1; end endalways (posedge clk or negedge rst_n)begin if(!rst_n) begin count1=0; clk_dis=0; end else begin if(count1=25000) begin clk_dis=clk_dis; count1=0; end else count1=count1+1; end end always (posedge clk or negedge

13、rst_n)begin if(!rst_n) begin count2=0; clk_setting=0; end else begin if(count2=2500000) begin clk_setting=clk_setting; count2=0; end else count2=count2+1; end end endmodule報警模塊:module beep( clk, en, Signal_out); input clk; input en; output Signal_out;reg Signal_out;reg 23:0 Counter;reg State;paramet

14、er BEEP_off=1b0, BEEP_on=1b1;always(posedge clk) if(en)begin Counter=24d1;case(State)BEEP_off:beginSignal_out=1b1; /Counter=24d1; Counter=(Counter+24d1); if(Counter=24d800)begin Counter=24d1; State=BEEP_on;end else State=BEEP_off;endBEEP_on:begin Signal_out=1b0; /Counter=24d1; Counter=(Counter+24d1)

15、;if(Counter=24d800) beginCounter=24d1;State=BEEP_off; endelse State=BEEP_on;enddefault:State=BEEP_off;endcaseendendmodule溫度采集模塊:module T_SENSOR( clk_1us, / 25MHz時鐘 rst_n, / 異步復位 one_wire, / One-Wire總線 temperature / 輸出溫度值); input clk_1us ; / 25MHz時鐘 input rst_n ; / 異步復位 inout one_wire ; / One-Wire總線

16、output 15:0 temperature ; / 輸出溫度值 /延時模塊的使用/+/ 延時模塊 開始/+reg 19:0 cnt_1us; / 1us延時計數(shù)子reg cnt_1us_clear; / 請1us延時計數(shù)子always (posedge clk_1us) if (cnt_1us_clear) cnt_1us = 0; else cnt_1us = cnt_1us + 1b1;/-/ 延時模塊 結束/-/+/ DS18B20狀態(tài)機 開始/+/+/ 格雷碼parameter S00 = 5h00;parameter S0 = 5h01;parameter S1 = 5h03;p

17、arameter S2 = 5h02;parameter S3 = 5h06;parameter S4 = 5h07;parameter S5 = 5h05;parameter S6 = 5h04;parameter S7 = 5h0C;parameter WRITE0 = 5h0D;parameter WRITE1 = 5h0F;parameter WRITE00 = 5h0E;parameter WRITE01 = 5h0A;parameter READ0 = 5h0B;parameter READ1 = 5h09;parameter READ2 = 5h08;parameter READ

18、3 = 5h18;reg 4:0 state; / 狀態(tài)寄存器/-reg one_wire_buf; / One-Wire總線 緩存寄存器reg 15:0 temperature_buf; / 采集到的溫度值緩存器(未處理)reg 5:0 step; / 子狀態(tài)寄存器 050reg 3:0 bit_valid; / 有效位 always (posedge clk_1us, negedge rst_n)begin if (!rst_n) begin one_wire_buf = 1bZ; step = 0; state = S00; end else begin case (state) S00

19、 : begin temperature_buf = 16hFFFF; state = S0; end S0 : begin / 初始化 cnt_1us_clear = 1; one_wire_buf = 0; state = S1; end S1 : begin cnt_1us_clear = 0; if (cnt_1us = 500) / 延時500us begin cnt_1us_clear = 1; one_wire_buf = 1bZ; / 釋放總線 state = S2; end end S2 : begin cnt_1us_clear = 0; if (cnt_1us = 100

20、) / 等待100us begin cnt_1us_clear = 1; state = S3; end end S3 : if (one_wire) / 若18b20拉低總線,初始化成功 state = S4; else if (one_wire) / 否則,初始化不成功,返回S0 state = S0; S4 : begin cnt_1us_clear = 0; if (cnt_1us = 400) / 再延時400us begin cnt_1us_clear = 1; state = S5; end end S5 : begin / 寫數(shù)據(jù) if (step = 0) / 0xCC be

21、gin step = step + 1b1; state = WRITE0; end else if (step = 1) begin step = step + 1b1; state = WRITE0; end else if (step = 2) begin one_wire_buf = 0; step = step + 1b1; state = WRITE01; end else if (step = 3) begin one_wire_buf = 0; step = step + 1b1; state = WRITE01; end else if (step = 4) begin st

22、ep = step + 1b1; state = WRITE0; end else if (step = 5) begin step = step + 1b1; state = WRITE0; end else if (step = 6) begin one_wire_buf = 0; step = step + 1b1; state = WRITE01; end else if (step = 7) begin one_wire_buf = 0; step = step + 1b1; state = WRITE01; end else if (step = 8) / 0x44 begin s

23、tep = step + 1b1; state = WRITE0; end else if (step = 9) begin step = step + 1b1; state = WRITE0; end else if (step = 10) begin one_wire_buf = 0; step = step + 1b1; state = WRITE01; end else if (step = 11) begin step = step + 1b1; state = WRITE0; end else if (step = 12) begin step = step + 1b1; stat

24、e = WRITE0; end else if (step = 13) begin step = step + 1b1; state = WRITE0; end else if (step = 14) begin one_wire_buf = 0; step = step + 1b1; state = WRITE01; end else if (step = 15) begin step = step + 1b1; state = WRITE0; end / 第一次寫完,750ms后,跳回S0 else if (step = 16) begin one_wire_buf = 1bZ; step

25、 = step + 1b1; state = S6; end / 再次置數(shù)0xCC和0xBE else if (step = 17) / 0xCC begin step = step + 1b1; state = WRITE0; end else if (step = 18) begin step = step + 1b1; state = WRITE0; end else if (step = 19) begin one_wire_buf = 0; step = step + 1b1; state = WRITE01; end else if (step = 20) begin step =

26、 step + 1b1; state = WRITE01; one_wire_buf = 0; end else if (step = 21) begin step = step + 1b1; state = WRITE0; end else if (step = 22) begin step = step + 1b1; state = WRITE0; end else if (step = 23) begin one_wire_buf = 0; step = step + 1b1; state = WRITE01; end else if (step = 24) begin one_wire

27、_buf = 0; step = step + 1b1; state = WRITE01; end else if (step = 25) / 0xBE begin step = step + 1b1; state = WRITE0; end else if (step = 26) begin one_wire_buf = 0; step = step + 1b1; state = WRITE01; end else if (step = 27) begin one_wire_buf = 0; step = step + 1b1; state = WRITE01; end else if (s

28、tep = 28) begin one_wire_buf = 0; step = step + 1b1; state = WRITE01; end else if (step = 29) begin one_wire_buf = 0; step = step + 1b1; state = WRITE01; end else if (step = 30) begin one_wire_buf = 0; step = step + 1b1; state = WRITE01; end else if (step = 31) begin step = step + 1b1; state = WRITE

29、0; end else if (step = 32) begin one_wire_buf = 0; step = step + 1b1; state = WRITE01; end / 第二次寫完,跳到S7,直接開始讀數(shù)據(jù) else if (step = 33) begin step = step + 1b1; state = S7; end end S6 : begin cnt_1us_clear = 0; if (cnt_1us = 750000 | one_wire) / 延時750ms! begin cnt_1us_clear = 1; state = S0; / 跳回S0,再次初始化

30、 end end S7 : begin / 讀數(shù)據(jù) if (step = 34) begin bit_valid = 0; one_wire_buf = 0; step = step + 1b1; state = READ0; end else if (step = 35) begin bit_valid = bit_valid + 1b1; one_wire_buf = 0; step = step + 1b1; state = READ0; end else if (step = 36) begin bit_valid = bit_valid + 1b1; one_wire_buf = 0

31、; step = step + 1b1; state = READ0; end else if (step = 37) begin bit_valid = bit_valid + 1b1; one_wire_buf = 0; step = step + 1b1; state = READ0; end else if (step = 38) begin bit_valid = bit_valid + 1b1; one_wire_buf = 0; step = step + 1b1; state = READ0; end else if (step = 39) begin bit_valid = bit_valid + 1b1; one_wire_buf = 0; step = step + 1b1; stat

溫馨提示

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

評論

0/150

提交評論