本文首先提出了一種基于有限狀態機的電梯控制器算法,然后根據該算法設計了一個三層電梯控制器,該電梯控制器的正確性經過了仿真驗證和硬件平臺的驗證。本文的電梯控制器設計,結合了深圳信息職業技術學院的實際電梯的運行情況,易于學生理解和接受,對于工學結合的教學改革,是一個非常好的實踐項目。另外,本文提出的電梯控制器算法適合于任意樓層,具有很強的適應性和實用性。
電子設計自動化技術是19世紀末21世紀初新興的技術,其在數字電路設計和日常的控制系統中已經體現了強大的功能和優勢。隨著EDA技術的高速發展, 電子系統設計技術和工具發生了深刻的變化,大規模可編程邏輯器件FPGA的出現,給設計人員帶來了諸多的方便。HDL(硬件描述語言)是隨著可編程邏輯器件(PLD)發展起來的,主要用于描述數字系統的結構、行為、功能和接口,是電子設計自動化(EDA)的關鍵技術之一。它通常采用一種自上而下的設計方法,即從系統總體要求出發進行設計。
目前從期刊雜志中看到一些采用FPGA實現電梯控制系統的設計文章,在這些文章中看不到針對任意樓層的控制器算法,而針對任意層數的控制器算法是保證控制器實用性和適用性的關鍵。因此,本文嘗試采用EDA技術來設計一個N層電梯控制系統,具體思路是:首先給出電梯控制器的算法,然后在硬件平臺上實現并驗證。
1 電梯控制系統要求
電梯控制系統通常包含圖1中的功能:電梯升、降、停;電梯門開、關;請求信號顯示、樓層顯示;超載、故障報警。其中超載、故障報警需要用到傳感器,該控制相對比較簡單,因此本文不再展開討論。
?
針對深圳信息職業技術學院第一教學樓的電梯,其電梯控制器實現了以下功能:
(1)電梯內部每層均有相應的STop按鈕;電梯外部除頂層外每層都有up按鈕,除底層外每層都有down按鈕;up按鈕被按下表示該層有人要去高層,down按鈕被按下表示該層有人要去低層,stop按鈕被按下表示該層有人要出電梯。對于stop、up、down按鈕,當被按下后,相應的指示燈亮,直到該請求被滿足后,指示燈才滅;
(2)電梯運行過程中,上升、下降、停止時相應的指示燈要亮,樓層隨時顯示;
(3)電梯上升過程中,首先滿足向上的需求,對于低層或者向下的需求,在電梯上升過程中會記錄該需求,然后在電梯向上需求全部滿足后電梯再次下降的過程中給予滿足;
(4)電梯下降過程中,首先滿足向下的需求,對于高層或者向上的需求,在電梯下降過程中會記錄該需求,然后在電梯向下需求全部滿足后電梯再次上升的過程中給予滿足。
本文設計的電梯控制器,其基本要求就是滿足上述實際運行電梯的要求。
2 電梯控制系統實現
2.1 整體方案設計
整體設計由四個模塊組成,各模塊功能具體描述如下:
a. 分頻器模塊:該模塊實現了任意時鐘頻率輸入,任意頻率輸出的功能,輸出頻率精度為1Hz;模塊輸入為系統工作時鐘clk,系統復位信號rst,輸出為分頻時鐘。模塊定義如下:
module freq_div(reset,clk,keyclk,liftclk);
模塊中keyclk為處理按鍵時鐘,liftclk為電梯運行控制時鐘。
b. 按鍵請求模塊:該模塊實現了記錄并處理各樓層的up、down和stop按鈕被按下的情況,模塊端口如下:
module key_req(
reset,keyclk,
stop, //電梯間內部各層按鈕,每1位代表1層,當相應位置1時表示指示該層的按鈕被按下;
up, //各樓層up按鈕(頂層無),每1位代表1層,當相應位置1時表示該層up按鈕被按下
down, //各樓層down按鈕(底層無),每1位代表1層,當相應位置1時表示該層down按鈕被按下;
stop_r, //電梯內各層按鍵信息
up_r, //電梯外各層向上按鍵信息
down_r //電梯外各層向下按鍵信息
);
c. 電梯控制器模塊和指示模塊:該模塊根據各層按鈕被按下的情況,控制電梯運行,并設置指示燈。模塊定義如下:
module Lift_cONtrol(
keyclk, //處理按鍵時鐘
liftclk, //電梯運行控制時鐘
reset, //電梯復位按鈕,復位后電梯停在一樓;
stop_r, //電梯內各層按鍵信息
up_r, //電梯外各層向上按鍵信息
down_r, //電梯外各層向下按鍵信息
position, //當前樓層位置,每1位代表1層,當相應的位置1時表示電梯運行至該層;
stoplight, //內部各層按鈕指示燈,每1位代表1層,當相應位置1時表示指示該層指示燈亮;
uplight, //除頂層外各層外部按鈕指示燈,每1位代表1層,當相應位置1時表示該層up燈亮;
downlight, //除首層外各層外部按鈕指示燈,每1位代表1層,當相應的位置1時表示該層的down指示燈亮;
doorlight); //用于開門指示燈,為1表示開門,為0表示關門
d. 顯示模塊:該模塊用于譯碼顯示當前電梯所在樓層,模塊定義如下:
module Display(liftclk,position,disp);
評論
查看更多