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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

7、標(biāo)準(zhǔn)的脈沖,此模塊置于每個包含有外部按鍵的模塊之前。10.蜂鳴器模塊:當(dāng)有外部按鍵BTN4時,即啟動定時模塊時,啟動蜂鳴器,且蜂鳴的時間由一個計(jì)數(shù)統(tǒng)計(jì)上升沿的個數(shù),達(dá)到一定個數(shù)(10個)蜂鳴結(jié)束。11.進(jìn)度條模塊:倒計(jì)時開始時將8個LED燈均點(diǎn)亮,通過時間模塊的剩余時間lefttime計(jì)算LED燈點(diǎn)亮的個數(shù)。 當(dāng)所有模塊分析清楚后,逐個編寫每個部分的代碼,編譯成功后并測試單個模塊的仿真波形,逐個下到實(shí)驗(yàn)板進(jìn)行測試;如果下載到實(shí)驗(yàn)板不能完成功能,修改思路,重新編寫本塊代碼,重新調(diào)試;當(dāng)所有模塊均能實(shí)現(xiàn)功能后,通過設(shè)計(jì)中各個模塊之間的信號聯(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. 時間模塊流程圖:5、 分塊電路和總體電路的設(shè)計(jì)(含關(guān)鍵源程序或電路圖)主要的分塊電路:1. 時間模塊:包含不定時功能與定時功能(1) 系統(tǒng)默認(rèn)的為不定時功能,即ordercontrol初始選擇不定時norder模塊;當(dāng)有外部按鍵BTN4輸入信號時,ordercontrol選擇定時order模塊,且改變只能一次,不能返回,直到計(jì)時結(jié)束關(guān)機(jī);(2) 在選擇功能時,如果有外部關(guān)閉按鍵BTN3的復(fù)位信號reset輸入或者計(jì)時完畢時,則輸出復(fù)位,且將ordercontrol重新初始化為norder狀態(tài);(3) 將輸出的時間交付

9、給倒計(jì)時模塊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ì)時模塊:顯示倒計(jì)時且使用頻率時鐘1kHz,需要進(jìn)行轉(zhuǎn)換leftimetemp/1000=leftime,且將leftimetemp信號輸出給進(jìn)度條模塊(1) ordercontrol是用來判斷時間模塊的時間改變時,計(jì)數(shù)是否要重新開始;(2) decount的功能是用來輸出剩余時間,由于計(jì)時使用頻率時鐘1Hz會產(chǎn)生較大的延時,故采用頻率時鐘1k

11、Hz。對時鐘的下降沿計(jì)數(shù)timecount,用總的時間*1000減去計(jì)數(shù)值timecount,則得到倒計(jì)時剩余的脈沖數(shù);如果想得到時間,則需要leftimetemp/1000轉(zhuǎn)換成真正的剩余時間leftime;(3) 將剩余時間leftime輸出給div模塊,整除后輸出給十位,取余后輸出給個位。(4) 將剩余的脈沖數(shù)leftimetemp輸出給進(jìn)度條模塊,由于進(jìn)度條模塊也采用頻率時鐘1kHz計(jì)時,且也需要倒計(jì)時,則可同時與倒計(jì)時模塊共用leftimetemp。(5) 有一種特殊情況,當(dāng)模式為爆炒模式B時,系統(tǒng)默認(rèn)時間為3s,倒計(jì)時完畢后系統(tǒng)不關(guān)閉,而是轉(zhuǎn)入煎炒模式J,繼續(xù)倒計(jì)時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個數(shù)碼管進(jìn)行掃頻,通過驅(qū)動數(shù)碼管的7個段進(jìn)行顯示(1) count6是產(chǎn)生循環(huán)的6個數(shù),來循環(huán)選通6個數(shù)碼管,當(dāng)掃頻頻率足夠大的時候,則由于人眼的視覺暫留,觀察到的數(shù)字為同時顯示;(2) L24xuan4c是每次選出一組數(shù)進(jìn)行譯碼,即每次只能顯示一個數(shù)字;(3) dec7s為7段數(shù)碼管驅(qū)動電路,將譯碼的結(jié)果驅(qū)動7個段,顯示出一個數(shù)字。4. 進(jìn)度條模塊:進(jìn)度條是將總體時間分為8份,每倒計(jì)時消耗一個step則熄滅一個燈。(1) 選用時鐘頻率1kHz,因?yàn)?Hz計(jì)時3s無法平均分成8份;(2) 使用來自倒計(jì)時模塊的leftimetemp,leftimetemp/8為

16、真正的時間,隨時獲得剩余時間進(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é)、定時功能、不定時功能、蜂鳴器、關(guān)閉鍵以及所有的特殊情況2. 擴(kuò)展功能:完成了進(jìn)度條的設(shè)計(jì),即倒計(jì)時點(diǎn)亮8個LED燈,隨著時間的減少,8個燈均勻熄滅,倒計(jì)時結(jié)束同時關(guān)閉所有的LED燈。器件資源占用情況:1. 由于在倒計(jì)時模塊使用時鐘頻率1kHz,使得定義計(jì)數(shù)時鐘的上升沿的變量為

21、variable timecount:integer range 0 to 90000,且多次使用該變量導(dǎo)致邏輯單元logic elements占用的比重為80%;2. 由于電磁爐的實(shí)驗(yàn)功能比較多且瑣碎,故采用“從上而下”的設(shè)計(jì)思路,于是模塊使用比較多且每個模塊功能比較少,便于調(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)有時間模塊傳來的信號timecontrol,使爆炒模式B(仿真波形中的3)模式反向轉(zhuǎn)換為煎

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

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

24、間10ms;再次輸出定時信號order,蜂鳴器會再次計(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.時鐘選擇導(dǎo)致延時問題:在最初設(shè)計(jì)時選擇時鐘頻率1kHz,100Hz,1Hz,系統(tǒng)的各個模塊使用時鐘頻率1kHz,防抖模塊使用時鐘頻率100Hz,倒計(jì)時模塊則使用時鐘頻率1Hz;在設(shè)計(jì)倒計(jì)時模塊時,由于時鐘頻率為1Hz時倒計(jì)時正好以1s

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

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

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

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

31、就進(jìn)行了驗(yàn)收,老師非常耐心和我們交流完成情況和出現(xiàn)的問題,對我們有著激勵的心情??傮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個 LED數(shù)碼管 6個 BTN按鍵 5個 LED燈 8個 蜂鳴器 1個測試儀表: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; -從時間模塊傳來的模式控制信號,從爆炒模式轉(zhuǎn)為煎炒模式 reset: IN std_logic; state:out std_logic_vector(2 downto 0); -輸出狀態(tài)信息給不定時模塊和火力調(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) 時間模塊ordercontrol.vhdlibrary ieee;use ieee.std_logic_1164.all;entity ordercontrol isport(clk1kHz

46、:in std_logic; orderinput:in std_logic; -外部按鍵控制定時還是不定時模式 resetorder,resetnorder:out std_logic; -輸出定時還是不定時模式 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)為不定時狀態(tài),輸出reset為0才不會使norder置位 end if; if orderinput = '1' then -如果外部有按鍵信號輸入,則輸出狀態(tài)為定時狀態(tài),改變原來的不定時狀態(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) -輸出定時時間

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)時間為3s when "101" => timeset<=20; -當(dāng)蒸燉模式默認(rèn)時間為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ù)位信號,輸出時間置0 timeset<=0;end if;end p

溫馨提示

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

評論

0/150

提交評論