版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 摘要</b></p><p> 本設(shè)計(jì)詳細(xì)介紹了基于單片機(jī)的四相步進(jìn)電機(jī)控制系統(tǒng)。步進(jìn)電機(jī)通過(guò)輸入脈沖信號(hào)進(jìn)行控制,即電機(jī)的總轉(zhuǎn)動(dòng)角度由輸入脈沖總數(shù)決定,因此,單片機(jī)通過(guò)向步進(jìn)電機(jī)發(fā)送控制信號(hào)就能實(shí)現(xiàn)對(duì)步進(jìn)電機(jī)的控制。 單片機(jī)實(shí)現(xiàn)的步進(jìn)電機(jī)控制系統(tǒng)具有成本低、使用靈活的特點(diǎn),該系統(tǒng)采用80C51單片機(jī)作為主控芯片,來(lái)完成對(duì)步進(jìn)電機(jī)轉(zhuǎn)動(dòng)及LED顯示的控制
2、。 本設(shè)計(jì)主要由單片機(jī)80C51,4相步進(jìn)電機(jī),7段數(shù)碼管及一些其他相關(guān)元件設(shè)計(jì)而成,分為按鍵選擇工作狀態(tài)模塊、步進(jìn)電機(jī)工作模塊、LED二極管顯示工作狀態(tài)模塊以及4位數(shù)碼管顯示步數(shù)模塊。可以通過(guò)開(kāi)關(guān)來(lái)控制系統(tǒng)的啟/停工作,當(dāng)系統(tǒng)運(yùn)轉(zhuǎn)時(shí),用開(kāi)關(guān)來(lái)控制方向,并使相應(yīng)的指示燈亮起,同樣由開(kāi)關(guān)來(lái)選擇工作模式。運(yùn)轉(zhuǎn)時(shí),用4位7段數(shù)碼管來(lái)輸出步數(shù)。最后根據(jù)思路所設(shè)計(jì)出來(lái)的硬件圖設(shè)計(jì)相適應(yīng)的軟件。 電路結(jié)構(gòu)簡(jiǎn)單,設(shè)計(jì)思路清晰,同
3、時(shí)利用KEIL和Proteus進(jìn)行聯(lián)調(diào)仿真,結(jié)果比較直觀。仿真結(jié)果收到了預(yù)期的效果。 關(guān)鍵字:四相步進(jìn)電機(jī)、單片機(jī)、PROTEUS仿真 </p><p><b> 1設(shè)計(jì)任務(wù)及要求</b></p><p> 設(shè)計(jì)一個(gè)四相步進(jìn)電機(jī)控制系統(tǒng),要求系統(tǒng)具有如下功能:用SW11-SW13作為通電方式選擇鍵,SW11為四相單四拍, SW12為四相雙四拍,S
4、W13為四相八拍;SW14為啟動(dòng)/停止控制、SW1方向控制;用4位LED數(shù)碼管顯示工作步數(shù)。用3個(gè)發(fā)光二極管顯示狀態(tài);正轉(zhuǎn)時(shí)紅燈亮,反轉(zhuǎn)時(shí)黃燈亮,不轉(zhuǎn)時(shí)綠燈亮。</p><p><b> 2方案論證 </b></p><p> 2.1 設(shè)計(jì)思路與方案 </p><p> 本次設(shè)計(jì)是一個(gè)對(duì)于四相步進(jìn)電機(jī)的控制系統(tǒng),而單片機(jī)實(shí)現(xiàn)的步進(jìn)電機(jī)控制
5、系統(tǒng)具有成本低、使用靈活的特點(diǎn),此系統(tǒng)選用51單片機(jī)即可。 根據(jù)要求整個(gè)設(shè)計(jì)大體可分為四塊:</p><p> 一是5個(gè)按鍵SW11-SW13將用戶所需來(lái)選擇步進(jìn)電機(jī)的工作狀態(tài)。我們將開(kāi)關(guān)連入單片機(jī)的P1口,通過(guò)按鍵開(kāi)關(guān)的高低電平狀態(tài)來(lái)讀入我們所需的控制信號(hào)。硬件上直接把開(kāi)關(guān)分別接在單片機(jī)的接口上,通過(guò)查詢端口信號(hào)來(lái)動(dòng)作,將控制信號(hào)處理。 二是3個(gè)LED發(fā)光二極管的顯示步進(jìn)電機(jī)工作狀態(tài)模塊。在設(shè)計(jì)要
6、求中步進(jìn)電機(jī)正轉(zhuǎn)是紅燈亮,反轉(zhuǎn)是黃燈亮,停止不轉(zhuǎn)是綠燈亮。設(shè)計(jì)中將3個(gè)發(fā)光二極管分別接到單片機(jī)P3口受到單片機(jī)的輸出信號(hào)控制。 三是步進(jìn)電機(jī)的工作模塊。要想步進(jìn)電機(jī)按照我們想要的方式運(yùn)轉(zhuǎn),將步進(jìn)電機(jī)一端接到+12V的電源,一端接到單片機(jī)P3口,受單片機(jī)的輸出信號(hào)控制。 </p><p> 四是4位數(shù)碼管顯示步數(shù)的模塊。設(shè)計(jì)中主要是利用軟件編程的算法來(lái)實(shí)現(xiàn)步數(shù)的累計(jì)和顯示,同樣,4位數(shù)碼管接到單片機(jī)的P0口
7、和P2口受單片機(jī)輸出信號(hào)的控制,在硬件上使用的是動(dòng)態(tài)顯示的接法。 由此可知所需要設(shè)計(jì)一個(gè)系統(tǒng),可以通過(guò)不同按鍵來(lái)選擇步進(jìn)電機(jī)的工作方式,且有LED發(fā)光二極管來(lái)顯示電機(jī)對(duì)應(yīng)的工作狀態(tài),除此之外還能在數(shù)碼管上顯示出步進(jìn)電機(jī)轉(zhuǎn)動(dòng)的步數(shù)。</p><p> 2.2總體設(shè)計(jì)框圖 </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)的原理說(shuō)明</p><p> 3.1 步進(jìn)電機(jī)控制工作原理</p><p> 3.1.1步進(jìn)電機(jī)的工作原理</p><p> 步進(jìn)電機(jī)通過(guò)輸入脈沖信號(hào)進(jìn)行控制,即電機(jī)的總轉(zhuǎn)動(dòng)角度由輸入脈沖總數(shù)決定,而電
9、機(jī)的轉(zhuǎn)速由脈沖信號(hào)頻率決定。步進(jìn)電機(jī)的驅(qū)動(dòng)電路是根據(jù)單片機(jī)產(chǎn)生的控制信號(hào)進(jìn)行工作。因此,單片機(jī)通過(guò)向步進(jìn)電機(jī)驅(qū)動(dòng)電路發(fā)送控制信號(hào)就能實(shí)現(xiàn)對(duì)步進(jìn)電機(jī)的控制。 如圖2所示,開(kāi)始時(shí),開(kāi)關(guān)SB接通電源,SA、SC、SD斷開(kāi),B相磁極和轉(zhuǎn)子0、3號(hào)齒對(duì)齊,同時(shí),轉(zhuǎn)子的1、4號(hào)齒就和C、D相繞組磁極產(chǎn)生錯(cuò)齒,2、5號(hào)齒就和D、A相繞組磁極產(chǎn)生錯(cuò)齒。 當(dāng)開(kāi)關(guān)SC接通電源,SB、SA、SD斷開(kāi)時(shí),由于C相繞組的磁力線和1、4號(hào)齒之間磁
10、力線的作用,使轉(zhuǎn)子轉(zhuǎn)動(dòng),1、4號(hào)齒和C相繞組的磁極對(duì)齊。而0、3號(hào)齒和A、B相繞組產(chǎn)生錯(cuò)齒,2、5號(hào)齒就和A、D相繞組磁極產(chǎn)生錯(cuò)齒。依次類推A、B、C、D四相繞組輪流供電則轉(zhuǎn)子會(huì)沿著A、B、C、D方向轉(zhuǎn)動(dòng)。 四相步進(jìn)電機(jī)按照通電順序的不同,可分為單四拍、雙四拍、八拍三種工作方式。單四拍與雙四拍的步距角相等,但單四拍的轉(zhuǎn)動(dòng)力矩小。八拍工作方式的步距角是單四拍與雙四拍的一半,因此,八拍工作方式既可以保持較高的轉(zhuǎn)動(dòng)力矩又可以提
11、高控制精度。 </p><p> 圖2 步進(jìn)電機(jī)工作原理圖</p><p> 3.1.2 步進(jìn)電機(jī)的啟??刂?</p><p> 步進(jìn)電機(jī)由于其電氣特性,運(yùn)轉(zhuǎn)時(shí)會(huì)有步進(jìn)感 ,即振動(dòng)感。為了使電機(jī)轉(zhuǎn)動(dòng)平滑 ,減小振動(dòng) ,可在步進(jìn)電機(jī)控制脈沖的上升沿和下降沿采用細(xì)分的梯形波 ,可以減小步進(jìn)電機(jī)的步進(jìn)角 ,提高電機(jī)運(yùn)行的平穩(wěn)性。在步進(jìn)電機(jī)停轉(zhuǎn)時(shí) ,為了防止因慣性而使
12、電機(jī)軸產(chǎn)生順滑,則需采用合適的鎖定波形,產(chǎn)生鎖定磁力矩 ,鎖定步進(jìn)電機(jī)的轉(zhuǎn)軸,使步進(jìn)電機(jī)的轉(zhuǎn)軸不能自由轉(zhuǎn)動(dòng)。</p><p> 3.1.3 步進(jìn)電機(jī)的轉(zhuǎn)向控制 </p><p> 如果給定工作方式正序換相通電,步進(jìn)電機(jī)正轉(zhuǎn)。若步進(jìn)電機(jī)的勵(lì)磁方式為四相八拍,即 A-AB-B-BC-C-CD-D-DA-A。如果按反序通電換相 ,即則電機(jī)就反轉(zhuǎn)。其他方式情況類似。 </p>&
13、lt;p> 3.2步數(shù)顯示模塊原理 </p><p> 步數(shù)顯示模塊和工作狀態(tài)顯示模塊,都是通過(guò)單片機(jī)輸出信號(hào)控制發(fā)光二極管LED的亮滅。其中步數(shù)顯示模塊中LED構(gòu)成數(shù)碼管,要求顯示4位十進(jìn)制數(shù)故用到4位數(shù)碼管。要控制多位的顯示電路,需要有字段控制和字位控制。控制方式分為靜態(tài)顯示方式和動(dòng)態(tài)顯示方式。靜態(tài)顯示方式,每一位的顯示器都需要配一個(gè)8位輸出口來(lái)輸出該字位的七段碼,需要片外擴(kuò)展輸出口。而動(dòng)態(tài)顯示方式
14、將各數(shù)碼管的對(duì)應(yīng)字段的引腳都并聯(lián)在一起,線路簡(jiǎn)單,減少接口,不需片外擴(kuò)展。這里選用動(dòng)態(tài)顯示方式。 </p><p><b> 4硬件設(shè)計(jì) </b></p><p> 4.1系統(tǒng)總原理圖 </p><p><b> 圖3 系統(tǒng)總原理圖</b></p><p> 根據(jù)設(shè)計(jì)要求用PROTEUS所做
15、的硬件連線圖如圖3。</p><p> 4.2各部分硬件原理圖設(shè)計(jì) </p><p> 4.2.1 單片機(jī)控制模塊 </p><p> 單片機(jī)選用最經(jīng)典的80C51,其4個(gè)I/O口都要用到,P3接步進(jìn)電機(jī)驅(qū)動(dòng)電路及工作狀態(tài)顯示模塊,P0和P2分別接步數(shù)顯示中對(duì)數(shù)碼管的字段控制及數(shù)碼管片選,P1接工作狀態(tài)控制電路,時(shí)鐘用內(nèi)部方式需外接晶體振蕩器。硬件圖如圖4所示
16、。 </p><p> 圖4 單片機(jī)模塊原理圖</p><p> 此設(shè)計(jì)中接的是12MHZ的晶振,故一個(gè)機(jī)器周期為1/12us。根據(jù)經(jīng)驗(yàn)數(shù)據(jù),與晶振一起的兩個(gè)電容設(shè)為15PF。單片機(jī)的VCC和GROUD都隱藏了,已自動(dòng)接好,VCC應(yīng)設(shè)為+5V。 </p><p> 4.2.2按鍵選擇工作狀態(tài)模塊 </p><p> 5個(gè)按鍵開(kāi)關(guān)一端
17、通過(guò)電阻接高電平,另一端全部接到地,其中接高電平的一端對(duì)應(yīng)也接到單片機(jī)的P1口分別為P1.0~P1.4。當(dāng)開(kāi)關(guān)斷開(kāi),就是輸入到單片機(jī)對(duì)應(yīng)端口高電平,而開(kāi)關(guān)閉合,是使端口接地,輸入低電平。所以這個(gè)設(shè)計(jì)中開(kāi)關(guān)斷開(kāi)時(shí)才是有效的。各按鍵功能: (1)SW11~SW13為工作模式控制開(kāi)關(guān),SW11接電時(shí),為步進(jìn)電機(jī)單四拍工作模式;SW12接電時(shí),為步進(jìn)電機(jī)雙四拍工作模式;SW13接電時(shí),步進(jìn)電機(jī)工作模式為四相八拍。 (2)SW14
18、為啟/停控制開(kāi)關(guān),控制整個(gè)系統(tǒng)的開(kāi)啟和關(guān)閉。 (3)SW1為正/反轉(zhuǎn)控制開(kāi)關(guān),控制步進(jìn)電機(jī)的轉(zhuǎn)向。</p><p> 圖5 按鍵模塊原理圖</p><p> 4.2.3步進(jìn)電機(jī)工作模塊 </p><p> 將四相步進(jìn)電機(jī)四個(gè)端口直接接到單片機(jī)P3.0~P3.3即可,另兩個(gè)端口接到+12V的高電平給步進(jìn)電機(jī)供電。只需在軟件編寫上控制算法便可以調(diào)節(jié)這四個(gè)端
19、口的高低電平來(lái)控制步進(jìn)電機(jī)的開(kāi)啟與停止,正反轉(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í)際上是由七個(gè)發(fā)光管組成8字形構(gòu)成的,加上小數(shù)點(diǎn)就是8個(gè)。這些段分別由字母a,b,c,d,e,f,g,dp來(lái)表示。當(dāng)數(shù)碼管特定的段加上電壓后,這些特定的段就會(huì)發(fā)亮以形成我們眼睛看到的字樣了。通過(guò)分時(shí)輪流控制各個(gè)LED數(shù)碼管的COM端,就使各個(gè)數(shù)碼管輪流受控顯示,這就是動(dòng)態(tài)驅(qū)動(dòng)。 P0口和P2
21、口的前四個(gè)分別接步數(shù)顯示中對(duì)數(shù)碼管的字段控制及數(shù)碼管片選,如圖8所示,這里主要是由軟件算法來(lái)實(shí)現(xiàn)單片機(jī)輸出的控制。</p><p> 圖8 數(shù)碼管顯示模塊原理圖</p><p><b> 5軟件設(shè)計(jì)</b></p><p> 5.1系統(tǒng)總體設(shè)計(jì) </p><p><b> 圖9 系統(tǒng)總流程圖<
22、;/b></p><p> 設(shè)計(jì)說(shuō)明:首先是數(shù)碼管顯示清零,單片機(jī)再讀入P1口輸入的按鍵狀態(tài),先判斷是否啟動(dòng),如果沒(méi)有啟動(dòng)則是綠燈亮并再判斷,如果啟動(dòng)了,就接著判斷所需的電機(jī)工作模式,再讀入P1口狀態(tài)判斷電機(jī)的轉(zhuǎn)向,輸出控制信號(hào)為正轉(zhuǎn)紅燈亮,反轉(zhuǎn)黃燈亮,由此可以讓步進(jìn)電機(jī)按照指定的方式運(yùn)轉(zhuǎn),并且累計(jì)步數(shù)再顯示到數(shù)碼管上。最后檢驗(yàn)P1口,是否狀態(tài)改變,如果改變則步數(shù)清零重新開(kāi)始判斷,不改變則繼續(xù)轉(zhuǎn)動(dòng)。 &l
23、t;/p><p> 5.2步進(jìn)電機(jī)工作模塊 </p><p> 5.2.1步進(jìn)電機(jī)的工作方式說(shuō)明 </p><p> (1)四相單四拍工作方式 </p><p> 在這種工作方式下,A、B、C、D三相輪流通電,電流切換三次,磁場(chǎng)旋轉(zhuǎn)一周,轉(zhuǎn)子向前轉(zhuǎn)過(guò)一個(gè)齒距角。因此這種通電方式叫做三相單三拍工作方式。這時(shí)步距角(度)為:</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)于八拍控制方式中去掉單四拍后的四個(gè)位置。它的步距角計(jì)算公式與單四拍時(shí)的公式相同。 </p><p> 表2 雙四拍的相位控制 </p><p> (3)四相八拍工作方式 在這種工作方式下,繞組以A—AB—B—BC—C—CD—D—DA—A時(shí)序(或反時(shí)序)轉(zhuǎn)換8次,磁場(chǎng)旋轉(zhuǎn)一周,轉(zhuǎn)子前進(jìn)一個(gè)齒距每次切換均使轉(zhuǎn)子轉(zhuǎn)動(dòng)0.9°,故這種通電方式稱為四相
26、八柏工作方式。其步距角(度)為:</p><p> =360/2mz=180/mz</p><p> 表3 八拍的數(shù)學(xué)模型</p><p> 5.2.2設(shè)計(jì)說(shuō)明及流程圖</p><p> 設(shè)計(jì)說(shuō)明:在此設(shè)計(jì)中,采用的是四相步進(jìn)電機(jī),對(duì)于步進(jìn)電機(jī)模塊的程序設(shè)計(jì)采用循環(huán)程序設(shè)計(jì)方法。先把正反轉(zhuǎn)向的控制模型存放在內(nèi)存單元中,然后再逐一從單元
27、中取出控制模塊并輸出。首先啟動(dòng),通過(guò)P1口讀入所需的工作方式,即選擇步進(jìn)電機(jī)的拍數(shù),然后讀入正反轉(zhuǎn)的控制,再來(lái)輸出對(duì)應(yīng)的控制模型來(lái)驅(qū)動(dòng)步進(jìn)電機(jī)轉(zhuǎn)動(dòng)。 5.3數(shù)碼管步數(shù)顯示模塊 </p><p> 設(shè)計(jì)說(shuō)明:步數(shù)顯示模塊是整個(gè)程序里的一個(gè)子程序。其是用4位八段數(shù)碼管來(lái)顯示工作步數(shù)。先將要顯示的數(shù)化為10進(jìn)制數(shù),每位分別儲(chǔ)存,從P0口輸出顯示碼,P2口輸入位選碼,需要一定的延時(shí),讓此位數(shù)字顯示閃爍出來(lái)。然后修改數(shù)
28、組地址,求下一位位選碼繼續(xù)顯示,直至輸出四位數(shù)。這個(gè)掃描過(guò)程重復(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)啟動(dòng),SW14接高電平,電機(jī)開(kāi)始轉(zhuǎn)動(dòng)。LED四位顯示屏顯示工作步數(shù),LED指示燈紅燈亮顯示電機(jī)正轉(zhuǎn)的狀態(tài)。 </p><p><b> 7心得體會(huì)</b></p><p> 計(jì)算機(jī)控制技術(shù)是一門應(yīng)用性很強(qiáng)綜合性很強(qiáng)的學(xué)科,在這次課設(shè)中,我充分感受到了這一點(diǎn)。在老師給的課題之中,是來(lái)自于各個(gè)方面各個(gè)領(lǐng)域的應(yīng)用,不得不說(shuō),計(jì)算機(jī)控制很強(qiáng)大,確實(shí)改變了我們的生活
30、。 本次課設(shè)收獲就是關(guān)于軟件的使用了。PROTEUS,KEIL51,以前好像也用過(guò)但是平時(shí)較少接觸,這次的課設(shè)讓我比較熟練的掌握了這兩個(gè)學(xué)習(xí)軟件強(qiáng)大的功能,而且發(fā)現(xiàn)從PROTEUS里導(dǎo)出來(lái)的電路圖特別漂亮和清晰。 計(jì)算機(jī)控制技術(shù)一直是自己比較喜歡的一門學(xué)科,拿到課程設(shè)計(jì)的題目也想著可以好好檢驗(yàn)自己的學(xué)習(xí)成果,一直認(rèn)為,期末考試是所謂的應(yīng)試教育,而課程設(shè)計(jì)似乎更加地考驗(yàn)所學(xué)的知識(shí),所謂實(shí)踐與理論相結(jié)合就是這個(gè)道理吧。
31、課程設(shè)計(jì)總能讓我有一種我站在山面前的感覺(jué),看上去比較陌生高大,但是攀登的技巧早已在平時(shí)的學(xué)習(xí)中習(xí)得,不斷地去攀登,不斷地在回味課堂上老師講的東西,書本上的東西,這是一種奇妙的體驗(yàn)。 我明白遇到的電路或者課題并不一定在你的知識(shí)范圍之內(nèi),而面對(duì)新的東西我們要冷靜地去尋求解決之道,去搜尋網(wǎng)絡(luò)資源,圖書館資源以及和同學(xué)們的討論之中,再結(jié)合自己所學(xué)過(guò)的知識(shí)來(lái)吃透理解那些未知</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ū)動(dòng)
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() //延時(shí)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; //求下一個(gè)位選碼 </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)) //判斷是否啟動(dòng)若沒(méi)啟動(dòng)則重新判斷</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 定時(shí)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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 微型計(jì)算機(jī)控制技術(shù)課程設(shè)計(jì)---步進(jìn)電機(jī)控制系統(tǒng)設(shè)計(jì)
- 微機(jī)控制技術(shù)(計(jì)算機(jī)控制技術(shù))課程設(shè)計(jì)——步進(jìn)電機(jī)控制系統(tǒng)設(shè)計(jì)
- 計(jì)算機(jī)控制技術(shù)課程設(shè)計(jì)
- 計(jì)算機(jī)控制技術(shù)課程設(shè)計(jì)
- 計(jì)算機(jī)控制技術(shù)課程設(shè)計(jì)
- 計(jì)算機(jī)控制技術(shù)課程設(shè)計(jì)
- 微型計(jì)算機(jī)控制技術(shù)課程設(shè)計(jì)---步進(jìn)電機(jī)角度控制
- 溫度控制系統(tǒng)設(shè)計(jì)-計(jì)算機(jī)控制技術(shù)課程設(shè)計(jì)
- 溫度控制系統(tǒng)設(shè)計(jì)——計(jì)算機(jī)控制技術(shù)課程設(shè)計(jì)
- 計(jì)算機(jī)控制技術(shù)課程設(shè)計(jì)-溫度控制系統(tǒng)設(shè)計(jì)
- 計(jì)算機(jī)控制課程設(shè)計(jì)--步進(jìn)電機(jī)角度控制
- 計(jì)算機(jī)控制技術(shù)課程設(shè)計(jì) (2)
- 計(jì)算機(jī)控制課程設(shè)計(jì)---達(dá)林算法計(jì)算機(jī)控制系統(tǒng)設(shè)計(jì)
- 控制系統(tǒng)設(shè)計(jì)與仿真-計(jì)算機(jī)控制技術(shù)課程設(shè)計(jì)
- 計(jì)算機(jī)控制技術(shù)課程簡(jiǎn)介
- 控制儀表與計(jì)算機(jī)控制技術(shù)課程設(shè)計(jì)
- 計(jì)算機(jī)控制技術(shù)課程設(shè)計(jì)--油庫(kù)計(jì)算機(jī)監(jiān)控系統(tǒng)硬件設(shè)計(jì)
- 計(jì)算機(jī)控制技術(shù)課程設(shè)計(jì)-溫度采集
- 計(jì)算機(jī)控制課程設(shè)計(jì)---步進(jìn)電機(jī)的角度控制設(shè)計(jì)
- 計(jì)算機(jī)控制技術(shù)課程設(shè)計(jì)--具有純滯后一階慣性系統(tǒng)的計(jì)算機(jī)控制系統(tǒng)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論