簡易電磁爐控制器_第1頁
簡易電磁爐控制器_第2頁
簡易電磁爐控制器_第3頁
簡易電磁爐控制器_第4頁
簡易電磁爐控制器_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、數(shù)字電路與邏輯設(shè)計(jì)綜合實(shí)驗(yàn)簡易電磁爐控制器學(xué) 院:信息與通信工程學(xué)院 學(xué)生姓名: 班 級: 學(xué) 號: 班內(nèi)序號:1、 摘要(150左右)與關(guān)鍵字(5個(gè)以內(nèi))摘要:電磁爐的設(shè)計(jì)中包含11個(gè)模塊:模式調(diào)節(jié),火力調(diào)節(jié),時(shí)間模塊,倒計(jì)時(shí)模塊,關(guān)閉模塊,點(diǎn)陣顯示,數(shù)碼管顯示,分頻器,防抖模塊,蜂鳴器模塊以及擴(kuò)展模塊的進(jìn)度條模塊,每個(gè)模塊既可獨(dú)立編寫、仿真測試,又可在VHDL中將模塊封裝后,通過它們之間的控制關(guān)系進(jìn)行連接,實(shí)現(xiàn)基本的電磁爐的功能。關(guān)鍵字:模式調(diào)節(jié) 火力調(diào)節(jié) 時(shí)間模塊 倒計(jì)時(shí)模塊 狀態(tài)機(jī)2、 設(shè)計(jì)任務(wù)要求 題目一:簡易電磁爐控制器的設(shè)計(jì)與實(shí)現(xiàn) 設(shè)計(jì)制作一個(gè)簡易電磁爐控制器?;疽螅?1 、

2、烹飪模式選擇:電磁爐的烹飪模式有火鍋、煎炒、爆炒、煲湯和蒸燉五檔可選。用一個(gè)按鍵(BTN7)實(shí)現(xiàn)烹飪檔位的選擇(按下此鍵依上述順序依次變化),用點(diǎn)陣顯示當(dāng)前的烹調(diào)檔位(火鍋顯示H、煎炒顯示J、爆炒顯示B 、煲湯顯示T 和蒸燉顯示Z),烹調(diào)檔位的選擇按鍵同時(shí)也是加熱的開始按鍵,即烹調(diào)檔位選定的同時(shí)電磁爐就以最大功率開始加熱,沒有選擇時(shí)電磁爐處于停止?fàn)顟B(tài),點(diǎn)陣不顯示。 2 、火力調(diào)節(jié):電磁爐的火力分 5 檔可調(diào): 1900W-1500W-1100W-600W-100W,用數(shù)碼管DISP3-DISP0 顯示當(dāng)前的火力,用兩個(gè)按鍵(BTN6 和BTN5)實(shí)現(xiàn)火力的增加或減少,烹調(diào)過程中,除爆炒模式外,

3、其它模式均可以隨時(shí)可以調(diào)節(jié)火力,爆炒模式只能以最高功率加熱。 3 、定時(shí)功能:用一個(gè)按鍵(BTN4)實(shí)現(xiàn)定時(shí)設(shè)置,按下定時(shí)鍵,蜂鳴器響一聲,每按一次定時(shí)鍵,定時(shí)時(shí)間以5-10-30-60 秒鐘的順序依次遞增,定時(shí)設(shè)定完畢后,電磁爐開始倒計(jì)時(shí)。用數(shù)碼管 DISP5 和DISP4 顯示定時(shí)檔位和倒計(jì)時(shí)的過程,倒計(jì)時(shí)時(shí)間到后,電磁爐自動(dòng)停止加熱并關(guān)機(jī)。 4 、不進(jìn)行定時(shí)操作時(shí),電磁爐以默認(rèn)加熱時(shí)間進(jìn)行加熱。蒸燉模式的默認(rèn)時(shí)間為 20秒鐘;爆炒模式的默認(rèn)時(shí)間是3 秒鐘,爆炒3 秒鐘后自動(dòng)返回煎炒模式;其他模式的默認(rèn)時(shí)間為90 秒。 5 、用點(diǎn)亮的發(fā)光二極管LD4 表示開機(jī)加熱,熄滅表示關(guān)機(jī)。 6 、設(shè)

4、置關(guān)閉鍵,任何時(shí)候按下關(guān)閉鍵即可將電磁爐關(guān)機(jī)。 提高要求: 自擬其它功能。3、 設(shè)計(jì)思路、總體結(jié)構(gòu)框圖設(shè)計(jì)思路:首先確定該實(shí)驗(yàn)的功能,經(jīng)過仔細(xì)分析后將該實(shí)驗(yàn)分為11個(gè)模塊:模式調(diào)節(jié),火力調(diào)節(jié),時(shí)間模塊,倒計(jì)時(shí)模塊,關(guān)閉模塊,點(diǎn)陣顯示,數(shù)碼管顯示,分頻器,防抖模塊,蜂鳴器模塊以及擴(kuò)展模塊的進(jìn)度條模塊,各個(gè)模塊的功能的實(shí)現(xiàn)方法以及之間的聯(lián)系如下:1.模式調(diào)節(jié):6個(gè)狀態(tài)的狀態(tài)機(jī),其中5個(gè)為循環(huán)狀態(tài)機(jī)C->H->J->B->T->Z->H,C狀態(tài)為啟動(dòng)循環(huán)而不參與循環(huán);當(dāng)有時(shí)間模塊傳來的timecontrol信號,爆炒模式B反向轉(zhuǎn)換為煎炒模式J。2.火力調(diào)節(jié):5個(gè)狀

5、態(tài)的狀態(tài)機(jī),1900<->1500<->1100<->600<->100;當(dāng)有模式調(diào)節(jié)傳來的state2.0為爆炒模式B時(shí),則狀態(tài)機(jī)不起作用,輸出只能為1900。3.時(shí)間模塊:包含定時(shí)和不定時(shí)功能。系統(tǒng)默認(rèn)為不定時(shí)計(jì)時(shí),不同模式系統(tǒng)默認(rèn)時(shí)間不同;當(dāng)接受有外部按鍵信號BTN4時(shí),通過二選一數(shù)據(jù)選擇更改為定時(shí)計(jì)時(shí),且不能返回不定時(shí)計(jì)時(shí),包含5個(gè)狀態(tài),其中4個(gè)為循環(huán)狀態(tài)機(jī)s0->s5->s10->s30->s60->s5,C狀態(tài)為啟動(dòng)循環(huán)而不參與循環(huán)。兩種計(jì)時(shí)方法均計(jì)時(shí)完畢發(fā)出close信號關(guān)機(jī)。4.倒計(jì)時(shí)模塊:將時(shí)間模塊

6、傳來的剩余時(shí)間顯示在數(shù)碼管上,需要時(shí)間模塊傳來的剩余時(shí)間lefttime信號。5.關(guān)閉模塊:當(dāng)接受有外部按鍵信號即模式調(diào)節(jié)按鍵BTN7,系統(tǒng)則由關(guān)閉狀態(tài)轉(zhuǎn)換為開機(jī)狀態(tài);當(dāng)接受到時(shí)間模塊發(fā)出的計(jì)數(shù)完畢信號close或者外部關(guān)閉按鍵BTN3,則close模塊產(chǎn)生復(fù)位信號reset,關(guān)閉所有模塊。6.點(diǎn)陣顯示:將模式調(diào)節(jié)的5個(gè)字母H、J、B、T、Z進(jìn)行顯示,通過逐行掃描點(diǎn)陣顯示字母。7.數(shù)碼管顯示:顯示火力調(diào)節(jié)的功率以及倒計(jì)時(shí)的時(shí)間,通過逐個(gè)選通CAT0CAT5來實(shí)現(xiàn)。8.分頻器:將實(shí)驗(yàn)板的本振頻率50MHz經(jīng)過多級分頻得到1kHz和100kHz。9.防抖模塊:通過設(shè)計(jì)代碼,將外部按鍵信號轉(zhuǎn)換為一個(gè)

7、標(biāo)準(zhǔn)的脈沖,此模塊置于每個(gè)包含有外部按鍵的模塊之前。10.蜂鳴器模塊:當(dāng)有外部按鍵BTN4時(shí),即啟動(dòng)定時(shí)模塊時(shí),啟動(dòng)蜂鳴器,且蜂鳴的時(shí)間由一個(gè)計(jì)數(shù)統(tǒng)計(jì)上升沿的個(gè)數(shù),達(dá)到一定個(gè)數(shù)(10個(gè))蜂鳴結(jié)束。11.進(jìn)度條模塊:倒計(jì)時(shí)開始時(shí)將8個(gè)LED燈均點(diǎn)亮,通過時(shí)間模塊的剩余時(shí)間lefttime計(jì)算LED燈點(diǎn)亮的個(gè)數(shù)。 當(dāng)所有模塊分析清楚后,逐個(gè)編寫每個(gè)部分的代碼,編譯成功后并測試單個(gè)模塊的仿真波形,逐個(gè)下到實(shí)驗(yàn)板進(jìn)行測試;如果下載到實(shí)驗(yàn)板不能完成功能,修改思路,重新編寫本塊代碼,重新調(diào)試;當(dāng)所有模塊均能實(shí)現(xiàn)功能后,通過設(shè)計(jì)中各個(gè)模塊之間的信號聯(lián)系,將模塊封裝后進(jìn)行連線,最終完成實(shí)驗(yàn)??傮w結(jié)構(gòu)框圖:4、

8、 控制器部分的狀態(tài)轉(zhuǎn)移圖和流程圖狀態(tài)轉(zhuǎn)移圖:1. 模式調(diào)節(jié)2. 火力調(diào)節(jié)3. 時(shí)間模塊流程圖:5、 分塊電路和總體電路的設(shè)計(jì)(含關(guān)鍵源程序或電路圖)主要的分塊電路:1. 時(shí)間模塊:包含不定時(shí)功能與定時(shí)功能(1) 系統(tǒng)默認(rèn)的為不定時(shí)功能,即ordercontrol初始選擇不定時(shí)norder模塊;當(dāng)有外部按鍵BTN4輸入信號時(shí),ordercontrol選擇定時(shí)order模塊,且改變只能一次,不能返回,直到計(jì)時(shí)結(jié)束關(guān)機(jī);(2) 在選擇功能時(shí),如果有外部關(guān)閉按鍵BTN3的復(fù)位信號reset輸入或者計(jì)時(shí)完畢時(shí),則輸出復(fù)位,且將ordercontrol重新初始化為norder狀態(tài);(3) 將輸出的時(shí)間交付

9、給倒計(jì)時(shí)模塊count。 程序:ordercontrol.vhd architecture behave of ordercontrol issignal mask:std_logic:='0'beginprocess(clk1kHz)begin if clk1kHz'event and clk1kHz ='1' then if reset = '1' then resetorder<='1'resetnorder<='0' end if; if orderinput = '1'

10、 then resetorder<='0'resetnorder<='1' end if; orderset<=orderinput; end if;end process;end behave;2. 倒計(jì)時(shí)模塊:顯示倒計(jì)時(shí)且使用頻率時(shí)鐘1kHz,需要進(jìn)行轉(zhuǎn)換leftimetemp/1000=leftime,且將leftimetemp信號輸出給進(jìn)度條模塊(1) ordercontrol是用來判斷時(shí)間模塊的時(shí)間改變時(shí),計(jì)數(shù)是否要重新開始;(2) decount的功能是用來輸出剩余時(shí)間,由于計(jì)時(shí)使用頻率時(shí)鐘1Hz會(huì)產(chǎn)生較大的延時(shí),故采用頻率時(shí)鐘1k

11、Hz。對時(shí)鐘的下降沿計(jì)數(shù)timecount,用總的時(shí)間*1000減去計(jì)數(shù)值timecount,則得到倒計(jì)時(shí)剩余的脈沖數(shù);如果想得到時(shí)間,則需要leftimetemp/1000轉(zhuǎn)換成真正的剩余時(shí)間leftime;(3) 將剩余時(shí)間leftime輸出給div模塊,整除后輸出給十位,取余后輸出給個(gè)位。(4) 將剩余的脈沖數(shù)leftimetemp輸出給進(jìn)度條模塊,由于進(jìn)度條模塊也采用頻率時(shí)鐘1kHz計(jì)時(shí),且也需要倒計(jì)時(shí),則可同時(shí)與倒計(jì)時(shí)模塊共用leftimetemp。(5) 有一種特殊情況,當(dāng)模式為爆炒模式B時(shí),系統(tǒng)默認(rèn)時(shí)間為3s,倒計(jì)時(shí)完畢后系統(tǒng)不關(guān)閉,而是轉(zhuǎn)入煎炒模式J,繼續(xù)倒計(jì)時(shí)90s后才能關(guān)閉

12、。程序:decount.vhdarchitecture behave of decount isbeginprocess(clk1kHz)variable timecount:integer range 0 to 90000;variable timesetemp:integer range 0 to 90;variable mask:std_logic:='0'beginif clk1kHz'event and clk1kHz='0' then if mask ='0' then timesetemp:=timeset;mask:=&#

13、39;1'timecount:=0; end if; timecontrol<='0' timecount:=timecount+1; leftimetemp<=timesetemp*1000-timecount; leftime<=timesetemp-timecount / 1000; if reset='1' then mask:='0' timecount:=0; leftime<=timeset; leftimetemp<=timeset*1000; timesetemp:=timeset; end

14、 if; if timecount>= timesetemp*1000 then if timesetemp =3 then close<='0' timecontrol<='1' else close<='1' end if; else close<='0' end if; if timesetemp = 0 then close<='0' leftime<=0;leftimetemp<=0; end if;end if;end process;end behave

15、;3. 數(shù)碼管顯示模塊:循環(huán)選通6個(gè)數(shù)碼管進(jìn)行掃頻,通過驅(qū)動(dòng)數(shù)碼管的7個(gè)段進(jìn)行顯示(1) count6是產(chǎn)生循環(huán)的6個(gè)數(shù),來循環(huán)選通6個(gè)數(shù)碼管,當(dāng)掃頻頻率足夠大的時(shí)候,則由于人眼的視覺暫留,觀察到的數(shù)字為同時(shí)顯示;(2) L24xuan4c是每次選出一組數(shù)進(jìn)行譯碼,即每次只能顯示一個(gè)數(shù)字;(3) dec7s為7段數(shù)碼管驅(qū)動(dòng)電路,將譯碼的結(jié)果驅(qū)動(dòng)7個(gè)段,顯示出一個(gè)數(shù)字。4. 進(jìn)度條模塊:進(jìn)度條是將總體時(shí)間分為8份,每倒計(jì)時(shí)消耗一個(gè)step則熄滅一個(gè)燈。(1) 選用時(shí)鐘頻率1kHz,因?yàn)?Hz計(jì)時(shí)3s無法平均分成8份;(2) 使用來自倒計(jì)時(shí)模塊的leftimetemp,leftimetemp/8為

16、真正的時(shí)間,隨時(shí)獲得剩余時(shí)間進(jìn)行顯示。程序:process(clk1kHz)variable countdiv:integer range 0 to 90000;variable k:integer range 0 to 90000;beginif(reset='1')thenk:=0;temp<=leftimetemp; if(clk1kHz'event and clk1kHz='1') then k:=k+1;countdiv:=leftimetemp/8;IF countdiv /= 0 THEN IF k > 8*countdiv o

17、r k = 8*countdiv THENlight <="00000000"ELSIF ( k > 7*countdiv AND k < 8*countdiv) OR k = 7*countdiv THENlight <="00000001"ELSIF ( k > 6*countdiv AND k < 7*countdiv) OR k = 6*countdiv THENlight <="00000011"ELSIF ( k > 5*countdiv AND k < 6*count

18、div) OR k = 5*countdiv THEN light <="00000111"ELSIF ( k > 4*countdiv AND k < 5*countdiv) OR k = 4*countdiv THENlight <="00001111"ELSIF ( k > 3*countdiv AND k < 4*countdiv) OR k = 3*countdiv THENlight <="00011111"ELSIF ( k > 2*countdiv AND k <

19、3*countdiv) OR k = 2*countdiv THENlight <="00111111"ELSIF ( k > countdiv AND k < 2*countdiv) OR k = countdiv THENlight <="01111111"ELSIF ( k > 0 AND k < countdiv) OR k = 0 THENlight <="11111111"END IF;ELSE light <="00000000"END IF;END I

20、F;end if;end process;總體電路:通過各模塊之間的聯(lián)系,將封裝好后的模塊上端口均連接上,實(shí)現(xiàn)模塊的組裝6、 所實(shí)現(xiàn)功能說明(已完成的基本功能和擴(kuò)展功能,器件的資源占用情況,關(guān)鍵波形仿真圖,必要的測試方法等);基本功能與擴(kuò)展功能:1. 基本功能:已完成題目所給的所有實(shí)驗(yàn)要求,能實(shí)現(xiàn)烹飪模式的選擇、火力調(diào)節(jié)、定時(shí)功能、不定時(shí)功能、蜂鳴器、關(guān)閉鍵以及所有的特殊情況2. 擴(kuò)展功能:完成了進(jìn)度條的設(shè)計(jì),即倒計(jì)時(shí)點(diǎn)亮8個(gè)LED燈,隨著時(shí)間的減少,8個(gè)燈均勻熄滅,倒計(jì)時(shí)結(jié)束同時(shí)關(guān)閉所有的LED燈。器件資源占用情況:1. 由于在倒計(jì)時(shí)模塊使用時(shí)鐘頻率1kHz,使得定義計(jì)數(shù)時(shí)鐘的上升沿的變量為

21、variable timecount:integer range 0 to 90000,且多次使用該變量導(dǎo)致邏輯單元logic elements占用的比重為80%;2. 由于電磁爐的實(shí)驗(yàn)功能比較多且瑣碎,故采用“從上而下”的設(shè)計(jì)思路,于是模塊使用比較多且每個(gè)模塊功能比較少,便于調(diào)試;但也使pins的總量占用了38%。關(guān)鍵波形仿真圖:1. 模式調(diào)節(jié)模塊:說明:當(dāng)有外部按鍵信號modecontrol輸入,狀態(tài)機(jī)的循環(huán)為0->1->2->3->4->5->1->2.;當(dāng)有時(shí)間模塊傳來的信號timecontrol,使爆炒模式B(仿真波形中的3)模式反向轉(zhuǎn)換為煎

22、炒模式J(仿真波形中的2);當(dāng)輸入關(guān)閉信號reset信號時(shí),狀態(tài)信號state復(fù)位為close狀態(tài)(仿真波形中的0)。2. 火力調(diào)節(jié)模塊:說明:循環(huán)狀態(tài)機(jī)的循環(huán)模式為1900<->1500<->1100<->600<->100;當(dāng)外部按鍵輸入up信號,由于初始狀態(tài)為1900w,故輸出不會(huì)增加,維持在1900w;當(dāng)外部按鍵輸入down信號,會(huì)變?yōu)?500w;依次類推,up信號控制增加,down信號控制減少,本質(zhì)是控制循環(huán)狀態(tài)機(jī)轉(zhuǎn)移的方向。3. 倒計(jì)時(shí)模塊:說明:設(shè)置輸入的倒計(jì)時(shí)時(shí)間為16s,倒計(jì)時(shí)完畢后輸出關(guān)閉信號close為“1”,即系統(tǒng)關(guān)閉;當(dāng)

23、輸入reset開啟信號后,時(shí)間置位為最初的倒計(jì)時(shí)時(shí)間,開始進(jìn)行倒計(jì)時(shí)。4. 數(shù)碼管模塊:說明:當(dāng)輸入6個(gè)數(shù)給6個(gè)數(shù)碼管顯示器,經(jīng)過譯碼后,輸出為7段數(shù)碼管驅(qū)動(dòng)的組合碼。5. 點(diǎn)陣模塊:說明:經(jīng)過行、列的掃描,實(shí)現(xiàn)一個(gè)周期的顯示碼字;當(dāng)co為1時(shí),完成了一個(gè)周期,繼續(xù)掃描下一周期。6. 關(guān)閉模塊:說明:當(dāng)openinput信號輸入時(shí),整個(gè)程序開啟;當(dāng)任何一個(gè)關(guān)閉信號(closeinput1或closeinput2)輸入時(shí),則關(guān)閉整個(gè)系統(tǒng);當(dāng)再次輸入openinput信號時(shí),程序會(huì)被再次重新開啟。7. 蜂鳴器模塊:說明:當(dāng)定時(shí)信號order輸入時(shí),則output計(jì)時(shí)10個(gè)脈沖,即蜂鳴器發(fā)出響聲的時(shí)

24、間10ms;再次輸出定時(shí)信號order,蜂鳴器會(huì)再次計(jì)數(shù)、發(fā)出響聲;在此過程中,只要有reset輸入,就將所有的值復(fù)位。必要的測試方法:1. 分模塊編寫,編譯,通過后進(jìn)行下一步驟;2. 仿真,觀察仿真波形的正確性,正確后進(jìn)行下一步驟;3. 下載到實(shí)驗(yàn)板進(jìn)行調(diào)試,檢驗(yàn)是否完成了設(shè)計(jì)的功能,如果需要其他模塊的信號,則通過其他實(shí)驗(yàn)板上的按鍵替代。7、 故障及問題分析1.時(shí)鐘選擇導(dǎo)致延時(shí)問題:在最初設(shè)計(jì)時(shí)選擇時(shí)鐘頻率1kHz,100Hz,1Hz,系統(tǒng)的各個(gè)模塊使用時(shí)鐘頻率1kHz,防抖模塊使用時(shí)鐘頻率100Hz,倒計(jì)時(shí)模塊則使用時(shí)鐘頻率1Hz;在設(shè)計(jì)倒計(jì)時(shí)模塊時(shí),由于時(shí)鐘頻率為1Hz時(shí)倒計(jì)時(shí)正好以1s

25、為單位,滿足實(shí)際需求。然后設(shè)計(jì)好代碼后會(huì)得到下面的仿真波形(由于仿真時(shí)使用1Hz會(huì)使仿真時(shí)間很久,故仿真時(shí)選用了1kHz,不影響觀測結(jié)果),在開始兩個(gè)時(shí)間周期內(nèi)倒計(jì)時(shí)還沒有開始,所以這種設(shè)計(jì)方案會(huì)有延時(shí)缺陷;在通過思考之后,決定采用時(shí)鐘頻率1kHz取代時(shí)鐘頻率1Hz,使得時(shí)鐘沿分的更細(xì)一些,整個(gè)系統(tǒng)更加靈敏,產(chǎn)生的延時(shí)很小,人眼幾乎察覺不出來。正確的代碼原理以及仿真波形已在第五模塊、第六模塊已闡述,這里不再贅述。具有延時(shí)的仿真波形:具有延時(shí)的倒計(jì)時(shí)代碼:architecture behave of decount isbeginprocess(clk1Hz)variable timecount

26、:integer range 0 to 90;variable timesetemp:integer range 0 to 90;beginif clk1Hz'event and clk1Hz='0' then timecontrol<='0' timecount:=timecount+1; leftime<=timesetemp-timecount; if reset='1' then timecount:=0; timesetemp:=timeset; leftime<=timesetemp; end if; if

27、timecount>= timesetemp then if timesetemp =3 then close<='0' timecontrol<='1' else close<='1' end if; else close<='0' end if; if timesetemp = 0 then close<='0' leftime<=0; end if;end if;end process;end behave;2.擴(kuò)展功能進(jìn)度條的設(shè)計(jì)問題:最開始的設(shè)計(jì)思路是將倒計(jì)時(shí)的時(shí)

28、間平均分成8份,每計(jì)時(shí)完一個(gè)step后熄滅一個(gè)燈;然而比較棘手的問題是在本次實(shí)驗(yàn)中使用的倒計(jì)時(shí)時(shí)間含3s,無法進(jìn)行分時(shí)。綜合這一問題倒計(jì)時(shí)中的問題,故同時(shí)也時(shí)鐘頻率1kHz,即將3*1000個(gè)時(shí)鐘沿,這樣就可以平均分成8份,且計(jì)時(shí)精準(zhǔn)。正確代碼已在第五模塊寫出,這里不再贅述。3.資源占用溢出問題:在倒計(jì)時(shí)模塊和進(jìn)度條模塊修正了時(shí)鐘頻率1kHz后,使用的變量所占用的邏輯單元約為原來的10倍(),故整體編譯邏輯單元logic elements溢出,由于兩個(gè)模塊之間的聯(lián)系很密切,故讓兩個(gè)模塊共享leftime和leftimetmp等變量,減少資源的占用。8、 總結(jié)和結(jié)論為期4周的實(shí)驗(yàn)結(jié)束了,在這個(gè)過

29、程中收獲了很多,學(xué)會(huì)了團(tuán)隊(duì)合作、VHDL、縝密的設(shè)計(jì)思路等,付出了很多,經(jīng)驗(yàn)受益終身。最開始選題的時(shí)候,組員們都希望做一些比較有挑戰(zhàn)性、有意思的題目,大家一致選擇了第一個(gè)題目電磁爐的設(shè)計(jì)。在最開始設(shè)計(jì)的時(shí)候,花了近3個(gè)小時(shí)構(gòu)思整體的結(jié)構(gòu)框圖,研究題目所表達(dá)的意思以及現(xiàn)實(shí)使用的會(huì)有的不同情況,設(shè)計(jì)的時(shí)候使用模塊劃分,最后的成果也是清晰地模塊的功能劃分,每個(gè)模塊需要的輸入信號和輸出信號在模塊設(shè)計(jì)上標(biāo)注,連接總圖的時(shí)候思路就非常清晰,故主要的任務(wù)就是設(shè)計(jì)調(diào)試好每個(gè)模塊的功能。設(shè)計(jì)好整體框圖后,開始寫各個(gè)部分的代碼。分頻器,防抖,狀態(tài)機(jī),數(shù)碼管,點(diǎn)陣編寫的比較順利,參考的書籍比較多;主要的倒計(jì)時(shí)模塊比

30、較繁瑣,開始時(shí)將每一個(gè)倒計(jì)時(shí)時(shí)間分別單自寫一個(gè)工程,整理代碼的時(shí)候覺得代碼利用率很低,資源占用比較大,最后改進(jìn)了倒計(jì)時(shí)模塊,主要是將所有的倒計(jì)時(shí)重復(fù)利用一塊代碼。遇到的問題也是多種多樣的,有些是自己的馬虎和一些可以通過仔細(xì)思考后修正的邏輯錯(cuò)誤,有些問題自己是在沒有辦法解決就尋求隊(duì)友的幫助,這里特別感謝我們隊(duì)的同學(xué),幫助了我解決了很多細(xì)致入微的問題。仿真通過后,我和隊(duì)友在第二周周六一起去實(shí)驗(yàn)室調(diào)試了整整一天,我的代碼有些小問題沒考慮到,例如reset復(fù)位的延時(shí)問題等,在實(shí)驗(yàn)過程中交流互相出現(xiàn)的問題,然后共同商量解決,終于在馬上關(guān)門的時(shí)候完成了代碼調(diào)試,終于松了一口氣。由于實(shí)驗(yàn)做的比較快,在第三周

31、就進(jìn)行了驗(yàn)收,老師非常耐心和我們交流完成情況和出現(xiàn)的問題,對我們有著激勵(lì)的心情??傮w的實(shí)驗(yàn)功能感覺已經(jīng)能達(dá)到現(xiàn)實(shí)生活中電磁爐的大部分基本功能,很有成就感。本次實(shí)驗(yàn)讓我知道實(shí)驗(yàn)的設(shè)計(jì)部分很重要,這對我審視其他編程軟件如C+等有了新的認(rèn)識,收獲頗豐。9、 所用元器件及測試儀表清單管腳設(shè)定:元器件:8*8LED點(diǎn)陣 1個(gè) LED數(shù)碼管 6個(gè) BTN按鍵 5個(gè) LED燈 8個(gè) 蜂鳴器 1個(gè)測試儀表:quartus2軟件和實(shí)驗(yàn)板10、 完整源程序(要有注釋)(1) 模式調(diào)節(jié)mode.vhdlibrary ieee;use ieee.std_logic_1164.all;USE IEEE.STD_LOGI

32、C_UNSIGNED.ALL;entity mode is port( clk: In std_logic; modecontrol: IN std_logic; timecontrol: IN std_logic; -從時(shí)間模塊傳來的模式控制信號,從爆炒模式轉(zhuǎn)為煎炒模式 reset: IN std_logic; state:out std_logic_vector(2 downto 0); -輸出狀態(tài)信息給不定時(shí)模塊和火力調(diào)節(jié)模塊end mode;architecture behave of mode istype state_type is (C,H,J,B,T,Z);signal pre

33、sent_state:state_type;signal next_state:state_type;beginbegincase present_state iswhen C => if modecontrol='1' thennext_state<= H; elsenext_state<= C;if reset= '1' then next_state<=C; end if; end if;when H => if modecontrol='1' thennext_state<= J; elsenext_s

34、tate<= H;if reset= '1' then next_state<=C; end if; end if;when J => if modecontrol='1' thennext_state<= B;else next_state<= J; if reset= '1' then next_state<=C; end if; end if;when B => if modecontrol='1' thennext_state<= T; else if timecontrol

35、='1' then next_state<= J; else next_state<= B; end if; if reset= '1' then next_state<=C; end if; end if;when T => if modecontrol='1' thennext_state<= Z; elsenext_state<= T;if reset= '1' then next_state<=C; end if; end if;when Z => if modecontro

36、l='1' thennext_state<= H; elsenext_state<= Z; if reset= '1' then next_state<=C; end if; end if;end case;end process;state_register:process(clk)begin if (clk'event and clk='1')then present_state<= next_state; end if;end process;output_logic:process(present_stat

37、e)begin case present_state is when C => state <="000" when H => state <="001" when J => state <="010" when B => state <="011" when T => state <="100" when Z => state <="101" when others => state <=&

38、quot;111" end case;end process;end behave;(2) 火力調(diào)節(jié)firemode.vhdlibrary ieee;use ieee.std_logic_1164.all;entity firemode isport( clk: IN std_logic; up: IN std_logic; down: IN std_logic; state: IN std_logic_vector(2 downto 0); -輸入模式 reset: In std_logic; out1,out2,out3,out4: OUT std_logic_vector(3

39、downto 0) ); -輸出功率值end;architecture behave of firemode istype state_type is (f1900,f1500,f1100,f600,f100);signal present_state:state_type;signal next_state:state_type;beginnextstate_logic:process(present_state,up,down) -狀態(tài)機(jī)begin case present_state is when f1900 => if up='1' then next_stat

40、e<= f1900; elsif down='1' then next_state<= f1500; else next_state<= f1900; end if; when f1500 => if up='1' then next_state<= f1900; elsif down='1' then next_state<= f1100; else next_state<= f1500; end if; when f1100 => if up='1' then next_stat

41、e<= f1500; elsif down='1' then next_state<= f600; else next_state<=f1100; end if; when f600 => if up='1' then next_state<= f1100; elsif down='1' then next_state<= f100; else next_state<=f600; end if; when f100 => if up='1' then next_state<=

42、f600; elsif down='1' then next_state<= f100; else next_state<=f100; end if;end case;if state = "011" then -如果是爆炒模式,只能以1900W加熱 next_state<= f1900;end if;end process;state_register:process(clk) -將下一狀態(tài)轉(zhuǎn)為現(xiàn)狀態(tài),如果有復(fù)位信號則輸出1900Wbegin if(clk'event and clk='1') then prese

43、nt_state<= next_state; if reset = '1' then present_state<= f1900; end if; end if;end process;output_logic:process(present_state) -輸出功率大小的BCD碼begincase present_state is when f1900 => out1<="0001"out2<="1001"out3<="0000"out4<="0000"

44、when f1500 => out1<="0001"out2<="0101"out3<="0000"out4<="0000" when f1100 => out1<="0001"out2<="0001"out3<="0000"out4<="0000" when f600 => out1<="0000"out2<="0110&quo

45、t;out3<="0000"out4<="0000" when f100 => out1<="0000"out2<="0001"out3<="0000"out4<="0000"end case;end process;end behave;(3) 時(shí)間模塊ordercontrol.vhdlibrary ieee;use ieee.std_logic_1164.all;entity ordercontrol isport(clk1kHz

46、:in std_logic; orderinput:in std_logic; -外部按鍵控制定時(shí)還是不定時(shí)模式 resetorder,resetnorder:out std_logic; -輸出定時(shí)還是不定時(shí)模式 reset:in std_logic; -復(fù)位信號 orderset:out std_logic); end;architecture behave of ordercontrol isbeginprocess(clk1kHz)begin if clk1kHz'event and clk1kHz ='1' then if reset = '1'

47、; then resetorder<='1'resetnorder<='0' -如果復(fù)位信號來到,則將初始狀態(tài)為不定時(shí)狀態(tài),輸出reset為0才不會(huì)使norder置位 end if; if orderinput = '1' then -如果外部有按鍵信號輸入,則輸出狀態(tài)為定時(shí)狀態(tài),改變原來的不定時(shí)狀態(tài) resetorder<='0'resetnorder<='1' end if; orderset<=orderinput; end if;end process;end behave;o

48、rder.vhdlibrary ieee;use ieee.std_logic_1164.all;entity order isport (ordercontrol:in std_logic; clk1kHz:in std_logic; reset:in std_logic; timeset:out integer range 0 to 90);end;architecture behave of order istype type_state is (s0,s5,s10,s30,s60); -s0狀態(tài)機(jī)的關(guān)閉狀態(tài),s5,s10,s30,s60為循環(huán)狀態(tài)signal present_state

49、,next_state:type_state;beginnextstate_logic:process(present_state,ordercontrol) -狀態(tài)機(jī),指明下一狀態(tài)begin case present_state is when s0 => if ordercontrol = '1' then next_state<=s5; else next_state<=s0; end if; when s5 => if ordercontrol = '1' then next_state<=s10; else next_st

50、ate<=s5; end if; when s10 => if ordercontrol = '1' then next_state<=s30; else next_state<=s10; end if; when s30 => if ordercontrol = '1' then next_state<=s60; else next_state<=s30; end if; when s60 => if ordercontrol = '1' then next_state<=s5; else

51、next_state<=s60; end if;end case;end process;state_register:process(clk1kHz) -將下一狀態(tài)轉(zhuǎn)換為現(xiàn)在的狀態(tài)begin if (clk1kHz'event and clk1kHz='1')then present_state<= next_state; if reset= '1' thenpresent_state<=s0; end if; end if;end process;output_logic:process(present_state) -輸出定時(shí)時(shí)間

52、設(shè)置timesetbegincase present_state is when s0 => timeset<=0; when s5 => timeset<=5; when s10 => timeset<=10; when s30 => timeset<=30; when s60 => timeset<=60;end case;end process;end behave;norder.vhdlibrary ieee;use ieee.std_logic_1164.all;entity norder isport(state:in s

53、td_logic_vector(2 downto 0); -輸入模式 timeset:out integer range 0 to 90; reset:in std_logic);end;architecture behave of norder isbeginprocess(state,reset)begincase state is when "011" => timeset<=3; -當(dāng)爆炒模式默認(rèn)時(shí)間為3s when "101" => timeset<=20; -當(dāng)蒸燉模式默認(rèn)時(shí)間為20s when "001" => timeset<=90; when "010" => timeset<=90; when "100" => timeset<=90; when others=> timeset<=0;end case;if reset='1' then -當(dāng)有復(fù)位信號,輸出時(shí)間置0 timeset<=0;end if;end pr

溫馨提示

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

評論

0/150

提交評論