版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 數(shù)字電路課程設(shè)計(jì)</b></p><p> 題目:基于FPGA的4層電梯控制</p><p><b> 一、基本原理 </b></p><p> 設(shè)計(jì)一個(gè)4層樓的電梯控制器。該控制器可控制電梯完成4層樓的載客服而且遵循方向優(yōu)先原則,并能響應(yīng)提前關(guān)門延時(shí)關(guān)門;同時(shí)指示電梯運(yùn)行情況、電梯開(kāi)關(guān)
2、門狀態(tài)和電梯內(nèi)外請(qǐng)求信息。 </p><p> 可選的電梯控制方式:1.內(nèi)部請(qǐng)求優(yōu)先控制方式2.單向?qū)訉油?刂品绞?.方向優(yōu)先控制方式 </p><p> 1.內(nèi)部請(qǐng)求優(yōu)先控制方式方案 </p><p> 內(nèi)部請(qǐng)求優(yōu)先控制方式類似于出租車的工作方式,先將車上的人送至目的地,再去載客。作為通用型電梯應(yīng)該服務(wù)于大多數(shù)人,必須考慮電梯對(duì)內(nèi)、外請(qǐng)求的響應(yīng)率P:Pin
3、= 100%;Pout = 0~100%;在內(nèi)部請(qǐng)求優(yōu)先控制方式中,當(dāng)電梯外部人的請(qǐng)求和電梯內(nèi)部人的請(qǐng)求沖突時(shí),外部人的請(qǐng)求信號(hào)可能被長(zhǎng)時(shí)間忽略,因而它不能作為通用型電梯的設(shè)計(jì)方案。 </p><p> 2.單向?qū)訉油?刂品绞椒桨?</p><p> 單向?qū)訉油?刂品绞降韧诨疖嚨倪\(yùn)行方式,遇站即停止、開(kāi)門。這種方案的優(yōu)點(diǎn)在于“面面俱到”,可以保證所有人的請(qǐng)求都能得到響應(yīng)。然而這樣對(duì)電
4、梯的效率產(chǎn)生消極影響:不必要的等待消耗了大量時(shí)間,而且電梯的運(yùn)作與用戶的請(qǐng)求無(wú)關(guān),當(dāng)無(wú)請(qǐng)求時(shí)電梯也照常跑空車,就浪費(fèi)了大量電能。對(duì)用戶而言,此種控制方式的請(qǐng)求響應(yīng)時(shí)間也不是很快。因而這不是理想的方案。 </p><p> 3.方向優(yōu)先控制方式方案 </p><p> 方向優(yōu)先控制是指電梯運(yùn)行到某一樓層時(shí)先考慮這一樓層是否有請(qǐng)求:有,則停止; 無(wú),則繼續(xù)前進(jìn)。停下后再啟動(dòng)時(shí),①考慮前方—
5、—上方、或下方是否有請(qǐng)求:有,則繼續(xù)前進(jìn);無(wú),則停止;②檢測(cè)后方是否有請(qǐng)求, 有請(qǐng)求則轉(zhuǎn)向運(yùn)行, 無(wú)請(qǐng)求則維持停止?fàn)顟B(tài)。這種運(yùn)作方式下,電梯對(duì)用戶的請(qǐng)求響應(yīng)率為100%,且響應(yīng)的時(shí)間較短。假設(shè): 電梯每?jī)蓪娱g的運(yùn)行時(shí)間為ΔT ,樓層數(shù)為6, 在每層樓的停止時(shí)間為t, 如果每層樓都有請(qǐng)求,則這種控制方式的效率和上面的單向每層停等控制方式的效率一樣, 然而, 當(dāng)不是每層樓都有請(qǐng)求 (假定為只有第6層有請(qǐng)求輸入) 時(shí),上面的方式2(設(shè)為A方式
6、)的響應(yīng)時(shí)間T=5*(ΔT + t )而方向優(yōu)先控制方式(設(shè)為B方式)對(duì)同一請(qǐng)求的響應(yīng)時(shí)間T1=5*ΔT即效率比ηb/ηa = 1 + t /ΔT方向優(yōu)先控制方式的效率遠(yuǎn)大于單向?qū)訉油5瓤刂品绞降男?。而且,方向?yōu)先控制方式下,電梯在維持停止?fàn)顟B(tài)的時(shí)候可以進(jìn)入省電模式,又能節(jié)省大量電能,本設(shè)計(jì)選擇方向優(yōu)先控制方式。 </p><p><b> 二、模塊設(shè)計(jì):</b></p>
7、<p> 1.外部數(shù)據(jù)高速采集模塊設(shè)計(jì)2.信號(hào)存儲(chǔ)模塊3.基于FPGA的中央處理模塊4.信號(hào)的輸出、顯示模塊 </p><p> 1.外部數(shù)據(jù)高速采集模塊設(shè)計(jì) </p><p> 對(duì)外部信號(hào)采集、處理要求電梯控制器:(1)外部請(qǐng)求信號(hào)的實(shí)時(shí)、準(zhǔn)確采集。(2)準(zhǔn)確、實(shí)時(shí)的捕捉樓層到達(dá)信號(hào)。(3)有效的防止樓層到達(dá)信號(hào)、外部請(qǐng)求信號(hào)的誤判。控制器采用FPGA作為系統(tǒng)控制的核心,
8、系統(tǒng)時(shí)鐘頻率是32.0000MHz,完全可以滿足實(shí)時(shí)采集數(shù)據(jù)的要求。由于電路中毛刺現(xiàn)象的存在,信號(hào)的純凈度降低,單個(gè)的毛刺往往被誤作為系統(tǒng)狀態(tài)轉(zhuǎn)換的觸發(fā)信號(hào),嚴(yán)重影響電梯的正常工作??梢圆捎枚啻螜z測(cè)的方法解決這個(gè)問(wèn)題,對(duì)一個(gè)信號(hào)進(jìn)行多次采樣以保證信號(hào)的可信度。外部請(qǐng)求信號(hào)的輸入形式為按鍵輸入,到達(dá)樓層信號(hào)來(lái)自光敏傳感器,關(guān)門中斷信號(hào)及超載信號(hào)則產(chǎn)生于壓力傳感器。 鍵盤、光敏外部輸入接口電路未設(shè)計(jì)。 </p><p&g
9、t;<b> 2.信號(hào)存儲(chǔ)模塊 </b></p><p> 電梯控制器的請(qǐng)求輸入信號(hào)有10個(gè)(電梯外有3個(gè)上升請(qǐng)求和3個(gè)下降請(qǐng)求的用戶輸入斷口,電梯內(nèi)有4個(gè)請(qǐng)求用戶輸入斷口),由于系統(tǒng)對(duì)內(nèi)、外請(qǐng)求沒(méi)有設(shè)置優(yōu)先級(jí),各樓層的內(nèi)、外請(qǐng)求信號(hào)被采集后可先進(jìn)行運(yùn)算,再存到存儲(chǔ)器內(nèi)。電梯運(yùn)行過(guò)程中,由于用戶的請(qǐng)求信號(hào)的輸入是離散的,而且系統(tǒng)對(duì)請(qǐng)求的響應(yīng)也是離散的,因此請(qǐng)求信號(hào)的存儲(chǔ)要求新的請(qǐng)求信號(hào)不
10、能覆蓋原來(lái)的請(qǐng)求信號(hào),只有響應(yīng)動(dòng)作完成后才能清除存儲(chǔ)器內(nèi)對(duì)應(yīng)的請(qǐng)求信號(hào)位。 </p><p> 3.基于FPGA的中央處理模塊 </p><p> 中央數(shù)據(jù)處理模塊是系統(tǒng)的核心,通過(guò)對(duì)存儲(chǔ)的數(shù)據(jù)(含請(qǐng)求、到達(dá)樓層等信號(hào))進(jìn)行比較、判斷以驅(qū)動(dòng)系統(tǒng)狀態(tài)的流轉(zhuǎn)。電梯工作過(guò)程中共有6種狀態(tài):等待、上升、下降、開(kāi)門、關(guān)門、停止?fàn)顟B(tài)。一般情況下,電梯工作起始點(diǎn)是第一層,起始狀態(tài)是等待狀態(tài),啟動(dòng)條件
11、是收到上升請(qǐng)求。本系統(tǒng)由請(qǐng)求信號(hào)啟動(dòng),運(yùn)行中每檢測(cè)到一個(gè)到達(dá)樓層信號(hào),就將信號(hào)存儲(chǔ)器的請(qǐng)求信號(hào)和樓層狀態(tài)信號(hào)進(jìn)行比較,再參考原方向信號(hào)來(lái)決定是否停止,轉(zhuǎn)向等動(dòng)作。</p><p> 4.信號(hào)的輸出、顯示模塊 </p><p> 本系統(tǒng)的輸出信號(hào)有兩種:一種是電機(jī)的升降控制信號(hào)(兩位)和開(kāi)門/關(guān)門控制信號(hào);另一種是面向用戶的提示信號(hào)(含樓層顯示、方向顯示、已接受請(qǐng)求顯示等)。電機(jī)的控制信
12、號(hào)一般需要兩位,本系統(tǒng)中電機(jī)有3種工作狀態(tài):正轉(zhuǎn)、反轉(zhuǎn)和停轉(zhuǎn)狀態(tài)。兩位控制信號(hào)作為一個(gè)三路開(kāi)關(guān)的選通信號(hào),此三路開(kāi)關(guān)選用模擬電子開(kāi)關(guān)。系統(tǒng)的顯示輸出包括數(shù)碼管樓層顯示、數(shù)碼管請(qǐng)求信號(hào)顯示和表征運(yùn)動(dòng)方向的箭頭形指示燈的開(kāi)關(guān)信號(hào)。完全可以滿足人們的需要,而且效率比較高。</p><p> 由于本次實(shí)驗(yàn)的實(shí)驗(yàn)條件所限,很多輸入與輸出的功能無(wú)法在實(shí)驗(yàn)板上實(shí)現(xiàn),所以本文僅以電梯控制器的主要模塊為對(duì)象。</p>
13、<p><b> 三、實(shí)驗(yàn)過(guò)程</b></p><p> 1、掌握AltiumDesigner軟件基本使用方法和VHDL編程的初步知識(shí)</p><p> 本次課程設(shè)計(jì)可以說(shuō)是從零開(kāi)始,第一天老師給我們介紹了設(shè)計(jì)軟件的基本使用方法和一個(gè)VHDL程序(60進(jìn)制計(jì)數(shù)器)。主要任務(wù)是掌握軟件的基本使用方法,包括項(xiàng)目的新建、編輯、編譯、仿真等,同時(shí)以60進(jìn)制
14、計(jì)數(shù)器為例介紹VHDL編程的基本模式。</p><p> 由于軟件是全英文版,我第一天的時(shí)間都花在熟悉軟件功能上。通過(guò)多遍觀看老師的講解課件與重復(fù)操作,終于熟悉了軟件的使用方法,并將軟件的使用心得總結(jié)在一張紙上,從而完成了第一步——掌握軟件使用方法。意識(shí)到本次設(shè)計(jì)基于VHDL編程,我又在晚上花了點(diǎn)時(shí)間學(xué)習(xí)有關(guān)VHDL編程的初步知識(shí)。</p><p> 第二天,老師布置了一個(gè)任務(wù):將60
15、進(jìn)制計(jì)數(shù)器改編為24進(jìn)制計(jì)數(shù)器。通過(guò)一上午的努力我成功實(shí)現(xiàn)了24進(jìn)制計(jì)數(shù)器,看到仿真波形的時(shí)候,感覺(jué)很好。</p><p> 2、選則設(shè)計(jì)課題并初步構(gòu)思</p><p> 到了第三天,同學(xué)們都基本熟悉了軟件和VHDL編程,許多同學(xué)躍躍欲試。老師給我們介紹了本次課程設(shè)計(jì)的幾個(gè)選題,其中要數(shù)“電梯控制設(shè)計(jì)”最難,并且目前的記錄是7層電梯??紤]到時(shí)間很充裕,我決定挑戰(zhàn)一下自我,選定電梯作為自
16、己的設(shè)計(jì)項(xiàng)目。第三天和第四天我和同樣選擇了電梯的吳文正同學(xué)討論電梯的實(shí)現(xiàn)方法。首先要明確電梯的功能,為此,我們專門到綜合樓親自乘坐電梯來(lái)明確電梯的功能;然后我們開(kāi)始投入到怎樣編寫程序中,但是感覺(jué)沒(méi)有頭緒,電梯的狀態(tài)實(shí)在太多。這幾天,我們?cè)趯?shí)驗(yàn)室到寢室的路上一直在討論著電梯。</p><p> 第五天上午,我們請(qǐng)教了周老師。周老師給我們的建議是先不要急著編程,而是將精力放在分析電梯的狀態(tài)。</p>
17、<p> 3、電梯主控模塊的VHDL實(shí)現(xiàn)</p><p> 第六天晚上,通過(guò)前一階段的思考和查閱資料,我開(kāi)始著手編寫電梯主控程序。經(jīng)過(guò)一個(gè)晚上的努力,我完成了VHDL編程,這時(shí)候我的感覺(jué)是電梯沒(méi)有想象中的難。</p><p> 4、電梯主控模塊程序的仿真與排錯(cuò)</p><p> 同所有編程過(guò)程一樣,難的不是寫代碼而是Debug。將程序仿真以后,我才
18、發(fā)現(xiàn)錯(cuò)誤不斷,接下來(lái)幾天我基本在不停的仿真與排錯(cuò)。到了星期四,除電梯外其他項(xiàng)目的同學(xué)都已經(jīng)驗(yàn)收,而我的電梯還停留在主控模塊。期間想過(guò)換項(xiàng)目,但已經(jīng)走到這一步了,想放棄都難,于是硬著頭皮往下走。</p><p> 5、原理圖和下板檢測(cè)</p><p> 又是對(duì)著電腦屏幕的一天,我完成了輸入、輸出和主控模塊的連接,即完成了原理圖,并下板測(cè)試。結(jié)果還是有問(wèn)題,且問(wèn)題出在主控模塊里面。在驗(yàn)收截
19、止日期前幾個(gè)小時(shí),我終于獲得了重大突破,解決了一系列的問(wèn)題,4層電梯已經(jīng)可以“動(dòng)”起來(lái)。</p><p> 電梯控制器的vhdl程序:</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_arith.all;&
20、lt;/p><p> use ieee.std_logic_unsigned.all;</p><p> ENTITY DT IS</p><p> PORT(CLK,R:IN STD_LOGIC;</p><p> ILCDN,ILCUP,ILCNB: IN STD_LOGIC_VECTOR(7 DOWNTO 0);--各樓層按鈕<
21、;/p><p> OLCDN,OLCUP,OLCNB: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--各樓上、下請(qǐng)求按鈕和電梯內(nèi)樓層按鈕顯示</p><p> ODNUP:OUT STD_LOGIC_VECTOR(1 DOWNTO 0);--上下運(yùn)行狀態(tài)顯示</p><p> OLC:OUT STD_LOGIC_VECTOR(3 DOWNT
22、O 0);--電梯當(dāng)前樓層</p><p> ODOOR:OUT STD_LOGIC);--門狀態(tài)顯示</p><p><b> END DT;</b></p><p> ARCHITECTURE JGT OF DT IS</p><p> TYPE STATE_TYPE IS(STOPON1,DOOROPEN
23、,DOORCLOSE,WAIT1,WAIT2,WAIT3,WAIT4,UP,DOWN,STOP);</p><p> SIGNAL STATE:STATE_TYPE;</p><p> SIGNAL DOOR:STD_LOGIC;</p><p> SIGNAL POSITION :INTEGER RANGE 1 TO 4;</p><p&
24、gt; SIGNAL DNUP : STD_LOGIC_VECTOR(1 DOWNTO 0);</p><p> SIGNAL LC: STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p> SIGNAL LCDN,LCUP,LCNB: STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p><b> BE
25、GIN</b></p><p> PROCESS(LC,DNUP,DOOR,LCNB,LCDN,LCUP)--輸出</p><p><b> BEGIN</b></p><p><b> OLC<=LC;</b></p><p> ODNUP<=DNUP;</p
26、><p> OLCDN<=LCDN;</p><p> OLCNB<=LCNB;</p><p> OLCUP<=LCUP;</p><p> ODOOR<=DOOR;</p><p> END PROCESS;</p><p> PROCESS(R,CLK)--
27、主</p><p><b> BEGIN</b></p><p> IF R='1' THEN</p><p> STATE<=STOPON1;</p><p> DOOR<='0';</p><p> DNUP<="01&qu
28、ot;;</p><p> LC<="0001";</p><p> POSITION<=1;</p><p> LCDN<="00000000"; LCUP<="00000000"; LCNB<="00000000";</p><
29、p> ELSIF CLK='1' AND CLK 'EVENT THEN</p><p> CASE STATE IS</p><p> WHEN STOPON1=>DOOR<='0'; --1 樓停,門開(kāi)(燈亮)</p><p> POSITION<=1;</p><p&
30、gt; STATE<=WAIT1;</p><p> WHEN WAIT1=>STATE<=WAIT2; --停</p><p> WHEN WAIT2=></p><p> IF ILCNB(1)='1' THEN LCNB(1)<='1';END IF;--輸入讀入</p>&
31、lt;p> IF ILCNB(2)='1' THEN LCNB(2)<='1';END IF;</p><p> IF ILCNB(3)='1' THEN LCNB(3)<='1';END IF;</p><p> IF ILCNB(4)='1' THEN LCNB(4)<=
32、9;1';END IF;</p><p> IF ILCUP(0)='1' THEN LCUP(0)<='1';END IF;</p><p> IF ILCUP(1)='1' THEN LCUP(1)<='1';END IF;</p><p> IF ILCUP(2)=
33、9;1' THEN LCUP(2)<='1';END IF;</p><p> IF ILCDN(1)='1' THEN LCDN(1)<='1';END IF;</p><p> IF ILCDN(2)='1' THEN LCDN(2)<='1';END IF;</p>
34、;<p> IF ILCDN(3)='1' THEN LCDN(3)<='1';END IF;</p><p> STATE<=WAIT3;</p><p> WHEN WAIT3=>STATE<=WAIT4;</p><p> WHEN WAIT4=>STATE<=DOORC
35、LOSE;--門關(guān)狀態(tài)</p><p> WHEN DOORCLOSE=>DOOR<='0';--門燈滅</p><p><b> --門關(guān)時(shí)上升狀態(tài)</b></p><p> IF DNUP="01" THEN</p><p> IF POSITION=4 THE
36、N --電梯在四樓</p><p> IF LCDN="00000000"AND LCUP="00000000"AND LCNB="00000000" THEN</p><p> DNUP<="10";STATE<=DOWN;--無(wú)請(qǐng)求</p><p> ELSIF
37、 LCNB(4)='1'OR LCDN(3)='1' THEN</p><p> DNUP<="10";STATE<=STOP;</p><p><b> ELSE</b></p><p> DNUP<="10";STATE<=DOWN; --
38、有請(qǐng)求,轉(zhuǎn)下降狀態(tài)</p><p><b> END IF;</b></p><p> ELSIF POSITION=3 THEN --電梯在三樓</p><p> IF LCDN="00000000"AND LCUP="00000000"AND LCNB="00000000"
39、; THEN</p><p> DNUP<="01";STATE<=UP; --無(wú)請(qǐng)求,UP</p><p> ELSIF LCNB(3)='1' OR LCUP(2)='1' THEN --3樓請(qǐng)求上升</p><p> DNUP<="01";STATE<=STO
40、P;</p><p> ELSIF LCNB(4)='1' OR LCDN(3)='1' THEN --4樓請(qǐng)求下降</p><p> DNUP<="01";STATE<=UP;</p><p> ELSIF LCNB(3)='1' OR LCDN(2)='1' T
41、HEN --3樓請(qǐng)求下降</p><p> DNUP<="10";STATE<=STOP;</p><p><b> ELSE</b></p><p> DNUP<="10";STATE<=DOWN; --3\4樓無(wú)請(qǐng)求,1\2樓下降請(qǐng)求,轉(zhuǎn)下降狀態(tài)</p>&
42、lt;p><b> END IF;</b></p><p> ELSIF POSITION=2 THEN --電梯在二樓</p><p> IF LCDN="00000000"AND LCUP="00000000"AND LCNB="00000000" THEN</p><
43、p> DNUP<="01";STATE<=UP;--無(wú)請(qǐng)求,上升狀態(tài)</p><p> ELSIF LCUP(1)='1' OR LCNB(2)='1' THEN--2樓請(qǐng)求上</p><p> DNUP<="01";STATE<=STOP;</p><p>
44、 ELSIF LCUP(2)='1' OR LCUP(3)='1' OR LCNB(3)='1' OR LCNB(4)='1' THEN</p><p> DNUP<="01";STATE<=UP; --3\4樓有請(qǐng)求,上升狀態(tài)</p><p> ELSIF LCDN(1)='1&
45、#39; THEN</p><p> DNUP<="10";STATE<=STOP;--2樓請(qǐng)求下降,停</p><p> ELSIF LCUP(0)='1' OR LCNB(1)='1' THEN</p><p> DNUP<="10";STATE<=DOWN;-
46、-1樓請(qǐng)求,轉(zhuǎn)DOWN</p><p><b> END IF;</b></p><p> ELSIF POSITION=1 THEN --電梯在一樓</p><p> IF LCDN="00000000"AND LCUP="00000000"AND LCNB="00000000"
47、; THEN</p><p> DNUP<="01";STATE<=UP;--無(wú)請(qǐng)求</p><p> ELSIF LCUP(0)='1' OR LCNB(1)='1' THEN</p><p> DNUP<="01";STATE<=STOP;--1樓請(qǐng)求</
48、p><p><b> ELSE</b></p><p> DNUP<="01";STATE<=UP;</p><p><b> END IF;</b></p><p><b> END IF;</b></p><p>
49、<b> END IF;</b></p><p><b> --門關(guān)時(shí)下降狀態(tài)</b></p><p> IF DNUP="10" THEN</p><p> IF POSITION=1 THEN --電梯在一樓</p><p> IF LCDN="000
50、00000"AND LCUP="00000000"AND LCNB="00000000" THEN</p><p> DNUP<="01";STATE<=UP;--無(wú)請(qǐng)求</p><p> ELSIF LCUP(0)='1' OR LCNB(1)='1' THEN--1樓請(qǐng)
51、求</p><p> DNUP<="01";STATE<=STOP;</p><p><b> ELSE</b></p><p> DNUP<="01";STATE<=UP; --有請(qǐng)求,轉(zhuǎn)上升</p><p><b> END IF;&l
52、t;/b></p><p> ELSIF POSITION=2 THEN --電梯在二樓</p><p> IF LCDN="00000000"AND LCUP="00000000"AND LCNB="00000000" THEN</p><p> DNUP<="10&quo
53、t;;STATE<=DOWN; --無(wú)請(qǐng)求,門關(guān),DOWN</p><p> ELSIF LCDN(1)='1' OR LCNB(2)='1' THEN --2樓請(qǐng)求</p><p> DNUP<="10";STATE<=STOP; --STOP</p><p> ELSIF LCUP(0
54、)='1' OR LCNB(1)='1' THEN --1樓請(qǐng)求上</p><p> DNUP<="10";STATE<=DOWN;</p><p><b> ELSE</b></p><p> DNUP<="01";STATE<=UP; --
55、1樓無(wú)請(qǐng)求,轉(zhuǎn)上升狀態(tài)</p><p><b> END IF;</b></p><p> ELSIF POSITION=3 THEN --電梯在三樓</p><p> IF LCDN="00000000"AND LCUP="00000000"AND LCNB="00000000&qu
56、ot; THEN</p><p> DNUP<="10";STATE<=DOWN; --無(wú)請(qǐng)求,門關(guān),DOWN</p><p> ELSIF LCDN(2)='1' OR LCNB(2)='1' THEN --3樓請(qǐng)求下</p><p> DNUP<="10";STATE
57、<=STOP;</p><p> ELSIF LCDN(1)='1' OR LCUP(0)='1' OR LCNB(2)='1' OR LCNB(1)='1' THEN --1\2樓請(qǐng)求</p><p> DNUP<="10";STATE<=DOWN;</p><p
58、> ELSIF LCUP(2)='1' THEN --3樓請(qǐng)求上</p><p> DNUP<="01";STATE<=STOP;</p><p><b> ELSE</b></p><p> DNUP<="01";STATE<=UP;</p
59、><p><b> END IF;</b></p><p> ELSIF POSITION=4 THEN</p><p> IF LCDN="00000000"AND LCUP="00000000"AND LCNB="00000000" THEN</p><p&g
60、t; DNUP<="10";STATE<=DOWN; --無(wú)請(qǐng)求,門關(guān),DOWN</p><p> ELSIF LCDN(3)='1' OR LCNB(3)='1' THEN</p><p> DNUP<="10";STATE<=STOP;--4樓請(qǐng)求</p><p&g
61、t;<b> ELSE</b></p><p> DNUP<="10";STATE<=DOWN;</p><p><b> END IF;</b></p><p><b> END IF;</b></p><p><b> E
62、ND IF;</b></p><p><b> --上升運(yùn)行狀態(tài)</b></p><p><b> WHEN UP=></b></p><p> IF ILCNB(1)='1' THEN LCNB(1)<='1';END IF;--輸入讀入</p>
63、<p> IF ILCNB(2)='1' THEN LCNB(2)<='1';END IF;</p><p> IF ILCNB(3)='1' THEN LCNB(3)<='1';END IF;</p><p> IF ILCNB(4)='1' THEN LCNB(4)<=&
64、#39;1';END IF;</p><p> IF ILCUP(0)='1' THEN LCUP(0)<='1';END IF;</p><p> IF ILCUP(1)='1' THEN LCUP(1)<='1';END IF;</p><p> IF ILCUP(2)=&
65、#39;1' THEN LCUP(2)<='1';END IF;</p><p> IF ILCDN(1)='1' THEN LCDN(1)<='1';END IF;</p><p> IF ILCDN(2)='1' THEN LCDN(2)<='1';END IF;</p&
66、gt;<p> IF ILCDN(3)='1' THEN LCDN(3)<='1';END IF;</p><p> IF POSITION=4 AND (LCNB(4)='1'OR LCDN(3)='1') THEN</p><p> DNUP<="10";STATE<
67、;=STOP;--4樓(頂樓)有下降請(qǐng)求,保持狀態(tài)</p><p> ELSIF POSITION=4 AND (LCNB(4)='0'OR LCDN(3)='0') THEN</p><p> DNUP<="10";POSITION<=POSITION-1;LC<=LC-'1';STATE<=
68、DOWN;</p><p> ELSIF POSITION=3 AND (LCNB(3)='1'OR LCUP(2)='1') THEN</p><p> DNUP<="01";STATE<=STOP;</p><p> ELSIF POSITION=3 AND (LCNB(3)='0
69、39;OR LCUP(2)='0') THEN</p><p> DNUP<="01";POSITION<=POSITION+1;LC<=LC+'1';STATE<=UP;</p><p> ELSIF POSITION=2 AND (LCNB(2)='1'OR LCUP(1)='1
70、39;) THEN</p><p> DNUP<="01";STATE<=STOP;</p><p> ELSIF POSITION=2 AND (LCNB(2)='0'OR LCUP(1)='0') THEN</p><p> DNUP<="01";POSITION&l
71、t;=POSITION+1;LC<=LC+'1';STATE<=UP;</p><p> ELSIF POSITION=1 AND (LCNB(1)='1'OR LCUP(0)='1') THEN</p><p> DNUP<="01";STATE<=STOP;</p><p
72、> ELSIF POSITION=1 AND (LCNB(1)='0'OR LCUP(0)='0') THEN</p><p> DNUP<="01";POSITION<=POSITION+1;LC<=LC+'1';STATE<=UP;</p><p><b> END IF;
73、</b></p><p><b> --下降運(yùn)行狀態(tài)</b></p><p> WHEN DOWN=></p><p> IF ILCNB(1)='1' THEN LCNB(1)<='1';END IF;--輸入讀入</p><p> IF ILCNB(2)
74、='1' THEN LCNB(2)<='1';END IF;</p><p> IF ILCNB(3)='1' THEN LCNB(3)<='1';END IF;</p><p> IF ILCNB(4)='1' THEN LCNB(4)<='1';END IF;</
75、p><p> IF ILCUP(0)='1' THEN LCUP(0)<='1';END IF;</p><p> IF ILCUP(1)='1' THEN LCUP(1)<='1';END IF;</p><p> IF ILCUP(2)='1' THEN LCUP(2)
76、<='1';END IF;</p><p> IF ILCDN(1)='1' THEN LCDN(1)<='1';END IF;</p><p> IF ILCDN(2)='1' THEN LCDN(2)<='1';END IF;</p><p> IF ILCD
77、N(3)='1' THEN LCDN(3)<='1';END IF;</p><p> IF POSITION=1 AND (LCNB(1)='1'OR LCUP(0)='1') THEN</p><p> DNUP<="01";STATE<=STOP;--底樓有請(qǐng)求,STOP<
78、/p><p> ELSIF POSITION=1 AND (LCNB(1)='0'OR LCUP(0)='0') THEN</p><p> DNUP<="01";POSITION<=POSITION+1;LC<=LC+'1';STATE<=UP;</p><p> ELS
79、IF POSITION=2 AND (LCNB(2)='1'OR LCDN(1)='1') THEN</p><p> DNUP<="10";STATE<=STOP;</p><p> ELSIF POSITION=2 AND (LCNB(2)='0'OR LCDN(1)='0') THEN
80、</p><p> DNUP<="10";POSITION<=POSITION-1;LC<=LC-'1';STATE<=DOWN;</p><p> ELSIF POSITION=3 AND (LCNB(3)='1'OR LCDN(2)='1') THEN</p><p>
81、; DNUP<="10";STATE<=STOP;</p><p> ELSIF POSITION=3 AND (LCNB(3)='0'OR LCDN(2)='0') THEN</p><p> DNUP<="10";POSITION<=POSITION-1;LC<=LC-'
82、1';STATE<=DOWN;</p><p> ELSIF POSITION=4 AND (LCNB(4)='1'OR LCDN(3)='1') THEN</p><p> DNUP<="10";STATE<=STOP;</p><p> ELSIF POSITION=4 AND
83、(LCNB(4)='0'OR LCDN(3)='0') THEN</p><p> DNUP<="10";POSITION<=POSITION-1;LC<=LC-'1';STATE<=DOWN;</p><p><b> END IF;</b></p><
84、;p> WHEN STOP=>STATE<=DOOROPEN;--停止?fàn)顟B(tài)門開(kāi)</p><p> WHEN DOOROPEN=>DOOR<='1';</p><p> LCNB(POSITION)<='0';LCDN(POSITION-1)<='0';LCUP(POSITION-1)<=&
85、#39;0';</p><p> STATE<=WAIT1; --轉(zhuǎn)門等待狀態(tài)</p><p> WHEN OTHERS=>STATE<=STOPON1;</p><p><b> END CASE;</b></p><p><b> END IF;</b><
86、/p><p> END PROCESS;</p><p><b> END JGT;</b></p><p><b> 仿真波形圖</b></p><p><b> 管腳芯片圖</b></p><p> 鍵盤轉(zhuǎn)按鍵模塊的vhdl程序</p&g
87、t;<p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> USE IEEE.STD_LOGIC_ARITH.ALL;</p><p> entity PADT
88、OKEY is</p><p><b> port (</b></p><p> CPIN,R,VALIDKEY :IN STD_LOGIC;</p><p> KEY :IN STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p> KEYOUT: OUT STD_LOGIC_VECTOR(
89、15 DOWNTO 0);</p><p> CLK_1MHZ,RST: OUT STD_LOGIC</p><p><b> );</b></p><p> end entity ;</p><p> architecture JGT of PADTOKEY is</p><p> S
90、IGNAL CTCP: INTEGER RANGE 0 TO 5;</p><p> SIGNAL CPO :STD_LOGIC;</p><p> SIGNAL CTCPO :INTEGER RANGE 0 TO 4999;</p><p> TYPE STATES IS (S0,S1,S2);</p><p> SIGNAL S
91、: STATES;</p><p><b> begin</b></p><p> PROCESS(CPIN)</p><p><b> BEGIN</b></p><p> IF CPIN='1' AND CPIN 'EVENT THEN</p>&l
92、t;p> IF CTCP=5 THEN</p><p> CPO <= NOT CPO; CTCP<=0;</p><p><b> ELSE</b></p><p> CTCP<=CTCP+1;</p><p><b> END IF;</b></p>
93、<p><b> END IF;</b></p><p> END PROCESS;</p><p> PROCESS(CPO,R)</p><p><b> BEGIN</b></p><p> CLK_1MHZ<=CPO;</p><p>
94、 IF R='1' THEN</p><p> RST<='0';S<=S0;CTCPO<=0; KEYOUT<="0000000000000000";</p><p> ELSIF CPO='1' AND CPO 'EVENT THEN</p><p> IF
95、 CTCPO /= 4999 THEN</p><p> CTCPO<=CTCPO+1;</p><p><b> ELSE</b></p><p><b> CTCPO<=0;</b></p><p><b> CASE S IS</b></p>
96、;<p> WHEN S0 =>RST<='0';</p><p> IF VALIDKEY='1' THEN</p><p><b> S<=S1;</b></p><p> CASE KEY IS</p><p> WHEN "000
97、0"=>KEYOUT<="0000000000000001";</p><p> WHEN "0001"=>KEYOUT<="0000000000000010";</p><p> WHEN "0010"=>KEYOUT<="0000000000000
98、100";</p><p> WHEN "0011"=>KEYOUT<="0000000000001000";</p><p> WHEN "0100"=>KEYOUT<="0000000000010000";</p><p> WHEN &quo
99、t;0101"=>KEYOUT<="0000000000100000";</p><p> WHEN "0110"=>KEYOUT<="0000000001000000";</p><p> WHEN "0111"=>KEYOUT<="00000000
100、10000000";</p><p> WHEN "1000"=>KEYOUT<="0000000100000000";</p><p> WHEN "1001"=>KEYOUT<="0000001000000000";</p><p> WHEN
101、 "1010"=>KEYOUT<="0000010000000000";</p><p> WHEN "1011"=>KEYOUT<="0000100000000000";</p><p> WHEN "1100"=>KEYOUT<="000
102、1000000000000";</p><p> WHEN "1101"=>KEYOUT<="0010000000000000";</p><p> WHEN "1110"=>KEYOUT<="0100000000000000";</p><p>
103、 WHEN "1111"=>KEYOUT<="1000000000000000";</p><p> WHEN OTHERS=>NULL;</p><p><b> END CASE;</b></p><p><b> ELSE</b></p>
104、<p> S<=S0;KEYOUT<="0000000000000000";</p><p><b> END IF;</b></p><p> WHEN S1=>RST<='1';S<=S2;</p><p> WHEN S2=>RST<='
105、;0';S<=S0;</p><p> WHEN OTHERS=> NULL;</p><p><b> END CASE;</b></p><p><b> END IF;</b></p><p><b> END IF;</b></p>
106、;<p> END PROCESS;</p><p> end architecture JGT;</p><p><b> 管腳芯片圖</b></p><p><b> LCD顯示模塊</b></p><p> --File name DIANTILCD</p>
107、<p> -- 目的:在LCD上按格式顯示電梯各樓層按鍵(8層)、當(dāng)前樓層、運(yùn)行方向、開(kāi)關(guān)門狀態(tài)</p><p> --輸入:LCDN、LCUP、LCNB:分別為樓層外部下、上以及梯內(nèi)按鍵,每項(xiàng)8位,對(duì)應(yīng)8層,每位為1表示</p><p> -- 對(duì)應(yīng)按鍵被按下。其最低位顯示在LCD左邊</p><p> --R:復(fù)位;DOOR:1/
108、0:開(kāi)/關(guān)門 DNUP:運(yùn)行方向指示,10/01/00:下/上/停止</p><p> --提示:可將兩位BCD碼用總線合并的形式連入</p><p> --注意:每個(gè)總線形式的輸入均為L(zhǎng)OGIC_VECTOR形式,因此,相應(yīng)電路的輸出要定義為L(zhǎng)OGIC</p><p> --VECTOR 形式,整型形式不能使用。</p><p>
109、 --CPIN 時(shí)鐘脈沖輸入 按10MHz設(shè)計(jì) ;復(fù)位R</p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> entity DTLCD is</p>
110、<p> port (CPIN,R,BUSY,DOOR :IN STD_LOGIC;</p><p> LCDN,LCUP,LCNB :IN STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p> LC : IN STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p> DNUP:IN STD_LOGI
111、C_VECTOR(1 DOWNTO 0);</p><p> CLK,RST,STROBE,OUTLINE : OUT STD_LOGIC;</p><p> DATA : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p> ADDR : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)</p>
112、<p><b> );</b></p><p> end entity ;</p><p> architecture JGT of DTLCD is</p><p> function to_uint (a: std_Logic_vector) return integer is</p><p>
113、alias av: std_logic_vector (1 to a'length) is a;</p><p> variable val: integer := 0;</p><p> variable b: integer := 1;</p><p><b> begin</b></p><p>
114、for i in a'length downto 1 loop</p><p> if (av(i) = '1') then -- if LSB is '1',</p><p> val := val + b; -- add value for current bit position</p><p><b>
115、 end if;</b></p><p> b := b * 2; -- Shift left 1 bit</p><p><b> end loop;</b></p><p> return val;</p><p> end to_uint;</p><p> -----
116、---------------------------------------------------</p><p> -- Convert an integer to a std_ulogic_vector</p><p><b> --</b></p><p> function to_vector (size: integer;
117、val: integer) return std_logic_vector is</p><p> variable vec: std_logic_vector (1 to size);</p><p> variable a: integer;</p><p><b> begin</b></p><p><
118、;b> a := val;</b></p><p> for i in size downto 1 loop</p><p> if ((a mod 2) = 1) then</p><p> vec(i) := '1';</p><p><b> else</b></p
119、><p> vec(i) := '0';</p><p><b> end if;</b></p><p> a := a / 2;</p><p><b> end loop;</b></p><p> return vec;</p>&
120、lt;p> end to_vector;</p><p> TYPE STATES IS (S0,S1,S2);</p><p> SIGNAL S: STATES;</p><p> SIGNAL LCDPT : INTEGER RANGE 0 TO 28;</p><p> SIGNAL CPCT : INTEGER R
121、ANGE 0 TO 65535;</p><p> SIGNAL CP: STD_LOGIC;</p><p> --SIGNAL ASCEW,ASCSN : STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p><b> begin</b></p><p> PROCESS(CPIN,R)
122、</p><p><b> BEGIN</b></p><p> CLK<=CPIN;</p><p> IF R='1' THEN</p><p> CPCT<=65535;</p><p> ELSIF CPIN='1' AND CPIN
123、'EVENT THEN</p><p> IF CPCT=0 THEN</p><p> CPCT<=65535;CP<=NOT CP;</p><p><b> ELSE</b></p><p> CPCT<=CPCT-1;</p><p><b>
124、 END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS; --分頻為500US周期</p><p> --主進(jìn)程:擬采用500us時(shí)鐘,即在500us后完成狀態(tài)轉(zhuǎn)換,修改LCDPT指針</p><p> --S0:初始狀態(tài),在R=1時(shí),處
125、于S0狀態(tài),LCDPT=0</p><p> -- 流程: 輸出rst=1, 轉(zhuǎn)S1</p><p> --S1:輸出RST=0;判斷BUSY=0? :Y: LCDPT+1;LCDPT到固定最后?::N: ->S2</p><p> -- ::Y: 轉(zhuǎn)S3</p
126、><p> -- ;N; NULL</p><p> --S2:給出STROBE信號(hào)。轉(zhuǎn)S1</p><p> --S1,S2完成初始化固定顯示的功能</p><p> PROCESS(CP,R)</p><p><b> BEGIN</b>
127、</p><p> IF R='1' THEN</p><p> S<=S0;LCDPT<=0;RST<='1';</p><p> ELSIF CP='1' AND CP 'EVENT THEN</p><p><b> CASE S IS</
128、b></p><p> WHEN S0=> S<=S1;LCDPT<=0;RST<='1';</p><p> WHEN S1=> RST<='0';STROBE<='0';</p><p> IF BUSY='0' THEN</p>
129、<p> IF LCDPT=28 THEN</p><p><b> LCDPT<=1;</b></p><p><b> ELSE</b></p><p> LCDPT<=LCDPT+1;</p><p><b> END IF;</b><
130、;/p><p><b> S<=S2;</b></p><p><b> END IF;</b></p><p> WHEN S2=> S<=S1;STROBE<='1';</p><p> --S1~S完成掃描顯示功能</p><p&
131、gt; --S3:BUSY=0? :Y: LCDPT循環(huán)+1 ,轉(zhuǎn)S4</p><p> --S4:給出STROBE信號(hào),轉(zhuǎn)S3</p><p> WHEN OTHERS=> NULL;</p><p><b> END CASE;</b></p><p><b> END IF;</b&
132、gt;</p><p> END PROCESS;</p><p> --選擇輸出進(jìn)程(LCDPT)</p><p> --LCDPT=0,NULL</p><p> -- =1~8 顯示 樓層上行按鍵 1/0: A/空: 9~16:梯內(nèi)按鍵1/0:O/空</p><p> --17~24:顯示樓層下
133、行按鍵:1/0:V /空 ;25~28:開(kāi)關(guān)門顯示</p><p> --29:樓層 30: 運(yùn)行方向 10/01/00: V/A/空</p><p> PROCESS(LCDPT)</p><p> VARIABLE N: INTEGER RANGE 0 TO 31;</p><p> VARIABLE NADD: STD_L
134、OGIC_VECTOR(3 DOWNTO 0);</p><p><b> BEGIN</b></p><p> IF NOT(LCDPT=0) THEN</p><p> IF LCDPT<9 THEN --上行鍵顯示區(qū)</p><p> N:=LCDPT-1;</p&g
135、t;<p> NADD:=TO_VECTOR(4,N);</p><p> IF LCUP(N)='1' THEN</p><p> DATA<=X"41"; --A</p><p><b> ELSE</b></p><p> DATA<=X&qu
136、ot;20";--空格</p><p><b> END IF;</b></p><p> ADDR<=NADD;OUTLINE<='0';--根據(jù)LCUP對(duì)應(yīng)位的1/0顯示A或空格</p><p> ELSIF LCDPT<17 THEN --梯內(nèi)鍵顯示區(qū)</p><p&
137、gt; N:=LCDPT-1;</p><p> NADD:=TO_VECTOR(4,N);</p><p> N:=N-8; --N為8~15,變換為0~7</p><p> IF LCNB(N)='1' THEN</p><p> DATA<=X"4F"; --
138、O</p><p><b> ELSE</b></p><p> DATA<=X"20";--空格</p><p><b> END IF;</b></p><p> ADDR<=NADD;OUTLINE<='0';--根據(jù)LCNB對(duì)應(yīng)位
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于fpga的六層電梯控制系統(tǒng)課程設(shè)計(jì)
- 基于fpga的六層電梯控制系統(tǒng)課程設(shè)計(jì)
- eda課程設(shè)計(jì)之電梯控制
- eda課程設(shè)計(jì)之電梯控制
- eda課程設(shè)計(jì)---電梯控制的實(shí)現(xiàn)
- eda課程設(shè)計(jì)--電梯控制器設(shè)計(jì)
- eda課程設(shè)計(jì)--電梯控制器設(shè)計(jì)
- eda電梯控制器課程設(shè)計(jì)報(bào)告
- eda_電梯控制器課程設(shè)計(jì)
- 四層電梯控制課程設(shè)計(jì)
- eda課程設(shè)計(jì)--三層電梯plc控制程序設(shè)計(jì)
- eda課程設(shè)計(jì)---基于fpga的數(shù)字鐘設(shè)計(jì)
- plc電梯課程設(shè)計(jì)---基于plc控制的五層電梯系統(tǒng)
- eda課程設(shè)計(jì)---基于fpga的洗衣機(jī)控制器的設(shè)計(jì)
- plc電梯課程設(shè)計(jì)--四層電梯的plc控制
- plc控制五層電梯課程設(shè)計(jì)
- plc課程設(shè)計(jì)—四層電梯的控制
- 五層電梯的plc控制課程設(shè)計(jì)
- plc課程設(shè)計(jì)--基于plc控制的四層電梯設(shè)計(jì)
- 四層電梯plc控制課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論