摘要 1設(shè)計任務(wù) 2方案 2.1 設(shè)計思路與方案 2.2總體設(shè)計框圖 3系統(tǒng)實現(xiàn)的原理說明 3.1 步進(jìn)電機(jī)控制工作原理 3.1.1步進(jìn)電機(jī)的工作原理 3.1.2 步進(jìn)電機(jī)的啟?刂 3.1.3 步進(jìn)電機(jī)的轉(zhuǎn)向控制 3.2步數(shù)顯示模塊原理 4硬件設(shè)計 4.1系統(tǒng)總原理圖 4.2各部分硬件原理圖設(shè)計 4.2.1 單片機(jī)控制模塊 4.2.2按鍵選擇工作狀態(tài)模塊 4.2.3步進(jìn)電機(jī)工作模塊 4.2.4工作狀態(tài)顯示模塊 4.2.5 4位數(shù)碼管顯示步數(shù)模塊 5軟件設(shè)計 5.1系統(tǒng)總體設(shè)計 5.2步進(jìn)電機(jī)工作模塊 5.2.1步進(jìn)電機(jī)的工作方式說明 5.2.2設(shè)計說明及流程圖 5.3數(shù)碼管步數(shù)顯示模塊 6仿真調(diào)試記錄 7心得體會 參考文獻(xiàn) 附錄:程序清單
摘要本設(shè)計詳細(xì)介紹了基于單片機(jī)的三相步進(jìn)電機(jī)控制系統(tǒng)。步進(jìn)電機(jī)通過輸入脈沖信號進(jìn)行控制,即電機(jī)的總轉(zhuǎn)動角度由輸入脈沖總數(shù)決定,因此,單片機(jī)通過向步進(jìn)電機(jī)發(fā)送控制信號就能實現(xiàn)對步進(jìn)電機(jī)的控制。 單片機(jī)實現(xiàn)的步進(jìn)電機(jī)控制系統(tǒng)具有成本低、使用靈活的特點(diǎn),該系統(tǒng)采用80C51單片機(jī)作為主控芯片,來完成對步進(jìn)電機(jī)轉(zhuǎn)動及LED顯示的控制。 本設(shè)計主要由單片機(jī)80C51,3相步進(jìn)電機(jī),7段數(shù)碼管,及一些其他相關(guān)元件設(shè)計而成,分為按鍵選擇工作狀態(tài)模塊、步進(jìn)電機(jī)工作模塊、LED二極管顯示工作狀態(tài)模塊以及4位數(shù)碼管顯示步數(shù)模塊?梢酝ㄟ^開關(guān)來控制系統(tǒng)的啟/停工作,當(dāng)系統(tǒng)運(yùn)轉(zhuǎn)時,用開關(guān)來控制方向,并使相應(yīng)的指示燈亮起,同樣由開關(guān)來選擇工作模式。運(yùn)轉(zhuǎn)時,用4位7段數(shù)碼管來輸出步數(shù)。最后根據(jù)思路所設(shè)計出來的硬件圖設(shè)計相適應(yīng)的軟件。 電路結(jié)構(gòu)簡單,設(shè)計思路清晰,同時利用Proteus進(jìn)行聯(lián)調(diào)仿真,結(jié)果比較直觀。仿真結(jié)果收到了預(yù)期的效果。
1設(shè)計任務(wù)(一)設(shè)計三相反應(yīng)式步進(jìn)電動機(jī)脈沖分配器,接收脈沖輸入,要求三相單三拍、三相六拍運(yùn)行方式控制(電平),正反轉(zhuǎn)控制(電平)。 系統(tǒng)具有如下功能:用K0-K2做為通電方式選擇鍵,K0為三相單三拍,K1為三相雙三拍,K2為三相六拍;K3為啟動/停止控制、K4方向控制;用4位LED數(shù)碼管顯示工作步數(shù)。用3個發(fā)光二極管顯示狀態(tài):正轉(zhuǎn)時紅燈亮,反轉(zhuǎn)時黃燈亮,不轉(zhuǎn)時綠燈亮;
(二)任務(wù)分析 步進(jìn)電動機(jī)是一種用電脈沖信號進(jìn)行控制,并將電脈沖信號轉(zhuǎn)換成相應(yīng)的角位移的執(zhí)行器,每一個脈沖信號可使步進(jìn)電機(jī)旋轉(zhuǎn)一個固定的角度,這個角度稱為步距角。由于受脈沖的控制,其轉(zhuǎn)子的角位移量和速度嚴(yán)格地與輸入脈沖的數(shù)量和脈沖頻率成正比。 
三相反應(yīng)式步進(jìn)電動機(jī)結(jié)構(gòu)如圖1.8所示。電機(jī)定子有六個磁極,相對的磁極為同一繞組勵磁,整個電機(jī)有三個繞組,按Y形接法接線。轉(zhuǎn)自為軟磁材料,無繞組。若繞組通電順序為Ⅰ-Ⅱ-Ⅲ-Ⅰ-Ⅱ-Ⅲ-…,則電動機(jī)逆時針轉(zhuǎn)動;若繞組通電順序為Ⅰ-Ⅲ-Ⅱ-Ⅰ-Ⅲ-Ⅱ-…,則電動機(jī)順時針轉(zhuǎn)動。此種控制方式稱為三相單三拍方式。 若通電順序為Ⅰ-ⅠⅡ-Ⅱ-ⅡⅢ-Ⅲ-ⅢⅠ-…(逆時針),稱為三相六拍方式。
步進(jìn)電機(jī)控制裝置發(fā)出運(yùn)行方式、旋轉(zhuǎn)方向和旋轉(zhuǎn)角度(步數(shù)),前兩項一般由電平表示,后一項用脈沖個數(shù)表示。脈沖分配器根據(jù)步進(jìn)電機(jī)控制裝置發(fā)來的命令(電平信號和脈沖)使步進(jìn)電機(jī)按照要求的工作方式、旋轉(zhuǎn)方向及步數(shù)旋轉(zhuǎn)。步進(jìn)電機(jī)磁極的旋轉(zhuǎn)有速率限制,如果過快,電動機(jī)會出現(xiàn)失步現(xiàn)象(轉(zhuǎn)自跟不上磁極的旋轉(zhuǎn)),特別是在電動機(jī)的起停階段,要求有脈沖速率限制措施。 (三)系統(tǒng)硬件原理圖 

(四)系統(tǒng)軟件設(shè)計
為防止輸入脈沖頻率過快導(dǎo)致電動機(jī)失步,可將輸入脈沖在單片機(jī)緩存,之后在進(jìn)行脈沖分配,分配時注意脈沖速率。脈沖輸入模塊在每個輸入脈沖到來時,將緩存單元進(jìn)行加1計數(shù);脈沖分配模塊時刻掃描緩存單元,當(dāng)緩存單元不為零時,使步進(jìn)電機(jī)旋轉(zhuǎn)一步,之后緩存單元減1,減到0時停止分配脈沖。為使三相電平同時變化,程序中應(yīng)予以考慮。非同步分配脈沖可能導(dǎo)致電機(jī)錯轉(zhuǎn)。 為使電動機(jī)以最快速度運(yùn)行,脈沖分配速率應(yīng)按照梯形曲線分配,如圖1.10所示。圖示的含義是:開始時(零轉(zhuǎn)速)脈沖分配要慢,當(dāng)電動機(jī)旋轉(zhuǎn)起來后,脈沖速率逐漸加快,并達(dá)到最高速率;當(dāng)要停止時,也不可馬上停止,必須先降低脈沖速率,最后降到零,電動機(jī)停轉(zhuǎn)。
圖1.10 脈沖速率分配
2方案 2.1 設(shè)計思路與方案本次設(shè)計是一個對于三相步進(jìn)電機(jī)的控制系統(tǒng),而單片機(jī)實現(xiàn)的步進(jìn)電機(jī)控制系統(tǒng)具有成本低、使用靈活的特點(diǎn),此系統(tǒng)選用51單片機(jī)即可。 根據(jù)要求整個設(shè)計大體可分為四塊: 一是5個按鍵K0~K4將用戶所需來選擇步進(jìn)電機(jī)的工作狀態(tài)。我們將開關(guān)連入單片機(jī)的P1口,通過按鍵開關(guān)的高低電平狀態(tài)來讀入我們所需的控制信號。硬件上直接把開關(guān)分別接在單片機(jī)的接口上,通過查詢端口信號來動作,將控制信號處理。在設(shè)計開關(guān)部分時,還考慮到機(jī)械抖動的影響,采取硬件方式—并聯(lián)電容來去抖。 二是3個LED發(fā)光二極管的顯示步進(jìn)電機(jī)工作狀態(tài)模塊。在設(shè)計要求中步進(jìn)電機(jī)正轉(zhuǎn)是紅燈亮,反轉(zhuǎn)是黃燈亮,停止不轉(zhuǎn)是綠燈亮。設(shè)計中將3個發(fā)光二極管分別接到單片機(jī)P3口,受到單片機(jī)的輸出信號控制。 三是步進(jìn)電機(jī)的工作模塊。要想步進(jìn)電機(jī)按照我們想要的方式運(yùn)轉(zhuǎn),將步進(jìn)電機(jī)一端接到+12V的電源,一端接到單片機(jī)P3口,受單片機(jī)的輸出信號控制。 四是4位數(shù)碼管顯示步數(shù)的模塊。設(shè)計中主要是利用軟件編程的算法來實現(xiàn)步數(shù)的累計和顯示,同樣,4位數(shù)碼管接到單片機(jī)的P0口和P2口受單片機(jī)輸出信號的控制,在硬件上使用的是動態(tài)顯示的接法。 由此可知所需要設(shè)計一個系統(tǒng),可以通過不同按鍵來選擇步進(jìn)電機(jī)的工作方式,且有LED發(fā)光二極管來顯示電機(jī)對應(yīng)的工作狀態(tài),除此之外還能在數(shù)碼管上顯示出步進(jìn)電機(jī)轉(zhuǎn)動的步數(shù)。 2.2總體設(shè)計框圖此系統(tǒng)主要由單片機(jī)、步進(jìn)電機(jī)、步數(shù)顯示模塊、工作狀態(tài)控制與顯示模塊組成。整體框圖如圖1。

圖1 系統(tǒng)整體框圖 3系統(tǒng)實現(xiàn)的原理說明
3.1 步進(jìn)電機(jī)控制工作原理
3.1.1步進(jìn)電機(jī)的工作原理步進(jìn)電機(jī)的不同驅(qū)動方式,都是在工作時,脈沖信號按一定順序輪流加到三相繞組上,從而實現(xiàn)不同的工作狀態(tài)。由于通電順序不同,其運(yùn)行方式有三相單三相拍、三相雙三拍和三相單、雙六拍三種(注意:上面“三相單三拍”中的“三相”指定子有三相繞組;“拍”是指定子繞組改變一次通電方式;“三拍”表示通電三次完成一個循環(huán)。“三相雙三拍”中的“雙”是指同時有兩相繞組通電)。 1.2.1三相單三拍運(yùn)行方式:下頁圖所示為反應(yīng)式步進(jìn)電動機(jī)工作原理圖,若通過脈沖分配器輸出的第一個脈沖使A相繞組通電,B,C相繞組不通電,在A相繞組通電后產(chǎn)生的磁場將使轉(zhuǎn)子 上產(chǎn)生反應(yīng)轉(zhuǎn)矩,轉(zhuǎn)子的1、3齒將與定子磁極對齊,如果圖(a)所示。第二個脈沖到來,使B相繞組通電,而A、C相繞組不通電;B相繞組產(chǎn)生的磁場將 使轉(zhuǎn)子的2、4齒與B相磁極對齊,如圖(b)所示,與圖(a)相比,轉(zhuǎn)子逆時針方向轉(zhuǎn)動了一個角度。第三個脈沖到來后,是C相繞組通電,而 A、B相不通電,這時轉(zhuǎn)子的1、3齒會與C組對齊,轉(zhuǎn)子的位置如圖(c)所示,與圖(b)比較,又逆時針轉(zhuǎn)過了一個角度。  圖1.1 反應(yīng)式步進(jìn)電機(jī)工作原理圖 當(dāng)脈沖不斷到來時,通過分配器使定子的繞組按著A相--B相--C相--A相……的規(guī)律不斷地接通與斷開,這時步進(jìn)電動機(jī)的轉(zhuǎn)子就連續(xù)不停地一步步的逆時 針方向轉(zhuǎn)動。如果改變步進(jìn)電動機(jī)的轉(zhuǎn)動方向,只要將定子各繞組通電的順序改為A相--C相--B相--A相,轉(zhuǎn)子轉(zhuǎn)動方向即改為順時針方向。 單三拍分配方式時,步進(jìn)電動機(jī)由A相通電轉(zhuǎn)換到B相通電,步進(jìn)電動機(jī)的轉(zhuǎn)子轉(zhuǎn)過一個角度,稱為一步。這時轉(zhuǎn)子轉(zhuǎn)過的角度是30度。步進(jìn)電動機(jī)每一步轉(zhuǎn)過的角度稱為步距角。 1.2.2三相雙三拍運(yùn)行方式三相雙三拍運(yùn)行方式:每次都有兩個繞組通電,通電方式是AB--BC--CA--AB……,如果通電順序改為AB--CA--BC--AB……則步進(jìn)電機(jī)反轉(zhuǎn)。雙三拍分配方式時,步進(jìn)電動機(jī)的步距角也是30度 1.2.3三相單,雙六拍運(yùn)行方式:三相六拍分配方式就是每個周期內(nèi)有六個通電狀態(tài)。這六中通電狀態(tài)的順序可以使A--AB--B--BC--C--CA--A……或者A-- CA--C--BC--B--AB--A……六拍通電方式中,有一個時刻兩個繞組同時通電,這時轉(zhuǎn)子齒的位置將位于通電的兩相的中間位置。在三相六拍分配 方式下,轉(zhuǎn)子每一步轉(zhuǎn)過的角度只是三相三拍方式下的一半,步距角是15度。 單三拍運(yùn)行的突出問題是每次只有一相繞組通電,在轉(zhuǎn)換過程中,一相繞組斷電,另一相繞組通電,容易發(fā)生失步;另外單靠一相繞組通電吸引轉(zhuǎn)子,穩(wěn)定性不好,容易在平衡位置附近震蕩,故用的較少。 雙三拍運(yùn)行的特點(diǎn)是每次都有兩相繞組通電,且在轉(zhuǎn)換過程中始終有一相繞組保持通電狀態(tài),因此工作穩(wěn)定,且步距角與單三拍相同。 六拍運(yùn)行方式轉(zhuǎn)換時始終有一相繞組通電,且步距角較小,故工作穩(wěn)定性好,但電源較復(fù)雜,實際應(yīng)用較多。 3.1.2 步進(jìn)電機(jī)的啟停控制步進(jìn)電機(jī)由于其電氣特性,運(yùn)轉(zhuǎn)時會有步進(jìn)感 ,即振動感。為了使電機(jī)轉(zhuǎn)動平滑 ,減小振動 ,可在步進(jìn)電機(jī)控制脈沖的上升沿和下降沿采用細(xì)分的梯形波 ,可以減小步進(jìn)電機(jī)的步進(jìn)角 ,提高電機(jī)運(yùn)行的平穩(wěn)性。在步進(jìn)電機(jī)停轉(zhuǎn)時 ,為了防止因慣性而使電機(jī)軸產(chǎn)生順滑 ,則需采用合適的鎖定波形 ,產(chǎn)生鎖定磁力矩 ,鎖定步進(jìn)電機(jī)的轉(zhuǎn)軸 ,使步進(jìn)電機(jī)的轉(zhuǎn)軸不能自由轉(zhuǎn)動。 3.1.3 步進(jìn)電機(jī)的轉(zhuǎn)向控制如果給定工作方式正序換相通電 ,步進(jìn)電機(jī)正轉(zhuǎn)。若步進(jìn)電機(jī)的勵磁方式為三相六拍 ,即 A-AB-B-BC-C-CA。如果按反序通電換相 ,即則電機(jī)就反轉(zhuǎn)。其他方式情況類似。 3.2步數(shù)顯示模塊原理步數(shù)顯示模塊和工作狀態(tài)顯示模塊,都是通過單片機(jī)輸出信號控制發(fā)光二極管LED的亮滅。其中步數(shù)顯示模塊中LED構(gòu)成數(shù)碼管,要求顯示4位十進(jìn)制數(shù),故用到4位數(shù)碼管。要控制多位的顯示電路,需要有字段控制和字位控制?刂品绞椒譃殪o態(tài)顯示方式和動態(tài)顯示方式。靜態(tài)顯示方式,每一位的顯示器都需要配一個8位輸出口來輸出該字位的七段碼,需要片外擴(kuò)展輸出口。而動態(tài)顯示方式將各數(shù)碼管的對應(yīng)字段的引腳都并聯(lián)在一起,線路簡單,減少接口,不需片外擴(kuò)展。這里選用動態(tài)顯示方式。
4硬件設(shè)計
4.1系統(tǒng)總原理圖 圖3 系統(tǒng)總原理圖
根據(jù)設(shè)計要求用PROTEUS所做的硬件連線圖如圖3。 4.2各部分硬件原理圖設(shè)計
4.2.1 單片機(jī)控制模塊單片機(jī)選用最經(jīng)典的80C51,其4個I/O口都要用到, P3接步進(jìn)電機(jī)驅(qū)動電路及工作狀態(tài)顯示模塊,P0和P2分別接步數(shù)顯示中對數(shù)碼管的字段控制及數(shù)碼管片選,P1接工作狀態(tài)控制電路,,時鐘用內(nèi)部方式需外接晶體振蕩器。硬件圖如圖4所示。 
圖4 單片機(jī)模塊原理圖 此設(shè)計中接的是12MHZ的晶振,故一個機(jī)器周期為1/12us。根據(jù)經(jīng)驗數(shù)據(jù),與晶振一起的兩個電容設(shè)為15PF。單片機(jī)的VCC和GROUD都隱藏了,已自動接好,VCC應(yīng)設(shè)為+5V。 4.2.2按鍵選擇工作狀態(tài)模塊首先我們來考慮所有機(jī)械觸點(diǎn)式按鍵在狀態(tài)輸出時的共性問題就是按鍵抖動問題,由于機(jī)械觸點(diǎn)的彈性振動,按鍵在按下時不會馬上穩(wěn)定地接通而在彈起時也不能一下子完全地斷開,因而在按鍵閉合和斷開的瞬間均會出現(xiàn)一連串的抖動,這稱為按鍵的抖動干擾。 這種抖動可能會造成按一次鍵產(chǎn)生的開關(guān)狀態(tài)被CPU誤讀幾次。為了使CPU能正確地讀取按鍵狀態(tài),本次設(shè)計中我們采用并聯(lián)電容消抖法,利用電容的放電延時來實現(xiàn)。 如圖5所示,這是唯一的一塊輸入模塊的設(shè)計。5個按鍵開關(guān)一端通過電阻接高電平,另一端全部接到地,其中接高電平的一端對應(yīng)也接到單片機(jī)的P1口分別為P1.0~P1.4。當(dāng)開關(guān)斷開,就是輸入到單片機(jī)對應(yīng)端口高電平,而開關(guān)閉合,是使端口接地,輸入低電平。所以這個設(shè)計中開關(guān)斷開時才是有效的。各按鍵功能: (1)K0-K2為工作模式控制開關(guān),KO接電時,為步進(jìn)電機(jī)單三拍工作模式;K1接電時,為步進(jìn)電機(jī)雙三拍工作模式;K2接電時,步進(jìn)電機(jī)工作模式為三相六拍。 (2)K3為啟/?刂崎_關(guān),控制整個系統(tǒng)的開啟和關(guān)閉。 (3)K4為正/反轉(zhuǎn)控制開關(guān),控制步進(jìn)電機(jī)的轉(zhuǎn)向。
圖5 按鍵模塊原理圖 4.2.3步進(jìn)電機(jī)工作模塊將三相步進(jìn)電機(jī)三個端口直接接到單片機(jī)P3.0~P3.2即可,另三個端口接到+12V的高電平給步進(jìn)電機(jī)供電。只需在軟件編寫上控制算法便可以調(diào)節(jié)這三個端口的高低電平來控制步進(jìn)電機(jī)的開啟與停止,正反轉(zhuǎn)以及工作模式。步進(jìn)電機(jī)硬件接線圖如圖6所示。 
圖6 步進(jìn)電機(jī)模塊原理圖 4.2.4工作狀態(tài)顯示模塊LED發(fā)光二極管顯示步進(jìn)電機(jī)的工作狀態(tài),它們分別接到單片機(jī)的P3.3~P3.5。如圖7,讓單片機(jī)輸出通過一個反相器再接到LED陰極,LED陽極接VCC。這樣可以提高電流,有利于二極管的導(dǎo)通,我們可以通過控制P3口的數(shù)據(jù),實現(xiàn)LED的亮滅。 
圖7 工作狀態(tài)顯示模塊原理圖 4.2.5 4位數(shù)碼管顯示步數(shù)模塊LED數(shù)碼管實際上是由七個發(fā)光管組成8字形構(gòu)成的,加上小數(shù)點(diǎn)就是8個。這些段分別由字母a,b,c,d,e,f,g,dp來表示。當(dāng)數(shù)碼管特定的段加上電壓后,這些特定的段就會發(fā)亮,以形成我們眼睛看到的字樣了。通過分時輪流控制各個LED數(shù)碼管的COM端,就使各個數(shù)碼管輪流受控顯示,這就是動態(tài)驅(qū)動。 P0口和P2口的前四個分別接步數(shù)顯示中對數(shù)碼管的字段控制及數(shù)碼管片選,如圖8所示,這里主要是由軟件算法來實現(xiàn)單片機(jī)輸出的控制。

圖8 數(shù)碼管顯示模塊原理圖
5軟件設(shè)計5.1系統(tǒng)總體設(shè)計
圖9 系統(tǒng)總流程圖 設(shè)計說明:首先是數(shù)碼管顯示清零,單片機(jī)再讀入P1口輸入的按鍵狀態(tài),先判斷是否啟動,如果沒有啟動則是綠燈亮并再判斷,如果啟動了,就接著判斷所需的電機(jī)工作模式,再讀入P1口狀態(tài)判斷電機(jī)的轉(zhuǎn)向,輸出控制信號為正轉(zhuǎn)紅燈亮,反轉(zhuǎn)黃燈亮,由此可以讓步進(jìn)電機(jī)按照指定的方式運(yùn)轉(zhuǎn),并且累計步數(shù)再顯示到數(shù)碼管上。最后檢驗P1口是否狀態(tài)改變,如果改變則步數(shù)清零重新開始判斷,不改變則繼續(xù)轉(zhuǎn)動。 5.2步進(jìn)電機(jī)工作模塊
5.2.1步進(jìn)電機(jī)的工作方式說明(1)三相單三拍工作方式 在這種工作方式下,A、B、C三相輪流通電,電流切換三次,磁場旋轉(zhuǎn)一周,轉(zhuǎn)子向前轉(zhuǎn)過一個齒距角。因此這種通電方式叫做三相單三拍工作方式。這時步距角 (度)為:
式中:m──定子相數(shù); z ──轉(zhuǎn)子齒數(shù) 表1 單三拍的相位控制
(2)三相雙三拍工作方式 這種工作方式每次都是有兩相導(dǎo)通,兩相繞組處在相同電壓之下,以AB─BC─CA─AB (或反之)方式通電,故稱為雙三拍工作方式。以這種方式通電,轉(zhuǎn)子齒所處的位置相當(dāng)于六拍控制方式中去掉單三拍后的三個位置。它的步距角計算公式與單三拍時的公式相同。
表2 雙三拍的相位控制 (3)三相六拍工作方式 在這種工作方式下,繞組以A—AB—B—BC—C—CA—A時序(或反時序)轉(zhuǎn)換6次,磁場旋轉(zhuǎn)一周,轉(zhuǎn)子前進(jìn)一個齒距,每次切換均使轉(zhuǎn)子轉(zhuǎn)動1. 5°,故這種通電方式稱為三相六柏工作方式。其步距角 為:
表3 六拍的數(shù)學(xué)模型
5.2.2設(shè)計說明及流程圖設(shè)計說明:在此設(shè)計中,采用的是三相步進(jìn)電機(jī),對于步進(jìn)電機(jī)模塊的程序設(shè)計采用循環(huán)程序設(shè)計方法。先把正反轉(zhuǎn)向的控制模型存放在內(nèi)存單元中,然后再逐一從單元中取出控制模塊并輸出。首先啟動,通過P1口讀入所需的工作方式,即選擇步進(jìn)電機(jī)的拍數(shù),然后讀入正反轉(zhuǎn)的控制,再來輸出對應(yīng)的控制模型來驅(qū)動步進(jìn)電機(jī)轉(zhuǎn)動。 三相步進(jìn)電機(jī)工作的流程圖:
圖10 三相步進(jìn)電機(jī)工作流程圖 5.3數(shù)碼管步數(shù)顯示模塊設(shè)計說明:步數(shù)顯示模塊是整個程序里的一個子程序。其是用4位八段數(shù)碼管來顯示工作步數(shù)。先將要顯示的數(shù)化為10進(jìn)制數(shù),每位分別儲存,從P0口輸出顯示碼,P2口輸入位選碼,需要一定的延時,讓此位數(shù)字顯示閃爍出來。然后修改數(shù)組地址,求下一位位選碼繼續(xù)顯示,直至輸出四位數(shù)。這個掃描過程重復(fù)50次,保證人眼能觀察到步數(shù)顯示。 流程圖如圖11:

圖11 數(shù)碼管顯示模塊流程圖
6仿真調(diào)試記錄如圖12所示,當(dāng)選擇電機(jī)工作在單三拍,反轉(zhuǎn)的模式下,K0斷開,K1、K2、K4、閉合,系統(tǒng)啟動,K3斷開,電機(jī)開始轉(zhuǎn)動。LED四位顯示屏顯示工作步數(shù),LED指示燈黃燈亮顯示電機(jī)反轉(zhuǎn)的狀態(tài)。 
圖12 仿真圖 如圖13所示,此種工作方式下步進(jìn)電機(jī)的旋轉(zhuǎn)角度:   
圖13 步進(jìn)電機(jī)旋轉(zhuǎn)角度 7心得體會本次課設(shè)為期一周,所以時間比較緊張,給課設(shè)的順利完成增加了難度。單片機(jī)原理是一門應(yīng)用性很強(qiáng)綜合性很強(qiáng)的學(xué)科,在這次課設(shè)中,我充分感受到了這一點(diǎn),在老師給的課題之中,是來自于各個方面各個領(lǐng)域的應(yīng)用,不得不說,計算機(jī)控制很強(qiáng)大,確實改變了我們的生活。 課設(shè)里最困難的部分就是編寫程序和仿真調(diào)試,也許硬件連接沒問題,程序運(yùn)行沒問題,但是,當(dāng)把程序?qū),發(fā)現(xiàn)電動機(jī)就是不轉(zhuǎn),燈就是不亮,數(shù)碼管就是亂跳,這是很考驗?zāi)托牡臅r候,一遍一遍地去調(diào)試程序,修改連接部分,有時真的看著很崩潰,但是當(dāng)你不放棄地調(diào)試,才有仿真成功的可能,在這種反復(fù)中,對我們自身的能力是提高很多的。另一個收獲就是關(guān)于軟件的使用了。PROTEUS,KEIL51,以前好像也用過,但是平時較少接觸,這次的課設(shè)讓我比較熟練的掌握了這兩個學(xué)習(xí)軟件強(qiáng)大的功能,而且發(fā)現(xiàn)從PROTEUS里導(dǎo)出來的電路圖特別漂亮和清晰。 單片機(jī)原理一直是自己比較喜歡的一門學(xué)科,拿到課程設(shè)計的題目也想著可以好好檢驗自己的學(xué)習(xí)成果,一直認(rèn)為,期末考試是所謂的應(yīng)試教育,而課程設(shè)計似乎更加地考驗所學(xué)的知識,所謂實踐與理論相結(jié)合就是這個道理吧。課程設(shè)計總能讓我有一種我站在山面前的感覺,看上去比較陌生高大,但是攀登的技巧早已在平時的學(xué)習(xí)中習(xí)得,不斷地去攀登,不斷地在回味課堂上老師講的東西,書本上的東西,這是一種奇妙的體驗。 我明白遇到的電路或者課題并不一定在你的知識范圍之內(nèi),而面對新的東西,我們要冷靜地去尋求解決之道,去搜尋網(wǎng)絡(luò)資源,圖書館資源以及和同學(xué)們的討論之中,再結(jié)合自己所學(xué)過的知識來吃透理解那些未知的東西,擴(kuò)寬知識面,這樣就會覺得學(xué)到了遠(yuǎn)遠(yuǎn)超過課堂的東西,但是卻源于課堂,想必這就是課設(shè)的意義吧,很有收獲。
單片機(jī)源碼:
- #include<reg51.h>
- #include<stdio.h>
- void delay1(void);
- void delay2(void);
- void display(int);
- int bs=0;
- main()
- { char a,b,c,d,j,*q,
- done1[8]={0x01,0x02,0x04,0x00,0x01,0x04,0x02,0x00},
- done2[8]={0x03,0x06,0x05,0x00,0x03,0x05,0x06,0x00}, done3[14]={0x01,0x03,0x02,0x06,0x04,0x05,0x00,0x01,0x05,0x04,0x06,0x02,0x03,0x00};
- L: a=P1;
- while(!(a&0x08)) //判斷是否啟動,若沒啟動則重新判斷
- { P3=0x08;
- delay1();
- a=P1; }
- //...............................................判斷工作模式
- if(a&0x01) //方式1模型
- q=done1;
- else if(a&0x02) //方式2模型
- q=done2;
- else if(a&0x04) //方式3模型
- q=done3;
- //...............................................判斷電機(jī)轉(zhuǎn)向
- if(a&0x10) //判斷電機(jī)是否要正轉(zhuǎn)
- { P3=0x10; //P1.4口為1,電機(jī)正轉(zhuǎn),紅燈亮
- b=0;}
- else
- { P3=0x20; //P1.4口為0,電機(jī)反轉(zhuǎn),黃燈亮
- if(a&0x04)b=7; //反轉(zhuǎn)時將b置數(shù),使指針指到數(shù)組反相序部分
- else b=4; }
- //....................................................
- d=b;
- while(1)
- { c=*(q+b); //判斷電機(jī)步數(shù)是否走完
- if(c==0)b=d; //步數(shù)走完,電機(jī)重新再走
- else
- { P3=c; //從P3輸出電機(jī)控制信號
- b++;
- bs++; //總步數(shù)加1
- display(bs); //顯示步數(shù)
- j=a;
- a=P1;
- if(a!=j) //判斷P1口狀態(tài)信號是否改變
- { if(!(a&0x08))bs=0; //若為停止信號,總步數(shù)清零
- goto L; } //狀態(tài)信號改變,返回到開始,重新對電機(jī)控制
- }
- }
- }
- void delay1() //延時5ms子程序
- { int i,j;
- for(i=0;i<200;i++)
- for(j=0;j<300;j++);
- }
- void delay2() //延時50us子程序
- { int i,j;
- for(i=0;i<10;i++)
- for(j=0;j<60;j++);
- }
- void display(int n)
- {unsigned char tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};
- unsigned char i,k,t,num[4];
- num[0]=n%10; //將總步數(shù)的各位分別存在num數(shù)組中
- num[1]=(n/10)%10;
- num[2]=(n/100)%10;
- num[3]=(n/1000)%10;
- for(t=0;t<50;t++) //掃描50次
- { k=0x08; //位選碼指向最左一位,第四位
- for(i=0;i<4;i++)
- { P2=k; //從P2口輸入位選碼
- P0=~(tab[num[i]]); //取出顯示碼,并從P0口輸出顯示碼
- k=k>>1; //求下一個位選碼
- delay2();
- }
- }
- }
復(fù)制代碼 完整的Word格式文檔51黑下載地址:
基于單片機(jī)的三相步進(jìn)電機(jī)控制系統(tǒng)設(shè)計分解.doc
(759.01 KB, 下載次數(shù): 76)
2019-1-9 18:47 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|