

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 數(shù)字邏輯課程設(shè)計報告</p><p> 題 目 洗衣機控制器 </p><p> 姓 名 </p><p> 學(xué) 號 </p><p> 班 號
2、 </p><p> 指導(dǎo)老師 </p><p> 成 績 </p><p><b> 2014年6月</b></p><p><b> 目
3、錄</b></p><p> 1. 課程設(shè)計目的</p><p> 2. 開發(fā)工具選擇</p><p> 3. 設(shè)計方案 </p><p><b> 4. 模塊描述</b></p><p> 5. VHDL實現(xiàn)</p><p><
4、;b> 6. 調(diào)試仿真</b></p><p> 7. 課程設(shè)計回顧總結(jié) </p><p><b> 參 考 文 獻 </b></p><p><b> 附錄 </b></p><p><b> 1課程設(shè)計目的</b></p>
5、<p> 設(shè)計一個洗衣機控制器,控制洗衣機的電機按照下圖要求運轉(zhuǎn)。</p><p> 用兩位數(shù)碼管預(yù)置洗滌時間(分鐘數(shù)),洗滌過程在送入預(yù)置時間后開始運轉(zhuǎn),洗滌中按倒計時方式對洗滌過程作計時顯示,用LED表示電動機的正、反轉(zhuǎn),如果定時時間到,則停機并發(fā)出音響信號。 </p><p><b> 2開發(fā)工具選擇</b></p><p&
6、gt;<b> 硬件描述語言</b></p><p> 洗衣機控制器的設(shè)計采用了功能強大的VHDL語言,它具有很強的行為能力描述,設(shè)計方法靈活,可以支持庫和模塊設(shè)計方法。 </p><p> QuartusII軟件開發(fā)工具 </p><p> 本設(shè)計采用的軟件開發(fā)工具是美國的Altera公司的QuartusII,它支持多種設(shè)
7、計輸入方法,包括原理圖輸入、文本輸入。 </p><p> EDA實驗開發(fā)系統(tǒng) </p><p> 本設(shè)計采用的EDA實驗開發(fā)系統(tǒng),主要用于提供可編程邏輯器件的下載電路及EDA實驗開發(fā)的外圍資源,供硬件驗證用。</p><p><b> 3設(shè)計方案</b></p><p><b> 總體思
8、路:</b></p><p> 洗衣機啟動后,將依次經(jīng)過正轉(zhuǎn)15s、暫停5秒、反轉(zhuǎn)15秒、暫停5秒四個步驟(狀態(tài))。在實例中,假設(shè)定時時間為40秒,故經(jīng)過這四個狀態(tài)后時間到,停止。</p><p><b> 具體實現(xiàn):</b></p><p> 此設(shè)計問題可分為洗滌預(yù)置時間編碼寄存電路模塊、十進制減法計數(shù)器模塊、時序電路模塊、
9、譯碼驅(qū)動模塊四大部分。 </p><p> 設(shè)置預(yù)置信號LD,LD有效后,可以對洗滌時間計數(shù)器進行預(yù)置數(shù),用數(shù)據(jù)開關(guān)K1-K10分別代表數(shù)字1,2,…,9,0,用編碼器對數(shù)據(jù)開關(guān)K1-K10的電平信號進行編碼,編碼器真值表如下表所示,編碼后的數(shù)據(jù)寄存。 </p><p> 設(shè)置洗滌開始信號start,start有效,則洗滌時間計數(shù)器進行倒計數(shù),并用數(shù)碼管顯示,同時啟動時序電路工作。 &
10、lt;/p><p> 時序電路中含有15s定時信號,5s定時信號,設(shè)為A、B,A、B為“0”表示定時時間未到,為“1”表示定時時間到。 </p><p> 設(shè)置電動機正轉(zhuǎn)信號run、反轉(zhuǎn)信號rev、暫停信號Pause,由時序電路的輸出Q2Q1經(jīng)譯碼驅(qū)動模塊,可使顯示信號正確反映電路的工作狀態(tài)。</p><p> 直到洗滌計時時間到,時序電路異步復(fù)位。</p&
11、gt;<p><b> 流程圖如下:</b></p><p><b> 4模塊描述</b></p><p> 模塊一:預(yù)設(shè)時間和編碼電路(yuzhitime)</p><p> 接受用戶通過按鈕預(yù)置的時間信息,編碼成八位之后轉(zhuǎn)給減法計數(shù)器。</p><p> 模塊二:減法計數(shù)
12、器電路(counter)</p><p> 接收編碼之后的預(yù)置時間信息,向電機運轉(zhuǎn)控制電路傳遞運行信號,并將預(yù)置時間信息和剩余時間信息發(fā)給數(shù)碼管顯示電路進行實時顯示。</p><p> 模塊三:數(shù)碼管顯示電路(showtime)</p><p> 接收減法計數(shù)器電路傳來的時間信息,進行實時譯碼顯示</p><p> 模塊四:電機運轉(zhuǎn)時
13、序控制電路(shixu)</p><p> 接收運行起止信號,安排電機運行狀態(tài)并編碼輸出。</p><p> 模塊五:譯碼器(move)</p><p> 接收電機運行狀態(tài)信號,譯碼后實時控制電機的正傳、反轉(zhuǎn)和暫停。</p><p><b> 5 VHDL實現(xiàn)</b></p><p>
14、模塊一:預(yù)設(shè)時間和編碼電路(yuzhitime)</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity yuzhitime is</p>
15、<p> port(load,clk:in std_logic;</p><p> time_input:in std_logic_vector(3 downto 0);</p><p> time_set:out std_logic_vector(7 downto 0));</p><p> end yuzhitime;</p>&
16、lt;p> architecture yuzhitime of yuzhitime is</p><p> signal p1:std_logic_vector(7 downto 0);</p><p><b> begin</b></p><p> process(time_input)is begin</p>&
17、lt;p> case time_input is</p><p> when "0000"=>p1<="00000000";</p><p> when "0001"=>p1<="00000001";</p><p> when "0010
18、"=>p1<="00000010";</p><p> when "0011"=>p1<="00000011";</p><p> when "0100"=>p1<="00000100";</p><p> when
19、 "0101"=>p1<="00000101";</p><p> when "0110"=>p1<="00000110";</p><p> when "0111"=>p1<="00000111";</p><
20、p> when "1000"=>p1<="00001000";</p><p> when "1001"=>p1<="00001001";</p><p> when "1010"=>p1<="00001010";</
21、p><p> when others=>p1<="00000000";</p><p><b> end case;</b></p><p> end process;</p><p> time_set<=p1;</p><p> end yuzhit
22、ime;</p><p> 其中,time_input為通過開發(fā)板上按鈕輸入的信號,load為輸入確認(rèn)信號。本模塊將輸入的四位時間信息編碼輸出到減法計數(shù)器電路。</p><p> 模塊二:減法計數(shù)器電路(counter)</p><p> library ieee;</p><p> use ieee.std_logic_1164.a
23、ll;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity counter is</p><p><b> port</b></p><p><b> (</b></p><p> clk,start:
24、in std_logic;</p><p> time_set:in std_logic_vector(7 downto 0);</p><p> time_remain:buffer std_logic_vector(7 downto 0); </p><p> time_over:buffer std_logic</p><p>&
25、lt;b> );</b></p><p> end counter;</p><p> architecture counter of counter is</p><p><b> begin </b></p><p> process(clk)</p><p>
26、variable time_second:integer range 0 to 59:=59;</p><p><b> begin</b></p><p> if(clk'event and clk='1') </p><p><b> then </b></p><p&
27、gt; if(start='0')</p><p><b> then</b></p><p> if(time_remain(7 downto 0)=0)</p><p><b> then</b></p><p> time_remain<=time_set;&l
28、t;/p><p><b> else </b></p><p> time_remain(7 downto 4)<=time_remain(3 downto 0);</p><p> time_remain(3 downto 0)<=time_set(3 downto 0);</p><p><b&g
29、t; end if;</b></p><p> time_second:=59;</p><p> time_over<='1';</p><p><b> else </b></p><p> if(time_over='1')</p><
30、p><b> then </b></p><p> if(time_second=0 and time_remain(7 downto 0)=0)</p><p><b> then </b></p><p> time_over<='0';</p><p>&l
31、t;b> else </b></p><p> if(time_second=0)</p><p><b> then </b></p><p> if (time_remain(3 downto 0)=0)</p><p><b> then</b></p>
32、<p> time_remain(7 downto 4)<=time_remain(7 downto 4)-1;</p><p> time_remain(3 downto 0)<="1001";</p><p> time_second:=59; </p><p><b> else</b&g
33、t;</p><p> time_remain(7 downto 4)<=time_remain(7 downto 4);</p><p> time_remain(3 downto 0)<=time_remain(3 downto 0)-1;</p><p> time_second:=59; </p><p><b
34、> end if;</b></p><p><b> else</b></p><p> time_second:=time_second-1;</p><p><b> end if; </b></p><p><b> end if;</b>&l
35、t;/p><p><b> end if;</b></p><p> end if; </p><p><b> end if;</b></p><p> end process;</p><p> end counter;</p>&
36、lt;p> 本模塊中clk為系統(tǒng)時序脈沖信號,start為系統(tǒng)開始運行的信號,time_set為從預(yù)置時間模塊接收到的時間編碼信號,time_remain為輸出到數(shù)碼管顯示電路的時間信號,time_is_up為系統(tǒng)運行結(jié)束信號。</p><p> 在系統(tǒng)運行的開始時期,用戶第一次輸入的預(yù)置時間會被賦給個位,第二次輸入的時間會被賦給十位,可以進行多次輸入,以前的會被覆蓋。</p><p
37、> 模塊三:數(shù)碼管顯示電路(showtime)</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity showtime is</p>
38、<p><b> port</b></p><p><b> (</b></p><p> time_remain:in std_logic_vector(7 downto 0);</p><p> clk:in std_logic;</p><p> minute,seco
39、nd:out std_logic;</p><p> a,b,c,d,e,f,g: out std_logic</p><p><b> );</b></p><p> end showtime;</p><p> architecture showtime of showtime is</p>&
40、lt;p> signal temp:std_logic_vector(6 downto 0);</p><p> signal bcd:std_logic_vector(3 downto 0);</p><p> signal choose:std_logic;</p><p><b> begin</b></p>
41、<p> process(clk)</p><p><b> begin</b></p><p> if(clk'event and clk='1')</p><p><b> then </b></p><p> choose<=not choo
42、se;</p><p> if(choose='1')</p><p><b> then </b></p><p> minute<='0';second<='1';</p><p> bcd<=time_remain(7 downto 4);&
43、lt;/p><p><b> else </b></p><p> minute<='1';second<='0';</p><p> bcd<=time_remain(3 downto 0);</p><p><b> end if;</b>&
44、lt;/p><p><b> end if;</b></p><p> end process;</p><p> process(bcd)</p><p><b> begin</b></p><p> case bcd is</p><p>
45、 when "0000"=>temp<="1111110" ;</p><p> when "0001"=>temp<="0110000" ;</p><p> when "0010"=>temp<="1101101&qu
46、ot; ;</p><p> when "0011"=>temp<="1111001" ;</p><p> when "0100"=>temp<="0110011" ;</p><p> when "0101"=>
47、;temp<="1011011" ;</p><p> when "0110"=>temp<="1011111" ;</p><p> when "0111"=>temp<="1110000" ;</p><p> wh
48、en "1000"=>temp<="1111111" ;</p><p> when "1001"=>temp<="1111011" ;</p><p> when others=>temp<="1111011" ;</p>
49、;<p><b> end case;</b></p><p> a<=temp(6);b<=temp(5);c<=temp(4);d<=temp(3);e<=temp(2);f<=temp(1);g<=temp(0);</p><p> end process;</p><p>
50、 end showtime;</p><p> 接收減法計數(shù)器電路傳來的時間信息,進行實時譯碼顯示,由于我們的實際是可以進行兩位的時間顯示的,所以開始的時候是用的兩個數(shù)碼管,后來見到硬件芯片上是只有一個,又修改成了一個,但為了進行兩位的顯示,我們就設(shè)計了兩個小燈,每個小燈分別代表十位和個位,當(dāng)某個小燈被點亮?xí)r代表當(dāng)前顯示的是對應(yīng)位的數(shù)值,每個一秒轉(zhuǎn)換一次,這樣就可以實現(xiàn)兩位的顯示了。</p>&l
51、t;p> 模塊四:電機運轉(zhuǎn)時序控制電路(shixu)</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity shixu is</p>
52、<p><b> port</b></p><p><b> (</b></p><p> clk,start,time_over:in std_logic; </p><p> q1,q2:out std_logic</p><p><b> );</b&g
53、t;</p><p> end shixu;</p><p> architecture shixu of shixu is</p><p><b> begin </b></p><p> process(clk)</p><p> variable state:std_logic;
54、 </p><p> variable wash_time:integer :=0;</p><p> variable wait_time:integer :=0;</p><p><b> begin </b></p><p> if(clk'event and clk='1')<
55、;/p><p><b> then</b></p><p> if(start='0')</p><p><b> then</b></p><p> wash_time:=0;</p><p> wait_time:=0;</p><
56、;p> state:='0';</p><p> q1<='0';q2<='0';</p><p><b> else</b></p><p> if(time_over='1')</p><p><b> then&l
57、t;/b></p><p> if(wash_time=20)</p><p><b> then</b></p><p> if(wait_time=9)</p><p><b> then</b></p><p> wash_time:=0;</p&
58、gt;<p> state:=not state;</p><p><b> else </b></p><p> wait_time:=wait_time+1;</p><p><b> end if;</b></p><p><b> else</b>
59、;</p><p> wash_time:=wash_time+1;</p><p> wait_time:=0;</p><p><b> end if;</b></p><p><b> end if;</b></p><p> if(wash_time=20)
60、</p><p><b> then </b></p><p> q1<='0';q2<='0';</p><p><b> else </b></p><p> if(state='0')</p><p>
61、<b> then </b></p><p> q1<='1';q2<='0';</p><p><b> else </b></p><p> q1<='0';q2<='1';</p><p><
62、b> end if;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p>&l
63、t;p> end shixu;</p><p> 通過時鐘的輸入進行計算當(dāng)前系統(tǒng)應(yīng)該處的狀態(tài),并進行編碼輸出電機的運轉(zhuǎn)狀態(tài)。由于在顯示以及輸入的時候只有分鐘,故需要內(nèi)設(shè)一個秒的計時變量。</p><p> 模塊五:譯碼器(move)</p><p> library ieee;</p><p> use ieee.std_lo
64、gic_1164.all;</p><p> entity move is</p><p><b> port(</b></p><p> q1,q2: in std_logic;</p><p> REV,RUN,PAUSE: buffer std_logic</p><p><b
65、> );</b></p><p><b> end move;</b></p><p> architecture move of move is</p><p><b> begin</b></p><p> REV<=q2;RUN<=q1;PAUSE<
66、;=not(q1 OR q2);</p><p><b> end move;</b></p><p> 分析輸入的電機轉(zhuǎn)動編碼信號,即為思路中的Q1何Q2,安排電機運行狀態(tài)并進行輸出。</p><p><b> 主程序(wash)</b></p><p> 用來將各個模塊進行組合,從而實現(xiàn)
67、一個可以運行的系統(tǒng)。程序代碼如下所示:</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> use work.all;</p><p>
68、entity wash is</p><p><b> port</b></p><p><b> (</b></p><p> load:in std_logic;</p><p> time_input:in std_logic_vector(3 downto 0);</p>
69、<p> clk:in std_logic;</p><p> start:in std_logic;</p><p> time_set:buffer std_logic_vector(7 downto 0);</p><p> time_over:buffer std_logic;</p><p> REV,RU
70、N,PAUSE: buffer std_logic;</p><p> a,b,c,d,e,f,g: buffer std_logic;</p><p> minute,second:buffer std_logic</p><p><b> );</b></p><p><b> end wash;&
71、lt;/b></p><p> architecture wash of wash is</p><p> component yuzhitime </p><p><b> port</b></p><p><b> (</b></p><p> load:
72、in std_logic;</p><p> time_input:in std_logic_vector(3 downto 0); </p><p> time_set:out std_logic_vector(7 downto 0)</p><p><b> );</b></p><p> end compo
73、nent;</p><p> component counter</p><p><b> port</b></p><p><b> (</b></p><p> clk,start:in std_logic;</p><p> time_set:in std_l
74、ogic_vector(7 downto 0);</p><p> time_remain:buffer std_logic_vector(7 downto 0); </p><p> time_over:buffer std_logic</p><p><b> );</b></p><p> end comp
75、onent;</p><p> component showtime</p><p><b> port</b></p><p><b> (</b></p><p> time_remain:in std_logic_vector(7 downto 0);</p><p
76、> clk:in std_logic;</p><p> minute,second:out std_logic;</p><p> a,b,c,d,e,f,g: out std_logic</p><p><b> );</b></p><p> end component;</p>&l
77、t;p> component shixu</p><p><b> port</b></p><p><b> (</b></p><p> clk,start,time_over:in std_logic; </p><p> q1,q2:out std_logic</p&g
78、t;<p><b> );</b></p><p> end component;</p><p> component move</p><p><b> port</b></p><p><b> (</b></p><p>
79、 q1,q2: in std_logic;</p><p> REV,RUN,PAUSE: buffer std_logic</p><p><b> );</b></p><p> end component;</p><p> signal time_remain:std_logic_vector(7 do
80、wnto 0);</p><p> signal q1,q2:std_logic;</p><p><b> begin</b></p><p> yuzhitime1:yuzhitime port map (load,time_input,time_set);</p><p> counter1:counter
81、 port map (clk,start,time_set,time_remain,time_over);</p><p> showtime1:showtime port map (time_remain,clk,minute,second,a,b,c,d,e,f,g);</p><p> shixu1: shixu port map (clk,start,time_over,q1,
82、q2);</p><p> move1:move port map (q1,q2,REV,RUN,PAUSE);</p><p><b> end wash;</b></p><p><b> 6調(diào)試仿真</b></p><p> 1 yuzhitime </p><p&
83、gt; 2 counter </p><p> 3 showtime </p><p><b> 4 shixu</b></p><p><b> 5 move</b></p><p> 7洗衣機控制器級聯(lián)圖及仿真</p><p><b> 8課程設(shè)計回
84、顧總結(jié)</b></p><p> 關(guān)于這個洗衣機控制器,就是用模塊化層次化的設(shè)計方法進行系統(tǒng)層的設(shè)計,這樣分解下來,設(shè)計會更容易點,思路也比較簡單。洗衣機控制器主要就只有三個狀態(tài),要實現(xiàn)幾種狀態(tài)的多次循環(huán)的改變,其他的還有計時和數(shù)碼顯示的功能,所以電路可以設(shè)計為大致五大部分:yuzhitime,counter,shixu,move,和showtime。通過每個模塊的設(shè)計最后組裝即可完成系統(tǒng)級的設(shè)計。
85、在設(shè)計的時候,如果特別要注意各個模塊之間接口的設(shè)計,要是接口不對,模塊之間就沒法實現(xiàn)組裝。</p><p> 通過這次設(shè)計,對于VHDL的設(shè)計方法大致有了一些技巧性的了解,位以后的硬件設(shè)計打下了基礎(chǔ),對FPGA的編程、定時器和計數(shù)器的設(shè)計都熟悉起來,加深了對時序組合電路的印象。</p><p> 通過在網(wǎng)上進行各種資料的查詢,也發(fā)現(xiàn)了其實FPGA的設(shè)計具有較好的前景,其功能的強大和設(shè)計
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)字邏輯課程設(shè)計之洗衣機控制器
- 數(shù)字邏輯系統(tǒng)課程設(shè)計--洗衣機控制器
- 數(shù)字邏輯實驗課程設(shè)計——洗衣機定時控制器設(shè)計
- 洗衣機控制器課程設(shè)計
- 洗衣機控制器課程設(shè)計
- 洗衣機控制器課程設(shè)計--- 基于單片機的洗衣機控制器設(shè)計
- 課程設(shè)計--簡易洗衣機控制器
- eda課程設(shè)計---洗衣機控制器
- 數(shù)字電路課程設(shè)計洗衣機控制器的設(shè)計
- 課程設(shè)計--簡易洗衣機控制器設(shè)計
- 數(shù)字邏輯課程設(shè)計報告---洗衣機控制電路設(shè)計
- eda課程設(shè)計---洗衣機控制器設(shè)計
- 數(shù)字電子技術(shù)課程設(shè)計--簡易洗衣機控制器設(shè)計
- eda洗衣機控制器報告
- 洗衣機控制器
- 電子技術(shù)課程設(shè)計--智能洗衣機控制器
- eda課程設(shè)計---基于fpga的洗衣機控制器的設(shè)計
- veriloghdl洗衣機控制器設(shè)計
- 洗衣機控制系統(tǒng)課程設(shè)計報告
- 數(shù)字邏輯課程設(shè)計電梯控制器
評論
0/150
提交評論