引言
本文采用VHDL語言來設(shè)計實用三層電梯控制器,其代碼具有良好的可讀性和易理解性,源程序經(jīng)A1tera公司的MAX+plus II軟件仿真,目標(biāo)器件選用CPLD器件。通過對三層電梯控制器的設(shè)計,可以發(fā)現(xiàn)本設(shè)計有一定的擴(kuò)展性,而且可以作為更多層電梯控制器實現(xiàn)的基礎(chǔ)。
??????? 如果要實現(xiàn)n層電梯的控制,首先在端口的地方就要加入所有的按鍵,而指示燈只要把向量中的3改成n就可以了。同時需要在按鍵控制進(jìn)程里加入其他按鍵觸發(fā)指示燈的語句。在電梯的升降狀態(tài)將3改成n,在電梯的開門狀態(tài)中將2改成n一1,在關(guān)門狀態(tài),將position=3改成position=n,關(guān)鍵是修改position=2的部分,如果按照每層羅列,將十分煩瑣,所以得尋求各層判斷條件的共性,解決方法之一就是,新建一個全局向量one為std—logic—veoter(n downto 3)應(yīng)改寫成0,然后和stoplight與fuplight向量比較,如果有更高層次的請求,那么stoplight或fuplight向量,如果stoplight和fuplight向量都小于one向量,表示沒有更高層次的內(nèi)部上升請求,此時將fdnlight向量和one向量比較,如果大于,則表示高層有下降要求,電梯得上升。如果沒有任何請求信號,則電梯停止,否則電梯下降。如此就可以大大簡化程序,但是要注意的是one向量必須實時更新,以作為判斷依據(jù),可以另外寫一個進(jìn)程,用buttonclk來觸發(fā)。
1 三層電梯控制器將實現(xiàn)的功能
(1)每層電梯入口處設(shè)有上下請求開關(guān),電梯內(nèi)設(shè)有顧客到達(dá)層次的停站請求開關(guān)。
(2)設(shè)有電梯入口處位置指示裝置及電梯運行模式(上升或下降)指示裝置。
(3)電梯每秒升(降)一層樓。
(4)電梯到達(dá)有停站請求的樓層,經(jīng)過1秒電梯門打開,開門指示燈亮,開門4秒后,電梯門關(guān)閉(開門指示燈滅),電梯繼續(xù)進(jìn)行,直至執(zhí)行完最后一個請求信號后停留在當(dāng)前層。
(5)能記憶電梯內(nèi)外所有請求,并按照電梯運行規(guī)則按順序響應(yīng),每個請求信號保留至執(zhí)行后消除。
(6)電梯運行規(guī)則一當(dāng)電梯處于上升模式時,只響應(yīng)比電梯所在位置高的上樓請求信號,由下而上逐個執(zhí)行,直到最后一個上樓請求執(zhí)行完畢;如果高層有下樓請求,則直接升到由下樓請求的最高層,然后進(jìn)入下降模式。當(dāng)電梯處于下降模式時則與上升模式相反。
(7)電梯初始狀態(tài)為一層開門狀態(tài)。
2 設(shè)計方案和論證
2.1 控制器的設(shè)計方案
控制器的功能模塊如圖1所示,包括主控制器、分控制器、樓層選擇器、狀態(tài)顯示器、譯碼器和樓層顯示器。乘客在電梯中選擇所要到達(dá)的樓層,通過主控制器的處理,電梯開始運行,狀態(tài)顯示器顯示電梯的運行狀態(tài),電梯所在樓層數(shù)通過譯碼器譯碼從而在樓層顯示器中顯示。分控制器把有效的請求傳給主控制器進(jìn)行處理,同時顯示電梯的運行狀態(tài)和電梯所在樓層數(shù)。由于分控制器相對簡單很多,所以主控制器是核心部分。
?
2.2 三層電梯控制器的設(shè)計思路
電梯控制器采用狀態(tài)機(jī)來實現(xiàn),思路比較清晰。可以將電梯等待的每秒鐘以及開門、關(guān)門都看成一個獨立的狀態(tài)。由于電梯又是每秒上升或下降一層,所以就可以通過一個統(tǒng)一的1秒為周期的時鐘來觸發(fā)狀態(tài)機(jī)。根據(jù)電梯的實際工作情況,可以把狀態(tài)機(jī)設(shè)置10個狀態(tài),分別是“電梯停留在第1層”、“開門”、“關(guān)門”、“開門等待第1秒”、“開門等待第2秒”、“開門等待第3秒”、“開門等待第4秒”、“上升”、“下降”和“停止?fàn)顟B(tài)”。各個狀態(tài)之間的轉(zhuǎn)換條件可由上面的設(shè)計要求所決定。
3 三層電梯控制器的綜合設(shè)計
3.1 三層電梯控制器的實體設(shè)計
首先考慮輸入端口,一個異步復(fù)位端口reset,用于在系統(tǒng)不正常時回到初始狀態(tài);在電梯外部,必須有升降請求端口,一層是最低層,不需要有下降請求,三層是最高層,不需要有上升請求,二層則上升、下降請求端口都有;在電梯的內(nèi)部,應(yīng)該設(shè)有各層停留的請求端口:一個電梯時鐘輸入端口,該輸入時鐘以1秒為周期,用于驅(qū)動電梯的升降及開門關(guān)門等動作;另有一個按鍵時鐘輸入端口,時鐘頻率比電梯時鐘高。
其次是輸出端口,有升降請求信號以后,就得有一個輸出端口來指示請求是否被響應(yīng),有請求信號以后,該輸出端口輸出邏輯‘l’。被響應(yīng)以后則恢復(fù)邏輯‘O’;同樣,在電梯內(nèi)部也應(yīng)該有這樣的輸出端口來顯示各層停留是否被響應(yīng);在電梯外部,需要一個端口來指示電梯現(xiàn)在所處的位置;電梯開門關(guān)門的狀態(tài)也能用一個輸出端口來指示;為了觀察電梯的運行是否正確,可以設(shè)置一個輸出端口來指示電梯的升降狀態(tài)。
3.2 三層電梯控制器的結(jié)構(gòu)體設(shè)計
首先說明一下狀態(tài)。狀態(tài)機(jī)設(shè)置了lO個狀態(tài),分別是電梯停留在l層(stoponl)、開門(dooropen)、關(guān)門(doorclose)、開門等待第1秒(doorwaitl)、開門等待第2秒(doorwait2)、開門等待第3秒(doorwait3)、開門等待第4秒(doorwait4)、上升(up)、下降(down)和停止(stop)。在實體說明定義完端口之后,在結(jié)構(gòu)體architecture和begin之間需要有如下的定義語句,來定義狀態(tài)機(jī)。
TYPE lift_state IS
(stoponl,dooropen,doorclose,doorwaitl,doorwait2,doorwai t3,door。wai t4,up,down,s top):
SIGNAL mylift:lift_state:
在結(jié)構(gòu)體中,設(shè)計了倆個進(jìn)程互相配合,一個是狀態(tài)機(jī)進(jìn)程作為主要進(jìn)程,另外一個是信號燈控制進(jìn)程作為輔助進(jìn)程。狀態(tài)機(jī)進(jìn)程中的很多判斷條件是以信號燈進(jìn)程產(chǎn)生的信號燈信號為依據(jù)的,而信號燈進(jìn)程中信號燈的熄滅又是由狀態(tài)機(jī)進(jìn)程中傳出的clearup和cleardn信號來控制。
在狀態(tài)機(jī)進(jìn)程中,在電梯的上升狀態(tài)中,通過對信號燈的判斷,決定下一個狀態(tài)是繼續(xù)上升還是停止;在電梯下降狀態(tài)中,也是通過對信號燈的判斷,決定下一個狀態(tài)是繼續(xù)下降還是停止;在電梯停止?fàn)顟B(tài)中,判斷是最復(fù)雜的,通過對信號的判斷,決定電梯是上升、下降還是停止。
在信號燈控制進(jìn)程中,由于使用了專門的頻率較高的按鍵時鐘,所以使得按鍵的靈敏度增大,但是時鐘頻率不能過高,否則容易使按鍵過于靈敏。按鍵后產(chǎn)生的點亮的信號燈(邏輯值為‘1’)用于作為狀態(tài)機(jī)進(jìn)程中的判斷條件,而clearup和cleardn信號為邏輯‘l’使得相應(yīng)的信號燈熄滅。
3.3 三層電梯控制器VHDL設(shè)計
三層電梯控制器的VHDL描述模塊流程如圖2所示。三層電梯控制器的源代碼(見附錄)可知:
?
(1)本程序設(shè)計調(diào)用了IEEE庫,IEEE庫是VHDL設(shè)計中最為常用的庫,它包含有IEEE標(biāo)準(zhǔn)的程序包和其他一些支持工業(yè)標(biāo)準(zhǔn)的程序包。本設(shè)計采用了STD_LOGIC_1164、STD_LOGIC_ARITH、STD_LOGIC_UNSIGNED程序包。
(2)以關(guān)鍵詞ENTITY引導(dǎo),END ENTITY threeflift結(jié)尾的語句部分,稱為實體。VHDL的實體描述了電路器件的外部情況及各信號端口的基本性質(zhì)。本設(shè)計定義了關(guān)于三層電梯控制器用到的各類時鐘、異步復(fù)位按鍵、信號燈指示、電梯的請求。端口模式主要就是IN、BUFFER、OUT端口。及定義了各端口信號的數(shù)據(jù)類型,主要是STD_LOGIC(標(biāo)準(zhǔn)邏輯位數(shù)據(jù)類型)、INTEGER(整數(shù)類型)、STD_LOGIC_VECTOR(標(biāo)準(zhǔn)邏輯矢量數(shù)據(jù)類型)。這些都滿足上面調(diào)用的IEEE庫中的程序包。
(3)以關(guān)鍵詞ARCHITECTURE引導(dǎo),END ARCHITECTUREa結(jié)尾的語句部分,稱為結(jié)構(gòu)體。結(jié)構(gòu)體負(fù)責(zé)描述電路器件的內(nèi)部邏輯功能或電路結(jié)構(gòu)。本設(shè)計定義了lO個狀態(tài)。描述了在三層電梯中出現(xiàn)的各種可能的情況作為控制電梯的主要進(jìn)程。信號燈控制作為輔助進(jìn)程。
3.4 三層電梯控制器的模塊
?
4 三層電梯控制器的仿真模塊
模塊(一): 圖4所示仿真的是在第二層電梯外部有上升請求,也就是f2upbuttton信號的一個脈沖,可以看到電梯從一層上升到二層,position信號由1變到2,doorlight信號‘1’表示開門,‘0’表示關(guān)門。當(dāng)乘客進(jìn)入電梯以后,在電梯內(nèi)部要求上升到第三層,也就是stop3button產(chǎn)生一個脈沖,電梯上升到第3層,開門4秒以后關(guān)門,停留在第三層,position最后的值為3。在仿真圖中看不到buttonclk,只顯示為一條黑色的線,是因為采用了頻率較大的時鐘。
再看fuplight信號燈,當(dāng)二層有上升請求的時候,它的值由0變到2。(注意fuplight和fdnlight是3位的二進(jìn)制向量,這里的2代表“010”,表示二層有請求;“100”也就是4,表示三層有請求)。當(dāng)電梯停留到第二層以后,表明該請求被響應(yīng),所以它的值變?yōu)?,由于沒有下降請求信號,所以fdnlight信號燈的值一盲都為O。
?
模塊(二):圖5是有下降請求的情況,它是圖4的繼續(xù),當(dāng)電梯停留在第三層的時候,在電梯外第二層有下降請求,這時候fdnlight信號燈由0變?yōu)?,說明第二層有下降請求。電梯下降到第二層,響應(yīng)了下降請求,所以fdnlight信號燈清0。這時候,在電梯內(nèi)部沒有停留在哪層的請求,所以電梯就停留在第二層,position信號的值保持在2。
?
模塊(三):同時有上升和下降請求信號時,電梯的運行情況如圖6所示。圖6仿真的情況是,原先電梯停留在第一層,這時候電梯外第三層有下降請求,電梯上升到第三層,乘客進(jìn)入電梯以后要求下降到一層,與此同時,在電梯外第二層有上升請求,電梯首先要響應(yīng)下降請求然后再響應(yīng)這個上升請求,所以電梯得先下降到一層,然后再上升到第二層來,這是符合常理的。從仿真的波形看,電梯的位置變化和想象是一致的。電梯的運行情況完全正確。最后乘客在電梯內(nèi)部要求上升到三層,所以電梯最后的停留位置為三層。
?
模塊(四):圖7所示的仿真,原先電梯停留在第一層,電梯外第三層有下降請求,電梯上升到三層,乘客進(jìn)入電梯以后要求下降到一層,此時,二層有下降請求,接著又有上升請求,電梯首先在二層停留。然后下降到一層。隨后要響應(yīng)二層上升請求,上升到二層,乘客進(jìn)入電梯以后要求上升到三層,所以電梯最后的停留位置在三層。
?
5 設(shè)計的擴(kuò)展性
在本設(shè)計中,因為考慮了擴(kuò)展性,所以在信號定義的時候就使用了二進(jìn)制的向量,而不是整數(shù)。在設(shè)計方法上也做了特殊的設(shè)計,所以使得擴(kuò)展性較好。
評論
查看更多