版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 《EDA技術(shù)》項目設(shè)計報告</p><p> 題目:基于FPGA的六層電梯控制器</p><p> 學(xué) 院:電子與信息工程學(xué)院</p><p> 專 業(yè):電子信息科學(xué)與技術(shù)</p><p> 姓 名: X X X </p><p> 班 級:
2、 14電信本(2)班 </p><p> 學(xué) 號: 140919022 </p><p> 指導(dǎo)老師: X X X </p><p><b> 二〇一六年十二月</b></p><p><b> 1、 緒論2</b></p><
3、;p> 1.1電梯控制器的發(fā)展現(xiàn)狀2</p><p> 1.2本次設(shè)計的主要內(nèi)容3</p><p> 1.3設(shè)計原理與思路4</p><p><b> 1.4硬件設(shè)計4</b></p><p><b> 1.5軟件設(shè)計5</b></p><p>
4、2、 FPGA 硬件結(jié)構(gòu)知識6</p><p> 2.1 FPGA 概述6</p><p> 2.2 FPGA 體系結(jié)構(gòu)6</p><p> 2.3 FPGA 常用芯片介紹7</p><p> 3、VHDL 硬件描述語言7</p><p> 3.1 VHDL 語言特點7</p>&l
5、t;p> 3.2 狀態(tài)機的VHDL 實現(xiàn)8</p><p> 4、電梯控制器的工作原理8</p><p> 5、電梯控制系統(tǒng)的設(shè)計內(nèi)容9</p><p> 5.1 時鐘分頻模塊9</p><p> 5.2 按鍵處理模塊11</p><p> 5.3 電梯運行控制模塊13</p>
6、<p> 5.4 數(shù)碼管顯示模塊19</p><p> 5.5 電梯超重控制可行性分析20</p><p> 6、 電梯控制器頂層圖形21</p><p><b> 7、 總結(jié)23</b></p><p><b> 緒論</b></p><p>
7、; 1.1電梯控制器的發(fā)展現(xiàn)狀</p><p> 國家規(guī)定超過六樓以上的樓層必須按要求安裝電梯,而且隨著超高層建筑的出現(xiàn),電梯的應(yīng)用越來越來廣泛了,與此同時,對電梯的要求也越來越高了。目前,電梯的設(shè)計、工藝不斷提高,電梯的品種也逐漸增多,電梯的材質(zhì)由黑白到彩色,樣式由直式到斜式,在操縱控制方面更是步步出新:手柄開關(guān)操縱、按鈕控制、信號控制、集選控制、人機對話等;多臺電梯還出現(xiàn)了并聯(lián)控制、智能群控;雙層轎箱電梯
8、展示出節(jié)省井道空間,提升運輸能力的優(yōu)勢,變速式自動人行道扶梯大大節(jié)省了行人的時間;不同外形的電梯則使身處其中的乘客的視線不再封閉。</p><p> 電梯的結(jié)構(gòu)分為:四大空間,八大系統(tǒng);四大空間:機房部分、井道及地坑部分、轎廂部分、層站部分;八大系統(tǒng):曳引系統(tǒng)、導(dǎo)向系統(tǒng)、轎廂、門系統(tǒng)、重量平衡系統(tǒng)、電力拖動系統(tǒng)、電氣控制系統(tǒng)、安全保護系統(tǒng);電梯的功能結(jié)構(gòu)決定電梯的八大應(yīng)用技術(shù):</p><p
9、> 1) 全數(shù)字識別乘客技術(shù)(所有乘客進入電梯前進行識別,其中包括眼球識別、指紋識別)</p><p> 2) 數(shù)字智能型安全控制技術(shù)(通過乘客識別系統(tǒng)或者IC 卡以及數(shù)碼監(jiān)控設(shè)備,拒絕外來人員進入)</p><p> 3) 第四代無機房電梯技術(shù)(主機必須與導(dǎo)軌和轎廂分離,完全沒有共振共鳴,速度可以達到2.0M/S 以上,最高可以使用在30 層以上。)</p>&
10、lt;p> 4) 雙向安全保護技術(shù)(雙向安全鉗、雙向限速器,在歐洲必須使用,中國正在被普遍使用)</p><p> 5) 快速安裝技術(shù)(改變過去的電梯安裝方法,能夠快速組裝)</p><p> 6) 節(jié)能技術(shù)(采用節(jié)能技術(shù),使電梯更節(jié)約能源)</p><p> 7) 數(shù)字監(jiān)控技術(shù)(完全采用計算機進行電梯監(jiān)控與控制)</p><p&g
11、t; 8) 無線遠程控制及報警裝置(當(dāng)電梯產(chǎn)生故障時,電梯可以通過無線裝置給手機發(fā)送故障信息,并通過手機發(fā)送信號對電梯進行簡單控制。)</p><p> 本次設(shè)計主要是控制電梯的運行模式和狀態(tài),對信號進行處理的模塊,重點在對響應(yīng)的信號進行處理,并將處理結(jié)果反饋給對應(yīng)功能的控制端口,實現(xiàn)對電梯運行的全面控制。</p><p> 1.2本次設(shè)計的主要內(nèi)容</p><p
12、> 隨著可編程邏輯電路和EDA 技術(shù)的發(fā)展,在邏輯電路設(shè)計和嵌入式系統(tǒng)設(shè)計方面,以CPLD/FPGA 為代表的可編程邏輯器件已經(jīng)逐步代替了傳統(tǒng)的標(biāo)準(zhǔn)邏輯器件;本次設(shè)計的電梯控制器所有的程序可以集成在一個FPGA 開發(fā)芯片上面,不用在用其他功能的分立邏輯元件,達到集成度高、響應(yīng)快、功耗低的特點。</p><p> 本次設(shè)計是基于 FPGA 的電梯控制器的研究,是電梯控制的核心技術(shù),通過電梯控制器可以對電梯
13、運行模式和狀態(tài)進行全面的控制,這也是次設(shè)計的研究重要性;電梯的層數(shù)為6 層,本次設(shè)計采用模塊化設(shè)計,主要分為四大模塊:時鐘分頻模塊、按鍵處理模塊、電梯運行控制模塊、數(shù)碼管顯示模塊。</p><p> 由于 FPGA 技術(shù)近些年來蓬勃發(fā)展,而且在很多領(lǐng)域已經(jīng)應(yīng)用的十分成熟,用FPGA 可以實現(xiàn)對電梯精確、實時性控制,而且用于FPGA 開發(fā)的芯片都是一些微處理器芯片,便于集成和智能化設(shè)計,而且大大縮短了開發(fā)周期。&
14、lt;/p><p> 1.3設(shè)計原理與思路</p><p> 本次設(shè)計是實現(xiàn) 6 層電梯的運行控制,當(dāng)在某一樓層按下上升或者下降請求按鈕時,控制器響應(yīng)該請求并控制電梯前往該樓層,當(dāng)?shù)竭_該樓層時電梯開門,當(dāng)進入電梯后,電梯關(guān)門,此時按下要到達的樓層按鈕,控制器響應(yīng)該請求并控制電梯前往該樓層,當(dāng)?shù)竭_前往樓層后,電梯開門,走出電梯,然后關(guān)門......,就這樣往復(fù)的實現(xiàn)電梯的控制功能。電梯運行時
15、遵循如下規(guī)則:當(dāng)電梯處于上升模式時,只響應(yīng)比電梯所在位置高的上樓信號,由下至上依次執(zhí)行;直到最后一個上樓請求執(zhí)行完畢,如有更高層有下樓請求時,則直接升到有下降請求的最高樓,然后進入下降模式,電梯處于下降模式時,則與上升相反。</p><p> 電梯的輸入信號主要包括外部輸入信號和內(nèi)部輸入信號;對于電梯外部輸入信號:每一層電梯門外都有上升請求和下降請求按鈕,其中一樓電梯門外只有上升請求按鈕,六樓電梯門外只有下降請
16、求按鈕。對于電梯內(nèi)部輸入信號主要有:6 個前往樓層的按鈕、提前關(guān)門按鈕、延時關(guān)門按鈕、電梯異常按鈕。</p><p> 電梯輸出信號也主要包括外部輸出信號和內(nèi)部輸出信號;對于電梯外部輸出信號包括上升請求按鈕和下降按鈕指示信號、電梯當(dāng)前所在樓層指示信號、電梯運行方向指示信號。電梯內(nèi)部輸出信號包括6 個前往樓層按鈕指示信號、超重等警告指示信號、電梯當(dāng)前所在樓層指示信號、電梯運行方面指示信號。</p>
17、<p><b> 1.4硬件設(shè)計</b></p><p> 本次設(shè)計主要是通過 Altera 公司生產(chǎn)的CycloneIII這一款芯片進行功能的實現(xiàn),CycloneIII 器件采用TSMC90nm 低K 絕緣材料工藝技術(shù),這種技術(shù)結(jié)合Altera 低成本的設(shè)計方式,使之能夠在更低的成本下制造出更大容量的器件。這種新的器件比第一代Cyclone 產(chǎn)品具有兩倍多的I/O 引腳,且對
18、可編程邏輯的存儲塊和其它特性進行了最優(yōu)的組合,具有許多新的增強特性。</p><p> CycloneIII 器件包含了許多新的特性,如嵌入存儲器、嵌入乘法器、PLL 和低成本的封裝,這些都為諸如視頻顯示、數(shù)字電視(DTV)、機頂盒(STB)、DVD 播放器、DSL調(diào)制解調(diào)器、家用網(wǎng)關(guān)和中低端路由器等批量應(yīng)用進行了優(yōu)化。在EDA 設(shè)計的開發(fā)板上面,支持SOPC 片上可編程,在CycloneIII 芯片旁邊外圍有
19、按鍵模塊、液晶顯示模塊、LED 指示燈等,通過QuartusⅡ平臺將硬件描述語言下載至該芯片中,然后進行程序的調(diào)試、運行并進行功能的實現(xiàn)。</p><p><b> 1.5軟件設(shè)計</b></p><p> Altera 的FPGA 設(shè)計主要采用兩種標(biāo)準(zhǔn)語言:VHDL/Verilog HDL。其中VerilogHDL 出現(xiàn)早,運用廣泛,而且比較簡單,在NIOS 項
20、目里運用較多;而VHDL 語言功能強大,語句相對要復(fù)雜一些,所以對于現(xiàn)在一些復(fù)雜的可編程項目多采用VHDL語言編寫。</p><p> VHDL(Very-High-Speed Integrated Circuit Hardware Description Language)主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口。除了含有許多具有硬件特征的語句外,VHDL 的語言形式和描述風(fēng)格與句法是十分類似于一般的計算
21、機高級語言。VHDL的程序結(jié)構(gòu)特點是將一項工程設(shè)計,或稱設(shè)計實體(可以是一個元件,一個電路模塊或一個系統(tǒng))分成外部(或稱可視部分、端口)和內(nèi)部(或稱不可視部分),涉及實體的內(nèi)部功能和算法完成部分。在對一個設(shè)計實體定義了外部界面,一旦其內(nèi)部開發(fā)完成后,其他的設(shè)計就可以直接調(diào)用這個</p><p> 實體。如下圖4-1 是VHDL 的層次模型:</p><p> 圖 4-1 具有不同構(gòu)造體
22、的VHDL 模型</p><p> VHDL 語言具有強大的語言結(jié)構(gòu),只需采用簡單明確的VHDL 語言程序就可以描述十分復(fù)雜的硬件電路。同時,它還具有多層次的電路設(shè)計描述功能:既支持自頂向下的設(shè)計方式,也支持自底向上的設(shè)計方法;既支持模塊化設(shè)計方法, 也支持層次化設(shè)計方法;既可描述系統(tǒng)級電路,也可以描述門級電路;描述方式既可以采用行為描述、寄存器傳輸描述或者結(jié)構(gòu)描述,也可以采用三者的混合描述方式。VHDL 語言
23、具有很強的移植能力,對于同一個硬件電路的VHDL 語言描述,它可以從一個模擬器移植到另一個模擬器上、從一個綜合器移植到另一個綜合器上或者從一個工作平臺移植到另一個工作平臺上去執(zhí)行。VHDL 語言采用基于庫 ( library) 的設(shè)計方法。在設(shè)計過程中,設(shè)計人員可以建立各種可再次利用的模塊,一個大規(guī)模的硬件電路的設(shè)計不可能從門級電路開始一步步地進行設(shè)計,而是一些模塊的累加,這些模塊可以預(yù)先設(shè)計或者使用以前設(shè)計中的存檔模塊,將這些模塊存放
24、在庫中,就可以在以后的設(shè)計中進行復(fù)用。</p><p> 本次設(shè)計主要是運用 VHDL 語言進行程序的編寫,采用自頂向下、模塊化設(shè)計方法。按照要求可以分為:時鐘分頻模塊、按鍵處理模塊、電梯運行控制模塊、數(shù)碼管顯示模塊;分別設(shè)計出這四個模塊之后,進行調(diào)試、運行、功能仿真和時序分析,然后將生產(chǎn)的模塊圖在原理圖編輯器中連接起來,組成完整的電梯控制器。</p><p> FPGA 硬件結(jié)構(gòu)知識
25、</p><p> 2.1 FPGA 概述</p><p> FPGA(Field Programmable Gate Arry)即現(xiàn)場可編程門陣列,它是在PAL、GAL、CPLD 等可編程器件的基礎(chǔ)上進一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點;FPGA 采用了邏輯單元陣列LCA(L
26、ogic Cell Array)這樣一3個概念,內(nèi)部包括可配置邏輯模塊CLB(Configurable Logic Block)、輸入輸出模塊IOB(Input Output Block)和內(nèi)部連線(Interconnect)三個部分。</p><p> 2.2 FPGA 體系結(jié)構(gòu)</p><p> FPGA 采用邏輯單元陣列(LCA,Logic Cell Array)新概念,內(nèi)部包括
27、可配置邏輯模塊(CLB,Configurable Logic Block)、輸入輸出模塊(IOB,Input Output Block)和內(nèi)部互連資源(IR,Interconnect Resources)三部分組成。</p><p> 1) 可配置邏輯塊(CLB,Configurable Logic Block)是FPGA 的主要組成部分,主要是由邏輯函數(shù)發(fā)生器、觸發(fā)器、數(shù)據(jù)選擇器等電路組成。</p>
28、;<p> 輸入輸出模塊(IOB,Input Output Block)提供了器件引腳和內(nèi)部邏輯陣列之間的連接,主要是由輸入觸發(fā)器、輸入緩沖器和輸出觸發(fā)、鎖存器、輸出緩沖器組成。</p><p> 可編程互連資源(IR,Interconnect Resources)可以將FPGA 內(nèi)部的CLB 和CLB 之間、CLB 和IOB 之間連接起來,構(gòu)成各種具有復(fù)雜功能的系統(tǒng),IR主要由許多金屬線段構(gòu)成
29、,這些金屬線段帶有可編程開關(guān),通過自動布線實現(xiàn)各種電路的連接。</p><p> 2.3 FPGA 常用芯片介紹</p><p> 目前世界上有很多生產(chǎn)FPGA 芯片的公司,常用的主要有:Altera、XIlinx、Lattice和Actel,其中Altera 和XIlinx 占據(jù)主流市場。</p><p> 1) Altera 的主流FPGA 分為兩大類:一
30、種是側(cè)重低成本、容量中等、性能可以滿足一般邏輯設(shè)計要求的,如Cyclone 系列;另一種是側(cè)重高性能、容量大、性能可以滿足各類高端應(yīng)用,如Stratix 系列。</p><p> 2) XIlinx 是FPGA發(fā)明者,是老牌PLD,產(chǎn)品的種類較全,主要有:XC9500/4000、Cool Runner(XPLA3)、Spartan、Virtex 等系列。</p><p> 3) Lat
31、tice 是在系統(tǒng)編程(ISP)技術(shù)的發(fā)明者,主要有:ispLSI2000/5000/8000、MACH4/5、ispMACH4000 等系列。</p><p> 4) Actel 公司是世界反熔絲技術(shù)的FPGA 領(lǐng)先供應(yīng)商,主要有兩大系列的反熔絲FPGA 產(chǎn)品SX-A 和MX 高速系列。</p><p> 3、VHDL 硬件描述語言</p><p> 3.1
32、 VHDL 語言特點</p><p> VHDL(Very-High-Speed Integrated Circuit Hardware Description Language)是一種標(biāo)準(zhǔn)的硬件描述語言,中文意思是超高速集成電路硬件描述語言;利用VHDL 進行系統(tǒng)行為級設(shè)計已經(jīng)成為FPGA 與ASIC 設(shè)計的主流,使用VHDL 不僅可以快速的描述和綜合FPGA 設(shè)計,還可以提供一下的一些性能。</p&g
33、t;<p> 1) 功能強大且很具有靈活性,VHDL 具有很強大的語言結(jié)構(gòu),可以用簡潔明確的代碼描述復(fù)雜的控制邏輯,語言很靈活,支持設(shè)計庫和可重復(fù)使用的元件生成。</p><p> 2) 不依賴于器件的設(shè)計,VHDL 允許設(shè)計者生成一個設(shè)計而不需要首先選擇一個用來實現(xiàn)設(shè)計的器件,對于同一個設(shè)計描述,可以采用多種不同的器件結(jié)構(gòu)來實現(xiàn)其功能。</p><p> 3) 具有可
34、移植性,因為VHDL 是一種標(biāo)準(zhǔn)的語言,所以它可以被不同的工具所支持,這意味著同一個VHDL 設(shè)計描述可以在不同的設(shè)計項目中采用</p><p> 4) 可以對其設(shè)計性能進行評估,設(shè)計者可以進行一個完整的設(shè)計描述,并對其進行綜合,生產(chǎn)選定的器件結(jié)構(gòu)的邏輯功能,然后評估結(jié)果,選用最適合設(shè)</p><p><b> 計需求的器件。</b></p><
35、;p> 5) 上市時間快、成本低、開發(fā)周期短,VHDL 語言的設(shè)計將大大提高數(shù)字單片化設(shè)計實現(xiàn)的速度,為生產(chǎn)者大大節(jié)約開發(fā)成本。</p><p> 3.2 狀態(tài)機的VHDL 實現(xiàn)</p><p> 有限狀態(tài)機以及其設(shè)計技術(shù)是使用數(shù)字系統(tǒng)設(shè)計中的重要組成部分,也是實現(xiàn)高效率、高可靠和高速控制邏輯系統(tǒng)的重要途徑,廣義而論,只要是涉及到觸發(fā)器的電路,都屬于狀態(tài)機,由此也可以看出其重要
36、性。用VHDL 設(shè)計的狀態(tài)機根據(jù)不同的標(biāo)準(zhǔn)可以分為不同的形式:</p><p> 1) 從狀態(tài)機的信號輸出方式上分:Mealy 型和Moore 型;</p><p> 2) 從狀態(tài)機的描述結(jié)構(gòu)上分:單進程狀態(tài)機和多進程狀態(tài)機;</p><p> 3) 從狀態(tài)機表達形式上分:符號化狀態(tài)機和確定狀態(tài)編碼狀態(tài)機;</p><p> 4) 從
37、狀態(tài)機編碼方式上分:順序編碼狀態(tài)機、一位熱編碼狀態(tài)機和其他編碼方式狀態(tài)機。</p><p> 實際設(shè)計過程中,接觸最多的分類方法就是 Mealy 型和Moore 型;從輸出時序上看,前者是異步輸出,后者是同步輸出。Mealy 型狀態(tài)機的輸出是當(dāng)前狀態(tài)和所有輸入信號的函數(shù),它的輸出是輸入變化后立即變化的,不依賴時鐘的同步。Moore 型狀態(tài)的輸出僅為當(dāng)前狀態(tài)的函數(shù),但是在輸入發(fā)生變化時還必須等到時鐘的到來,輸出才
38、會變化,由此可見,Moore 型要多等待一個時鐘周期。</p><p> 本次設(shè)計中,電梯控制模塊部分就利用Moore 型狀態(tài)機的方法實現(xiàn)對電梯運行狀態(tài)的同步控制,通過將電梯運行過程分解為一些實質(zhì)性的狀態(tài)來進行轉(zhuǎn)換,使得電梯的運行變得方便、快捷、穩(wěn)定。</p><p> 4、電梯控制器的工作原理</p><p> 本次設(shè)計是實現(xiàn) 6 層電梯的運行控制,當(dāng)在某一
39、樓層按下上升或者下降請求按鈕時,控制器響應(yīng)該請求并控制電梯前往該樓層,當(dāng)?shù)竭_該樓層時,電梯開門,當(dāng)進入電梯后,電梯關(guān)門,此時按下要到達的樓層按鈕,控制器響應(yīng)該請求并控制電梯前往該樓層,當(dāng)?shù)竭_前往樓層后,電梯開門,走出電梯,然后關(guān)門......,就這樣往復(fù)的實現(xiàn)電梯的控制功能。</p><p> 在電梯運行時遵循如下規(guī)則:當(dāng)電梯處于上升模式時,只響應(yīng)比電梯所在位置高的上樓信號,由下至上依次執(zhí)行;直到最后一個上樓請
40、求執(zhí)行完畢,如有更高層有下樓請求時,則直接升到有下降請求的最高樓,然后進入下降模式,電梯處于下降模式時,則與上升相反。</p><p> 電梯的輸入信號主要包括外部輸入信號和內(nèi)部輸入信號;對于電梯外部輸入信號主要有:每一層電梯門外都有上升請求和下降請求按鈕,其中一樓電梯門外只有上升請求按鈕,6 樓電梯門外只有下降請求按鈕。對于電梯內(nèi)部輸入信號主要有:6 個前往樓層的按鈕、提前關(guān)門按鈕、延時關(guān)門按鈕、電梯異常按鈕
41、。</p><p> 電梯輸出信號也主要包括外部輸出信號和內(nèi)部輸出信號;對于電梯外部輸出信號包括上升請求按鈕和下降按鈕指示信號、電梯當(dāng)前所在樓層指示信號、電梯運行方向指示信號。電梯內(nèi)部輸出信號包括6 個前往樓層按鈕指示信號、超重等警告指示信號、電梯當(dāng)前所在樓層指示信號、電梯運行方面指示信號。</p><p> 5、電梯控制系統(tǒng)的設(shè)計內(nèi)容</p><p> 本次
42、設(shè)計是基于 FPGA 的電梯控制器的研究,是電梯控制的核心技術(shù),通過電梯控制器可以對電梯運行模式和狀態(tài)進行全面的控制,這也是次設(shè)計的研究重要性;電梯的層數(shù)為6 層,本次設(shè)計采用模塊化設(shè)計方法,主要分為四大模塊:時鐘分頻模塊、按鍵處理模塊、電梯運行控制模塊、數(shù)碼管顯示模塊。其方框原理圖5-0 如下:</p><p> 圖 5-0 電梯控制器原理圖</p><p> 5.1 時鐘分頻模塊&
43、lt;/p><p> 時鐘分頻模塊功能是將系統(tǒng)頻率分頻為兩種不同的頻率,一個是2 分頻時鐘供電梯運行控制模塊使用,另一個8 分頻時鐘供其他模塊使用,其源代碼如下:</p><p> 時鐘分頻模塊:clkdiv.vhd</p><p> LIBRARY ieee;</p><p> USE ieee.std_logic_1164.all;&
44、lt;/p><p> use ieee.std_logic_unsigned.all; --定義所用的標(biāo)準(zhǔn)庫</p><p> ENTITY clkdiv IS --時鐘分頻寄存器(CLKDIV)</p><p><b> PORT(</b></p><p> clk : in out std_logi
45、c; --系統(tǒng)時鐘頻率</p><p> clk_2hz: out std_logic; --2分頻脈沖(作為電梯控制時鐘</p><p> clk_8hz: out std_logic --8分頻脈沖(作為按鍵處理時鐘)</p><p> );--定義輸入輸出變量</p><p> end clkdiv;</
46、p><p> ARCHITECTURE behave OF clkdiv IS</p><p> signal cnt:std_logic_vector(7 downto 0); --定義一個8 位的變量</p><p> begin process (clk) --時鐘分頻進程</p><p><b> begin<
47、;/b></p><p> if clk'event and clk='1' then --時鐘脈沖上升沿有效</p><p> cnt <= cnt + 1;</p><p> clk_8hz <= cnt(1); --變量cnt 的第1 位輸出2 分頻</p><p> clk_2hz
48、<= cnt(4); --變量cnt 的第3 位輸出8 分頻</p><p><b> end if;</b></p><p> end process;</p><p> end behave;</p><p> 源程序編寫完成后,進行調(diào)試、運行并生成模塊文件,確認沒有錯誤之后進行功能仿真、時序分析。其
49、模塊原理圖5-1 如下:</p><p> 圖 5-1 時鐘分頻模塊原理圖</p><p> 5.2 按鍵處理模塊</p><p> 按鍵處理模塊的功能是把電梯外部與內(nèi)部的按鍵信號進行處理,把處理好的按鍵信號送到電梯運行控制模塊;根據(jù)電梯外部按鍵信號轉(zhuǎn)化為電梯運行控制模塊的外部請求信號,根據(jù)電梯內(nèi)部的按鍵信號轉(zhuǎn)化為電梯運行控制模塊的電梯前往信號,根據(jù)電梯樓層信
50、號及時清除電梯外部與內(nèi)部按鍵信號。其源代碼編寫如 下:</p><p> 按鍵處理模塊:keypro.vhd</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic
51、_arith.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> entity keypro is</p><p> port (clk:in std_logic;--按鍵時鐘</p><p> reset:in std_logic;--異步置位按鍵</
52、p><p> fup:in std_logic_vector(5 downto 1); --上升請求按鍵(低電平有</p><p> fdn:in std_logic_vector(6 downto 2); --下降請求按鍵(低電平有效)</p><p> fuplight:out std_logic_vector (6 downto 1);--電
53、梯外部上升請求指示燈</p><p> fdnlight:out std_logic_vector (6 downto 1);--電梯外部下降請求指示燈</p><p> st: in std_logic_vector (6 downto 1); --電梯內(nèi)部各層請求按鍵</p><p> stlight:out std_logic_vector (
54、6 downto 1);--電梯內(nèi)部各層請求指示燈</p><p> position:in integer range 1 to 6;--電梯位置指示</p><p> clearup:in std_logic;--用于清除上升請求指示燈的信號</p><p> cleardn:in std_logic--用于清除下降請求指示燈的信號</p>
55、;<p><b> );</b></p><p> end keypro;</p><p> architecture behave of keypro is--控制按鍵信號燈進程</p><p><b> begin</b></p><p> process(reset,c
56、lk)</p><p><b> begin</b></p><p> if reset = '0' then</p><p> stlight <= "000000";</p><p> fuplight <= "000000";</p&
57、gt;<p> fdnlight <= "000000";</p><p><b> else </b></p><p> if clk'event and clk='1' then</p><p> --清除電梯當(dāng)前外部上升請求信號和電梯內(nèi)部前往該樓層信號</p&g
58、t;<p> if clearup = '1' then</p><p> stlight(position) <= '0';</p><p> fuplight(position) <= '0';</p><p><b> else</b></p
59、><p> fuplight <=(not fup) & '0';</p><p> stlight <= not st;</p><p><b> end if;</b></p><p> --清除電梯當(dāng)前外部下降請求信號和電梯內(nèi)部前往該樓層信號</p>
60、<p> if cleardn = '1' then</p><p> stlight(position) <= '0';</p><p> fdnlight(position) <= '0';</p><p><b> else</b></p>
61、;<p> fdnlight <= '0' & (not fdn);</p><p> stlight <= not st;</p><p> end if;</p><p><b> end if;</b></p><p><b&
62、gt; end if;</b></p><p> end process;</p><p> end behave;</p><p> 源程序編寫完成后,進行編譯、運行并生成模塊文件,確認沒有錯誤之后進行波形仿真、時序分析。其模塊原理圖5-2 如下:</p><p> 圖 5-2 按鍵處理模塊原理圖</p>
63、<p> 5.3 電梯運行控制模塊</p><p> 電梯運行控制模塊是此次設(shè)計的核心,電梯運行的模式和狀的態(tài)控制效果完全取決于電梯控制模塊,它的功能是在系統(tǒng)2 分頻時鐘下,根據(jù)按鍵處理模塊輸出的信號,控制電梯上升與下降運行模式和狀態(tài),當(dāng)電梯關(guān)門時輸出相應(yīng)的上升與下降清除信號,同時輸出電梯當(dāng)前所在樓層的數(shù)碼管輸出信號與電梯運行方向,本次是設(shè)計的6層電梯控制系統(tǒng),在源程序中具體要體現(xiàn)一下功能:&l
64、t;/p><p> 1) 每層電梯(除 1 樓和6 樓外,1 樓只有上升請求按鈕,6 樓只有下降請求按鈕)入口出設(shè)置有上升和下降請求按鈕,電梯內(nèi)部設(shè)有要到達樓層的請求按鈕1-6 樓。</p><p> 2) 設(shè)有電梯所處位置數(shù)碼管顯示部分,電梯運行模式的 LED 顯示部分。</p><p> 3) 電梯能記憶電梯外部所有信號請求,并按照電梯運行規(guī)則進行順序響應(yīng),每
65、個電梯請求信號保留到電梯響應(yīng)結(jié)束。</p><p> 4) 電梯運行規(guī)則:當(dāng)電梯上升時候,只響應(yīng)比電梯所在樓層高的上樓信號,由下到上依次執(zhí)行,直到最后一個上升請求信號執(zhí)行完畢,當(dāng)電梯下降時候,只響應(yīng)比電梯所在樓層低的下樓信號,由上到下依次執(zhí)行,直到最后一下下降請求信號執(zhí)行完畢。</p><p> 電梯運行控制模塊的源程序如下:</p><p> 電梯運行控制模
66、塊:elevrun.vhd</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_arith.all;</p><p> use ieee.std_logic_unsigned.all;</p>&
67、lt;p> entity elerun is</p><p> port (clk:in std_logic;--電梯時鐘</p><p> alarm:in std_logic;</p><p> reset:in std_logic;--異步置位按鍵</p><p> fuplight:in std_logic_v
68、ector (6 downto 1);--電梯外部上升請求指示燈</p><p> fdnlight:in std_logic_vector (6 downto 1);--電梯外部下降請求指示燈</p><p> stlight:in std_logic_vector (6 downto 1); --電梯內(nèi)部各層請求指示燈</p><p> position:
69、out integer range 1 to 6; --電梯位置指示</p><p> doorlight:out std_logic; --電梯門開關(guān)指示燈</p><p> clearup:out std_logic;--用于清除上升請求指示燈的信號</p><p> cleardn:out std_logic;--用于清除下降
70、請求指示燈的信號</p><p> yanshi:in std_logic;</p><p> tiqian:in std_logic;</p><p> udsig:buffer std_logic_vector(7 downto 0)--電梯升降指示</p><p><b> );</b></p
71、><p> end elerun;</p><p> architecture sixflift of elerun is</p><p> type lift_state is</p><p> (stopon1,dooropen,doorclose,doorwait1,doorwait2,doorwait3,</p>
72、<p> doorwait4,doorwait5,doorwait6,up,down,stop);</p><p> signal mylift: lift_state;</p><p> signal pos: integer range 6 downto 1;</p><p> signal udflag :std_logic;</p&g
73、t;<p> signal posreg :integer range 1 to 6;</p><p> signal one:std_logic_vector (6 downto 1);</p><p><b> begin</b></p><p> process(reset,clk)--控制電梯狀態(tài)的進程&l
74、t;/p><p><b> begin </b></p><p> if (reset = '1' or alarm = '1') then</p><p> mylift <= stopon1;</p><p> clearup <= '1';</
75、p><p> cleardn <= '1';</p><p><b> else</b></p><p> if (clk 'event and clk = '1') then</p><p> case mylift is</p><p>
76、 when stopon1 => </p><p> doorlight <= '0';</p><p> posreg <= 1;</p><p> mylift <= doorwait1;</p><p> clearup <= '0';&l
77、t;/p><p> cleardn <= '0';</p><p> udsig <= "00000010";</p><p> when doorwait1 => </p><p> if tiqian = '1' then</p><
78、p> mylift <= doorclose;</p><p> elsif yanshi = '1' then</p><p> mylift <= doorwait1;</p><p><b> else</b></p><p> mylift <= doorwait
79、2;</p><p> end if;</p><p> clearup <= '0';</p><p> cleardn <= '0';</p><p> when doorwait2 => </p><p> if tiqian =
80、'1' then</p><p> mylift <= doorclose;</p><p> elsif yanshi = '1' then</p><p> mylift <= doorwait1;</p><p><b> else</b></p>
81、<p> mylift <= doorwait3;</p><p> end if;</p><p> clearup <= '0';</p><p> cleardn <= '0';</p><p> when doorwait3 => <
82、;/p><p> if tiqian = '1' then</p><p> mylift <= doorclose;</p><p> elsif yanshi = '1' then</p><p> mylift <= doorwait1;</p><p><b
83、> else</b></p><p> mylift <= doorwait4;</p><p><b> end if;</b></p><p> clearup <= '0';</p><p> cleardn <= '0';
84、</p><p> when doorwait4 => </p><p> if tiqian = '1' then</p><p> mylift <= doorclose;</p><p> elsif yanshi = '1' then</p><p> my
85、lift <= doorwait1;</p><p><b> else</b></p><p> mylift <= doorwait5;</p><p> end if;</p><p> clearup <= '0';</p><p> c
86、leardn <= '0';</p><p> when doorwait5 => </p><p> if tiqian = '1' then</p><p> mylift <= doorclose;</p><p> elsif yanshi = '1
87、9; then</p><p> mylift <= doorwait1;</p><p><b> else</b></p><p> mylift <= doorwait6;</p><p> end if;</p><p> clearup <= '
88、;0';</p><p> cleardn <= '0';</p><p> when doorwait6 => </p><p> mylift <= doorclose; </p><p> cleardn <= (not udflag); </p
89、><p> clearup <= udflag;</p><p> when doorclose => </p><p> doorlight <= '0';</p><p> clearup <= '0';</p><p> cleardn &l
90、t;= '0';</p><p> if posreg = 6 then</p><p> if (stlight = "000000" and fuplight = "000000" and fdnlight = "000000") then</p><p>
91、mylift <= doorclose;</p><p> udsig <= "00000010";</p><p> elsif stlight > "000000" or fdnlight > "000000" or fuplight > "000000" t
92、hen</p><p> mylift <= down;</p><p> udsig<="01111010";</p><p> udflag <= '1';</p><p><b> end if;</b></p><p&
93、gt; elsif posreg = 1 then</p><p> if (stlight = "000000" and fuplight = "000000" and fdnlight = "000000") then</p><p> mylift <= doorclose;</
94、p><p> udsig <= "00000010";</p><p> elsif stlight > "000000" or fdnlight > "000000" or fuplight > "000000" then</p><p> mylift &l
95、t;= up;</p><p> udsig<="01111100";</p><p> udflag <= '0';</p><p><b> end if;</b></p><p><b> else</b></p><
96、;p> if (stlight = "000000" and fuplight = "000000" and fdnlight = "000000") then</p><p> mylift <= doorclose;</p><p> udsig <= "00000010";
97、</p><p> elsif stlight >= (one + one) or fuplight >= (one + one) or fdnlight >= (one + one) then</p><p> mylift <= up;</p><p> udsig<="01111100";<
98、;/p><p> udflag <= '0';</p><p> elsif (stlight + stlight) <= one or (fuplight + fuplight) <= one or (fdnlight + fdnlight) <= one then </p><p> mylift
99、<= down;</p><p> udsig<="01111010";</p><p> udflag <= '1';</p><p><b> else </b></p><p> mylift <= doorclose;</p>&l
100、t;p><b> end if;</b></p><p> end if;</p><p> when up =></p><p> clearup <= '0';</p><p> cleardn <= '0';&l
101、t;/p><p> if posreg < 6 and (stlight(posreg) = '1' or fuplight(posreg) = '1' or (stlight = "000000" and fdnlight(posreg) = '1'))</p><p> then mylift <= st
102、op;</p><p> if (stlight = "000000" and fdnlight(posreg) = '1' and fuplight = "000000") then</p><p> udflag <= '1';</p><p> end if;&l
103、t;/p><p> elsif posreg = 6 and (stlight(posreg) = '1' or fuplight(posreg) = '1' or ( fuplight = "000000" and fdnlight(posreg) = '1'))</p><p> then mylift <
104、;= stop; </p><p> elsif posreg = 6 and ( fdnlight > "000000" or fuplight > "000000") then</p><p> mylift <= stop;</p><p><b> els
105、e</b></p><p> mylift <= up;</p><p> udsig<="01111100";</p><p> udflag <= '0'; </p><p> if posreg<6 then</p>&l
106、t;p> posreg <= (posreg+1);</p><p> end if;</p><p><b> end if;</b></p><p> when down =></p><p> clearup <= '0';</p>&l
107、t;p> cleardn <= '0'; </p><p> if posreg > 1 and (stlight(posreg) = '1' or fdnlight(posreg) = '1' or ( stlight = "000000" and fuplight(posreg) = '1' )
108、)</p><p> then mylift <= stop;</p><p> if (stlight = "000000" and fuplight(posreg) = '1' and fdnlight = "000000") then</p><p> udflag <= '0&
109、#39;;</p><p><b> end if;</b></p><p> elsif posreg = 1 and (stlight(posreg) = '1' or fdnlight(posreg) = '1' or ( fdnlight = "000000" and fuplight(posreg)
110、= '1'))</p><p> then mylift <= stop;</p><p> elsif posreg = 1 and ( fdnlight > "000000" or fuplight > "000000") then</p><p> mylift <=
111、 stop;</p><p><b> else </b></p><p> mylift <= down;</p><p> udsig<="01111010";</p><p> udflag <= '1';</p><p&g
112、t; if posreg>1 then</p><p> posreg <= (posreg-1);</p><p> end if;</p><p><b> end if;</b></p><p> when stop => </p><p> myl
113、ift <= dooropen;</p><p> clearup <= '0';</p><p> cleardn <= '0';</p><p> when dooropen => </p><p> doorlight <= '1';
114、 </p><p> clearup <= '0';</p><p> cleardn <= '0';</p><p> mylift <= doorwait1;</p><p> when others =></p><p> my
115、lift <= doorwait1;</p><p> clearup <= '0';</p><p> cleardn <= '0';</p><p><b> end case;</b></p><p><b> end if;<
116、;/b></p><p><b> end if;</b></p><p> end process ;</p><p> position <= posreg;</p><p> process(clk,posreg)</p><p><b> begin<
117、;/b></p><p> if clk 'event and clk = '1' then</p><p> case posreg is</p><p> when 1 => one <= "000001";</p><p> when 2 => one <
118、= "000010";</p><p> when 3 => one <= "000100"; </p><p> when 4 => one <= "001000"; </p><p> when 5 => one <= "010000"; &
119、lt;/p><p> when 6 => one <= "100000"; </p><p><b> end case;</b></p><p><b> end if;</b></p><p> end process ;</p><p&
120、gt;<b> end ;</b></p><p> 電梯控制運行模塊源程序編寫完成后,進行編譯、運行并生成模塊文件,確認沒有錯誤之后進行波形仿真、時序分析。其模塊原理圖5-3 如下:</p><p> 圖 5-3 電梯運行控制模塊原理圖</p><p> 5.4 數(shù)碼管顯示模塊</p><p> 數(shù)碼管顯
121、示模塊的功能主要是把樓層信號轉(zhuǎn)化為數(shù)字信號,通過數(shù)碼管進行顯示,顯示電梯運行到的樓層指示,本次設(shè)計用的是共陰極數(shù)碼管,其源程序如下:</p><p> 數(shù)碼管顯示模塊:floorled.vhd</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;--定義所用的標(biāo)準(zhǔn)庫</p>&l
122、t;p> entity floorled is</p><p> port(clk : in std_logic;--系統(tǒng)時鐘頻率</p><p> position :in std_logic_vector(2 downto 0);--電梯位置變量</p><p> posled : out std_logic_vector(7 downto 0)
123、--電梯樓層顯示變量</p><p> ); --定義輸入輸出變量 </p><p> end floorled;</p><p> architecture behave of floorled is</p><p><b> begin&l
124、t;/b></p><p> process(clk)--時鐘分頻進程</p><p><b> begin</b></p><p> if clk 'event and clk = '1' then--時鐘脈沖上升沿有效</p><p> case position is</
125、p><p> when "001" => posled <= "01100000";--顯示數(shù)字1</p><p> when "010" => posled <= "11011010";--顯示數(shù)字2</p><p> when "011"
126、 => posled <= "11110010";--顯示數(shù)字3</p><p> when "100" => posled <= "01100110";--顯示數(shù)字4</p><p> when "101" => posled <= "10110110&quo
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于fpga10層電梯控制器設(shè)計
- 基于fpga的電梯控制器設(shè)計
- 基于fpga六層電梯控制系統(tǒng)
- 基于fpga的電梯控制器的設(shè)計
- 基于FPGA六層電梯控制系統(tǒng).doc
- 基于fpga電梯控制器設(shè)計畢業(yè)論文
- 畢業(yè)論文-基于fpga的電梯控制器設(shè)計
- 基于FPGA六層電梯控制系統(tǒng)初稿.doc
- 基于fpga電梯控制器的設(shè)計畢業(yè)論文
- 基于fpga的六層電梯控制系統(tǒng)課程設(shè)計
- 基于fpga的六層電梯控制系統(tǒng)課程設(shè)計
- 基于FPGA六層電梯控制系統(tǒng)二稿.doc
- 畢業(yè)設(shè)計----基于vhdl語言的3層電梯控制器
- 基于單片機三層電梯控制器的設(shè)計
- 基于單片機三層電梯控制器的設(shè)計
- 基于fpga的uart控制器設(shè)計
- 基于fpga串口控制器設(shè)計
- 畢業(yè)論文-基于fpga六層電梯控制系統(tǒng)【精校排版】
- 九層電梯控制器課程設(shè)計報告
- 基于fpga的串口控制器設(shè)計
評論
0/150
提交評論