- ? 系統(tǒng)概述
- 設(shè)計要求
根據(jù)所學(xué)的知識以及技能,利用MCS-51系列單片機為中心設(shè)計一個簡易電梯系統(tǒng),實現(xiàn)四層電梯的無故障運行,并用數(shù)碼管和指示燈顯示對應(yīng)樓層和運行方向等基本信息。設(shè)計所用的單片機為STC89C52為主要的控制器,自帶AD轉(zhuǎn)換,當(dāng)一邊有按鍵按下時,另一邊以數(shù)字的形式在數(shù)碼管上顯示出相應(yīng)的數(shù)字信息。
總的設(shè)計框圖如圖1-1所示,由單片機模塊、矩形按鍵模塊以及系統(tǒng)信息模塊三個大模塊構(gòu)成,它們的作用分別為:
單片機模塊:數(shù)據(jù)輸入輸出的處理。
矩形按鍵模塊:通過按鍵,將相關(guān)信息送入單片機處理。
系統(tǒng)信息模塊:用若干個發(fā)光二極管和數(shù)碼管作為此模塊的顯示電梯的運行狀態(tài),如上行或下行、電梯目前到達(dá)的樓層等信息。
電機控制模塊:電機運行的方向以及電機的速度控制。
其中單片機模塊里面包括了電源模塊、復(fù)位電路模塊、時鐘電路模塊,當(dāng)通過按鍵模塊按下需要到達(dá)的樓層,經(jīng)過單片機內(nèi)部轉(zhuǎn)換后在數(shù)碼管上顯示出來。同時對按鍵進(jìn)行掃描,定位被按下的按鍵,確定目標(biāo)樓層并檢測途徑樓層是否有被按下,上行下行通過燈的亮滅顯示出來,驅(qū)動上下行電機進(jìn)行正轉(zhuǎn)或反轉(zhuǎn),檢測到達(dá)指定樓層后上下行電機停止運轉(zhuǎn),目標(biāo)樓層的指示燈亮,同時開關(guān)門電機進(jìn)行正轉(zhuǎn)實現(xiàn)開門,停留一段時間后電機反轉(zhuǎn)實現(xiàn)關(guān)門。
圖1-1總體設(shè)計框圖
- ? 系統(tǒng)設(shè)計的整體方案
- 主控芯片的方案論證
方案一:51系列單片機
采用目前通用的單片機系列STC89C52芯片為核心控制器,其管腳圖如圖2-1所示,此單片機功能完善具有字節(jié)處理和位處理,軟件編程靈活,容易顯示各種控制功能,價格比較便宜,在市場上比較多見。
方案二:PIC系列單片機
采用PIC系列為核心控制器。與51系列單片機相比,其是一種精簡指令型的單片機,指令數(shù)量較少,在傳送和邏輯運算上都要比51系列單片機比較復(fù)雜,編寫程序比較麻煩,抗干擾性不是很強,在市面上的使用不是很廣泛。
綜上所述,結(jié)合自己目前所學(xué)和比較熟悉的,51系列單片機是自己在校期間所運用最多的,所以對此單片機系統(tǒng)有較深刻的了解。而且要設(shè)計出一個相對簡單且容易顯示的系統(tǒng),51系列單片機比PIC系列單片機更容易實現(xiàn),因此設(shè)計使用方案一。
圖2-1 STC89C52管腳圖
-
- 顯示模塊的方案論證
方案一:LED數(shù)碼管
采用LED數(shù)碼管作為顯示器件,其中數(shù)碼管又分為共陰數(shù)碼管和共陽數(shù)碼管(數(shù)碼管原理圖如圖2-2 所示)。使用數(shù)碼管所構(gòu)造的電路簡單,程序設(shè)計也相對簡單,關(guān)鍵是數(shù)碼管價格低廉,設(shè)計成本少 ,顯示亮度高。
方案二:LCD液晶顯示器
采用LCD液晶為顯示器件。雖然使用液晶顯示屏可以顯示很多內(nèi)容,其構(gòu)造的電路也簡單,程序設(shè)計也簡單,但是相比于數(shù)碼管,其顯示要求要高,對距離也有一定的要求,顯示亮度低,成本上也相差很多。
綜上所述,再結(jié)合上制作的電梯系統(tǒng)的設(shè)計顯示方面要求較低,只需要顯示運行時相對應(yīng)的樓層即可,無需其他顯示。所以在成本上使用數(shù)碼管顯示比較經(jīng)濟(jì)實在,因此設(shè)計選用方案一。
圖2-2 數(shù)碼管管腳圖
-
- 電動機的方案論證
方案一:直流電機
采用直流電機為動力元件。其中直流電機又分為直流有刷電機和直流無刷電機,直流無刷電機成本高但壽命長噪聲低;直流有刷電機成本低,使用簡單,但生命短噪聲大。直流電機的工作原理是只要有合適的電壓就可以轉(zhuǎn)動,所以在精度控制上不是很好。
方案二:步進(jìn)電機
采用步進(jìn)電機為動力元件。目前步進(jìn)電機作為動力元件已經(jīng)很廣泛,其中42步進(jìn)電機更是其行業(yè)最常用的步進(jìn)電機尺寸。步進(jìn)電機的工作原理大概是將脈沖信號轉(zhuǎn)化為角位移的元件,當(dāng)步進(jìn)電機接收到一個脈沖信號時,它就可以向預(yù)設(shè)的方向轉(zhuǎn)動一個固定的角度,從而達(dá)到精確定位的目的。同樣可以通過控制脈沖頻率來控制電機的轉(zhuǎn)動速度,達(dá)到調(diào)速的目的。其不受太多外力的影響,控制簡單。相比與直流電機的工作原理。步進(jìn)電機是按照節(jié)拍工作的,可以調(diào)節(jié)很小的角度,在精確度上比較好把控。
綜上所述,根據(jù)系統(tǒng)對運行的狀態(tài)和精度有一定的要求,所以設(shè)計的動力元件要具有很好的把控力,因此設(shè)計使用方案二。
-
- 電機驅(qū)動模塊的方案論證
方案一:L298N驅(qū)動
采用L298N電機驅(qū)動為控制器。其內(nèi)置兩個芯片,集成性較高,抗干擾能力強,轉(zhuǎn)速可調(diào)。不過L298N構(gòu)成的電路比較復(fù)雜,硬件電路連接較為麻煩。關(guān)鍵其成本還比較高。
方案二:A4988驅(qū)動
采用A4988電機驅(qū)動為控制器。A4988是一款帶轉(zhuǎn)換器和過流保護(hù)的DMOS微步進(jìn)電機驅(qū)動器,它用于操作雙極步進(jìn)電機,在步進(jìn)模式,輸出驅(qū)動的能力35V和+2A 。其控制簡單,只需要控制STEP與DIR兩個端口; 具有精度調(diào)整,擁有五種不同的步進(jìn)模式:全、半、1/4、1/8、1/16; 可調(diào)電位器可以調(diào)節(jié)輸出電流,從而獲得更高的步進(jìn)率。其是一款成本低,體積小,容易設(shè)計控制電路。
綜上所述,由于電機選用42步進(jìn)電機,而且系統(tǒng)對于控制精度比較高,所以對比兩個方案的性價比之下,選用方案二。
- ? 系統(tǒng)硬件電路設(shè)計
- 單片機最小系統(tǒng)的電路設(shè)計
- STC89C52芯片模塊電路設(shè)計
- 單片機最小系統(tǒng)的電路設(shè)計
根據(jù)方案的選擇,STC89C52作為所設(shè)計系統(tǒng)的主控芯片,將其端口恰當(dāng)使用,以實現(xiàn)系統(tǒng)各個的功能。其端口分別可以控制數(shù)碼管的顯示,和電機驅(qū)動模塊控制(脈沖信號)以及各個樓層的按鍵功能,設(shè)計使用單片機的P0口與數(shù)碼管相連接,使用P1、P2口與樓層的按鍵和顯示燈相連,使用P3^4、P3^5與電機驅(qū)動模塊相接,電路設(shè)計簡單,如圖3-1所示。
圖3-1 STC89C52電路設(shè)計圖
-
-
- 系統(tǒng)時鐘電路設(shè)計
-
時鐘電路是產(chǎn)生像時鐘一樣準(zhǔn)確運動的振蕩電路。任何工作都按時間順序。用于產(chǎn)生這個時間的電路就是時鐘電路。時鐘電路一般由晶體振蕩器、晶震控制芯片和電容組成。時鐘電路應(yīng)用十分廣泛。單片機運行需要時鐘支持就像計算機的CPU一樣,如果沒有時鐘電路來產(chǎn)生時鐘驅(qū)動單片機,那單片機就不能執(zhí)行程序。在MCS-51單片機片內(nèi)有一個高增益的反相放大器,反相放大器的輸入端為XTAL1,輸出端為XTAL2,由該放大器構(gòu)成的振蕩電路和時鐘電路一起構(gòu)成了單片機的時鐘方式。如圖3-2所示。
圖3-2 時鐘電路設(shè)計圖
-
-
- 復(fù)位電路設(shè)計
-
對于一個完整的電子設(shè)計,其中一個關(guān)鍵就是系統(tǒng)復(fù)位電路的設(shè)計。其可以實現(xiàn)系統(tǒng)的還原和初始化功能。系統(tǒng)所設(shè)計的復(fù)位電路如圖3-3所示,由R1、C1組成復(fù)位電路,剛上電時,C1是電壓為0,電源開始對C1電容充電,此時的RST引腳處呈現(xiàn)高電平,高電平時間為10K*10UF=0.1S。也就是說在電腦啟動的0.1S內(nèi),單片機系統(tǒng)自動復(fù)位(RST引腳接收到的高電平信號時間為0.1S左右)。在單片機啟動0.1S后,電容C1兩端的電壓持續(xù)充電為5V,這是時候10K電阻兩端的電壓接近與0,當(dāng)按下S1,電源電壓接通到R1, 由于R1阻值比較大,此時電容開始迅速的放電,這個時候 R1處的電壓再升高,所以RST引腳處又接受到高電平,即單片機系統(tǒng)自動復(fù)位。
圖3-3 復(fù)位電路設(shè)計
-
-
- 電源電路設(shè)計
-
對于電子系統(tǒng)來講,其最重要的是電源設(shè)計。沒有電源提供電壓,系統(tǒng)將不會運行。所設(shè)計的電梯系統(tǒng)由于需要雙電源(單片機的供電電源5V和步進(jìn)電機驅(qū)動的供電電源12V),因此設(shè)計一個降壓模塊,當(dāng)輸入電源為直流12V時,經(jīng)過其模塊內(nèi)部的處理可以得到一個輸出穩(wěn)定的5V電壓,這樣就可以為單片機供電,其中的12V電壓是為了給步進(jìn)電機驅(qū)動提供電源的。然后在輸出端設(shè)計一個由RC并聯(lián)的濾波電路,RC并聯(lián)電路既能通過直流信號又能通過交流信號,當(dāng)接上電源時D1就會亮起,有個提示的功能。這樣設(shè)計電路簡單,應(yīng)用性比較好。電路如圖3-4所示。
圖3-4 電源模塊設(shè)計
-
- 數(shù)碼管顯示接口電路設(shè)計
根據(jù)方案選擇設(shè)計,系統(tǒng)采用一位共陽數(shù)碼管作為顯示模塊。共陽數(shù)碼管是指將所有發(fā)光二極管的陽極接到一起形成公共陽極(COM)的數(shù)碼管,共陽數(shù)碼管在應(yīng)用時需要公共極的COM接到地線VCC上,當(dāng)某一字段發(fā)光二極管的陰極為低電平時,相應(yīng)字段就點亮,當(dāng)某一字段的陰極為高電平時,相應(yīng)字段就不亮。
設(shè)計的顯示接口是用51單片機的P0口,如圖3-5所示。在接通電源后,P0口處的輸出電流很低,輸出為低電平。因為P0口的片內(nèi)沒有上拉電阻,而P0為I/0口工作狀態(tài)時,上方的FET被關(guān)斷,從而輸出腳浮空,即使驅(qū)動能力再怎么強,此時的輸出都相當(dāng)于沒有接上電源。對于一位共陰極數(shù)碼管,需要高電平才能驅(qū)動。所以在P0口處設(shè)計一個排阻(用作上拉電阻)是用來解決總線驅(qū)動能力不足時提供電流的,由電源通過這個上拉電阻給數(shù)碼管提供電流。這就解決了P0口處輸出的問題,使之一位共陰數(shù)碼管可以點亮相應(yīng)的字段。
圖3-5 數(shù)碼管電路設(shè)計圖
-
- 按鍵控制電路設(shè)計
根據(jù)系統(tǒng)的要求,設(shè)計出了如圖3-6所示的樓層按鍵控制電路圖。大致就是分為兩種功能:電梯外部按鍵功能和內(nèi)部按鍵功能,利用51單片的P1^0~P1^5和P2^0~P2^4來控制實現(xiàn)電梯外部和內(nèi)部按鍵的功能,其電梯外部按鍵分別為S4、S6、S8、S10、S11、S12(它們分別可以實現(xiàn)從電梯外部一樓到四樓上下行的功能),內(nèi)部對應(yīng)樓層的按鍵為S2、S3、S5、S7(它們分別可以實現(xiàn)從電梯內(nèi)部按下到達(dá)對應(yīng)樓層的功能)最后設(shè)計一個緊急按鍵控制功能(其可以實現(xiàn)緊急報警功能)。電路設(shè)計簡單,編寫程序不用太復(fù)雜,功能容易設(shè)計實現(xiàn)。
圖3-6 樓層按鍵電路設(shè)計
-
- 顯示燈電路設(shè)計
由系統(tǒng)要求所設(shè)計出的顯示燈電路,是利用51單片機的P2^5~P2^7分別與上下行顯示燈所連接的,可以編寫程序控制著燈的顯示和熄滅。當(dāng)按下上行的按鍵時,上行燈與之對應(yīng)(亮起),按下下行按鍵時,下行燈與之對應(yīng)(亮起),當(dāng)電梯系統(tǒng)出現(xiàn)故障時,則緊急燈亮起。電路設(shè)計簡單,容易設(shè)計控制程序,如圖3-7所示。
圖3-7 電梯顯示燈設(shè)計電路圖
-
- 步進(jìn)電機驅(qū)動模塊電路設(shè)計
系統(tǒng)設(shè)計采用A4988模塊作為電機驅(qū)動器,其是一款完整的微步電機驅(qū)動器,內(nèi)置轉(zhuǎn)換器,操作簡單。設(shè)計的電路圖如圖3-8所示。該模塊需要到雙電源才能工作,所以設(shè)計VMOT接12V電源、VDD接一個5V電源。其中為了使模塊能夠穩(wěn)定輸出則將ENA口接地,接低電平則模塊開始工作,接高電平則模塊關(guān)機,而系統(tǒng)設(shè)計使用全步進(jìn)模式(步進(jìn)模式如表3-1所示),所以需要將MS1、MS2和MS3全接地。STEP是脈沖輸入口,將它與單片機的控制口P3^4連接,往這個腳輸入一個脈沖,則電機轉(zhuǎn)動一步,也就是往這個腳持續(xù)輸入脈沖,則電機持續(xù)轉(zhuǎn)動。DIR是方向控制端,將它與單片機P3^5相連,其工作模式為低電平正轉(zhuǎn),高電平反轉(zhuǎn)。1A、1B、2A、2B端與電機接口對應(yīng)連接,電機才能正常工作。
表3-1 步進(jìn)模式設(shè)置
MS1 | MS2 | MS3 | 微步分辨率 |
L | L | L | 全步 |
H | L | L | 半步 |
L | H | L | 四分之一步 |
H | H | L | 八分之一步 |
H | H | H | 十六分之一步 |
圖3-8 步進(jìn)電機驅(qū)動電路設(shè)計圖
-
- 電機電路設(shè)計
依據(jù)整體設(shè)計方案,選用42步進(jìn)電機作為動力元件,A4988作為驅(qū)動42電機的驅(qū)動器。42電機是一款二相式電機,其驅(qū)動方式是將四根導(dǎo)線分別與驅(qū)動器的1A、1B、2A和2B相連接。這樣電機才能正常工作。電路設(shè)計如圖3-9所示。
圖3-9 電機電路設(shè)計圖
- ? 系統(tǒng)軟件設(shè)計
- 控制數(shù)碼管顯示的軟件設(shè)計
首先將數(shù)碼管的各個段碼設(shè)置好,設(shè)計一個顯示的子程序,其中的顯示是按照四個二進(jìn)制的排序來顯示相應(yīng)的數(shù)字,如輸入口為0010時數(shù)碼管上顯示的是對應(yīng)的數(shù)字為2。一開始將系統(tǒng)初始化定義,設(shè)置當(dāng)前樓層為1層,樓層之差為0。當(dāng)按下某層上行按鈕時,電機開始正轉(zhuǎn),上行顯示燈也相應(yīng)的亮起,經(jīng)過一段時間電機停止,電梯到達(dá)某一樓層,則這時候數(shù)碼管就會顯示按下對應(yīng)樓層的層數(shù)。如果在電梯到達(dá)這一層之后,按下某層下行的按鈕時。電機開始反轉(zhuǎn),經(jīng)過一段時間后電機停止,則這時候電梯就會顯示當(dāng)前到達(dá)的樓層層數(shù)。如果在第一層按下第一層的按鈕時,則會觸發(fā)限位開關(guān),這時候系統(tǒng)將會回歸初始化狀態(tài),電機不會工作,數(shù)碼管則顯示當(dāng)前為1層。直到按下上幾層的按鈕時電機點擊才開始工作,此時數(shù)碼管才會顯示相對應(yīng)的樓層的數(shù)字。流程圖如圖4-1所示。
圖4-1 控制數(shù)碼管顯示流程圖
-
- 控制步進(jìn)電機驅(qū)動模塊的軟件設(shè)計
首先設(shè)計電機驅(qū)動模塊的DIR口為1(DIR=0上行,DIR=1下行)讓電機反轉(zhuǎn),而STEP口處則提供有一定延遲的脈沖信號,直到觸發(fā)限位開關(guān)時,電機驅(qū)動停止工作,這時候電梯會顯示在第一層,系統(tǒng)回歸初始化狀態(tài)。當(dāng)電梯停止運轉(zhuǎn)后若有呼叫請求(按鍵按下),則對呼叫樓層與當(dāng)前所在樓層進(jìn)行比較,若呼叫樓層大于當(dāng)前所在樓層則會上行,若呼叫樓層小于當(dāng)前所在樓層則會下行。單片機會掃描各個樓層呼叫信號,這樣才可以確定電梯響應(yīng)上升、下降。當(dāng)按下上行按鍵時(呼叫請求),這時候電機的DIR為0、STEP為1,為上行呼叫請求。電機開始正轉(zhuǎn),相應(yīng)的上行燈也會亮起,直到準(zhǔn)確的到達(dá)某一樓層時(平層之差),STEP處變?yōu)?(STEP=0沒有脈沖信號,STEP=1有脈沖信號)電機驅(qū)動才會停止工作。同樣按下下行按鍵時,DIR則為1、STEP為1,為下行呼叫請求。電機開始反轉(zhuǎn),相應(yīng)的顯示模塊也會亮起,也是只有準(zhǔn)確到達(dá)平層之后,STEP出變?yōu)?時,電機驅(qū)動停止工作。流程圖如圖4-2所示。
-
- 系統(tǒng)實驗
- 測試儀器
- 系統(tǒng)實驗
-
-
- 測試結(jié)果
-
首先接上電源,若電路板能夠正常使用(電源燈會亮起等提示)這樣就可以確認(rèn)其能夠被正常的使用,其次用萬用表檢測線路,如果沒有出現(xiàn)導(dǎo)線接通不良或是虛焊的問題,萬用表會顯示相應(yīng)的電壓值,則出現(xiàn)線路沒有接通就不會對應(yīng)的電壓值。將萬用表的黑表筆放在地線上,紅表筆放到單片機的+5V上,記下萬用表上的數(shù)值為4.97V。同樣在黑表筆放在地線上,紅表筆放到電機驅(qū)動的+12V上,記下萬用表上的數(shù)值為11.98V。數(shù)據(jù)如表5-1所示。然后就是電梯系統(tǒng)各個樓層的按鍵測試,將測試的結(jié)果分別寫出。電梯運行狀態(tài)的具體情況如表5-2所示(其中兩個數(shù)字分別代表的是:第一個數(shù)字為對應(yīng)樓層;第二個數(shù)字為上下行1為上行2為下行)。
表5-1 測試數(shù)據(jù)值
平層差 | +5V | +12V | |
預(yù)估值 | 1cm | 5V | 12V |
實際值 | 2mm | 5.04V | 12.01V |
表5-2 電梯運行狀態(tài)表
???? 電梯所在 樓層 電梯內(nèi) 外呼叫按鈕 |
一樓 | 二樓 | 三樓 | 四樓 |
S11 | 電梯停止 | 電梯下行 | 電梯下行 | 電梯下行 |
S21 | 電梯上行 | 電梯停止 | 電梯下行 | 電梯下行 |
S22 | 電梯上行 | 電梯停止 | 電梯下行 | 電梯下行 |
S31 | 電梯上行 | 電梯上行 | 電梯停止 | 電梯下行 |
S32 | 電梯上行 | 電梯上行 | 電梯停止 | 電梯下行 |
S42 | 電梯上行 | 電梯上行 | 電梯上行 | 電梯停止 |
S1 | 電梯停止 | 電梯下行 | 電梯下行 | 電梯下行 |
S2 | 電梯上行 | 電梯停止 | 電梯下行 | 電梯下行 |
S3 | 電梯上行 | 電梯上行 | 電梯停止 | 電梯下行 |
S4 | 電梯上行 | 電梯上行 | 電梯上行 | 電梯停止 |
部分程序:
#include<reg52.h>
#define uint unsigned int? //無符號整形
#define uchar unsigned char//無符號字符形
uint lc = 1;????????? //當(dāng)前樓層
uint lcsx = 4; ???? //樓層上限
int lcc = 0;????????? //樓層差
int lcc2 = 0;??????? //樓層差2
uint a1=0;
uint a2=0;
uint a3=0;
uint a4=0;
uint flag=0;
uint x = 0,y = 0,z = 0;
sbit btf11 = P1^0;
sbit btf21 = P1^1;
sbit btf22 = P1^2;
sbit btf31 = P1^3;
sbit btf32 = P1^4;
sbit btf42 = P1^5;
sbit btd0 = P2^4;
sbit btd1 = P2^0;
sbit btd2 = P2^1;
sbit btd3 = P2^2;
sbit btd4 = P2^3;
sbit led1 = P2^5;
sbit led2 = P2^6;
sbit led3 = P2^7;
sbit seg = P3^2;
sbit sw = P3^3;
sbit step? = P3^4;
sbit dir? = P3^5;
資料內(nèi)容包括:
需要完整的資料可在我的資源里下載,也可以加入我的紛傳圈子,里面有資源壓縮包的百度網(wǎng)盤下載地址及提取碼。
紛傳點擊用微信打開即可,過程有點繁瑣請見諒