電梯控制器課程設計_第1頁
已閱讀1頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  1 緒論</b></p><p>  當今世界,部分地區(qū)人口高度密集,人和土地資源短缺的矛盾日益激化。這就注定了必須合理的利用土地去解決人與土地的矛盾。而興建高層建筑是其中有效措施之一。因此能使人們快速便捷地到達目的樓層的電梯就應運而生了。</p><p>  電梯作為高層建筑的重要交通工具與人們的工作日益緊密FPGA/CPLD作為新一代

2、工業(yè)控制器,以其高可靠性和技術(shù)先進性,在電梯控制中得到廣泛應用,從而使電梯由傳統(tǒng)的繼電器控制方式發(fā)展為計算機控制的一個重要方向,成為當前電梯控制和技術(shù)改造的熱點之一。</p><p>  EDA是電子設計自動化(Electronic Design Automation)的縮寫,在20世紀90年代初從計算機輔助設計(CAD)、計算機輔助制造(CAM)、計算機輔助測試(CAT)和計算機輔助工程(CAE)的概念發(fā)展而來

3、的。EDA技術(shù)就是以計算機為工具,設計者在EDA軟件平臺上,用硬件描述語言VHDL完成設計文件,然后由計算機自動地完成邏輯編譯、化簡、分割、綜合、優(yōu)化、布局、布線和仿真,直至對于特定目標芯片的適配編譯、邏輯映射和編程下載等工作。EDA技術(shù)的出現(xiàn),極大地提高了電路設計的效率和可行性,減輕了設計者的勞動強度。 隨著EDA技術(shù)的快速發(fā)展,電子設計自動化(EDA)逐漸成為重要的設計手段,已經(jīng)廣泛應用于模擬與數(shù)字電路系統(tǒng)等許多領域。它是一

4、種實現(xiàn)電子系統(tǒng)或電子產(chǎn)品自動化設計的技術(shù),與電子技術(shù)、微電子技術(shù)的發(fā)展密切相關,并吸收了計算機科學領域的大多數(shù)最新研究成果,以高性能的計算機作為工作平臺,促進了工程發(fā)展。傳統(tǒng)單片機設計的電梯控制外圍電路復雜,性能不穩(wěn)定,而采用EDA設計,卻擁有電子系統(tǒng)小型化、低功耗、高可靠性、開發(fā)過程投資小、周期短等優(yōu)點,而且還可以通過軟件編程對</p><p>  電梯控制器是控制電梯按顧客要求自動上下的裝置。本文采用VHDL

5、語言來設計實用三層電梯控制器,其代碼具有良好的可讀性和易理解性。</p><p>  2 電梯控制器的設計</p><p><b>  2.1 設計要求</b></p><p> ?。?)設計一個三層樓房自動電梯控制器,用八個 LED顯示電梯行進過程,并有數(shù)碼管顯示電梯當前所在樓層位置;</p><p>  (2)每層電

6、梯入口處設有請求按鈕開關,請求按鈕按下則相應樓層的LED 亮;</p><p><b>  2.2 電梯功能</b></p><p>  2.2.1 電梯運行規(guī)則</p><p>  當電梯處在上升模式時,只響應比電梯所在位置高的上樓請求,由下向上逐個執(zhí)行,直到最后一個上樓請求執(zhí)行完畢。如果高層有下樓請求,直接升到有下樓請求的最高樓層,然后進入

7、下降模式。</p><p>  (1)請求信號分析:電梯的請求信號可分為梯內(nèi)請求和梯外請求。</p><p> ?。?)電梯處于各樓層時的運行情況。</p><p> ?、偬幱谝粚訒r,不管是梯內(nèi)梯外,電梯都只能接收上升的請求信號。此后,電梯就進入預上升狀態(tài),準備作上升運行。如果電梯沒有接收到請求信號,則電梯在一層待機,其分析圖如圖2所示。</p>&l

8、t;p>  圖2-1 電梯處于一層時運行情況分析</p><p> ?、谔幱诙訒r,電梯則可能出現(xiàn)以下三種情況:① 電梯沒有接收到梯內(nèi)梯外的任何請求信號時,則電梯在二層待機;② 電梯接收到上升請求信號,進入預上升狀態(tài);③ 電梯接收到下降請求信號,進入預下降狀態(tài),其分析圖如圖3所示。</p><p>  圖2-2 電梯處于二層時的運行情況分析</p><p&g

9、t; ?、厶幱谌龑訒r,不管是梯內(nèi)梯外,電梯都只能接收到下降的請求信號。此時,電梯就進入預下降狀態(tài),準備作下降運行。如果電梯沒有接收到請求信號,則電梯在三層待機,其分析圖如圖4所示。</p><p>  圖2-3 電梯處于三層時的運行可能分析</p><p> ?。?)對電梯開門、關門等內(nèi)部信號處理的分析,其流程如圖6所示。</p><p>  圖2-4 電梯內(nèi)外

10、信號處理</p><p>  當電梯接收到請求信號后,運行到發(fā)出請求的樓層。運達后,開門使能信號促使電梯開門載客,同時驅(qū)動關門延時信號。在電梯進行完關門倒數(shù)計后,關門使能信號將促使電梯關門狀態(tài),然后上升或下降運行。</p><p>  2.2.2 電梯整體設計</p><p>  電梯控制器采用狀態(tài)機來實現(xiàn),思路比較清晰??梢詫㈦娞莸却拿棵腌娨约伴_門、關門都看成一

11、個獨立的狀態(tài)。由于電梯又是每秒上升或下降一層,所以就可以通過一個統(tǒng)一的1秒為周期的時鐘來觸發(fā)狀態(tài)機。根據(jù)電梯的實際工作情況,可以把狀態(tài)機設置10個狀態(tài),分別是“電梯停留在第1層”、“開門”、“關門”、“開門等待第1秒”、“開門等待第2秒”、“開門等待第3秒”、“開門等待第4秒”、“上升”、“下降”和“停止狀態(tài)”。各個狀態(tài)之間的轉(zhuǎn)換條件可由上面的設計要求所決定。</p><p>  電梯初始狀態(tài)為一層,處在開門狀態(tài)

12、,開門指示燈亮。</p><p>  一層電梯入口處設有上樓請求開關,二層電梯入口設有上、下樓請求開關,三層電梯入口處設有下樓請求開關,電梯內(nèi)部設有乘客到達樓層的停站請求開關及其顯示。</p><p>  設置電梯所處位置指示(用數(shù)碼管表示)及電梯上升或下降指示。</p><p>  電梯到達有停站請求的樓層后,電梯門打開,開門指示燈亮。開門4秒后,電梯門關閉,開門

13、指示燈滅,電梯繼續(xù)運行,直至執(zhí)行完最后一個請求信號后停在當前層。</p><p>  電梯控制系統(tǒng)能記憶電梯內(nèi)外的請求信號,并按照電梯運行規(guī)則工作,每個請求信號執(zhí)行完畢后隨即清除。</p><p>  2.3 端口設計說明</p><p>  (1)由功能要求得到本程序設計的端口必須包括:</p><p>  時鐘信號(fclk);</

14、p><p>  一樓電梯外的上升請求信號(up1);</p><p>  二樓電梯外的上升請求信號(up2);</p><p>  二樓電梯外的下降請求信號(down2);</p><p>  三樓電梯外的下降請求信號(down3);</p><p>  電梯內(nèi)部到達樓層的請求信號(stop1、stop2、stop3);&

15、lt;/p><p>  電梯內(nèi)部關門請求信號(close);</p><p>  所有輸入信號等于1,表示有請求,等于0,表示無請求;</p><p>  電梯外部上升指示燈(uplight)和下降請求指示燈(downlight),它們與up1、up2、down2、down3信號相對應;</p><p>  電梯內(nèi)部乘客到達樓層的停站請求燈(st

16、oplight),該信號與stop1、stop2和stop3信號相對應;</p><p>  電梯運行模式指示(udsig),1代表下降模式,0代表上升模式;</p><p>  電梯所在樓層指示(position),表示電梯在對應樓層;</p><p>  電梯所在樓層數(shù)碼管表示(dout),該信號與position信號相對應;</p><p&

17、gt;  電梯門狀態(tài)燈 (doorlight),1表示開門,0表示關門。</p><p> ?。?)該設計中有8個LED等:電梯外部上升指示燈(uplight),一樓二樓各一個;下降請求指示燈(downlight)二樓三樓各一個;電梯內(nèi)部乘客到達樓層的停站請求燈(stoplight)分別指示一樓二樓三樓;電梯門狀態(tài)燈 (doorlight)指示電梯門的開關。</p><p><b&g

18、t;  2.4 程序設計</b></p><p>  代碼由三大部分組成:庫聲明,實體,結(jié)構(gòu)體。</p><p>  2.4.1 庫聲明部分</p><p>  調(diào)用VHDL庫,通過library語句本程序應用了VHDL庫中的”通用ieee庫”和”標準std庫”。</p><p>  library ieee;</p>

19、<p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_arith.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  2.4.2 實體部分</p><p>  實體部分列出了代碼所用到的所用輸

20、入輸出端口。主控制器系統(tǒng)由VHDL語言實現(xiàn),其輸入輸出端口定義如下:</p><p>  entity flift is</p><p>  port(fclk,up1,up2,down2,down3,stop1,stop2,stop3,close:in std_logic;</p><p>  uplight:buffer std_logic_vector(2 d

21、ownto 1); ---電梯外部1.2樓上請求</p><p>  downlight:buffer std_logic_vector(3 downto 2); ---電梯外部2.3樓下請求</p><p>  stoplight:buffer std_logic_vector(3 downto 1); ---電梯內(nèi)部請求</p><p>  

22、udsig:buffer std_logic; ---電梯的狀態(tài),0代表(預)上升,1代表(預)下降</p><p>  position:buffer integer range 1 to 3; ---電梯所在樓層</p><p>  doorlight:out std_logic; ---門燈,開門燈亮,關門等滅

23、</p><p>  dout:out std_logic_vector(3 downto 0)); ---用以實現(xiàn)樓層數(shù)字顯示</p><p>  end flift;</p><p>  2.4.3 結(jié)構(gòu)體部分</p><p>  結(jié)構(gòu)體部分共使用了分頻進程,電梯狀態(tài)進程,讀按鍵、控制指示燈進程和樓層顯示進程4個進程。<

24、/p><p>  使用狀態(tài)機來實現(xiàn)電梯功能。</p><p>  在電梯狀態(tài)進程中,在電梯的上升狀態(tài)中,通過對信號燈的判斷,決定下一個狀態(tài)是繼續(xù)上升還是停止;在電梯下降狀態(tài)中,也是通過對信號燈的判斷,決定下一個狀態(tài)是繼續(xù)下降還是停止;在電梯停止狀態(tài)中,通過對信號燈的判斷,決定電梯是上升、下降還是停止。</p><p>  狀態(tài)機進程的運行基于電梯時鐘fliclk,此時鐘

25、周期是外部時鐘周期的十六倍;按鍵設定進程基于按鍵時鐘buttonclk,此時鐘的周期為外部時鐘周期的兩倍。按鍵時鐘周期比電梯時鐘周期短,這就意味著按鍵設定進程比狀態(tài)機進程快,這就保證了每一次按鍵都能掃描并保留而不會被狀態(tài)機進程中的清零程序消除。</p><p>  按鍵后產(chǎn)生的點亮的信號燈(邏輯值為‘1’)用于作為狀態(tài)機進程中的判斷條件,而clearup和cleardn信號為邏輯‘l’使得相應的信號燈熄滅。<

26、;/p><p>  分頻進程:該進程的目的是產(chǎn)生不同頻率的兩個時鐘,電梯控制時鐘fliclk和按鍵控制時鐘buttonclk。</p><p>  process(fclk) ---產(chǎn)生電梯控制時鐘fliclk和按鍵控制時鐘buttclk</p><p><b>  begin </b></p><p>  if (f

27、clk'event and fclk='1') then q<=q+1;</p><p><b>  end if;</b></p><p>  buttonclk<=q(0);</p><p>  fliclk<=q(3);</p><p>  end process;<

28、/p><p>  狀態(tài)機進程:該部分是整個設計的核心,根據(jù)電梯的工作模式,將電梯的工作分為10個狀態(tài),分別為停一層stopno1、開門狀態(tài)dooropen、關門狀態(tài)doorclose、開門等待1秒wait1、開門等待2秒wait2、開門等待3秒wait3、開門等待4秒wait4、上升up、下降down和停止stop。在每個狀態(tài)下,判斷輸入信號的請求,轉(zhuǎn)入下一狀態(tài)且產(chǎn)生對應得輸出信號。</p><p

29、><b>  結(jié)構(gòu)體部分分析</b></p><p><b>  (1)停一層狀態(tài)</b></p><p>  當處于停一層狀態(tài)時,電梯開門同時轉(zhuǎn)入下一狀態(tài)wait1。</p><p>  when stoponl=>doorlight<='1'; position<=1; pos:

30、=1;state<=wait1;</p><p>  開門等待1秒:該狀態(tài)時重新計入上升下降請求。如果此時有關門請求,則轉(zhuǎn)入下一狀態(tài)doorclose;如果沒有請求,則下一狀態(tài)為wait2。</p><p>  when wait1=>clearup<='0'; cleardn<='0'; </p><p> 

31、 if(close='1') then state<=doorclose;</p><p>  else state<=wait2;</p><p><b>  end if;</b></p><p>  開門等待2秒:如果此時有關門請求,則轉(zhuǎn)入下一狀態(tài)doorclose;如果沒有請求,則下一狀態(tài)為wait3。<

32、;/p><p>  開門等待3秒:如果此時有關門請求,則轉(zhuǎn)入下一狀態(tài)doorclose;如果沒有請求,則下一狀態(tài)為wait4。</p><p>  開門等待4秒:該狀態(tài)的下一狀態(tài)為doorclose。</p><p><b> ?。?)上升模式</b></p><p>  當處于上升模式,同時電梯位于三層,如果此時電梯的內(nèi)部

33、與外部都沒有請求,電梯轉(zhuǎn)為下降模式,并進入下一狀態(tài)doorclose;如果此時電梯內(nèi)部有在三層下的請求或三層外部有下樓請求,電梯進入下一狀態(tài)dooropen;否則電梯轉(zhuǎn)為下降模式,并進入下一狀態(tài)down。</p><p>  if (position=3) then </p><p>  if (stoplight="000&qu

34、ot; and uplight="00" and downlight="00" ) </p><p>  then udsig<='1'; state<=doorclose;</p><p>  elsif(stoplight(3)='1' or downlight(3)='1') <

35、/p><p>  then state<=dooropen;</p><p>  else udsig<='1'; state<=down;</p><p><b>  end if;</b></p><p>  當處于上升模式,同時電梯位于二層,如果此時電梯的內(nèi)部與外部都沒有請求,電梯仍為

36、上升模式,并進入下一狀態(tài)doorclose;如果此時電梯內(nèi)部有在二層下的請求或二層外部有下樓請求或上樓請求,電梯進入下一狀態(tài)dooropen;如果此時電梯內(nèi)部有在三層下的請求或三層外部有下樓請求,電梯仍為上升模式,并進入下一狀態(tài)up;否則電梯轉(zhuǎn)為下降模式,并進入下一狀態(tài)down。</p><p>  elsif (position=2) then </p>

37、<p>  if(stoplight="000" and uplight="00" and downlight="00") </p><p>  then udsig<='0'; state<=doorclose;</p><p>  elsif (stoplight(3)='1&

38、#39; or downlight(3)='1') </p><p>  then udsig<='0'; state<=up;</p><p>  else udsig<='1'; state<=down;</p><p><b>  end if;</b></p&

39、gt;<p>  當處于上升模式,同時電梯位于一層,如果此時電梯的內(nèi)部與外部都沒有請求,電梯仍為上升模式,并進入下一狀態(tài)doorclose;如果此時電梯內(nèi)部有在一層下的請求或一層外部有上樓請求,電梯進入下一狀態(tài)dooropen;否則電梯仍為上升模式,并進入下一狀態(tài)up。</p><p><b> ?。?)下降模式</b></p><p>  當處于下降模

40、式,同時電梯位于一層,如果此時電梯的內(nèi)部與外部都沒有請求,電梯轉(zhuǎn)為上升模式,并進入下一狀態(tài)doorclose;如果此時電梯內(nèi)部有在一層下的請求或一層外部有上樓請求,電梯進入下一狀態(tài)dooropen;否則電梯轉(zhuǎn)為上升模式,并進入下一狀態(tài)up。</p><p>  當處于下降模式,同時電梯位于二層,如果此時電梯的內(nèi)部與外部都沒有請求,電梯仍為下降模式,并進入下一狀態(tài)doorclose;如果此時電梯內(nèi)部有在二層下的請求

41、或二層外部有下樓請求或上樓請求,電梯進入下一狀態(tài)dooropen;如果此時電梯內(nèi)部有在一層下的請求或一層外部有上樓請求,電梯仍為下降模式,并進入下一狀態(tài)down;否則電梯轉(zhuǎn)為上升模式,并進入下一狀態(tài)up。</p><p>  當處于下降模式,同時電梯位于三層,如果此時電梯的內(nèi)部與外部都沒有請求,電梯仍為下降模式,并進入下一狀態(tài)doorclose;如果此時電梯內(nèi)部有在三層下的請求或三層外部有下樓請求,電梯進入下一狀

42、態(tài)dooropen;否則電梯仍為下降模式,并進入下一狀態(tài)down。</p><p> ?。?)電梯上升下降處理</p><p>  上升:電梯所在樓層數(shù)加一。如果此時電梯在二層同時二層外部有上升或下降的請求或電梯內(nèi)部有在二層下的請求,則進入下一狀態(tài)stop。如果此時電梯在二層同時三層外部有下降的請求或電梯內(nèi)部有在三層下的請求,則進入下一狀態(tài)up;否則進入下一狀態(tài)stop。</p>

43、;<p>  when up=>position<=position+1; pos:=pos+1; </p><p>  if (pos=2 and (uplight(2)='1' or downlight(2)='1'or stoplight(2)='1' ))</p><p>  then st

44、ate<=stop;</p><p>  elsif(pos=2 and (stoplight(3)='1' or downlight(3)='1')) </p><p>  then state<=up;</p><p>  else state<=stop;</p><p><b&g

45、t;  end if;</b></p><p>  下降:電梯所在樓層數(shù)減一。如果此時電梯在二層同時二層外部有上升或下降的請求或電梯內(nèi)部有在二層下的請求,則進入下一狀態(tài)stop。如果此時電梯在二層同時一層外部有上升的請求或電梯內(nèi)部有在一層下的請求,則進入下一狀態(tài)down;否則進入下一狀態(tài)stop。</p><p>  停止:該狀態(tài)的下一狀態(tài)為dooropen。</p>

46、;<p>  開門狀態(tài):電梯開門同時清除上升下降的請求,并轉(zhuǎn)入下一狀態(tài)wait1,其它的狀態(tài)都轉(zhuǎn)入下一狀態(tài)stop。</p><p>  如果清除上升的信號有效,則電梯內(nèi)部相應樓層停止信號清除,同時電梯外部相應樓層上升信號清除;否則當有上升請求時相應的電梯外部上升指示燈亮。</p><p>  if(clearup='1') </p><p

47、>  then stoplight(position)<='0'; uplight(position)<='0';</p><p><b>  else</b></p><p>  if(up1='1')then uplight(1)<='1';</p><p&

48、gt;  elsif(up2='1')then uplight(2)<='1';</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  如果清除下降的信號有效,則電梯內(nèi)部相應樓層停止信號清除,同時電梯外部相應樓層下降

49、信號清除;否則當有下降請求時相應的電梯外部下降指示燈亮。</p><p>  如果停止信號有效,則相應的電梯內(nèi)部停站請求燈亮。</p><p>  if (stop1='1') then stoplight(1)<='1';</p><p>  elsif (stop2='1') then stoplight(2

50、)<='1';</p><p>  elsif (stop3='1') then stoplight(3)<='1'; </p><p><b>  end if;</b></p><p><b>  3 系統(tǒng)仿真</b></p&g

51、t;<p><b>  分幾種情況分析:</b></p><p> ?。?)在三樓乘坐電梯到一樓</p><p>  圖3-1 系統(tǒng)仿真圖(1)</p><p>  初始時電梯停在一層position=1,上升模式udsig=0并保持開門狀態(tài),doorlight=1。外部沒有請求時,電梯等待四秒后關門,doorlight變?yōu)?。

52、三層有下樓請求并要求停在一層則先down3置1,downlight(3)=1。由于三層是下樓請求,而電梯此時是上升模式udsig=0,則電梯到二層時不停position=2,直接運行到三層position=3,開門doorlight變?yōu)?,down3清零,downlight(3)=0。進入電梯后把stop1置1,stoplight(1)=1,等待4秒后自動關門doorlight變?yōu)?,轉(zhuǎn)為下降模式udsig=1,下降到二樓positio

53、n=2,繼續(xù)下降到一樓position=1,stoplight(1)=0,開門doorlight=1,等待4秒后自動關門doorlight變?yōu)?。 如圖3-1所示</p><p> ?。?)在二樓乘坐電梯到三樓</p><p>  圖3-2 系統(tǒng)仿真圖(2)</p><p>  初始時電梯停在一層position=1,上升模式udsig=0并保持開門狀態(tài),door

54、light=1。外部沒有請求時,電梯等待四秒后關門,doorlight變?yōu)?。二層有上樓請求并要求停在三樓則先把up2置1,uplight(2)=1。由于二層是上樓請求,而電梯此時是上升模式udsig=0,則電梯到二層時停position=2,開門doorlight變?yōu)?,up2清零,uplight(2)=0,進入電梯后把stop3置1,stoplight(3)=1,等待4秒后自動關門doorlight變?yōu)?,繼續(xù)上升到3樓positi

55、on=3,stoplight(1)=0,開門doorlight=1,等待4秒后自動關門doorlight變?yōu)?。 如圖3-2所示</p><p>  (3)在三樓乘坐電梯到二樓</p><p>  圖3-3 系統(tǒng)仿真圖(3)</p><p>  初始時電梯停在一層position=1,上升模式udsig=0并保持開門狀態(tài),doorlight=1。外部沒有請求時,電

56、梯等待四秒后關門,doorlight變?yōu)?。三層有下樓請求并要求停在二層則先down3置1,downlight(3)=1。由于三層是下樓請求,而電梯此時是上升模式udsig=0,則電梯到二層時不停position=2,直接運行到三層position=3,開門doorlight變?yōu)?,down3清零,downlight(3)=0,進入電梯后stop2置1,stoplight(2)=1,等待4秒后自動關門doorlight變?yōu)?,轉(zhuǎn)為下降模

57、式udsig=1,下降到二樓position=2,stoplight(2)=0,開門doorlight=1,等待4秒后自動關門doorlight變?yōu)?。 如圖3-3所示</p><p> ?。?)在一樓乘坐電梯到二樓</p><p>  圖3-4 系統(tǒng)仿真圖(4)</p><p>  初始時電梯停在一層position=1,上升模式udsig=0并保持開門狀態(tài),do

58、orlight=1。外部沒有請求時,電梯等待四秒后關門,doorlight變?yōu)?。一層有上樓請求并要求停在三樓則先up1置1,uplight(1)=1。由于一層是上樓請求,而電梯此時是上升模式udsig=0,則電梯開門doorlight變?yōu)?,up1清零,uplight(1)=0。進入電梯后把stop2置1,stoplight(2)=1,等待4秒后自動關門doorlight變?yōu)?,上升到2樓position=2,開門doorlight=

59、1,stoplight(2)=0,等待4秒后自動關門doorlight變?yōu)?。 如圖3-4所示</p><p> ?。?)在二樓乘坐電梯到一樓</p><p>  圖4-5 系統(tǒng)仿真圖(5)</p><p>  初始時電梯停在一層position=1,上升模式udsig=0并保持開門狀態(tài),doorlight=1。外部沒有請求時,電梯等待四秒后關門,doorligh

60、t變?yōu)?。二層有下樓請求并要求停在一層則先down2置1,downlight(2)=1。由于二層是下樓請求,而電梯此時是上升模式udsig=0,則電梯到二層時停position=2,開門doorlight變?yōu)?, down2清零,downlight(2)=0,進入電梯后stop1置1,stoplight(1)=1,等待4秒后自動關門doorlight變?yōu)?,轉(zhuǎn)為下降模式udsig=1,下降到一樓position=2,stoplight(

61、1)=0,開門doorlight=1,等待4秒后自動關門doorlight變?yōu)?。 如圖3-5所示</p><p><b>  4小結(jié)</b></p><p>  我這篇課設基于VHDL語言設計的三層電梯控制器,并進行了仿真。在參考了許多相關資料后,充分理解了三層電梯的設計要求,基本上完成了任務要求:</p><p>  (1)設計一個三層樓房

62、自動電梯控制器,用八個 LED顯示電梯行進過程,并有數(shù)碼管顯示電梯當前所在樓層位置;</p><p>  (2)每層電梯入口處設有請求按鈕開關,請求按鈕按下則相應樓層的LED 亮;</p><p>  但本代碼中可能仍存在一些不能解決的實際問題,許多工程實際問題不能完全用理論知識去解決,需要不斷吸取實踐經(jīng)驗,尋找解決問題方法。</p><p>  用VHDL硬件描述

63、語言的形式來進行三層電梯控制器的設計方便靈活,利用EDA軟件進行編譯優(yōu)化仿真極大的減少了電路設計時間和可能發(fā)生的錯誤,降低了開發(fā)成本,相信這種設計方法將在未來的數(shù)字系統(tǒng)設計中發(fā)揮越來越重要的作用。</p><p>  這一周的設計過程中,除找資料外,大多時間都是在電腦上進行的,通過反復的編譯,仿真,不斷試驗來實現(xiàn)所得結(jié)果。在設計上,運用了EDA自上而下的設計思想,逐步完善所設計功能,同時,用到VHDL語言中的狀態(tài)

64、機,多進程,CASE、IF….ELSE 等語句,才達到以上結(jié)果。設計過程中也遇到了許多問題,如波形仿真上信號的設置等。</p><p>  這個課程設計還有很多不足之處:</p><p>  1、電梯各個進程依賴于2個不同的時鐘,這樣做雖然比較精確但是顯得有些多余。</p><p>  2、電梯控制程序只實現(xiàn)了三層樓電梯的控制,這種電梯在現(xiàn)實生活中應用很少,而且此程

65、序不方便向更多層電梯控制器程序擴展。</p><p>  通過此次的課程設計,我學到了很多知識,包括QuartusII和ModelSim的使用和仿真,已經(jīng)如何真正的運用學過的EDA知識,完成具有意義性的系統(tǒng)設計。培養(yǎng)了自學能力和動手能力。并且由原先的被動的接受知識轉(zhuǎn)換為主動的尋求知識,這可以說是學習方法上的一個很大的突破。通過課程設計,我學會了如何將學到的知識轉(zhuǎn)化為自己的東西,學會了怎么更好的處理知識和實踐相結(jié)合

66、的問題。</p><p><b>  參考文獻</b></p><p>  [1] 潘松 黃繼業(yè) EDA技術(shù)實用教程 科學出版社 2005</p><p>  [2] 朱正偉 EDA技術(shù)及應用 清華大學出版社 2005.10</p><p>  [3] 王振紅VHDL數(shù)字電路設計與應用實踐教程 機械工業(yè)出版社 2003.

67、6</p><p>  [4] 梁勇 王留奎 EDA技術(shù)教程 人民郵電出版社 2010</p><p>  [5] 柳春鋒 電子設計自動化(EDA) 北京理工大學出版社 2005.</p><p><b>  附錄</b></p><p><b>  代碼:</b></p><p

68、>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_arith.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity flift is</

69、p><p>  port(fclk,up1,up2,down2,down3,stop1,stop2,stop3,close:in std_logic;</p><p>  uplight:buffer std_logic_vector(2 downto 1); ---電梯外部1.2樓上請求</p><p>  downlight:buffer std_logic_v

70、ector(3 downto 2); ---電梯外部2.3樓下請求</p><p>  stoplight:buffer std_logic_vector(3 downto 1); ---電梯內(nèi)部請求</p><p>  udsig:buffer std_logic; ---電梯的狀態(tài),0代表(預)上升,1代表(預)下降</p><p>  p

71、osition:buffer integer range 1 to 3; ---電梯所在樓層</p><p>  doorlight:out std_logic; ---門燈,開門燈亮,關門燈滅</p><p>  dout:out std_logic_vector(3 downto 0)); ---用以實現(xiàn)樓層

72、數(shù)字顯示</p><p>  end flift;</p><p>  architecture behav of flift is</p><p>  type state_type is(stoponl,dooropen,doorclose,wait1,wait2,wait3,wait4,up,down,</p><p>  stop);

73、 ---十個狀態(tài),初始,開門,關門,延時1~4,上升,下降,停</p><p>  signal state:state_type:=stoponl;</p><p>  signal clearup,cleardn,buttonclk,fliclk:std_logic;</p><p>  ---上升清零,下降清零,按鍵時鐘,電梯時

74、鐘</p><p>  signal q:std_logic_vector(3 downto 0);</p><p><b>  begin</b></p><p>  process(fclk) ---分頻進程,產(chǎn)生電梯控制時鐘fliclk和按鍵控制時鐘buttonclk</p><p><b>  begi

75、n </b></p><p>  if (fclk'event and fclk='1') then q<=q+1;</p><p><b>  end if;</b></p><p>  buttonclk<=q(0);

76、 ---二分頻</p><p>  fliclk<=q(3); ---十六分頻</p><p>  end process;</p><p>  cont:process(fliclk) ---狀態(tài)機進程&l

77、t;/p><p>  variable pos:integer range 3 downto 1;</p><p><b>  begin</b></p><p>  if (fliclk'event and fliclk='1') then</p><p>  case state is</p

78、><p>  when stoponl=>doorlight<='1'; position<=1; pos:=1;state<=wait1;</p><p>  when wait1=>clearup<='0'; cleardn<='0'; ---開門等待1秒</p><p&

79、gt;  if(close='1') then state<=doorclose;</p><p>  else state<=wait2;</p><p><b>  end if;</b></p><p>  when wait2=> ---開門等待2秒&

80、lt;/p><p>  if(close='1') then state<=doorclose;</p><p>  else state<=wait3;</p><p><b>  end if;</b></p><p>  when wait3=>

81、 ---開門等待3秒</p><p>  if(close='1') then state<=doorclose;</p><p>  else state<=wait4;</p><p><b>  end if;</b></p><p>  when wait4=>sta

82、te<=doorclose; ---開門等待4秒</p><p>  when doorclose=>doorlight<='0'; ---關門狀態(tài)</p><p>  if (udsig='0') then ---上升情況</p&g

83、t;<p>  if (position=3) then ---電梯在3層</p><p>  if (stoplight="000" and uplight="00" and downlight="00" ) </p><p>  then udsig<='1&

84、#39;; state<=doorclose;</p><p>  elsif(stoplight(3)='1' or downlight(3)='1') </p><p>  then state<=dooropen;</p><p>  else udsig<='1'; state<=dow

85、n;</p><p><b>  end if;</b></p><p>  elsif (position=2) then ---電梯在2層</p><p>  if(stoplight="000" and uplight="00" and downlight=&qu

86、ot;00") </p><p>  then udsig<='0'; state<=doorclose;</p><p>  elsif(stoplight(2)='1' or downlight(2)='1' or uplight(2)='1') </p><p>  then

87、 state<=dooropen; </p><p>  elsif (stoplight(3)='1' or downlight(3)='1') </p><p>  then udsig<='0'; state<=up;</p><p&

88、gt;  else udsig<='1'; state<=down;</p><p><b>  end if;</b></p><p>  elsif (position=1) then ---電梯在1層</p><p>  if(stoplight="000"

89、; and uplight="00" and downlight="00")</p><p>  then udsig<='0'; state<=doorclose;</p><p>  elsif(stoplight(1)='1' or uplight(1)='1') </p>

90、<p>  then state<=dooropen; </p><p>  else udsig<='0'; state<=up;</p><p><b>  end if;</b></p><p><b>  

91、end if;</b></p><p>  elsif (udsig='1') then ---下降情況</p><p>  if (position=1) then ---電梯在1層</p><p>  if (stoplight="000&

92、quot;and uplight="00" and downlight="00") </p><p>  then udsig<='0'; state<=doorclose;</p><p>  elsif(stoplight(1)='1' or uplight(1)='1') </p

93、><p>  then state<=dooropen; </p><p>  else udsig<='0'; state<=up;</p><p><b>  end if;</b></p><p>  elsif

94、(position=2) then ---電梯在2層</p><p>  if(stoplight="000" and uplight="00" and downlight="00") </p><p>  then udsig<='1'; state <=doorc

95、lose;</p><p>  elsif(stoplight(2)='1' or downlight(2)='1' or uplight(2)='1') </p><p>  then state<=dooropen; </p><p>  elsif(stoplight(1)=&#

96、39;1' or uplight(1)='1') </p><p>  then udsig<='1'; state<=down;</p><p>  else udsig<='0'; state<=up;</p><p><b>  end if;</b><

97、/p><p>  elsif(position=3) then ---電梯在3層</p><p>  if(stoplight ="000" and uplight="00" and downlight="00")</p><p>  then udsig<='

98、1'; state<=doorclose;</p><p>  elsif(stoplight(3)='1' or downlight(3)='1') </p><p>  then state<=dooropen; </p><p>  else udsig<='1'; state<

99、;=down;</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  when up=>position<=position+1; pos:=p

100、os+1; ---電梯上一層</p><p>  if (pos=2 and (uplight(2)='1' or downlight(2)='1'or stoplight(2)='1' ))</p><p>  then state<=stop;</p><p>  elsif(pos=2 and (sto

101、plight(3)='1' or downlight(3)='1')) </p><p>  then state<=up;</p><p>  else state<=stop;</p><p><b>  end if;</b></p><p>  when down=&g

102、t;position<=position-1; pos:=pos-1; ---電梯下一層</p><p>  if (pos=2 and (uplight(2)='1' or downlight(2)='1'or stoplight(2)='1' ))</p><p>  then state<=stop; </p>

103、;<p>  elsif(pos=2 and (stoplight(1)='1' or uplight(1)='1') )</p><p>  then state<=down;</p><p>  else state<=stop;</p><p><b>  end if;</b>&

104、lt;/p><p>  when stop=>state<=dooropen; ---電梯停止</p><p>  when dooropen=>doorlight<='1';clearup<='1';cleardn<='1';state<=wait1; </p&

105、gt;<p>  when others=>state<=stoponl;</p><p><b>  end case;</b></p><p><b>  end if;</b></p><p>  end process cont;</p><p>  butt: p

106、rocess( buttonclk) ---讀按鍵、控制指示燈進程</p><p>  begin </p><p>  if(buttonclk'event and buttonclk='1')then </p><p>  if(clearup='1') </p&g

107、t;<p>  then stoplight(position)<='0'; uplight(position)<='0';</p><p><b>  else</b></p><p>  if(up1='1')then uplight(1)<='1';</p>

108、;<p>  elsif(up2='1')then uplight(2)<='1';</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  if(cleardn='1')</p&g

109、t;<p>  then stoplight(position)<='0'; downlight(position)<='0';</p><p><b>  else </b></p><p>  if(down2='1')then downlight(2)<='1';&l

110、t;/p><p>  elsif(down3='1') then downlight(3)<='1';</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  if (stop1='1

111、9;) then stoplight(1)<='1';</p><p>  elsif (stop2='1') then stoplight(2)<='1';</p><p>  elsif (stop3='1') then stoplight(3)<='1'; &l

112、t;/p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  end process butt;</p><p>  process(position)</p><p><b>  begin</b&

113、gt;</p><p>  if(position=1) then dout<="0001";</p><p><b>  end if;</b></p><p>  if(position=2) then dout<="0010";</p><p><b>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論