隨著電子科學(xué)技術(shù)的發(fā)展,步進(jìn)電機(jī)的應(yīng)用越來越廣泛。微型步進(jìn)電機(jī)在選擇減速電機(jī)時(shí)要看下驅(qū)動(dòng)IC的角度看步進(jìn)電機(jī),微型步進(jìn)電機(jī)是由微型電機(jī)和步進(jìn)電機(jī)的統(tǒng)稱。步進(jìn)電機(jī)運(yùn)用在多種場(chǎng)合,在現(xiàn)代控制領(lǐng)域使用廣泛,有著重要作用。步進(jìn)電機(jī)是一種將電脈沖信號(hào)轉(zhuǎn)換成相應(yīng)角位移或線位移的電動(dòng)機(jī)。每輸入一個(gè)脈沖信號(hào),轉(zhuǎn)子就轉(zhuǎn)動(dòng)一個(gè)角度或前進(jìn)一步,其輸出的角位移或線位移與輸入的脈沖數(shù)成正比,轉(zhuǎn)速與脈沖頻率成正比。
本次設(shè)計(jì)中,要求設(shè)計(jì)三相步進(jìn)電機(jī)計(jì)算機(jī)控制系統(tǒng)硬件電路。其中硬件電路由單片機(jī)、接口電路、驅(qū)動(dòng)電路、顯示電路、開關(guān)電路等組成。設(shè)計(jì)單三拍、雙三拍、三相六拍步進(jìn)電機(jī)控制流程設(shè)計(jì);設(shè)計(jì)三相六拍步進(jìn)電機(jī)起停控制、正反轉(zhuǎn)控制、及加速及減速控制程序?qū)崿F(xiàn)及調(diào)試。通過編寫正確的程序,并使用仿真軟件PROTEUS進(jìn)行該控制系統(tǒng)的仿真。
計(jì)算機(jī)控制系統(tǒng)包括硬件、軟件和控制算法3個(gè)方面,一個(gè)完整的設(shè)計(jì)還需要考慮系統(tǒng)的抗干擾性能,使系統(tǒng)能長(zhǎng)期有效地運(yùn)行[1],計(jì)算機(jī)控制技術(shù)是一門以電子技術(shù)、自動(dòng)控制技術(shù)、計(jì)算機(jī)應(yīng)用技術(shù)為基礎(chǔ),以計(jì)算機(jī)控制技術(shù)為核心,綜合可編程控制技術(shù)、單片機(jī)技術(shù)、計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)。
1.1 設(shè)計(jì)背景
步進(jìn)電機(jī)是一種用電脈沖信號(hào)進(jìn)行控制,并將電脈沖信號(hào)轉(zhuǎn)換成相應(yīng)的角位移或。線位移的控制驅(qū)動(dòng)裝置。由于步進(jìn)電機(jī)是受脈沖信號(hào)控制的,因此適合于作為數(shù)字控制系統(tǒng)的伺服元件。步進(jìn)電機(jī)的線圈中每輸入一個(gè)脈沖,轉(zhuǎn)子就旋轉(zhuǎn)一個(gè)步距角,它的速度和控制脈沖嚴(yán)格同步,通過改變脈沖頻率的高低就可以在很大范圍內(nèi)調(diào)節(jié)電機(jī)的轉(zhuǎn)速。由于步進(jìn)電機(jī)具有精度高、控制靈活、定位準(zhǔn)確、工作可靠,能直接接受交換數(shù)字信號(hào)等特點(diǎn),因此廣泛地應(yīng)用在計(jì)量測(cè)試儀器中。
設(shè)計(jì)一個(gè)基于單片機(jī)AT89S52的計(jì)算機(jī)步進(jìn)電機(jī)控制系統(tǒng),使用數(shù)字控制器進(jìn)行步進(jìn)電機(jī)的起停、正、反轉(zhuǎn)控制以及步進(jìn)電機(jī)的加速、減速控制,主要有以下四個(gè)方面的要求:
組建一個(gè)使用單片機(jī)AT89S52作為控制器的三相步進(jìn)電機(jī)控制系統(tǒng)。
用K0-K2作為通電方式選擇鍵,K0為單三拍,K1為雙三拍,K2為三相六拍;K3、K4分別為啟動(dòng)和方向控制;正轉(zhuǎn)時(shí)紅色指示燈亮,反轉(zhuǎn)時(shí)黃色指示燈亮,不轉(zhuǎn)時(shí)綠色指示燈亮;用K5-K12作為步數(shù)的給定值;用3位LED顯示剩余工作步數(shù)。
根據(jù)設(shè)計(jì)要求進(jìn)行硬件線路圖設(shè)計(jì),選擇合適的器件,進(jìn)行硬件電路圖設(shè)計(jì)。
編寫程序,實(shí)現(xiàn)相應(yīng)功能。
進(jìn)行程序調(diào)試,模擬仿真
晶振電路一般的晶振振蕩電路都是在一個(gè)反相放大器(注意是放大器不是反相器)的兩端接入晶振,再有兩個(gè)電容分別接到晶振的兩端,每個(gè)電容的另一端再接到地,這兩個(gè)電容串聯(lián)的容量值就應(yīng)該等于負(fù)載電容。晶體振蕩器,簡(jiǎn)稱晶振。在電氣上它可以等效成一個(gè)電容和一個(gè)電阻并聯(lián)再串聯(lián)一個(gè)電容的二端網(wǎng)絡(luò),電工學(xué)上這個(gè)網(wǎng)絡(luò)有兩個(gè)諧振點(diǎn),以頻率的高低分其中較低的頻率是串聯(lián)諧振,較高的頻率是并聯(lián)諧振。由于晶體自身的特性致使這兩個(gè)頻率的距離相當(dāng)?shù)慕咏谶@個(gè)極窄的頻率范圍內(nèi),晶振等效為一個(gè)電感,所以只要晶振的兩端并聯(lián)上合適的電容它就會(huì)組成并聯(lián)諧振電路。這個(gè)并聯(lián)諧振電路加到一個(gè)負(fù)反饋電路中就可以構(gòu)成正弦波振蕩電路,由于晶振等效為電感的頻率范圍很窄,所以即使其他元件的參數(shù)變化很大,這個(gè)振蕩器的頻率也不會(huì)有很大的變化。晶振有一個(gè)重要的參數(shù),那就是負(fù)載電容值,選擇與負(fù)載電容值相等的并聯(lián)電容,就可以得到晶振標(biāo)稱的諧振頻率。如圖 2?3所示: 
圖 2?3晶振電路 2.3 復(fù)位電路復(fù)位是單片機(jī)的初始化工作,復(fù)位后中央處理器CPU和單片機(jī)內(nèi)的其它功能部件都處在一定的初始狀態(tài),并從這個(gè)狀態(tài)開始工作。為了防止程序執(zhí)行過程中失步或運(yùn)行紊亂,此處我們采用了上電復(fù)位,電路圖如下圖 2?4所示: 
圖 2?4復(fù)位電路 單片機(jī)最小系統(tǒng)是單片機(jī)運(yùn)行的最基本條件:電源,單片機(jī)芯片,晶振電路,復(fù)位電路。電源為整個(gè)系統(tǒng)供能,單片機(jī)芯片運(yùn)行程序,處理數(shù)據(jù);晶振電路為單片機(jī)工作提供節(jié)拍,常被理解為單片機(jī)心臟;復(fù)位電路,在單片機(jī)上電時(shí)需要復(fù)位使程序從頭開始運(yùn)行。 2.4 工作方式選擇模塊用K0-K2作為通電方式選擇鍵,K0為單三拍,K1為雙三拍,K2為三相六拍;K3、K4分別為啟動(dòng)和方向控制;如下圖 2?5所示: 
圖 2?5工作方式選擇模塊圖 2.5 電動(dòng)機(jī)及驅(qū)動(dòng)步進(jìn)電機(jī)模塊如下圖 2?6所示 
圖 2?6電動(dòng)機(jī)模塊 2.5.1 步進(jìn)電機(jī)本次設(shè)計(jì)采用的是步進(jìn)電機(jī),如下圖 2?7所示。 
圖 2?7步進(jìn)電機(jī)實(shí)物圖 步進(jìn)電機(jī)的不同驅(qū)動(dòng)方式,都是在工作時(shí),脈沖信號(hào)按一定順序輪流加到三相繞組上,從而實(shí)現(xiàn)不同的工作狀態(tài)。由于通電順序不同,其運(yùn)行方式有三相單三相拍、三相雙三拍和三相單、雙六拍三種(注意:上面“三相單三拍”中的“三相”指定子有三相繞組;“拍”是指定子繞組改變一次通電方式;“三拍”表示通電三次完成一個(gè)循環(huán)。“三相雙三拍”中的“雙”是指同時(shí)有兩相繞組通電)。 2.5.2 驅(qū)動(dòng)電路ULN2003A電路是美國(guó)Texas+Instruments公司和Sprague公司開發(fā)的高壓大電流達(dá)林頓晶體管陣列電路。ULN2003是高耐壓、大電流、內(nèi)部由七個(gè)硅NPN和達(dá)林頓管組成的驅(qū)動(dòng)芯片,如圖 2?8所示。經(jīng)常在以下電路中使用,作為:顯示驅(qū)動(dòng)、繼電器驅(qū)動(dòng)、照明燈驅(qū)動(dòng)、電磁閥驅(qū)動(dòng)、伺服電機(jī)、步進(jìn)電機(jī)驅(qū)動(dòng)等電路中。該電路的特點(diǎn)如下:ULN2003的每一對(duì)達(dá)林頓都串聯(lián)一個(gè)2.7K的基極電阻,在5V的工作電壓下它能與TTL和CMOS電路直接相連,可以直接處理原先需要標(biāo)準(zhǔn)邏輯緩沖器來處理的數(shù)據(jù)。ULN2003 是高壓大電流達(dá)林頓晶體管陣列系列產(chǎn)品,具有電流增益高、工作電壓高、溫度范圍寬、帶負(fù)載能力強(qiáng)等特點(diǎn),適應(yīng)于各類要求高速大功率驅(qū)動(dòng)的系統(tǒng)。ULN2003 工作電壓高,工作電流大,灌電流可達(dá)500mA,并能在關(guān)態(tài)時(shí)承受50V 的電壓,輸出還可以在高負(fù)載電流并行運(yùn)行。 
圖 2?8ULN2003邏輯圖 2.6 狀態(tài)顯示模塊LED發(fā)光二極管顯示步進(jìn)電機(jī)的工作狀態(tài),它們分別接到單片機(jī)的P3.4~P3.6。如下圖 2?9所示,讓單片機(jī)連接到LED陰極,LED陽(yáng)極接VCC。這樣通過設(shè)置端口電平就能使LED亮滅,達(dá)到顯示效果。本設(shè)計(jì)中,綠燈代表停止,紅燈代表正轉(zhuǎn),黃燈代表反轉(zhuǎn)。 
圖 2?9LED狀態(tài)顯示 2.7 數(shù)碼管顯示LED數(shù)碼管實(shí)際上是由七個(gè)發(fā)光管組成8字形構(gòu)成的,加上小數(shù)點(diǎn)就是8個(gè)。這些段分別由字母a,b,c,d,e,f,g,dp來表示。當(dāng)數(shù)碼管特定的段加上電壓后,這些特定的段就會(huì)發(fā)亮,以形成我們眼睛看到的字樣了。通過分時(shí)輪流控制各個(gè)LED數(shù)碼管的COM端,就使各個(gè)數(shù)碼管輪流受控顯示,這就是動(dòng)態(tài)驅(qū)動(dòng)。 本課題采用六位共陰極數(shù)碼管來對(duì)電機(jī)步數(shù),速度擋位進(jìn)行顯示。電路如下,接在單片機(jī)P0口,P0必須添加上拉電阻,以為P0扣不加上拉電阻時(shí)處于開漏狀態(tài),只允許輸出低電平,加上拉電阻后可輸出高電平。電路如下圖 2?10示。 
圖 2?10數(shù)碼管電路 2.8 本章小結(jié)本章主要是對(duì)硬件設(shè)計(jì)的描述。先是呈現(xiàn)出總硬件系統(tǒng)框圖及AT89S52單片機(jī)的接口及各種特性,再進(jìn)行各部分電路的設(shè)計(jì)的原理,即:晶振電路,復(fù)位電路,工作方式選擇模塊,驅(qū)動(dòng)電路,電機(jī)工作狀態(tài)顯示部分,數(shù)碼管顯示部分。 第3章 軟件設(shè)計(jì)3.1 功能框圖步進(jìn)電機(jī)控制系統(tǒng)功能框圖如下圖 3?1所示,說明了每個(gè)模塊與單片機(jī)之間的聯(lián)系,控制邏輯;通過單片機(jī)控制掃描,數(shù)碼管顯示,LED顯示,步進(jìn)電機(jī)控制等。 
圖 3?1功能框圖 3.2 主流程圖
圖 3?2主流程圖 首先進(jìn)行工作方式選擇,如圖圖 3?2所示,按下啟動(dòng)按鈕,單片機(jī)判斷是否啟動(dòng),如果沒啟動(dòng)綠燈亮,啟動(dòng)后單片機(jī)查詢電機(jī)的工作模式,K0為單三拍,K1為雙三拍,K2為三相六拍。再查詢電機(jī)的指定步數(shù),接著判斷電機(jī)正轉(zhuǎn)還是反轉(zhuǎn),正轉(zhuǎn)紅燈亮,反轉(zhuǎn)時(shí)紅燈亮。由此可以讓步進(jìn)電機(jī)按照指定的方式運(yùn)轉(zhuǎn),并且剩余步數(shù)顯示到數(shù)碼管上;單片機(jī)判斷步數(shù)是否走完。
3.3 步進(jìn)電機(jī)模塊3.3.1 步進(jìn)電機(jī)工作方式說明(1)三相單三拍工作方式
如表 3?1,在這種工作方式下,A、B、C三相輪流通電,電流切換三次,磁場(chǎng)旋轉(zhuǎn)一周,轉(zhuǎn)子向前轉(zhuǎn)過一個(gè)齒距角。因此這種通電方式叫做三相單三拍工作方式。A-B-C為正轉(zhuǎn),C-B-A為反轉(zhuǎn),這時(shí)步距角θb (度)為 (公式1) 式中:m──步進(jìn)電機(jī)工作拍數(shù); z ──轉(zhuǎn)子齒數(shù)
51hei.png (4.2 KB, 下載次數(shù): 71)
下載附件
2020-11-16 16:18 上傳
(2)雙三拍工作方式
如表 3?2,在這種工作方式下,每次都是有兩相導(dǎo)通,兩相繞組處在相同電壓之下,以AB─BC─CA─AB (或反之)方式通電,故稱為雙三拍工作方式。以這種方式通電,轉(zhuǎn)子齒所處的位置相當(dāng)于六拍控制方式中去掉單三拍后的三個(gè)位置。它的步距角計(jì)算公式與單三拍時(shí)的公式相同。
極分度角/齒距角= R + k·1/m
進(jìn)一步化簡(jiǎn)得齒數(shù)z:
(公式2)
式中:m──相數(shù); q──每相的極數(shù); k──≤ (m - 1)的正整數(shù);
R──正整數(shù),為0、1、2、3……。 表 3?2 三相雙三拍的相位控制
51hei.png (12.46 KB, 下載次數(shù): 67)
下載附件
2020-11-16 16:20 上傳
(3)三相六拍工作方式
如表 3?3,在這種工作方式下,繞組以A—AB—B—BC—C—CA—A時(shí)序(或反時(shí)序)轉(zhuǎn)換6次,磁場(chǎng)旋轉(zhuǎn)一周,轉(zhuǎn)子前進(jìn)一個(gè)齒距,每次切換均使轉(zhuǎn)子轉(zhuǎn)動(dòng)1. 5°,故這種通電方式稱為三相六柏工作方式。其步距角θb 為:
(公式3)式中:m──步進(jìn)電機(jī)工作拍數(shù); z ──轉(zhuǎn)子齒數(shù)
51hei.png (15.65 KB, 下載次數(shù): 77)
下載附件
2020-11-16 16:19 上傳
關(guān)鍵模塊設(shè)計(jì)3.4.1 三相步進(jìn)電機(jī)模塊設(shè)計(jì)設(shè)計(jì)說明:在此設(shè)計(jì)中,采用的是三相步進(jìn)電機(jī),對(duì)于步進(jìn)電機(jī)模塊的程序設(shè)計(jì)采用循環(huán)程序設(shè)計(jì)方法。先把正反轉(zhuǎn)向的控制模型存放在內(nèi)存單元中,然后再逐一從單元中取出控制模塊并輸出。首先啟動(dòng),選擇步進(jìn)電機(jī)的拍數(shù),輸入步數(shù),然后讀入正反轉(zhuǎn)的控制模型驅(qū)動(dòng)步進(jìn)電機(jī)轉(zhuǎn)動(dòng) 三相步進(jìn)電機(jī)的流程框圖,如圖 3?3所示: 
圖 3?3 三相步進(jìn)電機(jī)的流程框圖 3.4.2 顯示模塊設(shè)計(jì)設(shè)計(jì)說明:顯示模塊是用4位七段數(shù)碼管來顯示工作步數(shù)。先將顯示碼存入數(shù)組中,指向最左邊一位,然后取出要顯示的數(shù)據(jù),指向換碼表首地址,取出顯示碼,從P0口輸出顯示碼,P2口輸入位選碼,顯示出4位工作步數(shù),最后修改數(shù)組地址,求下一位位選碼繼續(xù)顯示。如圖 3?4所示。 
圖 3?4 數(shù)碼管顯示原理 3.5 本章小結(jié)本章主要描述了步進(jìn)電機(jī)實(shí)現(xiàn)過程軟件的設(shè)計(jì)思路,包括功能框圖,主流程圖,步進(jìn)電機(jī)模塊,關(guān)于工作方式的說明,數(shù)碼管顯示設(shè)計(jì)。 第4章 測(cè)試和驗(yàn)證4.1 任務(wù)分工本次設(shè)計(jì)我們小組共4人,a主要負(fù)責(zé)了對(duì)于系統(tǒng)控制的電路設(shè)計(jì)。b負(fù)責(zé)了系統(tǒng)程序的編寫和調(diào)試,查閱了相關(guān)資料,實(shí)現(xiàn)系統(tǒng)功能,c主要負(fù)責(zé)了小組統(tǒng)籌規(guī)劃,收集資料,電路分析,靳筌鈞主要負(fù)責(zé)了測(cè)試驗(yàn)證,文檔整理的工作,每個(gè)人分工合作,完成了設(shè)計(jì)任務(wù)。 4.2 搭建環(huán)境使用KEIL uVision 4編寫單片機(jī)程序,在Proteus中搭建仿真環(huán)境,將可執(zhí)行程序加載到仿真單片機(jī)中,進(jìn)行仿真,驗(yàn)證設(shè)計(jì)的正確性,可行性。 4.2.1 建立編輯編譯環(huán)境- 創(chuàng)建AT89C51工程,進(jìn)行編輯。如下圖 4?1所示:

圖 4?1 創(chuàng)建工程 - 編輯代碼,選擇生成.Hex文件。如下圖 4?2所示:

圖 4?2 生成目標(biāo)文件 4.2.2 建立仿真和測(cè)試環(huán)境根據(jù)電路原理圖在Proteus中搭建仿真模型。分別由數(shù)碼管顯示模塊,復(fù)位電路,矩陣鍵盤,晶振電路,單片機(jī)主控芯片,步進(jìn)電機(jī)模塊,工作狀態(tài)顯示模塊。如下圖 4?3所示: 
圖 4?3仿真模型 4.3 方案驗(yàn)證通過仿真來驗(yàn)證步進(jìn)電機(jī)的控制是否合理。驗(yàn)證如下: 4.3.1 三種工作方式圖 4?4為步進(jìn)電機(jī)工作在三相單三拍,此時(shí)K0,K3接高電平,K1,K2接低電平啟動(dòng);;圖 4?6為步進(jìn)電機(jī)工作在三相六拍,此時(shí)K0,K1接低電平,K2,K3接高電平;若K4接高電平則反轉(zhuǎn),低電平則正轉(zhuǎn)。這三種工作方式工作不同,三相單三拍時(shí),通電順序?yàn)锳-B-C-A;三相雙三拍時(shí),通電順序?yàn)锳B-BC-CA-AB;三相六拍時(shí),通電順序?yàn)锳-AB-B-BC-C-CA-A;以上通電方式是三種工作方式正轉(zhuǎn)的情況,若要反轉(zhuǎn),則通電方式放過來即可 
圖 4?4單三拍正轉(zhuǎn) 圖 4?5圖 4?6為步進(jìn)電機(jī)工作在三相雙三拍,此時(shí)K1,K3接高電平,K0,K2接低電平 
圖 4?5 三相雙三拍

圖 4?6三相雙三拍 圖 4?7圖 4?8為步進(jìn)電機(jī)工作在三相六拍,此時(shí)K0,K1接低電平,K2,K3接高電平。 
圖 4?7 三相六拍 
圖 4?8 三相六拍 4.3.2 正轉(zhuǎn)和反轉(zhuǎn) 圖 4?7為三相步進(jìn)電機(jī)工作在正轉(zhuǎn)狀態(tài),此時(shí)K4接高電平。 
圖 4?9電機(jī)正轉(zhuǎn) 圖 4?8為三相步進(jìn)電機(jī)工作在反轉(zhuǎn)狀態(tài),此時(shí)K4低電平 
圖 4?10 電機(jī)反轉(zhuǎn) 4.3.3 指定步數(shù)和數(shù)碼管顯示當(dāng)按下K5~K12按鍵時(shí),分別指定步數(shù)值為20、40、60、80、100、120、140、160。當(dāng)步進(jìn)電機(jī)運(yùn)轉(zhuǎn)時(shí),每運(yùn)轉(zhuǎn)一步程序?qū)⒖偛綌?shù)自減1,在運(yùn)用數(shù)碼管和單片機(jī)的端口連接顯示剩余步數(shù),如圖 4?9所示。 
圖 4?11 指定步數(shù)和數(shù)碼管顯示
4.4 問題與分析在本次課題中,我遇到一些問題如下: - 由于對(duì)單片機(jī)知識(shí)不是很熟悉,在設(shè)計(jì)過程中常常需要翻閱許多相關(guān)知識(shí)才能有思路,需要不斷鞏固和運(yùn)用
- 在對(duì)數(shù)碼管進(jìn)行設(shè)計(jì)的時(shí)候,忘記加入上拉電阻,以至于多次仿真運(yùn)行時(shí)數(shù)碼管都不顯示
- 在進(jìn)行控制時(shí),有很多時(shí)候開關(guān)都無法起到相應(yīng)的作用,說明程序控制有誤,且數(shù)碼管顯示不全,對(duì)數(shù)碼管的顯示設(shè)計(jì)出現(xiàn)了許多程序上的錯(cuò)誤。
- 在設(shè)計(jì)電路的過程中,調(diào)試程序以及控制都無法達(dá)到預(yù)期的狀態(tài),通過請(qǐng)教老師和同學(xué),對(duì)程序不斷修改,一步一步的驗(yàn)證和測(cè)試,老師也給我們的設(shè)計(jì)提出了相關(guān)問題,才完善
創(chuàng)新與擴(kuò)展在對(duì)步進(jìn)電機(jī)進(jìn)行設(shè)計(jì)的時(shí)候,在系統(tǒng)的基礎(chǔ)上,還可以充分利用步進(jìn)電機(jī)的功能,加上蜂鳴器,對(duì)步進(jìn)電機(jī)故障時(shí)進(jìn)行報(bào)警,可以將顯示步數(shù)的開關(guān)利用集成開關(guān)進(jìn)行控制,減少接線,顯示剩余步數(shù)不僅可以使用數(shù)碼管,還可以使用液晶顯示器,使用戶觀感更佳。同時(shí)步進(jìn)電機(jī)可以運(yùn)用到生活中很多場(chǎng)合,我們可以經(jīng)過AD轉(zhuǎn)換,改變狀態(tài)
附錄一 電路圖
單片機(jī)源程序如下: - #include <reg51.h>
- #include <stdio.h>
- void delay1(void);
- void delay2(void);
- void display(int);
- sbit green=P1^4;
- sbit red=P1^6;
- sbit yellow=P1^5;
- sbit K5=P2^4;
- sbit K6=P2^5;
- sbit K7=P2^6;
- sbit K8=P2^7;
- sbit K9=P3^5;
- sbit K10=P3^6;
- sbit K11=P3^7;
- sbit K12=P1^7;
- int bushu=0;
- void 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}; //電機(jī)通電方式表
- L:
- a=P3;
- while(!(a&0x08)) //判斷是否啟動(dòng),若沒啟動(dòng)則重新判斷
- {
- green=1;
- red=0;
- yellow=0;
- delay1();
- a=P3;
- }
- if(a&0x01) //判斷電機(jī)工作方式
- q=done1; //單三拍
- else if(a&0x02)
- q=done2; //雙三拍
- else if(a&0x04)
- q=done3; //三相六拍
- if(K5==1)
- {
- bushu=20; //設(shè)置bushu的值,以控制步數(shù)
- }
- else if(K6==1)
- {
- bushu=40; //設(shè)置bushu的值,以控制步數(shù)
- }
- else if(K7==1)
- {
- bushu=60; //設(shè)置bushu的值,以控制步數(shù)
- }
- else if(K8==1)
- {
- bushu=80; //設(shè)置bushu的值,以控制步數(shù)
- }
- else if(K9==1)
- {
- bushu=100; //設(shè)置bushu的值,以控制步數(shù)
- }
- else if(K10==1)
- {
- bushu=120; //設(shè)置bushu的值,以控制步數(shù)
- }
- else if(K11==1)
- {
- bushu=140; //設(shè)置bushu的值,以控制步數(shù)
- }
- else if(K12==1)
- {
- bushu=160; //設(shè)置bushu的值,以控制步數(shù)
- }
- if(a&0x10) //判斷電機(jī)是否正轉(zhuǎn)
- {
- green=0;
- red=1;
- yellow=0; //電機(jī)正轉(zhuǎn),紅燈亮
- b=0;
- }
- else
- {
- green=0;
- red=0;
- yellow=1; //電機(jī)反轉(zhuǎn),黃燈亮
- if(a&0x04) b=7; //反轉(zhuǎn)將b置位,通電順序反向
- else b=4;
- }
- d=b;
- while(1)
- {
- c=*(q+b);
- if(c==0) b=d; //步數(shù)走完,b重新置位
- else
- {
- P1=c; //從P3口輸出電機(jī)控制信號(hào)
- b++;
- bushu--; //剩余步數(shù)
- display(bushu); //顯示步數(shù)
- j=a;
- a=P3;
- if(a!=j&&bushu==0) //判斷P3口狀態(tài)信號(hào)是否改變
- if(!(a&0x08))
- bushu=0; //若為停止信號(hào),總步數(shù)清零
- goto L; //狀態(tài)信號(hào)改變,返回到L,重新開始判斷控制
- }
- }
- }
- void display(int n) //步數(shù)顯示程序
- {
- unsigned char tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- unsigned char i,k,t,num[3];
- num[0]=n%10;
- num[1]=(n/10)%10;
- num[2]=(n/100)%10;
- for(t=0;t<50;t++) //掃描50次
- {
- k=0x04; //位選碼為最高位
- for(i=0;i<3;i++)
- {
- P2=k; //P2口輸出位選碼
- P0=tab[num[i]]; //P0口輸出顯示剩余步數(shù)
- k=k>>1; //下一位位選碼
- delay2();
- }
- }
- }
- void delay1()
- {
- int i,j;
- for(i=0;i<200;i++)
- for(j=0;j<300;j++);
- }
- void delay2()
- {
- int i,j;
- for(i=0;i<10;i++)
- for(j=0;j<60;j++);
- }
復(fù)制代碼
所有資料51hei提供下載:
|