簡易電磁爐控制系統(tǒng)設(shè)計(jì)_第1頁
簡易電磁爐控制系統(tǒng)設(shè)計(jì)_第2頁
簡易電磁爐控制系統(tǒng)設(shè)計(jì)_第3頁
簡易電磁爐控制系統(tǒng)設(shè)計(jì)_第4頁
簡易電磁爐控制系統(tǒng)設(shè)計(jì)_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、數(shù)字電路與邏輯綜合實(shí)驗(yàn)報(bào)告題目:簡易電磁爐控制系統(tǒng)設(shè)計(jì)學(xué)院:電子工程學(xué)院班級(jí):學(xué)號(hào):姓名:簡易電磁爐控制電路設(shè)計(jì)摘要通過分析題冃要求以及實(shí)際生活中電磁爐的工作要求,設(shè)計(jì)了簡易的電磁爐的控制電路。 采用模塊化設(shè)計(jì)思路在quartus ii軟件屮利用vhdl語言實(shí)現(xiàn)模塊化電路設(shè)計(jì),利用圖形化 編程實(shí)現(xiàn)系統(tǒng)整體搭建,并利用quartus ii軟件功能進(jìn)行仿真和分析。使用核心為atmel emp1270t144c5芯片擁有按鍵、點(diǎn)陣和數(shù)碼管等外設(shè)的實(shí)驗(yàn)板進(jìn)行實(shí)際系統(tǒng)的模擬運(yùn)行。 此電路主要有以下幾方面特色:1. 通過設(shè)計(jì)6狀態(tài)的狀態(tài)機(jī)模塊實(shí)現(xiàn)單一按鍵控制的烹飪模式切換功能;2. 通過時(shí)序雙向增減計(jì)數(shù)器

2、模塊實(shí)現(xiàn)雙按鍵控制的可增減的火力大小調(diào)節(jié)功能;3. 通過設(shè)計(jì)5狀態(tài)的狀態(tài)機(jī)實(shí)現(xiàn)單一按鍵控制的倒計(jì)時(shí)定時(shí)功能;4. 通過顯示控制模塊實(shí)現(xiàn)點(diǎn)陣和數(shù)碼管構(gòu)成的交互功能;5. 自動(dòng)和強(qiáng)制關(guān)機(jī)斷電功能。一、實(shí)驗(yàn)要求1. 使用一個(gè)按鍵控制烹飪模式:火鍋(h)、煎炒(j)、爆炒(b)、煲湯(t)和蒸燉(z), 并能在點(diǎn)陣顯示相應(yīng)的英文字母標(biāo)識(shí)。2. 使用兩個(gè)按鍵控制火力的大小,火力模式有:2900w、1500w、hoow 600w、loowo 要求一個(gè)按鍵正向調(diào)整,另一個(gè)反向調(diào)整,模式依次變化,并能在數(shù)碼管后四位顯示當(dāng) 前火力值。3. 使用一個(gè)按鍵設(shè)定吋i'可,由按鍵控制在60s、30s、10s、5

3、s之i'可切換,吋間在數(shù)碼管前 兩位顯示,并且計(jì)時(shí)結(jié)朿自動(dòng)關(guān)閉電磁爐。4. 不進(jìn)行定時(shí)操作時(shí),爆炒(b)默認(rèn)3s,蒸燉(z)默認(rèn)20s,其他模式默認(rèn)90s,并且 爆炒(b)模式不能自定義定時(shí)時(shí)間。倒計(jì)時(shí)結(jié)束后爆炒(b)模式進(jìn)入煎炒(j)模式, 其他模式倒計(jì)時(shí)結(jié)束后關(guān)機(jī)。5. 設(shè)定關(guān)機(jī)按鍵,按鍵后強(qiáng)制關(guān)機(jī),熄滅led指示燈、點(diǎn)陣和數(shù)碼管,直到按選擇模式按 鍵時(shí)再次開機(jī)并點(diǎn)亮led燈。二、總體設(shè)計(jì)思路三、功能模塊的設(shè)計(jì)和實(shí)現(xiàn)系統(tǒng)共通過8個(gè)模塊實(shí)現(xiàn),分別是:分頻、輸入控制、模式選擇、火力調(diào)節(jié)、人 為定時(shí)、點(diǎn)陣譯碼器、倒計(jì)時(shí)、數(shù)碼管譯碼器這8個(gè)模塊實(shí)現(xiàn)的,具體設(shè)計(jì)如卞。 (“)烹飪模式選擇模塊

4、(modeselect)設(shè)計(jì)1. 模塊整體思路使用狀態(tài)機(jī)進(jìn)行編寫,共計(jì)6個(gè)狀態(tài)分別是:待機(jī)(s)、火鍋(h)、煎炒(j)、爆炒(b)、 煲湯(t)、蒸燉(z)。各模式i'可由一個(gè)按鍵進(jìn)行切換,檢測到按鍵有效按下一次后,即 切換到下一狀態(tài)。在不同的狀態(tài)下輸出不同的控制信號(hào)對后續(xù)模塊進(jìn)行控制,狀態(tài)轉(zhuǎn)移 圖如圖1:002. 外部接口設(shè)計(jì) 設(shè)計(jì)輸入端口:> 時(shí)鐘信號(hào) clk: std_logic,頻率 1mhz;> 模式選擇按鍵信號(hào)selectjn : std_logic,用于改變狀態(tài)機(jī)的狀態(tài);> 復(fù)位信號(hào)t_over:std_logic,使?fàn)顟B(tài)機(jī)復(fù)位到待機(jī)(s)狀態(tài)。 設(shè)計(jì)

5、輸出端口:> 點(diǎn)陣控制信號(hào)端口 out_show: std_logic_vector(2 downtoo);> 輸出默認(rèn)時(shí)間 out_time: std_logic_vector(1 downto 0);> 控制 led 指示燈 led: std_logic;> 標(biāo)記是否已選擇了模塊is_selected: std_logic,用作后續(xù)模塊判斷當(dāng)前是否 處于待機(jī)(s)狀態(tài)。3內(nèi)部邏輯設(shè)計(jì)主要邏輯思路:依照狀態(tài)轉(zhuǎn)移圖,將t_over和selectn組合成一個(gè)兩位輸入,使用典型的 狀態(tài)機(jī)方式編碼,在clk的每個(gè)上升沿判斷當(dāng)前的狀態(tài),并依照此時(shí)的狀態(tài)和輸入 判斷狀態(tài)是否改變和

6、改變的方式。部分代碼如下(完整代碼見附錄):if(clkevent and clk二t)then-時(shí)鐘上升沿檢測case state iswhen s=>一待機(jī)模式case mt iswhen,oo,=>state<=s;mark<=,o,;out-mode<=,ooo,;out_time<=miih;set_led<=,o,;is_select<=,o,;fromb<=,o,; -t.over和selectjn均引低電平則保持在采狀態(tài)when,oim=>state<=s;mark<=,o,;out_mode<=,o

7、oo,;out_time<=,hh;set_led<=,o,;is_select<=,o,;fromb<=,o,; -t_over高電平則回到待機(jī)狀態(tài)(s)when h10h=>-t.over低、selectjn高電平則切換為下一狀態(tài)if(mark=o)thenstate<=h;mark<=,l,;out-mode<=,001,;out_time<=,00,r;set-led<=,l,;is_select<=,l,;from_b<=l0,; -用來保證毎次按鍵只被鬲應(yīng)一次elsestate<=s;out-.mode&

8、lt;=,000,;out_time<=,11,;set_led<=,0,;is-select<=,0,;from_b<=,0,;-hold currentstateend if;whent_over高電平則冋到待機(jī)狀態(tài)(s),ir,=>siate<=s;mark<=,l,;out_mode<=,000,;out_time<=,lll,;set_led<=,0,;is_select<=,0,;from-b<=,0,;-back to anti-stateend case;對于爆炒模式(b),當(dāng)t_over為高電平時(shí),其狀態(tài)

9、應(yīng)回到煎炒(j)模式when b=>case mt iswhen ,00,=>state<=b;mark<=,0,;out-mode<=,011,;out_time<=,01,;set-led<=,1,;is_select<=,1,;from.b<=,0,;when“返回到j(luò)模式,01,=>state<=j;mark<=,0,;out_mode<=h010,;out_time<=,oou;set3ed<='l,;is_select<=,l,;from_b<=,l,;when h10,=

10、>if(mark=o)thens1ate<=t;mark<=,1,;out-mode<=,010i,;out.time<=,00,i;set_led<=i1i;is-select<=,1,;from_b<=i0,;elsestate<=b;out_mode<=hoh,;out_time<=n01,;setled<=,l,;is_select<=,l,;from-b<=,0,;end if;when“返回到j(luò)模式,11,=>state<=j;mark<=,1,;outmode<=u010,

11、;out_time<=,00,;set_led<=,1,;is_select<=,1,;from_b<=,1,;end case;4.模塊仿真測試依照上述方法一次編寫好6個(gè)狀態(tài)的進(jìn)入條件和相應(yīng)的輸出,z后進(jìn)行仿真測試。cu nunji r.om stahgb ovt.mtq orr.nwxs.ffljkt sn_u>oio010#11tor000100ooottjr an sii0001 x 8 x 10分析仿真圖可以看到:> 在t_over低電平時(shí),每當(dāng)select_in端口上升沿后,out_mode改變一次;> 當(dāng)t_over為高電平時(shí),狀態(tài)切換回

12、s狀態(tài),且若t_over持續(xù)高,則selectjn 按鍵失效,即t_over優(yōu)先級(jí)高于selectjn;> out_time和out_mode是根據(jù)當(dāng)前不同的狀態(tài)輸出不同的二進(jìn)制數(shù),并且信號(hào)持 續(xù)時(shí)間即為該狀態(tài)的持續(xù)時(shí)間;> 在b模式下當(dāng)t.over信號(hào)到來時(shí)自動(dòng)進(jìn)入j模式而不是返回s模式;> 在非s狀態(tài)下,led和is_select持續(xù)高電平。(二)火力調(diào)節(jié)模塊(fire_adjust)設(shè)計(jì)1. 模塊整體思路采用一個(gè)可增減計(jì)數(shù)器實(shí)現(xiàn),使用兩個(gè)按鍵輸入信號(hào)控制加計(jì)數(shù)和減計(jì)數(shù),每按一次按鍵響應(yīng)一次,使用5進(jìn)制循環(huán)計(jì)數(shù)器,每個(gè) 數(shù)字分別代表功率1900w、1500w、1100w、

13、600w、 100w中的一個(gè)。在計(jì)數(shù)器屮進(jìn)行選擇,不同的 計(jì)數(shù)數(shù)字會(huì)給輸出端口不同的二進(jìn)制信號(hào),這些 信號(hào)有后續(xù)數(shù)碼管譯碼器識(shí)別并根據(jù)約定顯示不 同的數(shù)字。2. 外部接口設(shè)計(jì)設(shè)計(jì)輸入端口:> 時(shí)鐘信號(hào) clk: std_logic,頻率 1mhz;> 增減按鍵信號(hào)selectjn : std_logic,用于加 計(jì)數(shù)或減汁數(shù);> 復(fù)位信號(hào)reset: std_logic,使計(jì)數(shù)器回歸 1900w的初值;> 判斷信號(hào) mode_selected: std_logic,為了 判斷系統(tǒng)是否處于待機(jī)狀態(tài)。設(shè)計(jì)輸出端口:> 數(shù)碼管信號(hào)端口 show_shu: std_log

14、ic_vector(2 downto 0);3. 內(nèi)部邏輯設(shè)計(jì)設(shè)計(jì)思路:在reset為低電平并且mode_selected為高電平時(shí),在時(shí)鐘上升沿(時(shí)鐘頻率為 1mhz),檢測按鍵接口 in_up和in_down是否為高電平。并且定義a_mark, d_mark: std_logic信號(hào),當(dāng)in_up被響應(yīng)過后,將a_mark置為,直到in_up變?yōu)榈碗娖胶?將a_mark歸'0',在in_up和a_mark同時(shí)為t時(shí)不對in_up作出響應(yīng)。同樣對 in_down和d_mark做類似的編程。這樣可以保證一次按鍵只被響應(yīng)一次,避免因按 鍵持續(xù)時(shí)長大于時(shí)鐘周期導(dǎo)致多次響應(yīng)的誤判。之

15、后對不同的狀態(tài)數(shù)字輸出不同的三位 二進(jìn)制編碼。部分代碼如下(完整代碼見附錄):count:process(in_up/in_downzrese7;clk/mode_selected)beginif(reset二tor m0de_selected=o)then num<=0;elseif(clk'event and clk=t)then if(in_up 二 t)then if(cont=5000 and a_mark=,o,)then if(num>=4)then num<=0;elsenum<=num+1; end if;cont<=1; a_markv

16、=t; elsecont<=cont+1;end if;elsecont<=1; a_mark<=,0,;end if;-reset或處于待機(jī)狀態(tài),關(guān)閉數(shù)碼管的信號(hào)時(shí)鐘頻率1mhz.檢測時(shí)鐘上升沿“in-up對應(yīng)按鍵被按下-cont計(jì)數(shù)可過濾掉延續(xù)時(shí)間小丁 5ms的信號(hào),避免誤判加計(jì)數(shù)a_mark迫t,避免對同次按鍵反復(fù)響應(yīng)按鍵彈起(歸©)后將a川ark歸0準(zhǔn)備下次按磁的響應(yīng)if(in_down=,1,)thenin_down 按鍵的響應(yīng)if(cont1=5000 and d_mark=,o,)thenif(num=o)then減計(jì)數(shù)num<=4;elsenu

17、m<=num-1;end if;d_markut;elsif(cont1<5000 or d_mark=,o,)thencont1<=cont1+1;end if;elsecont1<=1; d_markv=o;end if;end if;end if;end process;4. 模塊的仿真與分析仿真圖如下所示,其屮clk頻率1mhz仿真圖分析如下:> reset= t 或mode_selected= 'o'時(shí)輸出為"000,表示為默認(rèn)火力;> 輸出長度為兩次按鍵的間隔時(shí)間長度;> in_up實(shí)現(xiàn)加計(jì)數(shù)功能,in_down實(shí)

18、現(xiàn)減計(jì)數(shù)功能> 通過仿真圖可見,按鍵時(shí)間遠(yuǎn)大于clk的周期但通過ajviark和idj71ark有效避 免了同一次按鍵被重復(fù)響應(yīng)的情況。(三)人工定時(shí)模塊(mansettime)設(shè)計(jì)1. 模塊整體思路使用一個(gè)5狀態(tài)的狀態(tài)機(jī)實(shí)現(xiàn),每個(gè)狀態(tài)分別對應(yīng) 一個(gè)預(yù)定時(shí)間:未定時(shí)、60s、30s、10s、5s,每個(gè) 狀態(tài)都會(huì)將一個(gè)三位二進(jìn)制傳輸給倒計(jì)時(shí)(daojishi) 模塊,用來設(shè)定倒計(jì)時(shí)的初值。按鍵信號(hào)會(huì)使?fàn)顟B(tài) 機(jī)在不同狀態(tài)間依次切換。2. 外部接口設(shè)計(jì) 設(shè)計(jì)輸入端口:> 時(shí)鐘信號(hào)clk: std_logic,使用1mhz頻率;> 按鍵輸入信號(hào):in_set: std_logic;&

19、gt; 復(fù)位信號(hào):reset: std_logic;> 狀態(tài)標(biāo)記:mode_selected: std_logic;設(shè)計(jì)輸出端口:> 蜂鳴器:o_sound: std_logic;> 傳輸定時(shí)信號(hào) show: std_logic_vector(2 downto 0)。3. 內(nèi)部邏輯設(shè)計(jì) 設(shè)計(jì)思路:根據(jù)狀態(tài)轉(zhuǎn)移圖,將in.set和reset何為一個(gè)兩位二進(jìn)制數(shù)進(jìn)行選擇判斷,根據(jù) 該二進(jìn)制數(shù)的不同選擇不同的響應(yīng)方式:切換到下一個(gè)狀態(tài)或停留在此狀態(tài)不變或 返回未設(shè)定狀態(tài)。同樣采用1mhz時(shí)鐘檢測按鍵,采用與火力調(diào)節(jié)模塊相同的mark手法避免對同此按鍵的多次響應(yīng)。 主要部分代碼如下:

20、p1:process(clk/mode-selected)beginif(mode_selected 二 o)then state<=s0;num<=0;mark<=,0,;相當(dāng)于定時(shí)器的使能開關(guān)elseif(cl"event and clk=t)thencase state iswhens0=>clk頻率1mhz狀態(tài)選擇“狀態(tài):未設(shè)定if(reset=,1,)then state<=so;num<=o;mark<=io,;-復(fù)位按筮的響應(yīng),將狀態(tài)i為未設(shè)定elsif(in-set二t)thenif(mark=,o,)then檢測到一次按鍵,

21、切換到5s狀態(tài)state<=s1;num<=1;mark<=,1,;cc<=499999;cc控制蜂鳴器的叫聲延續(xù)時(shí)間elsestate<=s0;num<=0;end if;else state<=so;num<=0;mark<=,0,;end if;when sl=>"狀態(tài):5sif(reset=,1,)then state<=s0;num<=0;mark<=,0,;elsif(in_set=,1,)thenif(mark=,o')then state<=s2;num<=2;mark&

22、lt;=,1,;cc<=49999&elsestate<=s1;num<=1;end if;else state<=s1;num<=1;mark<=,o,; “未檢測到按鍵,保持原狀態(tài)不變end if;根據(jù)這一思路將余下狀態(tài)寫完,并依據(jù)num的數(shù)值分配輸出的信號(hào)。仿真分析> 時(shí)鐘頻率為1mhz;> 只有在reset二©并且mode_selectedc的時(shí)候才能進(jìn)行時(shí)間的設(shè)定;> 每次按鍵只被響應(yīng)一次,且按鍵的輸出與兩次按鍵間隔時(shí)間相等;> 輸出在“000”至“100”之間切換,每一個(gè)數(shù)代表一個(gè)倒計(jì)時(shí)的時(shí)間。(四)倒計(jì)

23、時(shí)模塊(daojishi)設(shè)計(jì)1 整體思路設(shè)計(jì)編寫一個(gè)十進(jìn)制計(jì)數(shù)器,首先通過前面模塊傳來的信號(hào)譯出當(dāng)前設(shè)定的計(jì)時(shí)時(shí)間, 之后通過十進(jìn)制減計(jì)數(shù)器每一秒減一,并實(shí)時(shí)將倒計(jì)時(shí)的數(shù)字傳給數(shù)碼管譯碼器顯 示,一直到減為0,輸出“時(shí)間到”的信號(hào)。2 外部接口的設(shè)計(jì)設(shè)汁輸入端口:>時(shí)鐘信號(hào)clk: std_logic,使用1hz頻率;>默認(rèn)時(shí)間信號(hào) default_time: std_logic_vector(1 downto 0);>人為定時(shí)時(shí)間 manset_time:std_logic_vector(2 downto 0);> 狀態(tài)標(biāo)記:mode_selected: std_l

24、ogic;wfmtcucjmz設(shè)汁輸出端口:> 十位數(shù)字 time_10: integer range oto 9;> 個(gè)位數(shù)字 time_1: integer range oto 9;> 時(shí)間到信號(hào)timeover : std_logic ,表示計(jì) 時(shí)結(jié)束;3 內(nèi)部邏輯的設(shè)計(jì)3.1 減計(jì)數(shù)器的實(shí)現(xiàn)先將default_time和manset_time端口的數(shù)據(jù)進(jìn)行比對:黑 default_time= “01”是,即此時(shí)為爆炒(b)模式,不允許人工定時(shí), 使用default_time進(jìn)行賦值;o manset_time= “000” 時(shí)使用 default_time 進(jìn)行賦值其

25、他情況用manset_time進(jìn)行賦值;黑 將值同時(shí)賦給 signal tempjotal: integer range 0 to 90,其中 temp 用于減計(jì)數(shù),total記錄當(dāng)前設(shè)定的時(shí)間,用于比對定時(shí)的設(shè)置是否更 改。使用1hz頻率掃描,每遇到時(shí)鐘上升沿將當(dāng)前temp減一,運(yùn)算過程屮同時(shí) 比對total與此刻傳來的要求計(jì)時(shí)的時(shí)間是否相等,若相等則繼續(xù)計(jì)時(shí),若 不等則改變計(jì)時(shí)初值并重新計(jì)時(shí)。部分代碼-這部分是倒計(jì)時(shí)妁功能,t_shu (1)是十位,t_shu (0)是個(gè)位 dao:process(clk_1hz,mark;t_shu)實(shí)現(xiàn)倒計(jì)時(shí)的功能variable total_t:in

26、teger range 0 to 90;beginif(t_shu(o)=o and t_shu=0)then-處于待機(jī)狀態(tài)不計(jì)時(shí)ttover<=,0,;mark<=,0,;elseif(clk_1hz'event and clk_1hz=,1,)then-is 次時(shí)鐘上升沿if(total_t/二t_shut0+t_shu(0)then-對比總時(shí)間的設(shè)定有無發(fā)牛變化total:二t_shu "o+t_shu(o);markvo'end if;if(mark=,o,)then用于防止重復(fù)不停地給temp賦值tempv=total_t;market; tto

27、ver<=,0,;elsif(temp=o)thenttover<=* 1';時(shí)間到的信號(hào)markvo'elsetemp<=temp-1;倒計(jì)時(shí)ttover<=,0,;end if;end if;end if;end process dao;timeover<=ttover;3.2 將數(shù)字分為十位和個(gè)位的實(shí)現(xiàn)使用vhdl中ieee.numeric_std包內(nèi)的rem函數(shù)實(shí)現(xiàn)取余,通過將當(dāng)前的 temp對10去余得到個(gè)位,再用temp減去個(gè)位再除以10得到十位,最后 分別賦值給個(gè)位和十位的輸出口傳給數(shù)碼管顯示 部分代碼jisuan:process(t

28、empzo_shu)begino_shu(0)<=temp rem 10;o_shu v=(temp0_shu(0)/10;end process jisuan;time_10<=o_shu ;time_lv=o_shu(0);4 模塊的仿真肓分祈>« 2 屮 t 5 空 top < io iyr 2.巒 16 ye $ i卩 t a » 24» m a » « 32:12 « m wr it 9: «e w < e mt »n n r. n r - r n r n二 一 一 -* n

29、 * r - - -. - r n n - - n - to x d i 3 > w x 66 b mbn.mt n.rattt) 卜 n.micn i n.nwtoj bkiiffl tmj3) tw.iot»om卜 huttfibtflintiforntfotm 心宙tfntfj"仿真分析:> 可以看出使用mansetjtime可以給模塊設(shè)定倒計(jì)時(shí)間,在manset_time為“000 吋默認(rèn)為使用dufaut_time設(shè)定時(shí)間> 倒計(jì)時(shí)結(jié)束時(shí)timeoverv,這個(gè)信號(hào)會(huì)作為其他模決的復(fù)位信號(hào)使用;> 雖然time.1和timejl0有不少毛刺

30、,但由于這兩個(gè)信號(hào)時(shí)給數(shù)碼管顯示的,毛刺 不會(huì)被人眼察覺,而倒計(jì)時(shí)內(nèi)部信號(hào)穩(wěn)定,不會(huì)影響計(jì)時(shí)。(五)輸入控制模塊(input_control)設(shè)計(jì)1. 模塊主要思路模塊主耍功能是按鍵消抖,輸入為實(shí)際按鍵信號(hào),輸出是經(jīng)過消抖后的信號(hào)。使用 課件中的消抖程序進(jìn)行消抖。2. 外部接口 設(shè)計(jì)輸入端口:> 消抖時(shí)鐘信號(hào)clk: std_logic,使用50hz頻率;> 按鍵信號(hào) in_1jn_2zin_3,in_4: std_logic;依次是選 模式、加火、減火、定時(shí)> 關(guān)機(jī)按鍵:in_res: std_logic;設(shè)計(jì)輸出端口:> o_resq_mode,o_up,o_dow

31、n,o_time:outstd logic;消抖后的輸出。3. 邏輯設(shè)計(jì)程序按照老師課件屮的程序稍加改動(dòng)做成多輸出的消抖模塊,此處代碼略。4.仿真與分析仿真分析> 輸出波形完美無毛刺;> 輸出信號(hào)的長度與消抖時(shí)鐘周期的長度有關(guān);其后面的模塊要考慮輸入信號(hào)的 長度不能過短導(dǎo)致后續(xù)模塊無法識(shí)別出有效按鍵。(六)數(shù)碼管譯碼模塊(shumaguan)設(shè)計(jì)1. 總體思路使用數(shù)碼管前兩位顯示倒訃時(shí)的數(shù)字后四位顯示當(dāng)前的功率值。使用500hz頻率時(shí) 鐘掃描cat端i 1一次使能不同的數(shù)碼管,利用視覺暫留效應(yīng)讓6個(gè)數(shù)碼管看上去同 時(shí)亮。2. 外部接口輸入端口:. .clk.500cati5 0mo

32、d.s£lectedsnui<7 9show0smowjjo(3 0smow.tjp 0> 掃描時(shí)鐘 clk:500hz:a 顯示火力數(shù)據(jù) show fire:-clk.2:wm -:一 moo.s£lectedsswv:' 0 std_l0gic_vect0r(2 downto 0);一 “嚴(yán)中?!縚 a show t 10(3 0> 顯示倒計(jì)時(shí)數(shù)據(jù)show_t_10,show. ot_1:- - ushowjjp 0-rstinteger range oto 9;i :> 狀態(tài)信號(hào) m ode_selected: std_logic;::

33、輸出端口:> cat: std_l0gic_vect0r(5 downto 0);> 每個(gè)管腳數(shù)據(jù) snum: std_l0gic_vect0r(7 downto 0)3. 內(nèi)部邏輯1) mode_selected=,0,時(shí),將cat= allllllf用來熄滅數(shù)碼管,此時(shí)為待機(jī)狀 態(tài);2) 根據(jù)約定將輸入來的show_fire, show_t_10利show_t_1分別譯出,對應(yīng) 到每個(gè)數(shù)碼管,存入到一個(gè)數(shù)組中;3) 在時(shí)鐘信號(hào)上升沿,對于不同的cat,賦予顯示shu不同的值;代碼較為簡單,此處省略,代碼見附件4. 仿真與分析05io:52it1019h2ik?3:435z2tf

34、n»3i a 二二二二二二 c:二ojlwood ».r» ffl »jj ffl awjjtsmnj9n»t5)m4) smoi smu) »b(ll smoicatw3(町cato3catttlcat(i) lam3mjuttdhl"函run 工和盯> m rtai 9 呼 t «h »t io «fe m 13 iyr « is rp tpt n 9f3 » rp «» _m <jt x op ift sw mm 計(jì)詢6 - "

35、moi ifjfb 仃 6odofy” liiighol igto'(七)點(diǎn)陣譯碼模塊(diaruhen)設(shè)計(jì)1. 總體思路根據(jù)實(shí)驗(yàn)板上的點(diǎn)陣,采用行掃描的模式,依照時(shí)鐘依次將某一行置低,然后將該 行對應(yīng)要亮的點(diǎn)的列置高即可使坐標(biāo)交叉處的燈亮起來。采用數(shù)組進(jìn)行存儲(chǔ),減少代碼量以及編程的重復(fù)勞動(dòng),方便快捷。2. 部分代碼mode:process(in_data)begincase in_dataiswhen ”001>>顯示 hcols(5)<=n00100100n;cols(4)<=,00100100h;cols(3)<=,00111100h;cols(2

36、)<=,00100100h;cols(1)<=,00100100h;cols(o)<=,ooiooiooh;when others=>不顯示cols(5)<=l,00000000,i;cols(4)<=,oooooooon;cols <=,000000001'cols(2)<=,oooooooom;cols(l)<=,oooooooon;cols(o)<=,oooooooo1';end case;end process mode;show:process(clk-1000)-clk=looohzvariable num

37、jnteger range 0 to 5;beginif(clk_1ooo'event and clk_1ooo二t)then if(num=5)thennum:=0;elsenum:=num+1;end if;順次行掃描case num iswhen 0=>twhen 1=>twhen 2=>twhen 3=>twhen 4=>twhen 5=>tcol<=cols(5);tcol<=cols(4);tcol<=cols(3);tcol<=cols(2);tcol<=cols(1);tcol<=cols(0);t

38、rowv-sollllll”;row<=,11011111,;row<=,11101111,;row<=,11110111,;row<=,11111011,;rowvllllllol”;-row 6-row 1end case;end if;end process show; col<=t_col; row<=t_row;3.仿真和分袖exs*221rxn b rm rm mcujootqxfjtfatoj s col cooncoucjwil couo cqu)| couji couh icoua q wt«w(t|wet)aorni»

39、v(mbovhl»u1kv(i.wmi> >110 m <20 «72 ei 31 «f?41 9|3 « s? «p , s2 9p « t3 < m o « m tj2 m ioc 868 at 11! m3 *t 12s » « 1» xis »s 1« m m is?押“ 16> h2? us lit同xm)c 一一 nxin n n n n n n n in a n nn n n n nxxych波形分析:> 在in_data為“

40、000”時(shí),col為全零,點(diǎn)陣不顯示;> 在in_data為“001”時(shí),可以看出在不同的rowx為0時(shí),col依次為“ooiooioo”, "ooiooioo", 'oolllloo% "ooiooioo", "00100100", "ooiooioo1",即為h字母。(八)分頻模塊(fenpin)設(shè)計(jì)1.設(shè)計(jì)思路為節(jié)省片上資源,此處采用串行分頻,輸入50mhz的時(shí)鐘,依次分出1mhz, lkhz, 500hz和1hz;采用多輸出模式輸出2. 代碼較簡單,此處略。四、系統(tǒng)的整體搭建1. 使用quar

41、tusll的圖形界面編程的方法,將之前仿真成功的模塊連成一個(gè)統(tǒng) 一的系統(tǒng),如圖:flw statusqutrlus ii vtrnonrevision n.toylevtl entitydvi ”2. 程序編譯后,得到關(guān)于芯片資源占用的情況表,如f圖:row summarysuccessful mon nov 11 00:24:48 2013 9.0 bml4 132 02/2s/2009 sj full v«rxion ttxt.tllmax iiep«1j>?(nu4c5ti*in( lodtlsel ti*>nc requirtaentt total lo

42、.ictottl pinttottl virtutl pinsufii blocksfinalno502 / 1,270 ( 40 % )38 八 16 ( 33 » )00 / 1 (0 »)3. 系統(tǒng)接口連接說明輸入端口硬件資源輸出端口硬件資源clk實(shí)驗(yàn)板硬件時(shí)鐘row7.0row7.row0modebutton7col7.0col7.col0upbutton6cat5.ocat5catodownbutton5snum7.oaa.aptimebutton4ledledoresetbuttonosoundbeep4. 功能使用說明4.1 改變模式功能:按button7鍵可

43、以依次在火鍋(h)、煎炒(j)、爆炒(b)、煲湯(t)和蒸燉(z)模式之間循環(huán)切換,按一次按鍵切換一次,同時(shí)點(diǎn)陣會(huì)顯示相 應(yīng)的字母提示當(dāng)前的狀態(tài)。4.2 改變火力功能:button6為加大火力按鍵,button5為減小火力按鍵,按這兩個(gè)鍵 可以在不同的火力檔位:1900w-1500w-1100w-600w-100w之間切換,同時(shí)數(shù)碼 管末四位會(huì)顯示當(dāng)前的火力值。4.3 人工定時(shí)功能:button4為人工定時(shí)功能,按此鍵可以自定義加熱時(shí)間,除爆炒(b)模式外其他模式均可使用此功能,用戶按按鍵設(shè)定時(shí)間在5s-10s-30-60s z 中切換,按一次切換一次,不繼續(xù)按鍵即認(rèn)為使用此時(shí)間定時(shí)。4.4

44、人工/自動(dòng)關(guān)機(jī)功能:機(jī)器會(huì)依照默認(rèn)時(shí)間或人工定時(shí)進(jìn)行家人,其中默認(rèn)加熱 時(shí)間為90s (爆炒模式為3s、蒸燉模式為20s)加熱時(shí)間到自動(dòng)關(guān)機(jī),停止加熱。 在自動(dòng)吋問到之前,可以人為通過按buttono鍵強(qiáng)制關(guān)機(jī),關(guān)機(jī)后按button7鍵 可重新開機(jī)。五、故障和問題分析1. 點(diǎn)陣顯示異常,只有上下兩條亮其他均不亮分析:通過檢查代碼和対問題狀況的分析,發(fā)現(xiàn)問題出在將行和列的高低電平寫反。將 代碼中的相關(guān)代碼改過來后點(diǎn)陣可以正常顯示了。2. 蜂鳴器不響分析:由于代碼屮對button4的檢測使用的是伽hz的時(shí)蝕頻率,而其中使蜂鳴器置高 的吋間不足lus,使蜂鳴器發(fā)出的聲咅不能被耳朵聽到。解決:將蜂鳴器

45、的控制與按鍵監(jiān)聽分開,當(dāng)檢測到按鍵被按下后,使能一個(gè)計(jì)時(shí)器,保 證蜂鳴器的鳴叫時(shí)間不少于50mso3. 按關(guān)機(jī)鍵后不能再次開機(jī)分析:這個(gè)問題是我這次實(shí)驗(yàn)最嚴(yán)重的問題了,原因應(yīng)該是在我系統(tǒng)的邏輯中,如果按 下buttono也就是關(guān)機(jī)鍵后,會(huì)有一個(gè)信號(hào)復(fù)位倒計(jì)吋,將倒計(jì)吋的總計(jì)吋復(fù)位為0, 導(dǎo)致倒計(jì)時(shí)會(huì)持續(xù)輸出timeover的信號(hào),該信號(hào)會(huì)繼續(xù)復(fù)位系統(tǒng)導(dǎo)致系統(tǒng)在復(fù)位屮循 環(huán),因此不能開機(jī)。解決:將倒計(jì)時(shí)模塊和火力加熱模式選擇模塊改為狀態(tài)機(jī)編程,并在火力選擇模塊上增 加系統(tǒng)狀態(tài)標(biāo)記(mode_selected)信號(hào),當(dāng)系統(tǒng)處于關(guān)機(jī)狀態(tài)將此信號(hào)置低。此信 號(hào)為高時(shí)倒計(jì)時(shí)模塊才處于運(yùn)行狀態(tài),防止倒計(jì)吋

46、模塊不停給出timeover信號(hào)。六、總結(jié)和結(jié)論這次數(shù)電實(shí)驗(yàn),我親身經(jīng)歷了設(shè)計(jì)開發(fā)一個(gè)完整的數(shù)字電路系統(tǒng)的過程,從拿到題目時(shí) 的一片空白到最后驗(yàn)收吋一個(gè)完整的可操作的簡易數(shù)字系統(tǒng),這個(gè)過程不僅鍛煉了我們 vhdl語言的編寫,更是對我們工程實(shí)踐應(yīng)用的極大鍛煉。我學(xué)到:要想完成一個(gè)實(shí)際系統(tǒng)的設(shè)計(jì),首先要從一個(gè)較高的角度去推測“我要做一個(gè)什么樣的系統(tǒng)”從系統(tǒng)的功能出發(fā)將其拆 分為兒個(gè)模塊。不要總想著代碼該如何寫,而是要考慮模塊之間的接口問題,有點(diǎn)像面向?qū)?象編程的思路。之后按照模塊各自的需求,設(shè)計(jì)狀態(tài)轉(zhuǎn)移圖等,逐步考慮模塊的實(shí)現(xiàn),不斷細(xì)化功能直到把模塊實(shí)現(xiàn)。之后通過各模塊仿真,分析模塊功能是否正常,

47、并且要關(guān)注每個(gè)模塊輸入輸 出的特點(diǎn),將相互需要連接的模塊之間的信號(hào)長度等協(xié)調(diào)好,避免組成系統(tǒng)后出現(xiàn)信號(hào)吋長 不匹配的問題。最后將各模塊連成系統(tǒng)仿真或進(jìn)行試驗(yàn),檢驗(yàn)程序的健壯性和bugo這次數(shù)電實(shí)驗(yàn)更鍛煉了我的耐力,雖然不是很龐大的系統(tǒng),但一個(gè)人在2周z內(nèi)寫出來 也很不容易,尤其是在遇到“不能二次開機(jī)”的問題后,很苦惱,找不出問題所在也找不出 解決辦法。其實(shí),這種時(shí)候最好的辦法就是推到重來,我將相關(guān)的模塊用另一種思路重寫一 遍,在重寫的過程中逐漸意識(shí)到問題是信號(hào)時(shí)長不兀配的問題,而且意識(shí)到以前的思路是不 能解決的,這更證明我當(dāng)時(shí)推到重來的舉動(dòng)是正確的。短短4周的數(shù)電實(shí)驗(yàn),雖然很辛苦,但是我很開心

48、,自己的努力和汗水終于結(jié)出了成功 短短果實(shí),其實(shí)我真心希望能有更多這樣的實(shí)驗(yàn)機(jī)會(huì),讓我們更好的運(yùn)用書本知識(shí)于實(shí)際, 為日后的學(xué)習(xí)和發(fā)展打好基礎(chǔ)。七、附錄(-)烹飪模式選擇模塊完整代碼library ieee;use ieee.std_logic_1164.all;use ieee.std-logicjjnsigned.all;entity modeselect is聲明模塊port(clk:instd_logic;t_over:in std-logic;selectn:in std_logic;-to reset the modal“時(shí)鐘1mhz倒計(jì)時(shí)結(jié)束的復(fù)位信號(hào)“消抖后的按鍵信號(hào)out_m

49、ode:out std_l0gic_vect0r(2 downto 0);-control diazhenout_time:out std_logic_vector(1 dow nto 0);-control time showis_select:out std_logic;-模式判斷信號(hào)set led:out std logic控制指示燈“signal which is used to choose modeend modeselect;architecture sel of modeselect issignal mark,from_b:std_logic;“mode_&_ tim

50、esignal mt:std_logic.vector(1 downto 0);type allstate is(s,h丄brz);signal state:all_state;beginmt<=select in&t over;mmmmfp1:process(clk)beginif(clk'event and clk二t)then-6 狀態(tài)狀態(tài)機(jī)case state iswhen s=>待機(jī)狀態(tài)scase mt iswhen ,00,=>state<=s;mark<=,0,;out_mode<=h000,;outtime<=m11,;

51、set_led<=,0,;is_select<=,0,;from_b<=,0,;when h01,=>state<=s;mark<=,0,;out-mode<=,000,;out_time<=,11,;set_led<=,0,;is_select<=,0,;from-b<=,0,;when ”10性if(mark=,0')thenstate<=h;mark<=,1,;out_mode<=h001,;out-_time<=,00,;set_led<=,1,;is-select<=,1,;

52、from_b<=,0,;-change to next stateelsestate<=s;out_mode<=,oooh;out_time<=,11,;set_led<='0,;is_select<=,0,;from_b<=,0,;-hold current stateend if;when,11,=>state<=s;mark<=,1,;out-mode<=,000,;out_time<=,11,;set_led<=,0,;is-select<=,0,;fromb<=,0,;-backtoan

53、ti-stateend case;when h=>一火鍋模式hcase mt iswhen n00,=>state<=h;mark<=,0,;out_mode<=,001,;out_time<=,00,;set_led<=,l,;isselect<=,l,;from_b<=,0,;when h01,=>state<=s;mark<=,0,;out-mode<=,000,;out_time<=,11,;set_led<=,0,;is_select<=,0,;from-b<=,0,;when ”1

54、0性if(mark=,o')thenstate<=j;mark<=,1,;out-mode<=,010,;out_time<=,00,;set_led<=,1,;is_select<=,1,;from_b<=,0,;elsestate<=h;outmode<=,001,;out_time<=,11,;set_led<=,1'is_select<=,1,;-hold current stateend if;when ,ir=>state<=s;mark<=,l,;out-mode<=,

55、000,;out_time<=,ll,;set_led<=,0,;is_select<=,0,;from_bb<=,0,;end case;when j=>-煎炒模式j(luò)if(from_b=t and t_over二t)thenstate<=j;mark<=,0,;out-mode<=,010,;out-time<=,00,;set_led<=,1,;is-select<=,1,;elsecase mt iswhen,00,=>state<=j;mark<=,0,;out_mode<=,010,i;out_

56、time<=h00,;set_led<=,1,;is_select<=,1'from-b<=,0,;when,oi,=>state<=s;mark<=,o,;out-mode<=,ooo,i;out_time<=,hh;set_led<=,o,;is_select<=,o,;from_bb<=,o,;when ,10,=>if(mark=,o,)thenstate<=b;mark<=,1,;out_mode<=,ohh;outtime<=,01,;set-led<=,1,;is_

57、select<=,1,;from-b<=,0,;elsestate<=j;out-mode<=,010h;out_time<=,00h;set-led<=,1,;is_select<=,1,;from-b<=,0,;end if;whenhll,=>state<=s;mark<=,l,;out-mode<=nooo,;out_time<=,ll,;set_led<=,0,;is_select<=,0,;from_b<=,0,;end case;end if;when b=>爆炒模式bcase

58、mt iswhen hoo,=>state<=b;mark<=io,;out_mode<=,011,;out_time<=,01,;set-led<=,1,;is_select<=,1i;from_b<=,0,;when ,01,=>state<=j;mark<=,0,;out_mode<=,010,;out-time<=,00,;set-.led<=,1,;is-.select<=,1,;from_b<=,1,;返回j狀態(tài)when h10h=>if(mark=,o,)thenstate<

59、;=t;mark<=,l,;out-mode<=,010,;out_time<=,oou;set_led<=,l,;is_select<=,l,;from_b<=lo,;elsestate<=b;out_mode<=h011,;out_time<=,01h;set-led<=,1,;is_select<=,1,;from_b<=,0,;end if;when ,11,=>state<=j;mark<=,1,;out-mode<=,010,;out-time<=,ooh;set_led<=,1,;is_select<=,1,;from_b<=,1,;end case;when t=>“煲湯模式tcase mt iswhen noo"=>state<=t;mark<=,ol;out_mode<

溫馨提示

  • 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

提交評論