計算機控制技術課程設計-計算機控制技術及工程應用步進電機控制系統(tǒng)_第1頁
已閱讀1頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  摘要</b></p><p>  本設計詳細介紹了基于單片機的四相步進電機控制系統(tǒng)。步進電機通過輸入脈沖信號進行控制,即電機的總轉動角度由輸入脈沖總數(shù)決定,因此,單片機通過向步進電機發(fā)送控制信號就能實現(xiàn)對步進電機的控制。 單片機實現(xiàn)的步進電機控制系統(tǒng)具有成本低、使用靈活的特點,該系統(tǒng)采用80C51單片機作為主控芯片,來完成對步進電機轉動及LED顯示的控制

2、。 本設計主要由單片機80C51,4相步進電機,7段數(shù)碼管及一些其他相關元件設計而成,分為按鍵選擇工作狀態(tài)模塊、步進電機工作模塊、LED二極管顯示工作狀態(tài)模塊以及4位數(shù)碼管顯示步數(shù)模塊??梢酝ㄟ^開關來控制系統(tǒng)的啟/停工作,當系統(tǒng)運轉時,用開關來控制方向,并使相應的指示燈亮起,同樣由開關來選擇工作模式。運轉時,用4位7段數(shù)碼管來輸出步數(shù)。最后根據(jù)思路所設計出來的硬件圖設計相適應的軟件。 電路結構簡單,設計思路清晰,同

3、時利用KEIL和Proteus進行聯(lián)調仿真,結果比較直觀。仿真結果收到了預期的效果。 關鍵字:四相步進電機、單片機、PROTEUS仿真 </p><p><b>  1設計任務及要求</b></p><p>  設計一個四相步進電機控制系統(tǒng),要求系統(tǒng)具有如下功能:用SW11-SW13作為通電方式選擇鍵,SW11為四相單四拍, SW12為四相雙四拍,S

4、W13為四相八拍;SW14為啟動/停止控制、SW1方向控制;用4位LED數(shù)碼管顯示工作步數(shù)。用3個發(fā)光二極管顯示狀態(tài);正轉時紅燈亮,反轉時黃燈亮,不轉時綠燈亮。</p><p><b>  2方案論證 </b></p><p>  2.1 設計思路與方案 </p><p>  本次設計是一個對于四相步進電機的控制系統(tǒng),而單片機實現(xiàn)的步進電機控制

5、系統(tǒng)具有成本低、使用靈活的特點,此系統(tǒng)選用51單片機即可。 根據(jù)要求整個設計大體可分為四塊:</p><p>  一是5個按鍵SW11-SW13將用戶所需來選擇步進電機的工作狀態(tài)。我們將開關連入單片機的P1口,通過按鍵開關的高低電平狀態(tài)來讀入我們所需的控制信號。硬件上直接把開關分別接在單片機的接口上,通過查詢端口信號來動作,將控制信號處理。 二是3個LED發(fā)光二極管的顯示步進電機工作狀態(tài)模塊。在設計要

6、求中步進電機正轉是紅燈亮,反轉是黃燈亮,停止不轉是綠燈亮。設計中將3個發(fā)光二極管分別接到單片機P3口受到單片機的輸出信號控制。 三是步進電機的工作模塊。要想步進電機按照我們想要的方式運轉,將步進電機一端接到+12V的電源,一端接到單片機P3口,受單片機的輸出信號控制。 </p><p>  四是4位數(shù)碼管顯示步數(shù)的模塊。設計中主要是利用軟件編程的算法來實現(xiàn)步數(shù)的累計和顯示,同樣,4位數(shù)碼管接到單片機的P0口

7、和P2口受單片機輸出信號的控制,在硬件上使用的是動態(tài)顯示的接法。 由此可知所需要設計一個系統(tǒng),可以通過不同按鍵來選擇步進電機的工作方式,且有LED發(fā)光二極管來顯示電機對應的工作狀態(tài),除此之外還能在數(shù)碼管上顯示出步進電機轉動的步數(shù)。</p><p>  2.2總體設計框圖 </p><p>  此系統(tǒng)主要由單片機、步進電機、步數(shù)顯示模塊、工作狀態(tài)控制與顯示模塊組成。整體框圖如圖1:

8、 </p><p><b>  圖1 系統(tǒng)整體框圖</b></p><p>  3系統(tǒng)實現(xiàn)的原理說明</p><p>  3.1 步進電機控制工作原理</p><p>  3.1.1步進電機的工作原理</p><p>  步進電機通過輸入脈沖信號進行控制,即電機的總轉動角度由輸入脈沖總數(shù)決定,而電

9、機的轉速由脈沖信號頻率決定。步進電機的驅動電路是根據(jù)單片機產(chǎn)生的控制信號進行工作。因此,單片機通過向步進電機驅動電路發(fā)送控制信號就能實現(xiàn)對步進電機的控制。 如圖2所示,開始時,開關SB接通電源,SA、SC、SD斷開,B相磁極和轉子0、3號齒對齊,同時,轉子的1、4號齒就和C、D相繞組磁極產(chǎn)生錯齒,2、5號齒就和D、A相繞組磁極產(chǎn)生錯齒。 當開關SC接通電源,SB、SA、SD斷開時,由于C相繞組的磁力線和1、4號齒之間磁

10、力線的作用,使轉子轉動,1、4號齒和C相繞組的磁極對齊。而0、3號齒和A、B相繞組產(chǎn)生錯齒,2、5號齒就和A、D相繞組磁極產(chǎn)生錯齒。依次類推A、B、C、D四相繞組輪流供電則轉子會沿著A、B、C、D方向轉動。 四相步進電機按照通電順序的不同,可分為單四拍、雙四拍、八拍三種工作方式。單四拍與雙四拍的步距角相等,但單四拍的轉動力矩小。八拍工作方式的步距角是單四拍與雙四拍的一半,因此,八拍工作方式既可以保持較高的轉動力矩又可以提

11、高控制精度。 </p><p>  圖2 步進電機工作原理圖</p><p>  3.1.2 步進電機的啟??刂?</p><p>  步進電機由于其電氣特性,運轉時會有步進感 ,即振動感。為了使電機轉動平滑 ,減小振動 ,可在步進電機控制脈沖的上升沿和下降沿采用細分的梯形波 ,可以減小步進電機的步進角 ,提高電機運行的平穩(wěn)性。在步進電機停轉時 ,為了防止因慣性而使

12、電機軸產(chǎn)生順滑,則需采用合適的鎖定波形,產(chǎn)生鎖定磁力矩 ,鎖定步進電機的轉軸,使步進電機的轉軸不能自由轉動。</p><p>  3.1.3 步進電機的轉向控制 </p><p>  如果給定工作方式正序換相通電,步進電機正轉。若步進電機的勵磁方式為四相八拍,即 A-AB-B-BC-C-CD-D-DA-A。如果按反序通電換相 ,即則電機就反轉。其他方式情況類似。 </p>&

13、lt;p>  3.2步數(shù)顯示模塊原理 </p><p>  步數(shù)顯示模塊和工作狀態(tài)顯示模塊,都是通過單片機輸出信號控制發(fā)光二極管LED的亮滅。其中步數(shù)顯示模塊中LED構成數(shù)碼管,要求顯示4位十進制數(shù)故用到4位數(shù)碼管。要控制多位的顯示電路,需要有字段控制和字位控制??刂品绞椒譃殪o態(tài)顯示方式和動態(tài)顯示方式。靜態(tài)顯示方式,每一位的顯示器都需要配一個8位輸出口來輸出該字位的七段碼,需要片外擴展輸出口。而動態(tài)顯示方式

14、將各數(shù)碼管的對應字段的引腳都并聯(lián)在一起,線路簡單,減少接口,不需片外擴展。這里選用動態(tài)顯示方式。 </p><p><b>  4硬件設計 </b></p><p>  4.1系統(tǒng)總原理圖 </p><p><b>  圖3 系統(tǒng)總原理圖</b></p><p>  根據(jù)設計要求用PROTEUS所做

15、的硬件連線圖如圖3。</p><p>  4.2各部分硬件原理圖設計 </p><p>  4.2.1 單片機控制模塊 </p><p>  單片機選用最經(jīng)典的80C51,其4個I/O口都要用到,P3接步進電機驅動電路及工作狀態(tài)顯示模塊,P0和P2分別接步數(shù)顯示中對數(shù)碼管的字段控制及數(shù)碼管片選,P1接工作狀態(tài)控制電路,時鐘用內部方式需外接晶體振蕩器。硬件圖如圖4所示

16、。 </p><p>  圖4 單片機模塊原理圖</p><p>  此設計中接的是12MHZ的晶振,故一個機器周期為1/12us。根據(jù)經(jīng)驗數(shù)據(jù),與晶振一起的兩個電容設為15PF。單片機的VCC和GROUD都隱藏了,已自動接好,VCC應設為+5V。 </p><p>  4.2.2按鍵選擇工作狀態(tài)模塊 </p><p>  5個按鍵開關一端

17、通過電阻接高電平,另一端全部接到地,其中接高電平的一端對應也接到單片機的P1口分別為P1.0~P1.4。當開關斷開,就是輸入到單片機對應端口高電平,而開關閉合,是使端口接地,輸入低電平。所以這個設計中開關斷開時才是有效的。各按鍵功能: (1)SW11~SW13為工作模式控制開關,SW11接電時,為步進電機單四拍工作模式;SW12接電時,為步進電機雙四拍工作模式;SW13接電時,步進電機工作模式為四相八拍。 (2)SW14

18、為啟/??刂崎_關,控制整個系統(tǒng)的開啟和關閉。 (3)SW1為正/反轉控制開關,控制步進電機的轉向。</p><p>  圖5 按鍵模塊原理圖</p><p>  4.2.3步進電機工作模塊 </p><p>  將四相步進電機四個端口直接接到單片機P3.0~P3.3即可,另兩個端口接到+12V的高電平給步進電機供電。只需在軟件編寫上控制算法便可以調節(jié)這四個端

19、口的高低電平來控制步進電機的開啟與停止,正反轉以及工作模式。步進電機硬件接線圖如圖6所示。</p><p>  圖6 步進電機模塊原理圖</p><p>  4.2.4工作狀態(tài)顯示模塊 </p><p>  LED發(fā)光二極管顯示步進電機的工作狀態(tài),它們分別接到單片機的P3.5~P3.7。 </p><p>  圖7 工作狀態(tài)顯示模塊原理圖

20、</p><p>  4.2.5 4位數(shù)碼管顯示步數(shù)模塊</p><p>  LED數(shù)碼管實際上是由七個發(fā)光管組成8字形構成的,加上小數(shù)點就是8個。這些段分別由字母a,b,c,d,e,f,g,dp來表示。當數(shù)碼管特定的段加上電壓后,這些特定的段就會發(fā)亮以形成我們眼睛看到的字樣了。通過分時輪流控制各個LED數(shù)碼管的COM端,就使各個數(shù)碼管輪流受控顯示,這就是動態(tài)驅動。 P0口和P2

21、口的前四個分別接步數(shù)顯示中對數(shù)碼管的字段控制及數(shù)碼管片選,如圖8所示,這里主要是由軟件算法來實現(xiàn)單片機輸出的控制。</p><p>  圖8 數(shù)碼管顯示模塊原理圖</p><p><b>  5軟件設計</b></p><p>  5.1系統(tǒng)總體設計 </p><p><b>  圖9 系統(tǒng)總流程圖<

22、;/b></p><p>  設計說明:首先是數(shù)碼管顯示清零,單片機再讀入P1口輸入的按鍵狀態(tài),先判斷是否啟動,如果沒有啟動則是綠燈亮并再判斷,如果啟動了,就接著判斷所需的電機工作模式,再讀入P1口狀態(tài)判斷電機的轉向,輸出控制信號為正轉紅燈亮,反轉黃燈亮,由此可以讓步進電機按照指定的方式運轉,并且累計步數(shù)再顯示到數(shù)碼管上。最后檢驗P1口,是否狀態(tài)改變,如果改變則步數(shù)清零重新開始判斷,不改變則繼續(xù)轉動。 &l

23、t;/p><p>  5.2步進電機工作模塊 </p><p>  5.2.1步進電機的工作方式說明 </p><p>  (1)四相單四拍工作方式 </p><p>  在這種工作方式下,A、B、C、D三相輪流通電,電流切換三次,磁場旋轉一周,轉子向前轉過一個齒距角。因此這種通電方式叫做三相單三拍工作方式。這時步距角(度)為:</p&g

24、t;<p><b>  =360/mz</b></p><p>  式中:m為定子相數(shù);z為轉子齒數(shù)</p><p>  表1 單四拍的相位控制</p><p>  (2) 四相雙四拍工作方式這種工作方式每次都是有兩相導通,兩相繞組處在相同電壓之下,以AB─BC─CD─DA—AB(或反之)方式通電,故稱為雙四拍工作方式。以這種方

25、式通電,轉子齒所處的位置相當于八拍控制方式中去掉單四拍后的四個位置。它的步距角計算公式與單四拍時的公式相同。 </p><p>  表2 雙四拍的相位控制 </p><p>  (3)四相八拍工作方式 在這種工作方式下,繞組以A—AB—B—BC—C—CD—D—DA—A時序(或反時序)轉換8次,磁場旋轉一周,轉子前進一個齒距每次切換均使轉子轉動0.9°,故這種通電方式稱為四相

26、八柏工作方式。其步距角(度)為:</p><p>  =360/2mz=180/mz</p><p>  表3 八拍的數(shù)學模型</p><p>  5.2.2設計說明及流程圖</p><p>  設計說明:在此設計中,采用的是四相步進電機,對于步進電機模塊的程序設計采用循環(huán)程序設計方法。先把正反轉向的控制模型存放在內存單元中,然后再逐一從單元

27、中取出控制模塊并輸出。首先啟動,通過P1口讀入所需的工作方式,即選擇步進電機的拍數(shù),然后讀入正反轉的控制,再來輸出對應的控制模型來驅動步進電機轉動。 5.3數(shù)碼管步數(shù)顯示模塊 </p><p>  設計說明:步數(shù)顯示模塊是整個程序里的一個子程序。其是用4位八段數(shù)碼管來顯示工作步數(shù)。先將要顯示的數(shù)化為10進制數(shù),每位分別儲存,從P0口輸出顯示碼,P2口輸入位選碼,需要一定的延時,讓此位數(shù)字顯示閃爍出來。然后修改數(shù)

28、組地址,求下一位位選碼繼續(xù)顯示,直至輸出四位數(shù)。這個掃描過程重復50次,保證人眼能觀察到步數(shù)顯示。 流程圖如圖11: </p><p>  圖11 數(shù)碼管顯示模塊流程圖</p><p><b>  6仿真調試記錄</b></p><p>  如圖12所示,當選擇電機工作在單四拍,正轉的模式下,SW11、SW1接高電平,SW12、SW13接低電

29、平,系統(tǒng)啟動,SW14接高電平,電機開始轉動。LED四位顯示屏顯示工作步數(shù),LED指示燈紅燈亮顯示電機正轉的狀態(tài)。 </p><p><b>  7心得體會</b></p><p>  計算機控制技術是一門應用性很強綜合性很強的學科,在這次課設中,我充分感受到了這一點。在老師給的課題之中,是來自于各個方面各個領域的應用,不得不說,計算機控制很強大,確實改變了我們的生活

30、。 本次課設收獲就是關于軟件的使用了。PROTEUS,KEIL51,以前好像也用過但是平時較少接觸,這次的課設讓我比較熟練的掌握了這兩個學習軟件強大的功能,而且發(fā)現(xiàn)從PROTEUS里導出來的電路圖特別漂亮和清晰。 計算機控制技術一直是自己比較喜歡的一門學科,拿到課程設計的題目也想著可以好好檢驗自己的學習成果,一直認為,期末考試是所謂的應試教育,而課程設計似乎更加地考驗所學的知識,所謂實踐與理論相結合就是這個道理吧。

31、課程設計總能讓我有一種我站在山面前的感覺,看上去比較陌生高大,但是攀登的技巧早已在平時的學習中習得,不斷地去攀登,不斷地在回味課堂上老師講的東西,書本上的東西,這是一種奇妙的體驗。 我明白遇到的電路或者課題并不一定在你的知識范圍之內,而面對新的東西我們要冷靜地去尋求解決之道,去搜尋網(wǎng)絡資源,圖書館資源以及和同學們的討論之中,再結合自己所學過的知識來吃透理解那些未知</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>  //步進電機驅動

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) //雙四正轉 </p><p><b>  { </b></p><p>  if(P1&

53、;0x10)//則正轉 </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)//則正轉 <

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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論