《EDA課程設(shè)計 全自動洗衣機》由會員分享,可在線閱讀,更多相關(guān)《EDA課程設(shè)計 全自動洗衣機(13頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、EDA課程設(shè)計 全自動洗衣機
1 設(shè)計任務(wù)及要求
利用可編程邏輯器件豐富的內(nèi)部資源,借助EDA(電子設(shè)計自動化)工具(如MAX+plusⅡ)把家電控制器電路集成在一片F(xiàn)PGA(現(xiàn)場可編程門陣列)芯片內(nèi),這樣就無需專門的單片機和外部邏輯電路。從而減小了電路的體積、提高了系統(tǒng)的穩(wěn)定性。本次電路設(shè)計是洗衣機控制器設(shè)計。
設(shè)計的主要內(nèi)容是:
(1)設(shè)計一個洗衣機控制器,使洗衣機作如下運轉(zhuǎn):定時啟動—〉正轉(zhuǎn)20秒—〉暫停10秒—〉反轉(zhuǎn)20秒—〉暫停10秒—〉定時不到,重復(fù)上面過程。
(2)若定時到,則停止,并發(fā)出音響信號。
(3)用兩個數(shù)碼管顯示洗滌的預(yù)置時間(分鐘數(shù)),按倒計時方式對洗
2、滌過程作計時顯示,直到時間到停機;洗滌過程由開始信號開始。
(4)三只LED燈表示正轉(zhuǎn)、反轉(zhuǎn)、暫停三個狀態(tài)。
設(shè)計的主要要求是:
(1)根據(jù)設(shè)計題目要求編寫相應(yīng)程序代碼
(2)對編寫的VHDL程序代碼進行編譯和仿真
(3)利用實驗箱完成硬件驗證(可選)
(4)總結(jié)設(shè)計內(nèi)容,完成課程設(shè)計說明書
2設(shè)計原理及總體框圖
洗衣機控制器的設(shè)計主要是定時器的設(shè)計,由一片F(xiàn)PGA和外圍電路構(gòu)成了電器控制部分。FPGA接收鍵盤的控制命令,控制洗衣機的進水、排水、水位和洗衣機的工作狀態(tài)、并控制顯示工作狀態(tài)以及設(shè)定直流電機速度、正反轉(zhuǎn)控制、制動控制、起停控制和運動狀態(tài)控制(洗衣機洗滌過程如圖2所示
3、)。對FPGA芯片的編程采用模塊化的VHDL (硬件描述語言)進行設(shè)計,設(shè)計分為三層實現(xiàn),頂層實現(xiàn)整個芯片的功能。頂層和中間層多數(shù)是由VHDL的元件例化語句實現(xiàn)。中間層由無刷直流電機控制、運行模式選擇、洗滌模式選擇、定時器、顯示控制、鍵盤掃描、水位控制以及對直流電機控制板進行速度設(shè)定、正反轉(zhuǎn)控制、啟停控制等模塊組成,它們分別調(diào)用底層模塊。
洗衣機控制器電路主要有五大部分組成,包括:減法計數(shù)器、時序控制電路、預(yù)置時間和編碼電路、數(shù)碼管顯示、譯碼器組成。具體電路如圖3所示:
圖3洗衣機控制器總體設(shè)計圖
3 程序設(shè)計
(1)時間設(shè)置電路:
library ieee;
use ieee
4、.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity settime is
port(load:in std_logic;
k:in std_logic_vector(9 downto 0);
o:out std_logic_vector(3 downto 0)
);
end settime;
architecture rt1 of settime is
signal p1:std_logic_vector(3 downto 0);
begin
process(load)
begin
if(load
5、event and load=1)
then
case k is
when "1000000000"=>p1<="0001";
when "0100000000"=>p1<="0010";
when "0010000000"=>p1<="0011";
when "0001000000"=>p1<="0100";
when "0000100000"=>p1<="0101";
when "0000010000"=>p1<="0110";
when "0000001000"=>p1<="0111";
when "0000000100"=>p1<="1000";
when "00
6、00000010"=>p1<="1001";
when "0000000001"=>p1<="1010";
when others=>p1<="0000";
end case;
end if;
end process;
o<=p1;
end rt1;
(2)數(shù)碼管顯示
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity showtime is
port
(
num:
7、in std_logic_vector(3 downto 0);
dout:out std_logic_vector(6 downto 0)
);
end showtime;
architecture a1 of showtime is
begin
with num select
dout<="1111110" when "0000",
"0110000" when "0001",
"1101101" when "0010",
"1111001" when "0011",
"0110011" when "0100",
8、 "1011011" when "0101",
"1011111" when "0110",
"1110000" when "0111",
"1111111" when "1000",
"1111011" when "1001",
"0000000" when others;
end a1;
(3)序電路
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned
9、.all;
entity SHIXU is
port(clk:in std_logic;
TG:in std_logic;
start:in std_logic;
SHUCHU:BUFFER std_logic_VECTOR(2 DOWNTO 0)
);
end SHIXU;
architecture behav of SHIXU is
SIGNAL QQ:STD_LOGIC_VECTOR(5 DOWNTO 0);
begin
process(clk,tg,QQ)
begin
if(tg=1)or(start=0) then shuchu<="001";QQ<="
10、111011";
else if(clkevent) and (clk=1)then
if QQ="000000" then QQ<="111011" ;shuchu<="100" ;
elsif QQ="111010"then shuchu<="100" ;
elsif QQ="100111"then shuchu<="001";
elsif QQ="011101"then shuchu<="010";
elsif QQ="001001"then shuchu<="001";
end if;
QQ<=QQ-1;
end if;
end if;
11、
END PROCESS;
end behav;
⑷譯碼器
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity YIMA is
port(run:out std_logic;
rev:out std_logic;
pause:out std_logic;
SHURU:IN std_logic_VECTOR(2 DOWNTO 0)
);
end YIMA;
architecture be
12、hav of yima is
begin
process(shuru)
begin
case shuru is
when "001"=>rev<=0;run<=0;pause<=1;
when "010"=>rev<=1;run<=0;pause<=0;
when "100"=>rev<=0;run<=1;pause<=0;
when others=>rev<=0;run<=0;pause<=1;
end case;
end process;
end behav;
(5)減法計數(shù)器
library ieee;
use ieee.std_logic_1164.all
13、;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity counter is
port(start:IN std_logic;
clk:IN std_logic;
CHUSHItime:IN integer range 0 to 15;
XIANSHItime:OUT integer range 0 to 15;
JINWEI:BUFFER std_logic);
end counter;
architecture behav of counter is
signal ZHONGJ
14、IANtime:integer range 0 to 15;
begin
process(clk)
begin
if(start=0)then ZHONGJIANtime<=CHUSHItime;XIANSHItime<=CHUSHItime;jinwei<=0;
else
if(clkevent and clk=1)then
if(ZHONGJIANtime=0) then XIANSHItime<=0;JINWEI<=1;
else
15、ZHONGJIANtime<=ZHONGJIANtime-1;XIANSHItime<=ZHONGJIANtime;
end if;
end if;
end if;
end process;
end behav;
4 編譯及仿真
EDA工具在EDA技術(shù)應(yīng)用中占據(jù)極其重要的位置,EDA的核心是利用計算機完成電子設(shè)計全程自動化,因此基于計算機環(huán)境的EDA軟件的支持是必不可少的。此次設(shè)計所用EDA工具是由著名的Alter公司生產(chǎn)的MAX+plusⅡ工具軟件,它是一種集成的開發(fā)環(huán)
16、境,支持原理圖、VHDL和Verilog語言文本文件,以及波形文件作為設(shè)計輸入,并支持這些文件的人以混合設(shè)計。 圖4洗衣機控制器程序仿真圖
MAX+plusⅡ工具軟件具有門級仿真器,可以進行功能仿真和時序仿真,能夠產(chǎn)生精確的仿真結(jié)果,同是還支持主流第三方EDA工具,所以可以說MAX+plusⅡ是當今最優(yōu)秀的EDA工具軟件之一。利用MAX+plusⅡ工具軟件仿真仿真結(jié)果如圖4所示
5 硬件調(diào)試與結(jié)果分析
洗衣機接通電源,按load設(shè)置洗滌時間按start、rd置為高電平洗衣機開始工作,當時鐘第一個上升沿到達時run(正轉(zhuǎn)功能)為高電平維持20s以后變
17、為低電平而pause(暫停功能)隨著時鐘上升沿的到來變?yōu)楦唠娖骄S持10s變?yōu)榈碗娖?,然后rev(反轉(zhuǎn)功能)開始隨著時鐘上升沿的到來變?yōu)楦唠娖焦ぷ骶S持20s后變?yōu)榈碗娖?,再停止pause置高,接下來電路一直重復(fù)上述工作,知道定時器計數(shù)結(jié)束。電路設(shè)計完成以后,按照預(yù)定設(shè)計,輸入相應(yīng)數(shù)據(jù),三只LED燈按照設(shè)定時間規(guī)律間斷性亮起,數(shù)碼管也顯示輸入時間并按減數(shù)計時產(chǎn)生相應(yīng)的數(shù)字顯示,直到到達預(yù)定時間停止工作顯示零,實驗設(shè)計達到預(yù)期效果。
6 參考文獻
[1] 潘松著.EDA技術(shù)實用教程(第二版). 北京:科學(xué)出版社,2005.
[2] 康華光主編.電子技術(shù)基礎(chǔ) 模擬部分. 北京:高教出版社,2
18、006.
[3] 閻石主編.數(shù)字電子技術(shù)基礎(chǔ). 北京:高教出版社,2003.
[4] 趙巖嶺 劉春等.在MAX+plusⅡ平臺下用VHDL進行數(shù)字電路設(shè)計. 西安:西電出版社,2005
心得體會
通過這次的EDA設(shè)計,我可以說是受益良多??吹较匆聶C控制器的題目,我首先想到的是狀態(tài)機的設(shè)計,因為課本上說狀態(tài)機其實就是控制器,后來經(jīng)過看書覺得應(yīng)該是摩爾型狀態(tài)機,可是自習(xí)分析后發(fā)現(xiàn)設(shè)計題目比較復(fù)雜,如果用狀態(tài)機的思路來設(shè)計,比較困難超出了我的能力。結(jié)合以前做課程設(shè)計(數(shù)字電路設(shè)計——交通等控制器)的經(jīng)驗,如果用模塊化層次化的設(shè)計思路更清晰,設(shè)計起來也更容易,特別是更符合EDA設(shè)計的的流程,故自己開始設(shè)計各功能模塊。洗衣機控制器主要實幾種狀態(tài)的循環(huán)改變,還有計時和數(shù)碼顯示的功能,所以我覺得電路主要有五大部分組成,包括:減法計數(shù)器、時序控制電路、預(yù)置時間和編碼電路、數(shù)碼管顯示、譯碼器組成。在分析過程中,我遇到了不少困難,因為第一次遇到一個比較復(fù)雜的設(shè)計,剛開始不知道從哪里入手,所以借鑒了一些書和網(wǎng)上的資料,主要參看了趙巖嶺 劉春等老師編著的《在MAX+plusⅡ平臺下用VHDL進行數(shù)字電路設(shè)計》關(guān)于控制器的一些設(shè)計方法和范例,并且在無憂電子開發(fā)網(wǎng)(