《EDA課程設(shè)計(jì) 全自動洗衣機(jī)》由會員分享,可在線閱讀,更多相關(guān)《EDA課程設(shè)計(jì) 全自動洗衣機(jī)(13頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、EDA課程設(shè)計(jì) 全自動洗衣機(jī)
1 設(shè)計(jì)任務(wù)及要求
利用可編程邏輯器件豐富的內(nèi)部資源,借助EDA(電子設(shè)計(jì)自動化)工具(如MAX+plusⅡ)把家電控制器電路集成在一片F(xiàn)PGA(現(xiàn)場可編程門陣列)芯片內(nèi),這樣就無需專門的單片機(jī)和外部邏輯電路。從而減小了電路的體積、提高了系統(tǒng)的穩(wěn)定性。本次電路設(shè)計(jì)是洗衣機(jī)控制器設(shè)計(jì)。
設(shè)計(jì)的主要內(nèi)容是:
(1)設(shè)計(jì)一個洗衣機(jī)控制器,使洗衣機(jī)作如下運(yùn)轉(zhuǎn):定時啟動—〉正轉(zhuǎn)20秒—〉暫停10秒—〉反轉(zhuǎn)20秒—〉暫停10秒—〉定時不到,重復(fù)上面過程。
(2)若定時到,則停止,并發(fā)出音響信號。
(3)用兩個數(shù)碼管顯示洗滌的預(yù)置時間(分鐘數(shù)),按倒計(jì)時方式對洗
2、滌過程作計(jì)時顯示,直到時間到停機(jī);洗滌過程由開始信號開始。
(4)三只LED燈表示正轉(zhuǎn)、反轉(zhuǎn)、暫停三個狀態(tài)。
設(shè)計(jì)的主要要求是:
(1)根據(jù)設(shè)計(jì)題目要求編寫相應(yīng)程序代碼
(2)對編寫的VHDL程序代碼進(jìn)行編譯和仿真
(3)利用實(shí)驗(yàn)箱完成硬件驗(yàn)證(可選)
(4)總結(jié)設(shè)計(jì)內(nèi)容,完成課程設(shè)計(jì)說明書
2設(shè)計(jì)原理及總體框圖
洗衣機(jī)控制器的設(shè)計(jì)主要是定時器的設(shè)計(jì),由一片F(xiàn)PGA和外圍電路構(gòu)成了電器控制部分。FPGA接收鍵盤的控制命令,控制洗衣機(jī)的進(jìn)水、排水、水位和洗衣機(jī)的工作狀態(tài)、并控制顯示工作狀態(tài)以及設(shè)定直流電機(jī)速度、正反轉(zhuǎn)控制、制動控制、起??刂坪瓦\(yùn)動狀態(tài)控制(洗衣機(jī)洗滌過程如圖2所示
3、)。對FPGA芯片的編程采用模塊化的VHDL (硬件描述語言)進(jìn)行設(shè)計(jì),設(shè)計(jì)分為三層實(shí)現(xiàn),頂層實(shí)現(xiàn)整個芯片的功能。頂層和中間層多數(shù)是由VHDL的元件例化語句實(shí)現(xiàn)。中間層由無刷直流電機(jī)控制、運(yùn)行模式選擇、洗滌模式選擇、定時器、顯示控制、鍵盤掃描、水位控制以及對直流電機(jī)控制板進(jìn)行速度設(shè)定、正反轉(zhuǎn)控制、啟??刂频饶K組成,它們分別調(diào)用底層模塊。
洗衣機(jī)控制器電路主要有五大部分組成,包括:減法計(jì)數(shù)器、時序控制電路、預(yù)置時間和編碼電路、數(shù)碼管顯示、譯碼器組成。具體電路如圖3所示:
圖3洗衣機(jī)控制器總體設(shè)計(jì)圖
3 程序設(shè)計(jì)
(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)減法計(jì)數(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的核心是利用計(jì)算機(jī)完成電子設(shè)計(jì)全程自動化,因此基于計(jì)算機(jī)環(huán)境的EDA軟件的支持是必不可少的。此次設(shè)計(jì)所用EDA工具是由著名的Alter公司生產(chǎn)的MAX+plusⅡ工具軟件,它是一種集成的開發(fā)環(huán)
16、境,支持原理圖、VHDL和Verilog語言文本文件,以及波形文件作為設(shè)計(jì)輸入,并支持這些文件的人以混合設(shè)計(jì)。 圖4洗衣機(jī)控制器程序仿真圖
MAX+plusⅡ工具軟件具有門級仿真器,可以進(jìn)行功能仿真和時序仿真,能夠產(chǎn)生精確的仿真結(jié)果,同是還支持主流第三方EDA工具,所以可以說MAX+plusⅡ是當(dāng)今最優(yōu)秀的EDA工具軟件之一。利用MAX+plusⅡ工具軟件仿真仿真結(jié)果如圖4所示
5 硬件調(diào)試與結(jié)果分析
洗衣機(jī)接通電源,按load設(shè)置洗滌時間按start、rd置為高電平洗衣機(jī)開始工作,當(dāng)時鐘第一個上升沿到達(dá)時run(正轉(zhuǎn)功能)為高電平維持20s以后變
17、為低電平而pause(暫停功能)隨著時鐘上升沿的到來變?yōu)楦唠娖骄S持10s變?yōu)榈碗娖?,然后rev(反轉(zhuǎn)功能)開始隨著時鐘上升沿的到來變?yōu)楦唠娖焦ぷ骶S持20s后變?yōu)榈碗娖?,再停止pause置高,接下來電路一直重復(fù)上述工作,知道定時器計(jì)數(shù)結(jié)束。電路設(shè)計(jì)完成以后,按照預(yù)定設(shè)計(jì),輸入相應(yīng)數(shù)據(jù),三只LED燈按照設(shè)定時間規(guī)律間斷性亮起,數(shù)碼管也顯示輸入時間并按減數(shù)計(jì)時產(chǎn)生相應(yīng)的數(shù)字顯示,直到到達(dá)預(yù)定時間停止工作顯示零,實(shí)驗(yàn)設(shè)計(jì)達(dá)到預(yù)期效果。
6 參考文獻(xiàn)
[1] 潘松著.EDA技術(shù)實(shí)用教程(第二版). 北京:科學(xué)出版社,2005.
[2] 康華光主編.電子技術(shù)基礎(chǔ) 模擬部分. 北京:高教出版社,2
18、006.
[3] 閻石主編.數(shù)字電子技術(shù)基礎(chǔ). 北京:高教出版社,2003.
[4] 趙巖嶺 劉春等.在MAX+plusⅡ平臺下用VHDL進(jìn)行數(shù)字電路設(shè)計(jì). 西安:西電出版社,2005
心得體會
通過這次的EDA設(shè)計(jì),我可以說是受益良多。看到洗衣機(jī)控制器的題目,我首先想到的是狀態(tài)機(jī)的設(shè)計(jì),因?yàn)檎n本上說狀態(tài)機(jī)其實(shí)就是控制器,后來經(jīng)過看書覺得應(yīng)該是摩爾型狀態(tài)機(jī),可是自習(xí)分析后發(fā)現(xiàn)設(shè)計(jì)題目比較復(fù)雜,如果用狀態(tài)機(jī)的思路來設(shè)計(jì),比較困難超出了我的能力。結(jié)合以前做課程設(shè)計(jì)(數(shù)字電路設(shè)計(jì)——交通等控制器)的經(jīng)驗(yàn),如果用模塊化層次化的設(shè)計(jì)思路更清晰,設(shè)計(jì)起來也更容易,特別是更符合EDA設(shè)計(jì)的的流程,故自己開始設(shè)計(jì)各功能模塊。洗衣機(jī)控制器主要實(shí)幾種狀態(tài)的循環(huán)改變,還有計(jì)時和數(shù)碼顯示的功能,所以我覺得電路主要有五大部分組成,包括:減法計(jì)數(shù)器、時序控制電路、預(yù)置時間和編碼電路、數(shù)碼管顯示、譯碼器組成。在分析過程中,我遇到了不少困難,因?yàn)榈谝淮斡龅揭粋€比較復(fù)雜的設(shè)計(jì),剛開始不知道從哪里入手,所以借鑒了一些書和網(wǎng)上的資料,主要參看了趙巖嶺 劉春等老師編著的《在MAX+plusⅡ平臺下用VHDL進(jìn)行數(shù)字電路設(shè)計(jì)》關(guān)于控制器的一些設(shè)計(jì)方法和范例,并且在無憂電子開發(fā)網(wǎng)(