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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

7、序利用case語句實現這10個狀態(tài)間的相互轉移。五.引腳分配詳見下圖狀態(tài)流程圖1、頂層流程圖解超載報警是是否否故障報警從二層上行狀態(tài)停止狀態(tài)從一層上行狀態(tài)向一層下降狀態(tài)判斷當前樓層和運動狀態(tài)初始化,電梯停在一樓清除故障警報是否是否存在故障清除故障是否超載綜合所有指令,判斷下一運動狀態(tài)具體判斷條件見下面每層樓框圖。開鎖向二層下降狀態(tài)開門前3秒(空閑狀態(tài))開門第4秒(判斷狀態(tài))空閑響應狀態(tài)2、以下是較具體的狀態(tài)轉化圖一樓當前層請求進入停止狀態(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; -開關信號; keyout:o

9、ut std_logic); -消抖之后的開關信號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;-電梯內乘客的請求上或下至幾層樓的信號 reset: in std_logic; -復位初始化開關 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)時,如果沒有相應的上升或下降請求信號,則轉入-此dw5狀態(tài),使其不再在上升或下降狀態(tài)停留,而響應其它信號signal state: states;signal clear1,clear2,clear3,flag1,flag2,flag3,fl1,fl2,fl3: std_logic;-這些都是標志位,控制電梯的狀態(tài)轉換-flag1、flag2、flag3代表各層相應的請求信號-clear1、clear2、clear3代表相應層的請求已經完成,可以接收新的任務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-通過計數2000000獲得1s的時鐘信號 cnt:=cnt+1; -計數信號小于20000000則加1 else if reset = '1' then -復位時,電梯初值設置在一層,狀態(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'表示相應樓層有請求信號,并把相應的任務完成信號clear -置'0',表示有新的任務等待完成 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、成了對二層請求的響應;clear2<='1'end if;when up2 =>-up2:正在從二層上升clear1<='0'clear2<='0'state<=stop;position<=3;if position =2 then -如果電梯在第二層position<=3; -那么下一個位置在第三層fl3<='0' -完成了對第三層請求的相應clear3<='1'elsif position =1 then -如果電梯在第一層position<=2;

23、-那么下一個位置在第二層fl2<='0' -二層的請求已經完成clear2<='1'end if;when down1 => -正在向第一層下降clear2<='0'clear3<='0'state<=stop; -下一狀態(tài)是stopif position=2 then -如果電梯在第二層position<=1; -那么下一個位置在第一層fl1<='0' -一層的請求已經完成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)轉至down1,電梯將會再下降一層state<=down1;position<=2; -電梯的下一個位置在第二層elsestate<=stop; -若下降期間二層有請求,則在二層停下position<=2; -

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

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

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

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

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

30、#39;1' then state<=down1;arr<='0'ldown<="1000010"-下降燈亮,顯示delsestate<=dw5;-若一層無請求,就轉至dw5狀態(tài)end if;end if;end if;when dw5 =>-只要到了dw5的狀態(tài),無論原來處于上升或下降狀態(tài),對三層和一層的信號都可相響應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í)行相應操作后,計數信號重置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.由于顯示和消抖模塊為通用模塊,在此不再贅述仿真結果,主要給出主控模塊的仿真分析2.為便于仿真,將主控模塊control單列為一個工程,并把計數變量cnt的值由2000000改為2。說明:用數碼管顯示上升和下降狀態(tài)時分別顯示的是字母U和d。由于是共陽極數碼管,所以低電平亮。 顯示U時,數碼管編碼為“1000001”,即十進制65;顯示d時,數碼管編碼為“1000010”,即十進制66;數碼管熄滅時,編碼為“1111111”,即十進制127;對照以上仿真圖形可以檢驗上行、下行狀態(tài)燈的正確運行。八.問題及改進以下將討論一下本次實驗中遇到的一些問題,已經改進的部分和

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

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

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

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

37、eset功能可以實現,但是復位之后系統(tǒng)便無法相應其他的請求了,這都是和仿真結果相悖的。事實上,可能存在以下問題: 在代碼編譯的過程中,沒有報告錯誤,即Error;但是會有很多警告,即Warning。 很多情況下,Warning會給出類似這樣的指示Warning: 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論