版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 數(shù)字電路課程設(shè)計</b></p><p> 題目:基于FPGA的4層電梯控制</p><p><b> 一、基本原理 </b></p><p> 設(shè)計一個4層樓的電梯控制器。該控制器可控制電梯完成4層樓的載客服而且遵循方向優(yōu)先原則,并能響應(yīng)提前關(guān)門延時關(guān)門;同時指示電梯運行情況、電梯開關(guān)
2、門狀態(tài)和電梯內(nèi)外請求信息。 </p><p> 可選的電梯控制方式:1.內(nèi)部請求優(yōu)先控制方式2.單向?qū)訉油?刂品绞?.方向優(yōu)先控制方式 </p><p> 1.內(nèi)部請求優(yōu)先控制方式方案 </p><p> 內(nèi)部請求優(yōu)先控制方式類似于出租車的工作方式,先將車上的人送至目的地,再去載客。作為通用型電梯應(yīng)該服務(wù)于大多數(shù)人,必須考慮電梯對內(nèi)、外請求的響應(yīng)率P:Pin
3、= 100%;Pout = 0~100%;在內(nèi)部請求優(yōu)先控制方式中,當電梯外部人的請求和電梯內(nèi)部人的請求沖突時,外部人的請求信號可能被長時間忽略,因而它不能作為通用型電梯的設(shè)計方案。 </p><p> 2.單向?qū)訉油?刂品绞椒桨?</p><p> 單向?qū)訉油?刂品绞降韧诨疖嚨倪\行方式,遇站即停止、開門。這種方案的優(yōu)點在于“面面俱到”,可以保證所有人的請求都能得到響應(yīng)。然而這樣對電
4、梯的效率產(chǎn)生消極影響:不必要的等待消耗了大量時間,而且電梯的運作與用戶的請求無關(guān),當無請求時電梯也照常跑空車,就浪費了大量電能。對用戶而言,此種控制方式的請求響應(yīng)時間也不是很快。因而這不是理想的方案。 </p><p> 3.方向優(yōu)先控制方式方案 </p><p> 方向優(yōu)先控制是指電梯運行到某一樓層時先考慮這一樓層是否有請求:有,則停止; 無,則繼續(xù)前進。停下后再啟動時,①考慮前方—
5、—上方、或下方是否有請求:有,則繼續(xù)前進;無,則停止;②檢測后方是否有請求, 有請求則轉(zhuǎn)向運行, 無請求則維持停止狀態(tài)。這種運作方式下,電梯對用戶的請求響應(yīng)率為100%,且響應(yīng)的時間較短。假設(shè): 電梯每兩層間的運行時間為ΔT ,樓層數(shù)為6, 在每層樓的停止時間為t, 如果每層樓都有請求,則這種控制方式的效率和上面的單向每層停等控制方式的效率一樣, 然而, 當不是每層樓都有請求 (假定為只有第6層有請求輸入) 時,上面的方式2(設(shè)為A方式
6、)的響應(yīng)時間T=5*(ΔT + t )而方向優(yōu)先控制方式(設(shè)為B方式)對同一請求的響應(yīng)時間T1=5*ΔT即效率比ηb/ηa = 1 + t /ΔT方向優(yōu)先控制方式的效率遠大于單向?qū)訉油5瓤刂品绞降男省6?,方向?yōu)先控制方式下,電梯在維持停止狀態(tài)的時候可以進入省電模式,又能節(jié)省大量電能,本設(shè)計選擇方向優(yōu)先控制方式。 </p><p><b> 二、模塊設(shè)計:</b></p>
7、<p> 1.外部數(shù)據(jù)高速采集模塊設(shè)計2.信號存儲模塊3.基于FPGA的中央處理模塊4.信號的輸出、顯示模塊 </p><p> 1.外部數(shù)據(jù)高速采集模塊設(shè)計 </p><p> 對外部信號采集、處理要求電梯控制器:(1)外部請求信號的實時、準確采集。(2)準確、實時的捕捉樓層到達信號。(3)有效的防止樓層到達信號、外部請求信號的誤判??刂破鞑捎肍PGA作為系統(tǒng)控制的核心,
8、系統(tǒng)時鐘頻率是32.0000MHz,完全可以滿足實時采集數(shù)據(jù)的要求。由于電路中毛刺現(xiàn)象的存在,信號的純凈度降低,單個的毛刺往往被誤作為系統(tǒng)狀態(tài)轉(zhuǎn)換的觸發(fā)信號,嚴重影響電梯的正常工作。可以采用多次檢測的方法解決這個問題,對一個信號進行多次采樣以保證信號的可信度。外部請求信號的輸入形式為按鍵輸入,到達樓層信號來自光敏傳感器,關(guān)門中斷信號及超載信號則產(chǎn)生于壓力傳感器。 鍵盤、光敏外部輸入接口電路未設(shè)計。 </p><p&g
9、t;<b> 2.信號存儲模塊 </b></p><p> 電梯控制器的請求輸入信號有10個(電梯外有3個上升請求和3個下降請求的用戶輸入斷口,電梯內(nèi)有4個請求用戶輸入斷口),由于系統(tǒng)對內(nèi)、外請求沒有設(shè)置優(yōu)先級,各樓層的內(nèi)、外請求信號被采集后可先進行運算,再存到存儲器內(nèi)。電梯運行過程中,由于用戶的請求信號的輸入是離散的,而且系統(tǒng)對請求的響應(yīng)也是離散的,因此請求信號的存儲要求新的請求信號不
10、能覆蓋原來的請求信號,只有響應(yīng)動作完成后才能清除存儲器內(nèi)對應(yīng)的請求信號位。 </p><p> 3.基于FPGA的中央處理模塊 </p><p> 中央數(shù)據(jù)處理模塊是系統(tǒng)的核心,通過對存儲的數(shù)據(jù)(含請求、到達樓層等信號)進行比較、判斷以驅(qū)動系統(tǒng)狀態(tài)的流轉(zhuǎn)。電梯工作過程中共有6種狀態(tài):等待、上升、下降、開門、關(guān)門、停止狀態(tài)。一般情況下,電梯工作起始點是第一層,起始狀態(tài)是等待狀態(tài),啟動條件
11、是收到上升請求。本系統(tǒng)由請求信號啟動,運行中每檢測到一個到達樓層信號,就將信號存儲器的請求信號和樓層狀態(tài)信號進行比較,再參考原方向信號來決定是否停止,轉(zhuǎn)向等動作。</p><p> 4.信號的輸出、顯示模塊 </p><p> 本系統(tǒng)的輸出信號有兩種:一種是電機的升降控制信號(兩位)和開門/關(guān)門控制信號;另一種是面向用戶的提示信號(含樓層顯示、方向顯示、已接受請求顯示等)。電機的控制信
12、號一般需要兩位,本系統(tǒng)中電機有3種工作狀態(tài):正轉(zhuǎn)、反轉(zhuǎn)和停轉(zhuǎn)狀態(tài)。兩位控制信號作為一個三路開關(guān)的選通信號,此三路開關(guān)選用模擬電子開關(guān)。系統(tǒng)的顯示輸出包括數(shù)碼管樓層顯示、數(shù)碼管請求信號顯示和表征運動方向的箭頭形指示燈的開關(guān)信號。完全可以滿足人們的需要,而且效率比較高。</p><p> 由于本次實驗的實驗條件所限,很多輸入與輸出的功能無法在實驗板上實現(xiàn),所以本文僅以電梯控制器的主要模塊為對象。</p>
13、<p><b> 三、實驗過程</b></p><p> 1、掌握AltiumDesigner軟件基本使用方法和VHDL編程的初步知識</p><p> 本次課程設(shè)計可以說是從零開始,第一天老師給我們介紹了設(shè)計軟件的基本使用方法和一個VHDL程序(60進制計數(shù)器)。主要任務(wù)是掌握軟件的基本使用方法,包括項目的新建、編輯、編譯、仿真等,同時以60進制
14、計數(shù)器為例介紹VHDL編程的基本模式。</p><p> 由于軟件是全英文版,我第一天的時間都花在熟悉軟件功能上。通過多遍觀看老師的講解課件與重復操作,終于熟悉了軟件的使用方法,并將軟件的使用心得總結(jié)在一張紙上,從而完成了第一步——掌握軟件使用方法。意識到本次設(shè)計基于VHDL編程,我又在晚上花了點時間學習有關(guān)VHDL編程的初步知識。</p><p> 第二天,老師布置了一個任務(wù):將60
15、進制計數(shù)器改編為24進制計數(shù)器。通過一上午的努力我成功實現(xiàn)了24進制計數(shù)器,看到仿真波形的時候,感覺很好。</p><p> 2、選則設(shè)計課題并初步構(gòu)思</p><p> 到了第三天,同學們都基本熟悉了軟件和VHDL編程,許多同學躍躍欲試。老師給我們介紹了本次課程設(shè)計的幾個選題,其中要數(shù)“電梯控制設(shè)計”最難,并且目前的記錄是7層電梯??紤]到時間很充裕,我決定挑戰(zhàn)一下自我,選定電梯作為自
16、己的設(shè)計項目。第三天和第四天我和同樣選擇了電梯的吳文正同學討論電梯的實現(xiàn)方法。首先要明確電梯的功能,為此,我們專門到綜合樓親自乘坐電梯來明確電梯的功能;然后我們開始投入到怎樣編寫程序中,但是感覺沒有頭緒,電梯的狀態(tài)實在太多。這幾天,我們在實驗室到寢室的路上一直在討論著電梯。</p><p> 第五天上午,我們請教了周老師。周老師給我們的建議是先不要急著編程,而是將精力放在分析電梯的狀態(tài)。</p>
17、<p> 3、電梯主控模塊的VHDL實現(xiàn)</p><p> 第六天晚上,通過前一階段的思考和查閱資料,我開始著手編寫電梯主控程序。經(jīng)過一個晚上的努力,我完成了VHDL編程,這時候我的感覺是電梯沒有想象中的難。</p><p> 4、電梯主控模塊程序的仿真與排錯</p><p> 同所有編程過程一樣,難的不是寫代碼而是Debug。將程序仿真以后,我才
18、發(fā)現(xiàn)錯誤不斷,接下來幾天我基本在不停的仿真與排錯。到了星期四,除電梯外其他項目的同學都已經(jīng)驗收,而我的電梯還停留在主控模塊。期間想過換項目,但已經(jīng)走到這一步了,想放棄都難,于是硬著頭皮往下走。</p><p> 5、原理圖和下板檢測</p><p> 又是對著電腦屏幕的一天,我完成了輸入、輸出和主控模塊的連接,即完成了原理圖,并下板測試。結(jié)果還是有問題,且問題出在主控模塊里面。在驗收截
19、止日期前幾個小時,我終于獲得了重大突破,解決了一系列的問題,4層電梯已經(jīng)可以“動”起來。</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);--各樓上、下請求按鈕和電梯內(nèi)樓層按鈕顯示</p><p> ODNUP:OUT STD_LOGIC_VECTOR(1 DOWNTO 0);--上下運行狀態(tài)顯示</p><p> OLC:OUT STD_LOGIC_VECTOR(3 DOWNT
22、O 0);--電梯當前樓層</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 樓停,門開(燈亮)</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)時上升狀態(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;--無請求</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、有請求,轉(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; --無請求,UP</p><p> ELSIF LCNB(3)='1' OR LCUP(2)='1' THEN --3樓請求上升</p><p> DNUP<="01";STATE<=STO
40、P;</p><p> ELSIF LCNB(4)='1' OR LCDN(3)='1' THEN --4樓請求下降</p><p> DNUP<="01";STATE<=UP;</p><p> ELSIF LCNB(3)='1' OR LCDN(2)='1' T
41、HEN --3樓請求下降</p><p> DNUP<="10";STATE<=STOP;</p><p><b> ELSE</b></p><p> DNUP<="10";STATE<=DOWN; --3\4樓無請求,1\2樓下降請求,轉(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;--無請求,上升狀態(tài)</p><p> ELSIF LCUP(1)='1' OR LCNB(2)='1' THEN--2樓請求上</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樓有請求,上升狀態(tài)</p><p> ELSIF LCDN(1)='1&
45、#39; THEN</p><p> DNUP<="10";STATE<=STOP;--2樓請求下降,停</p><p> ELSIF LCUP(0)='1' OR LCNB(1)='1' THEN</p><p> DNUP<="10";STATE<=DOWN;-
46、-1樓請求,轉(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;--無請求</p><p> ELSIF LCUP(0)='1' OR LCNB(1)='1' THEN</p><p> DNUP<="01";STATE<=STOP;--1樓請求</
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)時下降狀態(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;--無請求</p><p> ELSIF LCUP(0)='1' OR LCNB(1)='1' THEN--1樓請
51、求</p><p> DNUP<="01";STATE<=STOP;</p><p><b> ELSE</b></p><p> DNUP<="01";STATE<=UP; --有請求,轉(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; --無請求,門關(guān),DOWN</p><p> ELSIF LCDN(1)='1' OR LCNB(2)='1' THEN --2樓請求</p><p> DNUP<="10";STATE<=STOP; --STOP</p><p> ELSIF LCUP(0
54、)='1' OR LCNB(1)='1' THEN --1樓請求上</p><p> DNUP<="10";STATE<=DOWN;</p><p><b> ELSE</b></p><p> DNUP<="01";STATE<=UP; --
55、1樓無請求,轉(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; --無請求,門關(guān),DOWN</p><p> ELSIF LCDN(2)='1' OR LCNB(2)='1' THEN --3樓請求下</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樓請求</p><p> DNUP<="10";STATE<=DOWN;</p><p
58、> ELSIF LCUP(2)='1' THEN --3樓請求上</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; --無請求,門關(guān),DOWN</p><p> ELSIF LCDN(3)='1' OR LCNB(3)='1' THEN</p><p> DNUP<="10";STATE<=STOP;--4樓請求</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> --上升運行狀態(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樓(頂樓)有下降請求,保持狀態(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> --下降運行狀態(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;--底樓有請求,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;--停止狀態(tà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層)、當前樓層、運行方向、開關(guān)門狀態(tài)</p><p> --輸入:LCDN、LCUP、LCNB:分別為樓層外部下、上以及梯內(nèi)按鍵,每項8位,對應(yīng)8層,每位為1表示</p><p> -- 對應(yīng)按鍵被按下。其最低位顯示在LCD左邊</p><p> --R:復位;DOOR:1/
108、0:開/關(guān)門 DNUP:運行方向指示,10/01/00:下/上/停止</p><p> --提示:可將兩位BCD碼用總線合并的形式連入</p><p> --注意:每個總線形式的輸入均為LOGIC_VECTOR形式,因此,相應(yīng)電路的輸出要定義為LOGIC</p><p> --VECTOR 形式,整型形式不能使用。</p><p>
109、 --CPIN 時鐘脈沖輸入 按10MHz設(shè)計 ;復位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> --主進程:擬采用500us時鐘,即在500us后完成狀態(tài)轉(zhuǎn)換,修改LCDPT指針</p><p> --S0:初始狀態(tài),在R=1時,處
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信號。轉(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信號,轉(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> --選擇輸出進程(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:開關(guān)門顯示</p><p> --29:樓層 30: 運行方向 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對應(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對應(yīng)位
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于fpga的六層電梯控制系統(tǒng)課程設(shè)計
- 基于fpga的六層電梯控制系統(tǒng)課程設(shè)計
- eda課程設(shè)計之電梯控制
- eda課程設(shè)計之電梯控制
- eda課程設(shè)計---電梯控制的實現(xiàn)
- eda課程設(shè)計--電梯控制器設(shè)計
- eda課程設(shè)計--電梯控制器設(shè)計
- eda電梯控制器課程設(shè)計報告
- eda_電梯控制器課程設(shè)計
- 四層電梯控制課程設(shè)計
- eda課程設(shè)計--三層電梯plc控制程序設(shè)計
- eda課程設(shè)計---基于fpga的數(shù)字鐘設(shè)計
- plc電梯課程設(shè)計---基于plc控制的五層電梯系統(tǒng)
- eda課程設(shè)計---基于fpga的洗衣機控制器的設(shè)計
- plc電梯課程設(shè)計--四層電梯的plc控制
- plc控制五層電梯課程設(shè)計
- plc課程設(shè)計—四層電梯的控制
- 五層電梯的plc控制課程設(shè)計
- plc課程設(shè)計--基于plc控制的四層電梯設(shè)計
- 四層電梯plc控制課程設(shè)計
評論
0/150
提交評論