

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 摘要</b></p><p> 本設(shè)計詳細(xì)介紹了基于單片機(jī)的四相步進(jìn)電機(jī)控制系統(tǒng)。步進(jìn)電機(jī)通過輸入脈沖信號進(jìn)行控制,即電機(jī)的總轉(zhuǎn)動角度由輸入脈沖總數(shù)決定,因此,單片機(jī)通過向步進(jìn)電機(jī)發(fā)送控制信號就能實(shí)現(xiàn)對步進(jìn)電機(jī)的控制。 單片機(jī)實(shí)現(xiàn)的步進(jìn)電機(jī)控制系統(tǒng)具有成本低、使用靈活的特點(diǎn),該系統(tǒng)采用80C51單片機(jī)作為主控芯片,來完成對步進(jìn)電機(jī)轉(zhuǎn)動及LED顯示的控制
2、。 本設(shè)計主要由單片機(jī)80C51,4相步進(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è)計思路清晰,同
3、時利用KEIL和Proteus進(jìn)行聯(lián)調(diào)仿真,結(jié)果比較直觀。仿真結(jié)果收到了預(yù)期的效果。 關(guān)鍵字:四相步進(jìn)電機(jī)、單片機(jī)、PROTEUS仿真 </p><p><b> 1設(shè)計任務(wù)及要求</b></p><p> 設(shè)計一個四相步進(jìn)電機(jī)控制系統(tǒng),要求系統(tǒng)具有如下功能:用SW11-SW13作為通電方式選擇鍵,SW11為四相單四拍, SW12為四相雙四拍,S
4、W13為四相八拍;SW14為啟動/停止控制、SW1方向控制;用4位LED數(shù)碼管顯示工作步數(shù)。用3個發(fā)光二極管顯示狀態(tài);正轉(zhuǎn)時紅燈亮,反轉(zhuǎn)時黃燈亮,不轉(zhuǎn)時綠燈亮。</p><p><b> 2方案論證 </b></p><p> 2.1 設(shè)計思路與方案 </p><p> 本次設(shè)計是一個對于四相步進(jìn)電機(jī)的控制系統(tǒng),而單片機(jī)實(shí)現(xiàn)的步進(jìn)電機(jī)控制
5、系統(tǒng)具有成本低、使用靈活的特點(diǎn),此系統(tǒng)選用51單片機(jī)即可。 根據(jù)要求整個設(shè)計大體可分為四塊:</p><p> 一是5個按鍵SW11-SW13將用戶所需來選擇步進(jìn)電機(jī)的工作狀態(tài)。我們將開關(guān)連入單片機(jī)的P1口,通過按鍵開關(guān)的高低電平狀態(tài)來讀入我們所需的控制信號。硬件上直接把開關(guān)分別接在單片機(jī)的接口上,通過查詢端口信號來動作,將控制信號處理。 二是3個LED發(fā)光二極管的顯示步進(jìn)電機(jī)工作狀態(tài)模塊。在設(shè)計要
6、求中步進(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ī)的輸出信號控制。 </p><p> 四是4位數(shù)碼管顯示步數(shù)的模塊。設(shè)計中主要是利用軟件編程的算法來實(shí)現(xiàn)步數(shù)的累計和顯示,同樣,4位數(shù)碼管接到單片機(jī)的P0口
7、和P2口受單片機(jī)輸出信號的控制,在硬件上使用的是動態(tài)顯示的接法。 由此可知所需要設(shè)計一個系統(tǒng),可以通過不同按鍵來選擇步進(jìn)電機(jī)的工作方式,且有LED發(fā)光二極管來顯示電機(jī)對應(yīng)的工作狀態(tài),除此之外還能在數(shù)碼管上顯示出步進(jìn)電機(jī)轉(zhuǎn)動的步數(shù)。</p><p> 2.2總體設(shè)計框圖 </p><p> 此系統(tǒng)主要由單片機(jī)、步進(jìn)電機(jī)、步數(shù)顯示模塊、工作狀態(tài)控制與顯示模塊組成。整體框圖如圖1:
8、 </p><p><b> 圖1 系統(tǒng)整體框圖</b></p><p> 3系統(tǒng)實(shí)現(xiàn)的原理說明</p><p> 3.1 步進(jìn)電機(jī)控制工作原理</p><p> 3.1.1步進(jìn)電機(jī)的工作原理</p><p> 步進(jìn)電機(jī)通過輸入脈沖信號進(jìn)行控制,即電機(jī)的總轉(zhuǎn)動角度由輸入脈沖總數(shù)決定,而電
9、機(jī)的轉(zhuǎn)速由脈沖信號頻率決定。步進(jìn)電機(jī)的驅(qū)動電路是根據(jù)單片機(jī)產(chǎn)生的控制信號進(jìn)行工作。因此,單片機(jī)通過向步進(jìn)電機(jī)驅(qū)動電路發(fā)送控制信號就能實(shí)現(xiàn)對步進(jìn)電機(jī)的控制。 如圖2所示,開始時,開關(guān)SB接通電源,SA、SC、SD斷開,B相磁極和轉(zhuǎn)子0、3號齒對齊,同時,轉(zhuǎn)子的1、4號齒就和C、D相繞組磁極產(chǎn)生錯齒,2、5號齒就和D、A相繞組磁極產(chǎn)生錯齒。 當(dāng)開關(guān)SC接通電源,SB、SA、SD斷開時,由于C相繞組的磁力線和1、4號齒之間磁
10、力線的作用,使轉(zhuǎn)子轉(zhuǎn)動,1、4號齒和C相繞組的磁極對齊。而0、3號齒和A、B相繞組產(chǎn)生錯齒,2、5號齒就和A、D相繞組磁極產(chǎn)生錯齒。依次類推A、B、C、D四相繞組輪流供電則轉(zhuǎn)子會沿著A、B、C、D方向轉(zhuǎn)動。 四相步進(jìn)電機(jī)按照通電順序的不同,可分為單四拍、雙四拍、八拍三種工作方式。單四拍與雙四拍的步距角相等,但單四拍的轉(zhuǎn)動力矩小。八拍工作方式的步距角是單四拍與雙四拍的一半,因此,八拍工作方式既可以保持較高的轉(zhuǎn)動力矩又可以提
11、高控制精度。 </p><p> 圖2 步進(jìn)電機(jī)工作原理圖</p><p> 3.1.2 步進(jìn)電機(jī)的啟??刂?</p><p> 步進(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)時 ,為了防止因慣性而使
12、電機(jī)軸產(chǎn)生順滑,則需采用合適的鎖定波形,產(chǎn)生鎖定磁力矩 ,鎖定步進(jìn)電機(jī)的轉(zhuǎn)軸,使步進(jìn)電機(jī)的轉(zhuǎn)軸不能自由轉(zhuǎn)動。</p><p> 3.1.3 步進(jìn)電機(jī)的轉(zhuǎn)向控制 </p><p> 如果給定工作方式正序換相通電,步進(jìn)電機(jī)正轉(zhuǎn)。若步進(jìn)電機(jī)的勵磁方式為四相八拍,即 A-AB-B-BC-C-CD-D-DA-A。如果按反序通電換相 ,即則電機(jī)就反轉(zhuǎn)。其他方式情況類似。 </p>&
13、lt;p> 3.2步數(shù)顯示模塊原理 </p><p> 步數(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)顯示方式
14、將各數(shù)碼管的對應(yīng)字段的引腳都并聯(lián)在一起,線路簡單,減少接口,不需片外擴(kuò)展。這里選用動態(tài)顯示方式。 </p><p><b> 4硬件設(shè)計 </b></p><p> 4.1系統(tǒng)總原理圖 </p><p><b> 圖3 系統(tǒng)總原理圖</b></p><p> 根據(jù)設(shè)計要求用PROTEUS所做
15、的硬件連線圖如圖3。</p><p> 4.2各部分硬件原理圖設(shè)計 </p><p> 4.2.1 單片機(jī)控制模塊 </p><p> 單片機(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所示
16、。 </p><p> 圖4 單片機(jī)模塊原理圖</p><p> 此設(shè)計中接的是12MHZ的晶振,故一個機(jī)器周期為1/12us。根據(jù)經(jīng)驗(yàn)數(shù)據(jù),與晶振一起的兩個電容設(shè)為15PF。單片機(jī)的VCC和GROUD都隱藏了,已自動接好,VCC應(yīng)設(shè)為+5V。 </p><p> 4.2.2按鍵選擇工作狀態(tài)模塊 </p><p> 5個按鍵開關(guān)一端
17、通過電阻接高電平,另一端全部接到地,其中接高電平的一端對應(yīng)也接到單片機(jī)的P1口分別為P1.0~P1.4。當(dāng)開關(guān)斷開,就是輸入到單片機(jī)對應(yīng)端口高電平,而開關(guān)閉合,是使端口接地,輸入低電平。所以這個設(shè)計中開關(guān)斷開時才是有效的。各按鍵功能: (1)SW11~SW13為工作模式控制開關(guān),SW11接電時,為步進(jìn)電機(jī)單四拍工作模式;SW12接電時,為步進(jìn)電機(jī)雙四拍工作模式;SW13接電時,步進(jìn)電機(jī)工作模式為四相八拍。 (2)SW14
18、為啟/??刂崎_關(guān),控制整個系統(tǒng)的開啟和關(guān)閉。 (3)SW1為正/反轉(zhuǎn)控制開關(guān),控制步進(jìn)電機(jī)的轉(zhuǎn)向。</p><p> 圖5 按鍵模塊原理圖</p><p> 4.2.3步進(jìn)電機(jī)工作模塊 </p><p> 將四相步進(jìn)電機(jī)四個端口直接接到單片機(jī)P3.0~P3.3即可,另兩個端口接到+12V的高電平給步進(jìn)電機(jī)供電。只需在軟件編寫上控制算法便可以調(diào)節(jié)這四個端
19、口的高低電平來控制步進(jìn)電機(jī)的開啟與停止,正反轉(zhuǎn)以及工作模式。步進(jìn)電機(jī)硬件接線圖如圖6所示。</p><p> 圖6 步進(jìn)電機(jī)模塊原理圖</p><p> 4.2.4工作狀態(tài)顯示模塊 </p><p> LED發(fā)光二極管顯示步進(jìn)電機(jī)的工作狀態(tài),它們分別接到單片機(jī)的P3.5~P3.7。 </p><p> 圖7 工作狀態(tài)顯示模塊原理圖
20、</p><p> 4.2.5 4位數(shù)碼管顯示步數(shù)模塊</p><p> LED數(shù)碼管實(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
21、口的前四個分別接步數(shù)顯示中對數(shù)碼管的字段控制及數(shù)碼管片選,如圖8所示,這里主要是由軟件算法來實(shí)現(xiàn)單片機(jī)輸出的控制。</p><p> 圖8 數(shù)碼管顯示模塊原理圖</p><p><b> 5軟件設(shè)計</b></p><p> 5.1系統(tǒng)總體設(shè)計 </p><p><b> 圖9 系統(tǒng)總流程圖<
22、;/b></p><p> 設(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ù)碼管上。最后檢驗(yàn)P1口,是否狀態(tài)改變,如果改變則步數(shù)清零重新開始判斷,不改變則繼續(xù)轉(zhuǎn)動。 &l
23、t;/p><p> 5.2步進(jìn)電機(jī)工作模塊 </p><p> 5.2.1步進(jìn)電機(jī)的工作方式說明 </p><p> (1)四相單四拍工作方式 </p><p> 在這種工作方式下,A、B、C、D三相輪流通電,電流切換三次,磁場旋轉(zhuǎn)一周,轉(zhuǎn)子向前轉(zhuǎn)過一個齒距角。因此這種通電方式叫做三相單三拍工作方式。這時步距角(度)為:</p&g
24、t;<p><b> =360/mz</b></p><p> 式中:m為定子相數(shù);z為轉(zhuǎn)子齒數(shù)</p><p> 表1 單四拍的相位控制</p><p> (2) 四相雙四拍工作方式這種工作方式每次都是有兩相導(dǎo)通,兩相繞組處在相同電壓之下,以AB─BC─CD─DA—AB(或反之)方式通電,故稱為雙四拍工作方式。以這種方
25、式通電,轉(zhuǎn)子齒所處的位置相當(dāng)于八拍控制方式中去掉單四拍后的四個位置。它的步距角計算公式與單四拍時的公式相同。 </p><p> 表2 雙四拍的相位控制 </p><p> (3)四相八拍工作方式 在這種工作方式下,繞組以A—AB—B—BC—C—CD—D—DA—A時序(或反時序)轉(zhuǎn)換8次,磁場旋轉(zhuǎn)一周,轉(zhuǎn)子前進(jìn)一個齒距每次切換均使轉(zhuǎn)子轉(zhuǎn)動0.9°,故這種通電方式稱為四相
26、八柏工作方式。其步距角(度)為:</p><p> =360/2mz=180/mz</p><p> 表3 八拍的數(shù)學(xué)模型</p><p> 5.2.2設(shè)計說明及流程圖</p><p> 設(shè)計說明:在此設(shè)計中,采用的是四相步進(jìn)電機(jī),對于步進(jìn)電機(jī)模塊的程序設(shè)計采用循環(huán)程序設(shè)計方法。先把正反轉(zhuǎn)向的控制模型存放在內(nèi)存單元中,然后再逐一從單元
27、中取出控制模塊并輸出。首先啟動,通過P1口讀入所需的工作方式,即選擇步進(jìn)電機(jī)的拍數(shù),然后讀入正反轉(zhuǎn)的控制,再來輸出對應(yīng)的控制模型來驅(qū)動步進(jìn)電機(jī)轉(zhuǎn)動。 5.3數(shù)碼管步數(shù)顯示模塊 </p><p> 設(shè)計說明:步數(shù)顯示模塊是整個程序里的一個子程序。其是用4位八段數(shù)碼管來顯示工作步數(shù)。先將要顯示的數(shù)化為10進(jìn)制數(shù),每位分別儲存,從P0口輸出顯示碼,P2口輸入位選碼,需要一定的延時,讓此位數(shù)字顯示閃爍出來。然后修改數(shù)
28、組地址,求下一位位選碼繼續(xù)顯示,直至輸出四位數(shù)。這個掃描過程重復(fù)50次,保證人眼能觀察到步數(shù)顯示。 流程圖如圖11: </p><p> 圖11 數(shù)碼管顯示模塊流程圖</p><p><b> 6仿真調(diào)試記錄</b></p><p> 如圖12所示,當(dāng)選擇電機(jī)工作在單四拍,正轉(zhuǎn)的模式下,SW11、SW1接高電平,SW12、SW13接低電
29、平,系統(tǒng)啟動,SW14接高電平,電機(jī)開始轉(zhuǎn)動。LED四位顯示屏顯示工作步數(shù),LED指示燈紅燈亮顯示電機(jī)正轉(zhuǎn)的狀態(tài)。 </p><p><b> 7心得體會</b></p><p> 計算機(jī)控制技術(shù)是一門應(yīng)用性很強(qiáng)綜合性很強(qiáng)的學(xué)科,在這次課設(shè)中,我充分感受到了這一點(diǎn)。在老師給的課題之中,是來自于各個方面各個領(lǐng)域的應(yīng)用,不得不說,計算機(jī)控制很強(qiáng)大,確實(shí)改變了我們的生活
30、。 本次課設(shè)收獲就是關(guān)于軟件的使用了。PROTEUS,KEIL51,以前好像也用過但是平時較少接觸,這次的課設(shè)讓我比較熟練的掌握了這兩個學(xué)習(xí)軟件強(qiáng)大的功能,而且發(fā)現(xiàn)從PROTEUS里導(dǎo)出來的電路圖特別漂亮和清晰。 計算機(jī)控制技術(shù)一直是自己比較喜歡的一門學(xué)科,拿到課程設(shè)計的題目也想著可以好好檢驗(yàn)自己的學(xué)習(xí)成果,一直認(rèn)為,期末考試是所謂的應(yīng)試教育,而課程設(shè)計似乎更加地考驗(yàn)所學(xué)的知識,所謂實(shí)踐與理論相結(jié)合就是這個道理吧。
31、課程設(shè)計總能讓我有一種我站在山面前的感覺,看上去比較陌生高大,但是攀登的技巧早已在平時的學(xué)習(xí)中習(xí)得,不斷地去攀登,不斷地在回味課堂上老師講的東西,書本上的東西,這是一種奇妙的體驗(yàn)。 我明白遇到的電路或者課題并不一定在你的知識范圍之內(nèi),而面對新的東西我們要冷靜地去尋求解決之道,去搜尋網(wǎng)絡(luò)資源,圖書館資源以及和同學(xué)們的討論之中,再結(jié)合自己所學(xué)過的知識來吃透理解那些未知</p><p> 附錄一 程序清
32、單</p><p> #include "reg52.h" </p><p><b> //Motor </b></p><p> sbit F1 = P3^0; </p><p> sbit F2 = P3^1; </p><p> sbit F3 = P3^2;
33、</p><p> sbit F4 = P3^3; </p><p> //sbit TIM=P3^4; </p><p> #define m 500 </p><p> /////////////////////////////////////// </p><p><b> //步進(jìn)電機(jī)驅(qū)動
34、</b></p><p> unsigned char MotorStep=0; </p><p> unsigned int MotorTimer = 0; </p><p> unsigned int TIM,CT,STEP=0,TIM1,num; </p><p> void InitMotor() { </
35、p><p><b> F1 = 1; </b></p><p><b> F2 = 1; </b></p><p><b> F3 = 1; </b></p><p><b> F4 = 1; </b></p><p><
36、b> } </b></p><p> void SetMotor() </p><p><b> { </b></p><p> // if(Speed == 0) return; </p><p> if(P1&0x01)//單四 </p><p><
37、b> { </b></p><p> if(P1&0x10)// 正 </p><p> switch(MotorStep) </p><p><b> { </b></p><p><b> case 0: </b></p><p>&
38、lt;b> if(TIM) </b></p><p><b> { </b></p><p> P3=0xb1;//F1 = 0; F2 = 0; F3 = 0;F4 = 1; </p><p> MotorStep = 1; </p><p><b> TIM=0; </
39、b></p><p><b> } </b></p><p><b> break; </b></p><p><b> case 1: </b></p><p><b> if(TIM)</b></p><p>&l
40、t;b> { </b></p><p> P3=0xb2;//F1 = 1; F2 = 0;F3 = 0; F4 = 0; </p><p> MotorStep = 2; </p><p><b> TIM=0; </b></p><p><b> } </b><
41、;/p><p><b> break; </b></p><p><b> case 2: </b></p><p><b> if(TIM) </b></p><p><b> { </b></p><p> P3=0xb4
42、;//F1 = 0; F2 = 1; F3 = 0; F4 = 0; MotorStep = 3; </p><p><b> TIM=0; </b></p><p><b> } </b></p><p><b> break; </b></p>&l
43、t;p><b> case 3: </b></p><p><b> if(TIM) </b></p><p><b> { </b></p><p> P3=0xb8;//F1 = 0; F2 = 0; F3 = 1; F4 = 0; </p><p> M
44、otorStep = 0; </p><p><b> TIM=0; </b></p><p><b> } </b></p><p><b> break; </b></p><p><b> } </b></p><p>
45、; else //單四反</p><p> switch(MotorStep) </p><p><b> { </b></p><p><b> case 0: </b></p><p><b> if(TIM) </b></p><p>
46、;<b> { </b></p><p> P3=0x71;//F1 = 0; F2 = 0; F3 = 0;F4 = 1; </p><p> MotorStep = 1; </p><p><b> TIM=0; </b></p><p><b> } </b>
47、;</p><p><b> break; </b></p><p><b> case 1: </b></p><p><b> if(TIM) </b></p><p><b> { </b></p><p> P3
48、=0x78;//F1 = 0; F2 = 0;F3 = 1; F4 = 0; </p><p> MotorStep = 2; </p><p><b> TIM=0; </b></p><p><b> } </b></p><p><b> break; </b>&
49、lt;/p><p> case 2: if(TIM) </p><p><b> { </b></p><p> P3=0x74;//F1 = 0; F2 = 1; F3 = 0; F4 = 0; MotorStep = 3; </p><p><b> T
50、IM=0; </b></p><p><b> }</b></p><p><b> break; </b></p><p><b> case 3: </b></p><p><b> if(TIM) </b></p>
51、<p> { STEP++; </p><p> P3=0x72;//F1 = 1; F2 = 0; F3 = 0; F4 = 0; </p><p> MotorStep = 0; </p><p><b> TIM=0; </b></p><p><b> } </b><
52、;/p><p><b> break; </b></p><p><b> } } </b></p><p> else if(P1&0x02) //雙四正轉(zhuǎn) </p><p><b> { </b></p><p> if(P1&
53、;0x10)//則正轉(zhuǎn) </p><p> switch(MotorStep) </p><p><b> { </b></p><p><b> case 0: </b></p><p><b> if(TIM) </b></p><p>
54、<b> { </b></p><p> P3=0xb3;//F1 = 0; F2 = 0; F3 = 1;F4 = 1; </p><p> MotorStep = 1; </p><p><b> TIM=0; </b></p><p><b> } </b>
55、</p><p><b> break; </b></p><p><b> case 1: </b></p><p><b> if(TIM) </b></p><p><b> { </b></p><p> P3=0
56、xb6;//F1 = 0; F2 = 1;F3 = 1; F4 = 0; </p><p> MotorStep = 2; </p><p><b> TIM=0; </b></p><p><b> } </b></p><p><b> break; </b><
57、;/p><p><b> case 2: </b></p><p><b> if(TIM) </b></p><p><b> { </b></p><p> P3=0xbc;//F1 = 1; F2 = 1; F3 = 0; F4 = 0; </p>
58、<p> MotorStep = 3; </p><p><b> TIM=0; </b></p><p><b> } </b></p><p><b> break; </b></p><p><b> case 3: </b>&l
59、t;/p><p><b> if(TIM) </b></p><p><b> { </b></p><p> P3=0xb9; //F1 = 1; F2 = 0; F3 = 0; F4 = 1; </p><p> MotorStep = 0; </p><p>&l
60、t;b> TIM=0; </b></p><p><b> } </b></p><p><b> break; </b></p><p><b> } </b></p><p> else //雙四反 </p><p>
61、switch(MotorStep)</p><p><b> { </b></p><p><b> case 0: </b></p><p><b> if(TIM) </b></p><p><b> { </b></p>&
62、lt;p> P3=0x73;//F1 = 0; F2 = 0;F3 = 1;F4 = 1; </p><p> MotorStep = 1; </p><p><b> TIM=0; </b></p><p><b> } </b></p><p><b> break;
63、</b></p><p><b> case 1: </b></p><p><b> if(TIM) </b></p><p><b> { </b></p><p> P3=0x79;// F1 = 1; F2 = 0; F3 = 0;F4 = 1
64、; </p><p> MotorStep = 2; </p><p><b> TIM=0; </b></p><p><b> } </b></p><p><b> break; </b></p><p><b> case 2
65、: </b></p><p><b> if(TIM) </b></p><p><b> { </b></p><p> P3=0x7c;//F1 = 1; F2 = 1;F3 = 0;F4 = 0; </p><p> MotorStep = 3; </p>&
66、lt;p><b> TIM=0; </b></p><p><b> }</b></p><p><b> break; </b></p><p><b> case 3: </b></p><p><b> if(TIM) &l
67、t;/b></p><p><b> { </b></p><p> P3=0x76;//F1 = 0; F2 = 1; F3 = 1; F4 = 0; </p><p> MotorStep = 0; </p><p><b> TIM=0; </b></p><
68、;p><b> } </b></p><p><b> break; </b></p><p><b> }} </b></p><p> else if(P1&0x04)//八拍 </p><p> { if(P1&0x10)//則正轉(zhuǎn) <
69、;/p><p> switch(MotorStep) </p><p><b> { </b></p><p><b> case 0: </b></p><p><b> if(TIM) </b></p><p><b> { &l
70、t;/b></p><p> P3=0xb1;//F1 = 0; F2 = 0; F3 = 0;F4 = 1; </p><p> MotorStep = 1; </p><p><b> TIM=0; </b></p><p><b> } </b></p><
71、;p><b> break; </b></p><p><b> case 1: </b></p><p><b> if(TIM) </b></p><p><b> { </b></p><p> P3=0xb3;//F1 = 1;
72、 F2 = 0;F3 = 0; F4 = 1;</p><p> MotorStep = 2; </p><p><b> TIM=0; </b></p><p><b> } </b></p><p><b> break; </b></p><p
73、><b> case 2: </b></p><p><b> if(TIM) </b></p><p> { </p><p> P3=0xb2;//F1 = 1; F2 = 0; F3 = 0; F4 = 0; </p><p> MotorStep =
74、3; </p><p><b> TIM=0; </b></p><p><b> } </b></p><p><b> break; </b></p><p><b> case 3: </b></p><p><
75、b> if(TIM) </b></p><p><b> { </b></p><p> P3=0xb6;//F1 = 1; F2 = 1; F3 = 0; F4 = 0; </p><p> MotorStep = 4; </p><p><b> TIM=0; </b&g
76、t;</p><p><b> } </b></p><p><b> break; </b></p><p><b> case 4: </b></p><p><b> if(TIM) </b></p><p><
77、b> { </b></p><p> P3=0xb4;// F1 = 0; F2 = 1; F3 = 0; F4 = 0; </p><p> MotorStep = 5; </p><p><b> TIM=0;</b></p><p><b> } </b><
78、/p><p><b> break; </b></p><p><b> case 5: </b></p><p><b> if(TIM) </b></p><p><b> { </b></p><p> P3=0xbc
79、;//F1 = 0; F2 = 1; F3 = 1; F4 = 0; </p><p> MotorStep = 6; </p><p><b> TIM=0; </b></p><p><b> } </b></p><p><b> break; </b></
80、p><p><b> case 6: </b></p><p><b> if(TIM) </b></p><p><b> { </b></p><p> P3=0xb8;//F1 = 0; F2 = 0; F3 = 1; F4 = 0; </p><
81、;p> MotorStep = 7; </p><p><b> TIM=0; </b></p><p><b> } </b></p><p><b> break; </b></p><p><b> case 7: </b></
82、p><p><b> if(TIM) </b></p><p><b> { </b></p><p> P3=0xb9;//F1 = 0; F2 = 0; F3 = 1; F4 = 1; </p><p> MotorStep = 0; </p><p><b&
83、gt; TIM=0; </b></p><p><b> } </b></p><p><b> break; </b></p><p><b> } </b></p><p> else //八拍反 </p><p> swit
84、ch(MotorStep)</p><p><b> { </b></p><p><b> case 0: </b></p><p><b> if(TIM) </b></p><p><b> { </b></p><p&
85、gt; P3=0x71;// F1 = 0; F2 = 0; F3 = 0;F4 = 1; </p><p> MotorStep = 1; </p><p><b> TIM=0; </b></p><p><b> } </b></p><p><b> break; &
86、lt;/b></p><p><b> case 1: </b></p><p><b> if(TIM) </b></p><p><b> { </b></p><p> P3=0x79;// F1 = 0; F2 = 0;F3 = 1; F4 = 1; &
87、lt;/p><p> MotorStep = 2; </p><p><b> TIM=0; </b></p><p><b> } </b></p><p><b> break; </b></p><p><b> case 2: &
88、lt;/b></p><p><b> if(TIM) </b></p><p><b> { </b></p><p> P3=0x78;//P3=0x78;F1 = 0; F2 = 0; F3 = 1; F4 = 0; </p><p> MotorStep = 3; <
89、/p><p><b> TIM=0; </b></p><p><b> } </b></p><p><b> break; </b></p><p><b> case 3: </b></p><p><b>
90、if(TIM) </b></p><p><b> { </b></p><p> P3=0x7c;//F1 = 0; F2 = 1; F3 = 1; F4 = 0; </p><p> MotorStep = 4; </p><p><b> TIM=0; </b></
91、p><p><b> } </b></p><p><b> break; </b></p><p><b> case 4: </b></p><p><b> if(TIM) </b></p><p><b>
92、{ </b></p><p> P3=0x74;// F1 = 0; F2 = 1; F3 = 0; F4 = 0; </p><p> MotorStep = 5; </p><p><b> TIM=0; </b></p><p><b> } </b></p>
93、<p><b> break; </b></p><p><b> case 5: </b></p><p><b> if(TIM) </b></p><p><b> { </b></p><p> P3=0x76;// F1
94、 = 1; F2 = 1; F3 = 0; F4 = 0; </p><p> MotorStep = 6; </p><p><b> TIM=0; </b></p><p><b> } </b></p><p><b> break; </b></p>
95、<p><b> case 6: </b></p><p><b> if(TIM) </b></p><p><b> { </b></p><p> P3=0x72;//F1 = 1; F2 = 0; F3 = 0; F4 = 0; </p><p>
96、; MotorStep = 7;</p><p><b> TIM=0; </b></p><p><b> } </b></p><p><b> break; </b></p><p><b> case 7: </b></p>
97、<p><b> if(TIM) </b></p><p><b> { </b></p><p> P3=0x73;//F1 = 1; F2 = 0; F3 = 0; F4 = 1; </p><p> MotorStep = 0; </p><p><b> T
98、IM=0; </b></p><p><b> } </b></p><p><b> break; </b></p><p><b> }} </b></p><p><b> } </b></p><p>
99、 void delay2() //延時50us子程序 </p><p> { int i,j; </p><p> for(i=0;i<1;i++) </p><p> for(j=0;j<10;j++); </p><p><b> } </b></p><p>
100、; void system_Ini() </p><p><b> { </b></p><p> TMOD|= 0x11;//00010001 </p><p> TH0=0xDC; //11.0592M </p><p> TL0=0x00; </p><p> IE = 0x8
101、A; </p><p> TR0 = 1; </p><p><b> } </b></p><p> void display(int n) </p><p> {unsigned char </p><p> tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0
102、x6d,0x7d,0x07,0x7f,0x6f};//{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; </p><p> unsigned char i,k,t,num[4]; </p><p> num[0]=(m-n)%10; //將總步數(shù)的各位分別存在num數(shù)組中 </p><p
103、> num[1]=((m-n)/10)%10; </p><p> num[2]=((m-n)/100)%10; </p><p> num[3]=((m-n)/1000)%10; </p><p> for(t=0;t<50;t++) //掃描50次 </p><p> { k=0x08;
104、 //位選碼指向最左一位,第四位 </p><p> for(i=0;i<4;i++) </p><p> { P2=k; //從P2口輸入位選碼 </p><p> P0=~(tab[num[i]]); //取出顯示碼并從P0口輸出顯示碼 </p><p&g
105、t; k=k>>1; //求下一個位選碼 </p><p> delay2(); </p><p><b> } </b></p><p><b> } </b></p><p><b> } </b></p>
106、<p><b> main() </b></p><p> { system_Ini(); </p><p> InitMotor(); </p><p><b> while(1) </b></p><p><b> { </b></p&
107、gt;<p> while(!(P1&0x08)) //判斷是否啟動若沒啟動則重新判斷</p><p> P3=0xc0; //停止燈亮 </p><p> SetMotor(); </p><p> if(STEP==m) </p><p><b> { </b&
108、gt;</p><p><b> P3=0xdf; </b></p><p> while(1); </p><p><b> } </b></p><p> display(STEP); </p><p><b> } </b></p&
109、gt;<p><b> } </b></p><p> /************************************* </p><p> [ t1 (1ms)中斷] 中斷中做 PWM 輸出 </p><p> *************************************/ </p>
110、<p> void Tzd(void) interrupt 1 </p><p><b> { </b></p><p> TH0 = (65536-917)/256; //11.0592 定時1ms </p><p> TL0 = (65536-917)%256; </p><p>&
111、lt;b> //CT++; </b></p><p> if( CT++==20) //20ms后中斷 </p><p><b> {</b></p><p> TIM=1; STEP++; CT=0; </p><p><b> }</b>
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 微型計算機(jī)控制技術(shù)課程設(shè)計---步進(jìn)電機(jī)控制系統(tǒng)設(shè)計
- 微機(jī)控制技術(shù)(計算機(jī)控制技術(shù))課程設(shè)計——步進(jìn)電機(jī)控制系統(tǒng)設(shè)計
- 計算機(jī)控制技術(shù)課程設(shè)計
- 計算機(jī)控制技術(shù)課程設(shè)計
- 計算機(jī)控制技術(shù)課程設(shè)計
- 計算機(jī)控制技術(shù)課程設(shè)計
- 微型計算機(jī)控制技術(shù)課程設(shè)計---步進(jìn)電機(jī)角度控制
- 溫度控制系統(tǒng)設(shè)計-計算機(jī)控制技術(shù)課程設(shè)計
- 溫度控制系統(tǒng)設(shè)計——計算機(jī)控制技術(shù)課程設(shè)計
- 計算機(jī)控制技術(shù)課程設(shè)計-溫度控制系統(tǒng)設(shè)計
- 計算機(jī)控制課程設(shè)計--步進(jìn)電機(jī)角度控制
- 計算機(jī)控制技術(shù)課程設(shè)計 (2)
- 計算機(jī)控制課程設(shè)計---達(dá)林算法計算機(jī)控制系統(tǒng)設(shè)計
- 控制系統(tǒng)設(shè)計與仿真-計算機(jī)控制技術(shù)課程設(shè)計
- 計算機(jī)控制技術(shù)課程簡介
- 控制儀表與計算機(jī)控制技術(shù)課程設(shè)計
- 計算機(jī)控制技術(shù)課程設(shè)計--油庫計算機(jī)監(jiān)控系統(tǒng)硬件設(shè)計
- 計算機(jī)控制技術(shù)課程設(shè)計-溫度采集
- 計算機(jī)控制課程設(shè)計---步進(jìn)電機(jī)的角度控制設(shè)計
- 計算機(jī)控制技術(shù)課程設(shè)計--具有純滯后一階慣性系統(tǒng)的計算機(jī)控制系統(tǒng)設(shè)計
評論
0/150
提交評論