EDA電梯控制器設(shè)計_第1頁
EDA電梯控制器設(shè)計_第2頁
EDA電梯控制器設(shè)計_第3頁
EDA電梯控制器設(shè)計_第4頁
EDA電梯控制器設(shè)計_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 EDA技術(shù)綜合課程設(shè) 計 課 程: EDA技術(shù)綜合課程設(shè)計 題 目: 電梯控制器 所屬院系:電氣工程學(xué)院 專業(yè)班級:自控1304班 姓 名: 王軍 學(xué) 號:1317014092 指導(dǎo)老師: 張立眾 完成地點: 陜西理工學(xué)院 目錄1.設(shè)計任務(wù) 22.可選器材 23.設(shè)計框圖 24. 設(shè)計思路 45. 引腳分配 56程序清單 97.主控模塊仿真 168.問題及改進 179.總結(jié)及感受 1810.參考文獻 19一.設(shè)計任務(wù)1、 設(shè)計一個三層的電梯控制器。2、 用數(shù)碼管顯示電梯所在的樓層號,電梯初始化后狀態(tài)在第一層樓。3、 每層電梯外都有上下樓請求開關(guān),電梯內(nèi)部有到各樓層的請求開關(guān)及緊急故障開關(guān);用

2、數(shù)碼管顯示上行或下行狀態(tài),用發(fā)光二極管顯示是否有緊急情況。4、 電梯每秒升(降)一層,電梯到達有停站請求的樓層后,經(jīng)1秒電梯開門,開門指示燈亮,開門4秒后指示燈滅,關(guān)門,電梯繼續(xù)運行。5、 當電梯被鎖定或發(fā)生緊急情況后,電梯停止運行,直到解除鎖定或緊急故障后才可以從停止時的狀態(tài)繼續(xù)運行。6、 當電梯處于上升狀態(tài)時,只響應(yīng)比電梯所在位置高的上樓請求信號,直到最后一個上樓請求執(zhí)行完畢,再進入下降模式;同理,電梯處于下降狀態(tài)時,只響應(yīng)比電梯所在位置低的下樓請求信號,直到最后一個下樓請求執(zhí)行完畢,再進入上升模式。二.可選器件1. 計算機組成/ISP實驗箱一臺(含電源)2. 電源線一根FPGA/CPLD

3、下載板一塊(或多塊,可選)(其中下載版選擇以下型號Cyclone EP1C6Q240C8)3. 并行口下載電纜一根4. 電壓表棒一付5. 實驗指導(dǎo)書一份6. 配套集成電路芯片若干 三.設(shè)計框圖系統(tǒng)主要分為:主控制模塊control,包含狀態(tài)機,控制電梯的運行及狀態(tài)轉(zhuǎn)換;消抖模塊unshake,消除開關(guān)電路的抖動現(xiàn)象,確保邏輯的正確性;顯示模塊display,內(nèi)含譯碼功能,配合控制器顯示電梯的工作狀態(tài)。模塊框圖見圖1,總體框圖詳見圖2。 圖1 各模塊框圖 圖2 系統(tǒng)總體框圖四.設(shè)計思路1.對于電梯控制邏輯的實現(xiàn),主要是控制模塊control,故下面主要介紹控制模塊control的設(shè)計思想。 控制

4、模塊control有一個進程k1,其中又設(shè)置了一個計數(shù)變量cnt,范圍為12000000。計數(shù)變量cnt其實是起到分頻器的作用,產(chǎn)生了一個1Hz的時鐘,在cnt計數(shù)2000000次的時間內(nèi)(即1s),運行控制電梯升降、停留的程序,這些部分相當于以1Hz的時鐘觸發(fā); 而系統(tǒng)主頻時鐘2MHz作為觸發(fā)時鐘不斷檢測用戶是否有請求輸入,或者電梯是否有異常情況。對于一、二、三層信號,分別由flag1、flag2、flag3和clear1、clear2、clear3兩套標志為來控制輸入請求是否有效,是否應(yīng)該對標志位清零。2.主要規(guī)則是: 當一層(upone、one)、二層(uptwo、downtwo、two

5、)或三層(downthree、three)的輸入信號有效時,相應(yīng)標志位flag1、flag2、flag3置1,表明該層有請求。 當一層(upone、one)、二層(uptwo、downtwo、two)或三層(downthree、three)的輸入信號無效時,相應(yīng)標志位clear1、clear2、clear3置1,表明相應(yīng)得到達樓層請求已經(jīng)在上一個時鐘沿完成;同時對應(yīng)的標志位flag1、flag2、flag3置1,表明相應(yīng)樓層無請求。 updown信號值為 1時表明電梯處于上升狀態(tài),為0時處于下降狀態(tài)。 程序有兩個信號表示電梯的狀態(tài):一是位置狀態(tài),二是運行狀態(tài)。position表明電梯的位置狀態(tài)

6、,是一個取值13的整數(shù) ,分別表示電梯處于第一、二、三層;state表示電梯的運行狀態(tài),使枚舉數(shù)據(jù)類型,共10個值,分別是:-states為電梯所處的各個狀態(tài)-up1表示電梯正在從第1層上升-up2表示電梯正在從第2層上升-down1表示電梯正在向第1層下降-down2表示電梯正在向第2層下降-stop表示電梯停止在某一層上-dw1表示電梯開門的第一秒-dw2表示電梯開門的第二秒-dw3表示電梯開門的第三秒-dw4表示電梯開門的第四秒,判斷電梯的下一個狀態(tài)-dw5表示當電梯處于上升或下降狀態(tài)時,如果沒有相應(yīng)的上升或下降請求信號,則轉(zhuǎn)入 dw5狀態(tài),使其不再在上升或下降狀態(tài)停留,而響應(yīng)其它信號程

7、序利用case語句實現(xiàn)這10個狀態(tài)間的相互轉(zhuǎn)移。五.引腳分配詳見下圖狀態(tài)流程圖1、頂層流程圖解超載報警是是否否故障報警從二層上行狀態(tài)停止狀態(tài)從一層上行狀態(tài)向一層下降狀態(tài)判斷當前樓層和運動狀態(tài)初始化,電梯停在一樓清除故障警報是否是否存在故障清除故障是否超載綜合所有指令,判斷下一運動狀態(tài)具體判斷條件見下面每層樓框圖。開鎖向二層下降狀態(tài)開門前3秒(空閑狀態(tài))開門第4秒(判斷狀態(tài))空閑響應(yīng)狀態(tài)2、以下是較具體的狀態(tài)轉(zhuǎn)化圖一樓當前層請求進入停止狀態(tài)上行請求無有繼續(xù)等待從一層上升狀態(tài)有無進入停止狀態(tài)向一層下降狀態(tài)從二層上升狀態(tài)二樓當前層請求下行請求無有繼續(xù)等待有無前一狀態(tài)為上升前一狀態(tài)為下降上行請求有停止

8、狀態(tài)當前層請求從二層上升狀態(tài)無有上行請求有無向一層下降狀態(tài)有下行請求無當前層門外上行請求當前層門外下行請求有有無無三樓當前層請求進入停止狀態(tài)下行請求無有繼續(xù)等待向二層下降狀態(tài)有無六.程序清單消抖模塊(程序分兩欄排版)22library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity unshake is port(clk:in std_logic; -時鐘,10HZ; key:in std_logic; -開關(guān)信號; keyout:o

9、ut std_logic); -消抖之后的開關(guān)信號end;architecture a of unshake is signal cp :std_logic;signal jsp:integer range 0 to 3;beginprocess(clk)beginif(clk'event and clk='1')thenif key='1' thenif jsp=3 thenjsp<=jsp;elsejsp<=jsp+1;end if;if jsp=1 thencp<='1'elsecp<='0'

10、end if; elsejsp<=0;end if;end if;keyout<=cp;end process;end;顯示模塊(程序分兩欄排版)library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity display isport(clk: in std_logic; light: in integer range 1 to 3; serout: out std_logic_vector(6 downto 0);e

11、nd;architecture a of display issignal disp : std_logic_vector(6 downto 0);beginprocess(clk)beginif(clk'event and clk='1')thenif light =1 thendisp<="1001111"elsif light=2 thendisp<="0010010"elsif light=3 then disp<="0000110"end if;end if;end process;

12、serout<=disp;end;主控模塊library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; -*entity control is port(upone,uptwo,downtwo,downthree : in std_logic;-電梯外乘客的請求信號 one,two,three : in std_logic;-電梯內(nèi)乘客的請求上或下至幾層樓的信號 reset: in std_logic; -復(fù)位初始化開關(guān) over,emer

13、gency,lock:in std_logic;-超重、緊急停運和上鎖信號 clk: in std_logic; -時鐘信2MHz alarm,ovelight,locklight : out std_logic;-故障、超重及鎖定提示燈 p : out integer range 1 to 3; -電梯當前位置 lightup,lightdown : out std_logic_vector(6 downto 0); -lightup顯示'u'則電梯在上升模式, -lightdown顯示'd'則電梯在下降模式; arrive: out std_logic);

14、-arrive為'1'時表明電梯到達樓層,并在開門狀態(tài)end;-*architecture behave of control is type states is (up1,up2,down1,down2,stop,dw1,dw2,dw3,dw4,dw5);-states為電梯所處的各個狀態(tài)-up1表示電梯正在從第1層上升-up2表示電梯正在從第2層上升-down1表示電梯正在向第1層下降-down2表示電梯正在向第2層下降-stop表示電梯停止在某一層上-dw1表示電梯開門的第一秒-dw2表示電梯開門的第二秒-dw3表示電梯開門的第三秒-dw4表示電梯開門的第四秒,判斷電梯的

15、下一個狀態(tài)-dw5表示當電梯處于上升或下降狀態(tài)時,如果沒有相應(yīng)的上升或下降請求信號,則轉(zhuǎn)入-此dw5狀態(tài),使其不再在上升或下降狀態(tài)停留,而響應(yīng)其它信號signal state: states;signal clear1,clear2,clear3,flag1,flag2,flag3,fl1,fl2,fl3: std_logic;-這些都是標志位,控制電梯的狀態(tài)轉(zhuǎn)換-flag1、flag2、flag3代表各層相應(yīng)的請求信號-clear1、clear2、clear3代表相應(yīng)層的請求已經(jīng)完成,可以接收新的任務(wù)signal position: integer range 1 to 3; -電梯的當前停

16、留位置signal lup,ldown: std_logic_vector(6 downto 0);-與lightup和lightdown功能相同signal arr : std_logic; -與arrive功能相同signal ala,ov,loc : std_logic; -與alarm,ovlight,locklight功能相同begink1:process(clk)variable cnt: integer range 1 to 2000000;variable updown : std_logic; -此變量表明電梯處于上升或下降狀態(tài)beginif(clk'event an

17、d clk ='1')thenif(upone='1' or one='1')then -一層有上樓請求flag1<='1'elsif clear1='1' then -一層的請求已完成flag1<='0' -當沒有新請求信號則清零end if;if (uptwo='1' or downtwo = '1' or two = '1') then -二層有請求flag2<='1'elsif clear2 = '1&

18、#39; then -二層的請求已完成flag2<='0' -當沒有新請求信號則二層清零end if;if (downthree= '1' or three = '1')then -三層有請求flag3<='1' elsif clear3 = '1' then -三層的請求已完成flag3<='0' -當沒有新請求信號則三層清零end if; if(emergency='1') then ala<='1' elsif(over='1&#

19、39;) then ov<='1' elsif(lock='1') then loc<='1' end if; if cnt<2000000 then-通過計數(shù)2000000獲得1s的時鐘信號 cnt:=cnt+1; -計數(shù)信號小于20000000則加1 else if reset = '1' then -復(fù)位時,電梯初值設(shè)置在一層,狀態(tài)為stop position<=1;state<=stop; ovelight<='0'-各狀態(tài)指示燈均滅 locklight<='

20、;0' alarm<='0' lup<="1111111" ldown<="1111111" else fl1<=flag1; fl2<=flag2; fl3<=flag3; -fl1、fl2、fl3置'1'表示相應(yīng)樓層有請求信號,并把相應(yīng)的任務(wù)完成信號clear -置'0',表示有新的任務(wù)等待完成 if(fl1='1')then clear1<='0' end if; if(fl2='1')then clea

21、r2<='0' end if; if(fl3='1')then clear3<='0' end if;case state is -狀態(tài)機描述when up1 =>-up1:正在從一層上升if fl2='0' then -若上升期間二層期間無請求,則直接上三層clear1<='0'clear3<='0'state<=up2;position<=2;elsestate<=stop;position<=2;fl2<='0' -完

22、成了對二層請求的響應(yīng);clear2<='1'end if;when up2 =>-up2:正在從二層上升clear1<='0'clear2<='0'state<=stop;position<=3;if position =2 then -如果電梯在第二層position<=3; -那么下一個位置在第三層fl3<='0' -完成了對第三層請求的相應(yīng)clear3<='1'elsif position =1 then -如果電梯在第一層position<=2;

23、-那么下一個位置在第二層fl2<='0' -二層的請求已經(jīng)完成clear2<='1'end if;when down1 => -正在向第一層下降clear2<='0'clear3<='0'state<=stop; -下一狀態(tài)是stopif position=2 then -如果電梯在第二層position<=1; -那么下一個位置在第一層fl1<='0' -一層的請求已經(jīng)完成clear1<='1'elsif position =3 thenpos

24、ition<=2;fl2<='0'clear2<='1'end if;when down2 => -正在向第二層下降 -如果在下降期間,二層沒有請求,就直接下到一層if fl2 ='0' thenclear1<='0'clear3<='0'-下一狀態(tài)轉(zhuǎn)至down1,電梯將會再下降一層state<=down1;position<=2; -電梯的下一個位置在第二層elsestate<=stop; -若下降期間二層有請求,則在二層停下position<=2; -

25、位置轉(zhuǎn)至二層fl2<='0' -完成了對二層請求的響應(yīng)clear2<='1'end if;when stop => -在停止狀態(tài) if(emergency='1' or over='1') then state<=stop; else state<=dw1;-下一狀態(tài)轉(zhuǎn)至dw1,電梯會進入開門狀態(tài)arr<='1' -arr置'1',表明電梯到達并開門lup<="1111111" -上升指示燈滅ldown<="1111111

26、"-下降指示燈滅end if;when dw1 => -在dw1狀態(tài)時,等待1sstate<=dw2;-下一狀態(tài)轉(zhuǎn)至dw2when dw2 =>state<=dw3;when dw3 =>state<=dw4;when dw4 =>arr<='0' -開門燈滅if position=1 then -如果電梯在第一層updown :='1' -則進入上升模式fl1<='0' -一層的任務(wù)完成clear1<='1'if fl2='1' then -如

27、果二層有請求state<=up1; -先響應(yīng)二層的請求,再響應(yīng)上升一層的請求arr<='0' -維持燈熄滅狀態(tài)lup<="1000001" -上升燈亮,顯示字母Uelsif fl3='1' then -若三層有請求state <=up1;-響應(yīng)完二層請求信號后,再響應(yīng)第三層的請求arr<='0'-開門燈維持熄滅狀態(tài)lup<="1000001"-上升燈亮, 顯示字母Uend if;elsif position=3 thenupdown :='0'-進入下降狀

28、態(tài)fl3<='0' -到達三層的任務(wù)已完成clear3<='1'if fl2='1' then -若二層有請求state<=down2;-先響應(yīng)二層請求,再轉(zhuǎn)入下降一層的狀態(tài)arr<='0'ldown<="1000010"-下降燈亮,顯示delsif fl1='1' thenstate<=down2;-響應(yīng)完二層請求信號后再響應(yīng)一層的請求arr<='0'ldown<="1000010"end if;elsif p

29、osition =2 thenfl2<='0' -到達二層的任務(wù)已經(jīng)完成clear2<='1'if updown ='1' then-當電梯處于上升狀態(tài),不響應(yīng)一層的請求if fl3='1' thenstate<=up2;arr<='0'lup<="1000001"elsestate<=dw5;-若三層無請求,就轉(zhuǎn)至dw5狀態(tài)end if;end if;if updown = '0' then -當處于下降狀態(tài),不響應(yīng)三層的請求if fl1=&

30、#39;1' then state<=down1;arr<='0'ldown<="1000010"-下降燈亮,顯示delsestate<=dw5;-若一層無請求,就轉(zhuǎn)至dw5狀態(tài)end if;end if;end if;when dw5 =>-只要到了dw5的狀態(tài),無論原來處于上升或下降狀態(tài),對三層和一層的信號都可相響應(yīng)if fl3='1' then state<=up2;arr<='0'lup<="1000001"-上升燈亮, 顯示字母Uelsif

31、fl1='1' thenstate<=down1;arr<='0'ldown<="1000010"-下降燈亮,顯示dend if;end case;cnt:=1;-進程完成一次全部的狀態(tài)、條件判斷并執(zhí)行相應(yīng)操作后,計數(shù)信號重置1end if;alarm<=ala;ovelight<=ov;locklight<=loc;end if;end if;end process;p<=position;-給輸出信號賦值lightup<=lup;lightdown<=ldown;arrive<=

32、arr;end;七.主控模塊仿真1.由于顯示和消抖模塊為通用模塊,在此不再贅述仿真結(jié)果,主要給出主控模塊的仿真分析2.為便于仿真,將主控模塊control單列為一個工程,并把計數(shù)變量cnt的值由2000000改為2。說明:用數(shù)碼管顯示上升和下降狀態(tài)時分別顯示的是字母U和d。由于是共陽極數(shù)碼管,所以低電平亮。 顯示U時,數(shù)碼管編碼為“1000001”,即十進制65;顯示d時,數(shù)碼管編碼為“1000010”,即十進制66;數(shù)碼管熄滅時,編碼為“1111111”,即十進制127;對照以上仿真圖形可以檢驗上行、下行狀態(tài)燈的正確運行。八.問題及改進以下將討論一下本次實驗中遇到的一些問題,已經(jīng)改進的部分和

33、尚未完善的部分。1、 開始設(shè)計時由于未經(jīng)老師指導(dǎo),所以設(shè)置了過多的繁瑣狀態(tài),共計10個,包括dw1、dw2和dw3這幾個空閑狀態(tài),它們唯一的作用就是占用1秒鐘的時間來作為電梯到站開門的等待狀態(tài)。事實上,若用開門、上行、下行、停止等較精簡的幾個狀態(tài)也可以完成設(shè)計任務(wù),而且對于以后擴展更多的樓層也是很有利的。而自己目前的設(shè)計只能用于三層電梯,一旦要求擴展層數(shù),便會遇到很大困難。我會在之后的學(xué)習(xí)中自行學(xué)習(xí)思考如何用老師所建議的狀態(tài)設(shè)置方法來實現(xiàn)4層電梯控制器。2、 在老師幫助修改代碼的過程中,發(fā)現(xiàn)了一些不必要的冗余代碼,如:fl1<=flag1; fl2<=flag2; fl3<=

34、flag3; 事實上,這種重復(fù)賦值是由于后來改進方案而忘記處理之前的程序造成的。具體如下: 開始設(shè)計時,我采用了分頻器,將主頻2MHz的時鐘進行2000000分頻分出一個1Hz的信號。兩個時鐘(主頻2Mhz和1Hz)分別以其上升沿控制兩個進程k1和k2的運行。其中k1由2MHz時鐘觸發(fā),控制各輸入請求信號和改變狀態(tài)機的信號,使電梯無論什么時候都快速響應(yīng)各種操作。k2由1Hz時鐘出發(fā),控制電梯的升降及停留。 之后經(jīng)老師建議,我將分頻器模塊去掉,也就是說全部系統(tǒng)只有一個主頻時鐘2MHz來觸發(fā)。而內(nèi)部需要控制的升降、停留、開門等待的時間,就由一個計數(shù)變量cnt來控制,cnt每計數(shù)2000000次,則

35、時間經(jīng)過1s。這樣,原來的兩個進程就壓縮為一個,進程k2就被略去了,而原來的flag信號是在進程k1中被賦值,進程k2中分別又賦值給了相應(yīng)的fl信號,所以刪除進程k2后就多出了下面的這些語句,fl1<=flag1; fl2<=flag2; fl3<=flag3;雖然不妨礙程序的正確運行,但是給代碼的可讀性打了折扣,這是在以后的編程中應(yīng)當力圖避免的。3、 同樣是因為刪除了k2進程,之后沒有再改變以前的代碼順序,使得reset,即復(fù)位功能被寫在了時序代碼的部分,和緊急故障及超重狀態(tài)的判斷變成了并行關(guān)系。也就是說reset功能的優(yōu)先級降低了,reset功能應(yīng)當是異步的,一旦有效,系

36、統(tǒng)立刻停止運行,并所存當前狀態(tài)。而現(xiàn)在,reset功能在沒有緊急故障(或故障消除)或無超重狀態(tài)時才會有效,而且為使系統(tǒng)能夠響應(yīng),信號必須至少維持1s的時間。4、 在開始的程序設(shè)計中犯了一個小錯誤,就是電梯如果從一層直接上升到三層(即二樓無請求)時,到達二樓是不會停站開門的,而我忘記了這一點,設(shè)計成了每到一層都會有4s的開門等待時間。在之后的修改過程中及時發(fā)現(xiàn)了這個問題,并把狀態(tài)機的轉(zhuǎn)換過程進行了相應(yīng)的修改,順利修正了這個錯誤。5、 從仿真波形來看,復(fù)位功能鍵是有效的,即復(fù)位之后電梯會停止在一層,但是在實際電路的運行中,所有功能都可以很完善地實現(xiàn),唯獨復(fù)位鍵無效。在更換了另一套實驗箱之后,發(fā)現(xiàn)r

37、eset功能可以實現(xiàn),但是復(fù)位之后系統(tǒng)便無法相應(yīng)其他的請求了,這都是和仿真結(jié)果相悖的。事實上,可能存在以下問題: 在代碼編譯的過程中,沒有報告錯誤,即Error;但是會有很多警告,即Warning。 很多情況下,Warning會給出類似這樣的指示W(wǎng)arning: Output pins are stuck at VCC or GNDWarning: Design contains 1 input pin(s) that do not drive logic Warning: Following 7 pins have nothing, GND, or VCC driving datain port - changes to this connectivity

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論