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