2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  單片機課程設 計</b></p><p>  中文題目: 步進電機控制系統(tǒng)</p><p>  英文題目:Stepper motor control system</p><p><b>  姓 名</b></p><p>

2、;<b>  學 號</b></p><p><b>  專業(yè)班級</b></p><p><b>  指導教師</b></p><p><b>  提交日期 </b></p><p><b>  目的和意義</b>&

3、lt;/p><p>  設計一個由單片機控制的步進電機調速系統(tǒng),操作者可通過系統(tǒng)的按鈕控制步進電動機的旋轉速度和方向,正反轉均可在1-15檔改變,本設計通過按鈕來調節(jié),先從1檔開始,按一次加一檔,直至15檔,然后,按一次減一檔,直至1檔,如此循環(huán),并通過1602液晶顯示出來。本次設計圈數(shù)也可調,在1-20圈改變,也通過1602液晶顯示。</p><p><b>  2、 步進電機概述

4、</b></p><p>  2.1 步進電機的特點 </p><p>  1 ) 一般步進電機的精度為步進角的 3-5% ,且不累積。</p><p>  2 ) 步進電機外表允許的溫度高。步進電機溫度過高首先會使電機的磁性材料退磁 , 從而導致力矩下降乃至于失步 , 因此電機外表允許的最高溫度應取決于不同電機磁性材料的退磁點;一般來講,磁性材料的退磁

5、點都在攝氏130度以上,有的甚至高達攝氏200度以上 , 所以步進電機外表溫度在攝氏80-90度完全正常。</p><p>  3 )步進電機的力矩會隨轉速的升高而下降。當步進電機轉動時,電機各相繞組的電感將形成一個反向電動勢;頻率越高,反向電動勢越大。在它的作用下,電機隨頻率(或速度)的增大而相電流減小,從而導致力矩下降。</p><p>  4 ) 步進電機低速時可以正常運轉 , 但若

6、高于一定速度就無法啟動 , 并伴有嘯叫聲 。步進電機有一個技術參數(shù) : 空載啟動頻率 , 即步進電機在空載情況下能夠正常啟動的脈沖頻率 , 如果脈沖頻率高于該值 , 電機不能正常啟動 , 可能發(fā)生丟步或堵轉 。 在有負載的情況下 , 啟動頻率應更低 。 如果要使電機達到高速轉動 , 脈沖頻率應該有加速過程 , 即啟動頻率較低 , 然后按一定加速度升到所希望的高頻(電機轉速從低速升到高速)。</p><p>  2

7、.2 步進電機的工作原理</p><p>  步進電機是一種用電脈沖進行控制,將電脈沖信號轉換成相位移的電機 ,其機械位移和轉速分別與輸入電機繞組的脈沖個數(shù)和脈沖頻率成正比 , 每一個脈沖信號可使步進電機旋轉一個固定的角度 . 脈沖的數(shù)量決定了旋轉的總角度 , 脈沖的頻率決定了電機運轉的速度 . 當步進驅動器接收到一個脈沖信號,它就驅動步進電機按設定的方向轉 動一個固定的角度 ( 稱為 “ 步距角 ” ),它的旋

8、轉是以固定的角度一步一步運行的。可以 通過控制脈沖個數(shù)來控制角位移量,從而達到準確定位的目的;同時可以通過控制脈沖頻率來控制電機轉動的速度和加速度,從而達到調速的目的。</p><p>  本次課程設計選用的步進電機是28BYJ-48型號的步進電機。</p><p>  B-步進電機,Y-永磁型。</p><p>  48-是四相八拍步進電機。</p>

9、<p><b>  3、方案的論證</b></p><p>  3 .1 控制方式的確定</p><p>  步進電機控制雖然是一個比較精確的,步進電機開環(huán)控制系統(tǒng)具有成本低 、簡單 、 控制方便等優(yōu)點,在采用單片機的步進電機開環(huán)系統(tǒng)中,控制系統(tǒng)送控制字的間隔和送控制字的順序 實際上就是控制步進電機的運行速度。系統(tǒng)可用兩種辦法實現(xiàn)步進電機的速度控制。 一種

10、是延時,一種是定時。延時方法是在每次按鍵之后調用一個延時子程序,待延時結束后再次送控制字,這樣周而復始就可發(fā)出一定頻率的 CP 脈沖。該方法簡單,占用資源少,全部由軟件實現(xiàn),調用不同的子程序可以實現(xiàn)不同速度和不同方向的運行。但占用 CPU 時間長,不能在運行時處理其他工作。因此只適合較簡單的控制過程。定時方法是利用單片機系統(tǒng)中的定時器定時功能產生任意周期的定時信號,從而可方便的控制系統(tǒng)輸出 CP 脈沖的周期。當定時器啟動后,定時器從裝載

11、的初值開始對系統(tǒng)及其周期進行加計數(shù),當定時器溢出時,定時器產生中斷,系統(tǒng)轉去執(zhí)行定時中斷子程序將電機換向子程序放在定時中斷服務程序中,定時中斷一次,電機換向一次,從而實現(xiàn)電機的速度控制。</p><p>  3.1 .1 脈沖序列的生成</p><p>  脈沖幅值:由數(shù)字元件電平決定。</p><p>  TTL 0 ~ 5V</p><p&g

12、t;  CMOS 0 ~ 10V</p><p>  接通和斷開時間可用延時的辦法控制。要求:確保步進到位。</p><p>  3 . 1 .2 方向控制</p><p>  步進電機旋轉方向與內部繞組的通電順序相關。 四相八拍,通電順序為:</p><p>  正轉 : A → AB → B → BC → C → C D → D → DA

13、</p><p>  反轉 : A → A D → D → DC → C → C B → B → BA</p><p>  改變通電順序可以改變步進電機的轉向</p><p><b>  3. 2 脈沖分配</b></p><p>  實現(xiàn)脈沖分配(也就是通電換相控制)的方法有兩種:軟件法和硬件法。本次設計采用軟件法。&

14、lt;/p><p>  軟件法是完全用軟件的方式,按照給定的通電換相順序,通過單片機的IO向驅動電路發(fā)出控制脈沖,下面以四相八拍為例。</p><p>  正序為A-AB-B-BC-C-C D - D-DA- A, ,</p><p>  反序為 A-A D - D - DC - C - CB - B-BA-A</p><p>  P 3 .0

15、: A 相驅動</p><p>  P 3 .1 : B 相驅動</p><p>  P 3 .2 : C 相驅動</p><p>  P 3.3 : D 相驅動</p><p>  三相六拍控制字如下表所示:</p><p>  注: 0 代表使繞組斷電, 1 代表使繞組通電</p><p>

16、  在程序中,只要依次將這 8 個控制字送到 P 2 口,步進電機就會轉動一個齒距角,每送一個控制字,就完成一拍,步進電機轉過一個步距角。</p><p>  3. 3 驅動方式的確定</p><p>  用 于步進電機的驅動一般有兩種方法,一種是通過 CPU 直接來驅動,這種方法一般不宜采用 , 因為 CPU 的輸出電流脈沖是特別小的它不能足以讓步進電機的轉動;別一種是通過 CPU 來間

17、接驅動,就是把從 CPU 輸出的信號進行放大 , 然后直接驅動或是再通過光電隔離間接來驅動步進電機,這種方法比較安全可靠 。固本次設計應采用 CPU 間接驅動步進電機。</p><p>  3. 4基本方案的確定</p><p>  因本次設計的要求,選用四相八拍步進電機,單片機選用 89C51作為控制器,選取用LCD1602以顯示電機轉速,選用ULN2003A作為步進電機的驅動芯片。系統(tǒng)

18、原理框圖如下所示:</p><p>  4、 硬件電路的設計</p><p>  4.1 單片機的選擇</p><p>  本次設計以 CPU 選用 89C5l 作為步進電機的控制芯片 . 89C51 的結構簡單并可以在編程器上實現(xiàn)閃爍式的電擦寫達幾萬次以上 . 使用方便等優(yōu)點 , 而且完全兼容 MCS5l 系列單片機的所有功能。 AT89C51 是一種帶 4K 字

19、節(jié)閃爍可編程可擦除只讀存儲器( FPEROM — FAlsh ProgrAmmABle And ErAsABle ReAd Only Memory )的低電壓 , 高性能 CMOS8 位微處理器 , 俗稱單片機 。 該器件采用 ATMEL 高密度非易失存儲器制造技術制造,與工業(yè)標準的 MCS-51 指令集和輸出管腳相兼容。由于將多功能 8 位 CPU 和閃爍存儲器組合在單個芯片中 , ATMEL 的 AT89C51 是一種高效微控制器,

20、為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案</p><p>  4.2 驅動電路的選擇</p><p>  由于單片機接口信號不夠大需要通過ULN2003A放大再連接到相應的電機接口,ULN2003 是高耐壓、大電流、內部由七個硅NPN 達林頓管組成的驅動芯片。ULN2003 的每一對達林頓都串聯(lián)一個2.7K 的基極電阻,在5V 的工作電壓下它能與TTL 和CMOS 電路直接相連,

21、可以直接處理原先需要標準邏輯緩沖器來處理的數(shù)據(jù)。ULN2003 工作電壓高,工作電流大,灌電流可達500mA,并且能夠在關態(tài)時承受50V 的電壓,輸出還可以在高負載電流并行運行。ULN2003A的輸出結構是集電極開路的,所以要在輸出端接一個上拉電阻,在輸入低電平的時候輸出才是高電平。在驅動負載的時候,電流是由電源通過負載灌入ULN2003A的。</p><p>  ULN2003A引腳圖</p>&

22、lt;p>  4 .3 LCD </p><p>  4.3.1 液晶顯示器工作原理</p><p>  LCD技術是把液晶灌入兩個列有細槽的平面之間。這兩個平面上的槽互相垂直(相交成90度)。也就是說,若一個平面上的分子南北向排列,則另一平面上的分子東西向排列,而位于兩個平面之間的分子被強迫進入一種90度扭轉的狀態(tài)。由于光線順著分子的排列方向傳播,所以光線經過液晶時也被扭轉90度

23、。但當液晶上加一個電壓時,分子便會重新垂直排列,使光線能直射出去,而不發(fā)生任何扭轉。</p><p>  LCD是依賴極化濾光器(片)和光線本身。自然光線是朝四面八方隨機發(fā)散的。極化濾光器實際是一系列越來越細的平行線。這些線形成一張網,阻斷不與這些線平行的所有光線。極化濾光器的線正好與第一個垂直,所以能完全阻斷那些已經極化的光線。只有兩個濾光器的線完全平行,或者光線本身已扭轉到與第二個極化濾光器相匹配,光線才得以

24、穿透。</p><p>  LCD正是由這樣兩個相互垂直的極化濾光器構成,所以在正常情況下應該阻斷所有試圖穿透的光線。但是,由于兩個濾光器之間充滿了扭曲液晶,所以在光線穿出第一個濾光器后,會被液晶分子扭轉90度,最后從第二個濾光器中穿出。另一方面,若為液晶加一個電壓,分子又會重新排列并完全平行,使光線不再扭轉,所以正好被第二個濾光器擋住。總之,加電將光線阻斷,不加電則使光線射出。 </p><

25、p>  然而,可以改變LCD中的液晶排列,使光線在加電時射出,而不加電時被阻斷。但由于計算機屏幕幾乎總是亮著的,所以只有“加電將光線阻斷”的方案才能達到最省電的目的。</p><p>  從液晶顯示器的結構來看,無論是筆記本電腦還是桌面系統(tǒng),采用的LCD顯示屏都是由不同部分組成的分層結構。LCD由兩塊玻璃板構成,厚約1mm,其間由包含有液晶(LC)材料的5μm均勻間隔隔開。因為液晶材料本身并不發(fā)光,所以在顯

26、示屏兩邊都設有作為光源的燈管,而在液晶顯示屏背面有一塊背光板(或稱勻光板)和反光膜,背光板是由熒光物質組成的可以發(fā)射光線,其作用主要是提供均勻的背景光源。背光板發(fā)出的光線在穿過第一層偏振過濾層之后進入包含成千上萬水晶液滴的液晶層。液晶層中的水晶液滴都被包含在細小的單元格結構中,一個或多個單元格構成屏幕上的一個像素。在玻璃板與液晶材料之間是透明的電極,電極分為行和列,在行與列的交叉點上,通過改變電壓而改變液晶的旋光狀態(tài),液晶材料的作用類似

27、于一個個小的光閥。在液晶材料周邊是控制電路部分和驅動電路部分。當LCD中的電極產生電場時,液晶分子就會產生扭曲,從而將穿越其中的光線進行有規(guī)則的折射,然后經過第二層過濾層的過濾在屏幕上顯示出來。</p><p>  4.3.2 1602</p><p>  所謂1602是指顯示的內容為16*2,即可以顯示兩行,每行16個字符。目前市面上字符液晶絕大多數(shù)是基于HD44780液晶芯片的,控制

28、原理是完全相同的,因此基于HD44780寫的控制程序可以很方便地應用于市面上大部分的字符型液晶。圖4 是SMC1602主要技術參數(shù)及引腳功能圖,字符型LCD1602通常有14條引腳線或16條引腳線的LCD,多出來的2條線是背光電源線VCC(15腳)和地線GND(16腳),其控制原理與14腳的LCD完全一樣。</p><p>  1602主要技術參數(shù)及引腳功能</p><p>  SMC16

29、02內部RAM地址映射圖</p><p><b>  4.3.3 蜂鳴器</b></p><p>  蜂鳴器是一種一體化結構的電子訊響器,采用直流電壓供電,廣泛應用于計算機、打印機、復印機、報警器、電子玩具、汽車電子設備、電話機、定時器等電子產品中作發(fā)聲器件。 ;蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。蜂鳴器在電路中用字母“H”或“HA”(舊標準用“FM”、

30、“LB”、“JD”等)表示</p><p>  4.4 總的硬件電路圖</p><p><b>  5.1 程序框圖</b></p><p><b>  5.2 C 程序</b></p><p>  #include <reg51.h> //51芯片管腳定義頭文件</p

31、><p>  #include <intrins.h> //內部包含延時函數(shù) _nop_();</p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  #define delayNOP(); {_nop_();_nop_

32、();_nop_();_nop_();};</p><p>  uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};</p><p>  uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};</p><p>  sbit K1

33、 = P3^2; //運行與停止</p><p>  sbit K2 = P3^3; //設定圈數(shù)</p><p>  sbit K3 = P3^4; //方向轉換</p><p>  sbit K4 = P3^5; //速率調整</p><p>  sbit BEEP =

34、P3^6; //蜂鳴器</p><p>  sbit LCD_RS = P2^0; </p><p>  sbit LCD_RW = P2^1;</p><p>  sbit LCD_EN = P2^2;</p><p>  bit on_off=0; //運行與停止標志<

35、;/p><p>  bit direction=1; //方向標志</p><p>  bit rate_dr=1; //速率標志</p><p>  bit snum_dr=1; //圈數(shù)標志</p><p>  uchar code cdis1[ ] = {" STEP

36、PING MOTOR "};</p><p>  uchar code cdis2[ ] = {"CONTROL PROCESS"};</p><p>  uchar code cdis3[ ] = {" STOP "};</p><p>  uchar code cdis4[ ] = {

37、"NUM: RATE: "};</p><p>  uchar code cdis5[ ] = {" RUNNING "};</p><p>  uchar m,v=0,q=0;</p><p>  uint number=0,number1=0; </p><p> 

38、 uchar snum=10,snum1=10; //預設定圈數(shù)</p><p>  uchar rate=2; //預設定速率</p><p>  uchar data_temp,data_temP1,data_temp2; </p><p>  /******************************

39、**************************/</p><p>  /* </p><p><b>  /* 延時t毫秒 </b></p><p>  /* 11.0592MHz時鐘,延時約1ms

40、 </p><p>  /* </p><p>  /********************************************************/</p><p>  void delay(uint t)<

41、/p><p>  { </p><p><b>  uchar k;</b></p><p>  while(t--)</p><p><b>  {</b></p><p>  for(k=0; k<125; k++)&

42、lt;/p><p><b>  { }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /********************************************************/</p>

43、;<p>  void delayB(uchar x) //x*0.14MS</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  while(x--)</p><p><b>  {</b><

44、;/p><p>  for (i=0; i<13; i++)</p><p><b>  { }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /**********************

45、**********************************/</p><p>  void beep()</p><p><b>  {</b></p><p><b>  uchar j;</b></p><p>  for (j=0;j<100;j++)</p>&

46、lt;p><b>  { </b></p><p>  delayB(4);</p><p>  BEEP=!BEEP; //BEEP取反</p><p><b>  } </b></p><p>  BEEP=1; //關

47、閉蜂鳴器</p><p>  delay(170);</p><p><b>  }</b></p><p>  /********************************************************/</p><p>  /*

48、 </p><p>  /*檢查LCD忙狀態(tài) </p><p>  /*lcd_busy為1時,忙,等待。為0時,閑,可寫指令與數(shù)據(jù)。 </p><p>  /*

49、 </p><p>  /********************************************************/ </p><p>  bit lcd_busy()</p><p>  { </p&

50、gt;<p>  bit result;</p><p>  LCD_RS = 0;</p><p>  LCD_RW = 1;</p><p>  LCD_EN = 1;</p><p>  delayNOP();</p><p>  result = (bit)(P0&0x80);</p

51、><p>  LCD_EN = 0;</p><p>  return(result); </p><p><b>  }</b></p><p>  /********************************************************/</p><p>  /*

52、 </p><p>  /*寫指令數(shù)據(jù)到LCD </p><p>  /*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。

53、 </p><p>  /* </p><p>  /********************************************************/</p><p>  void lcd_wcmd(uchar cmd)

54、</p><p>  { </p><p>  while(lcd_busy());</p><p>  LCD_RS = 0;</p><p>  LCD_RW = 0;</p><p>  LCD_EN = 0;</p><p><b&

55、gt;  _nop_();</b></p><p><b>  _nop_(); </b></p><p><b>  P0 = cmd;</b></p><p>  delayNOP();</p><p>  LCD_EN = 1;</p><p>  dela

56、yNOP();</p><p>  LCD_EN = 0; </p><p><b>  }</b></p><p>  /********************************************************/</p><p>  /*

57、 </p><p>  /*寫顯示數(shù)據(jù)到LCD </p><p>  /*RS=H,RW=L,E=高脈沖,D0-D7=數(shù)據(jù)。 </p><p>

58、;  /* </p><p>  /********************************************************/</p><p>  void lcd_wdat(uchar dat)</p><p>  {

59、 </p><p>  while(lcd_busy());</p><p>  LCD_RS = 1;</p><p>  LCD_RW = 0;</p><p>  LCD_EN = 0;</p><p><b>  P0 = dat;</b>

60、</p><p>  delayNOP();</p><p>  LCD_EN = 1;</p><p>  delayNOP();</p><p>  LCD_EN = 0; </p><p><b>  }</b></p><p>  /****************

61、****************************************/</p><p>  /* </p><p>  /* LCD初始化設定 </p&

62、gt;<p>  /* </p><p>  /********************************************************/</p><p>  void lcd_init()</p><p&g

63、t;<b>  { </b></p><p>  delay(30); </p><p>  lcd_wcmd(0x38); //16*2顯示,5*7點陣,8位數(shù)據(jù)</p><p><b>  delay(5);</b></p><p>  lcd_wc

64、md(0x38); </p><p><b>  delay(5);</b></p><p>  lcd_wcmd(0x38); </p><p><b>  delay(5);</b></p><p>  lcd_wcmd(0x0c); //顯示開,關光標

65、</p><p><b>  delay(5);</b></p><p>  lcd_wcmd(0x06); //移動光標</p><p><b>  delay(5);</b></p><p>  lcd_wcmd(0x01); //清除LCD的顯示內容</p>

66、<p><b>  delay(5);</b></p><p><b>  }</b></p><p>  /********************************************************/</p><p>  /*

67、 </p><p>  /* 設定顯示位置 </p><p>  /* </p><

68、;p>  /********************************************************/</p><p>  void lcd_pos(uchar pos)</p><p>  { </p><p>  lcd_wcmd(pos | 0x80); //數(shù)據(jù)指針=80+地址

69、變量</p><p><b>  }</b></p><p>  /********************************************************/</p><p>  /* </p>&l

70、t;p>  /* LCD1602初始顯示子程序 </p><p>  /* </p><p>  /**********************************************

71、**********/</p><p>  void LCD_init_DIS()</p><p>  { </p><p>  delay(10); //延時</p><p>  lcd_init(); //初始化LCD </

72、p><p>  lcd_pos(0); //設置顯示位置為第一行的第1個字符</p><p><b>  m = 0;</b></p><p>  while(cdis1[m] != '\0')</p><p>  { //顯示字符

73、</p><p>  lcd_wdat(cdis1[m]);</p><p><b>  m++;</b></p><p><b>  }</b></p><p>  lcd_pos(0x40); //設置顯示位置為第二行第1個字符</p><p>&

74、lt;b>  m = 0;</b></p><p>  while(cdis2[m] != '\0')</p><p><b>  {</b></p><p>  lcd_wdat(cdis2[m]); //顯示字符</p><p><b>  m++;</b&

75、gt;</p><p><b>  }</b></p><p>  delay(3000); //延時 </p><p>  lcd_pos(0); //設置顯示位置為第一行的第1個字符</p><p><b>  m = 0;</b

76、></p><p>  while(cdis3[m] != '\0')</p><p>  { //顯示字符</p><p>  lcd_wdat(cdis3[m]);</p><p><b>  m++;</b></p><p>

77、;<b>  }</b></p><p>  lcd_pos(0x40); //設置顯示位置為第二行第1個字符</p><p><b>  m = 0;</b></p><p>  while(cdis4[m] != '\0')</p><p><b&g

78、t;  {</b></p><p>  lcd_wdat(cdis4[m]); //顯示字符</p><p><b>  m++;</b></p><p><b>  } </b></p><p>  for(m=0;m<2;m++)</p><

79、p><b>  { </b></p><p>  lcd_pos(0x0c+m); //顯示方向符號</p><p>  lcd_wdat(0x3e);</p><p><b>  }</b></p><p><b>  }</b></p><p

80、>  /********************************************************/</p><p><b>  /*</b></p><p><b>  /*數(shù)據(jù)轉換子程序</b></p><p><b>  /*</b></p><p

81、>  /********************************************************/</p><p>  void data_conv() </p><p><b>  {</b></p><p>  data_temP1=data_temp/10; //高位</p>&l

82、t;p>  if(data_temP1==0)</p><p>  {data_temP1=0x20;} //高位為0不顯示</p><p><b>  else </b></p><p>  {data_temP1=data_temP1+0x30;}</p><p>  data_temp

83、2=data_temp%10; //低位</p><p>  data_temp2=data_temp2+0x30;</p><p><b>  }</b></p><p>  /********************************************************/</p><p>

84、;<b>  /*</b></p><p><b>  /*數(shù)據(jù)顯示子程序</b></p><p><b>  /*</b></p><p>  /********************************************************/</p><p>

85、;  void data_dis()</p><p><b>  {</b></p><p>  data_temp = snum; //顯示圈數(shù)</p><p>  data_conv();</p><p>  lcd_pos(0x44); </p><p>  lcd_wdat

86、(data_temP1);</p><p>  lcd_pos(0x45); </p><p>  lcd_wdat(data_temp2);</p><p>  data_temp = rate; //顯示速率</p><p>  data_conv();</p><p>  lcd_pos(0x4d

87、); </p><p>  lcd_wdat(data_temP1);</p><p>  lcd_pos(0x4e); </p><p>  lcd_wdat(data_temp2);</p><p><b>  }</b></p><p>  /************************

88、********************************</p><p><b>  /*</b></p><p>  /* 顯示運行方向符號</p><p><b>  /*</b></p><p>  /******************************************

89、**************/</p><p>  void motor_DR()</p><p><b>  {</b></p><p>  if(direction==1) //正轉方向標志</p><p>  { for(m=0;m<2;m++)</p><p>

90、<b>  { </b></p><p>  lcd_pos(0x0c+m); //顯示方向符號</p><p>  lcd_wdat(0x3e);</p><p><b>  }</b></p><p><b>  }</b></p><p>

91、;<b>  else</b></p><p>  { for(m=0;m<2;m++) //反轉方向標志</p><p><b>  { </b></p><p>  lcd_pos(0x0c+m); //顯示方向符號 </p><p>  lcd_wdat(0x3c);

92、</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /********************************************************</p>

93、<p><b>  /*</b></p><p><b>  /* 顯示運行狀態(tài)</b></p><p><b>  /*</b></p><p>  /********************************************************/</p>

94、<p>  void motor_RUN()</p><p><b>  {</b></p><p>  if(on_off==1)</p><p><b>  { TR0=1; </b></p><p>  lcd_pos(0); //設置顯示位置為第一行的第1個字符<

95、/p><p><b>  m = 0;</b></p><p>  while(cdis5[m] != '\0')</p><p>  { lcd_wdat(cdis5[m]); //RUNNING</p><p><b>  m++; }</b></p>&

96、lt;p>  motor_DR(); //</p><p><b>  } </b></p><p><b>  else </b></p><p>  { TR0=0; P1 =0x0f; </p><p>  lcd_pos(0); //設置顯示位置為

97、第一行的第1個字符</p><p><b>  m = 0;</b></p><p>  while(cdis3[m] != '\0')</p><p>  { lcd_wdat(cdis3[m]); //STOP</p><p><b>  m++; }</b><

98、;/p><p>  motor_DR(); //</p><p>  snum=snum1; //</p><p>  number1=0; //清圈數(shù)計數(shù)器</p><p><b>  }</b></p><p><b

99、>  }</b></p><p>  /********************************************************</p><p>  * </p><p>  * 主程序

100、 </p><p>  * </p><p>  *********************************************************/</p><p><b>

101、;  main()</b></p><p><b>  { </b></p><p>  LCD_init_DIS();</p><p>  TMOD = 0x01; //T0定時方式1</p><p>  TL0 = 0x33;</p><p>  TH0 = 0xf

102、5;</p><p><b>  EA = 1;</b></p><p>  ET0 = 1; </p><p>  P1 = 0x0f;</p><p><b>  while(1)</b></p><p><b>  { </b><

103、/p><p><b>  if(K1==0)</b></p><p><b>  {</b></p><p><b>  beep();</b></p><p>  while(K1==0); //等待鍵釋放</p><p>  on_off=~

104、on_off; </p><p>  motor_RUN(); </p><p>  } //K1 end</p><p>  /********************************************************/</p><p>  if(K2==0) </p><p

105、><b>  {</b></p><p><b>  beep();</b></p><p>  if(snum_dr==1)</p><p><b>  { snum++;</b></p><p>  snum1=snum;</p><p>  

106、if(snum==0x14)</p><p>  { snum_dr=~snum_dr;}</p><p><b>  }</b></p><p><b>  else </b></p><p><b>  {snum--;</b></p><p> 

107、 snum1=snum;</p><p>  if(snum==0x01)</p><p>  { snum_dr=~snum_dr; }</p><p><b>  }</b></p><p>  } //K2 end</p><p>  /**************************

108、******************************/</p><p>  if(K3==0) </p><p><b>  {</b></p><p><b>  beep();</b></p><p>  direction=~direction; </p><

109、p>  motor_DR();</p><p><b>  }//K3 end</b></p><p>  /********************************************************/</p><p>  if(K4==0) </p><p><b>  {&

110、lt;/b></p><p><b>  beep();</b></p><p>  if(rate_dr==1)</p><p><b>  { rate++;</b></p><p>  if(rate==0x10)</p><p>  { rate_dr=~rat

111、e_dr;}</p><p><b>  }</b></p><p><b>  else </b></p><p><b>  { </b></p><p><b>  rate--;</b></p><p>  if(rate

112、==0x01)</p><p>  { rate_dr=~rate_dr; }</p><p><b>  }</b></p><p>  } //K4 end</p><p>  /********************************************************/</p>

113、<p>  if(number1==snum1) //與設定圈數(shù)是否相等 </p><p>  { number1=0; </p><p><b>  on_off=0;</b></p><p><b>  TR0=0;</b></p><p>  snum=snum1;</p

114、><p><b>  P1=0x0f;</b></p><p>  motor_RUN();</p><p>  } </p><p>  data_dis();</p><p>  } // while(1) end</p><p>  } //main

115、end</p><p>  /********************************************************/</p><p><b>  /*</b></p><p>  /* 定時器 0 中斷 </p><p><b>  /*</b></p>

116、<p>  /********************************************************/</p><p>  void motor_onoff() interrupt 1 </p><p><b>  { </b></p><p>  TL0 = 0x33;</p>

117、<p>  TH0 = 0xf5; </p><p><b>  q++;</b></p><p>  if(q < rate)</p><p>  { return; }</p><p><b>  else </b></p><p>  { q=0

118、; </p><p>  number++; //脈沖計數(shù)</p><p>  if(number==4096) //64個脈沖電機轉一圈</p><p><b>  { snum--;</b></p><p><b>  number=0;&l

119、t;/b></p><p>  number1++; } //電機轉動圈數(shù)</p><p>  if(direction==1) //方向標志</p><p>  { if(v<8) </p><p>  {P1 = FFW[v];v++;} //取數(shù)據(jù),正轉</p>

120、;<p><b>  if(v==8) </b></p><p><b>  { v=0; } </b></p><p><b>  }</b></p><p><b>  else</b></p><p>  { if(v<8) &

121、lt;/p><p>  {P1 = REV[v];v++;} //取數(shù)據(jù),反轉</p><p><b>  if(v==8) </b></p><p><b>  { v=0; } </b></p><p><b>  }</b></p><p>

122、;<b>  }</b></p><p><b>  }</b></p><p><b>  6、總結</b></p><p>  在這漫長而短暫的課程設計之旅中,通過自己的不懈努力,不斷的汲取新的知識,不斷的自我發(fā)現(xiàn),感到自己的知識結構水平提高了許多。特別對仿真和程序調試這兩方面,有了質的飛躍。通過

123、這次課程設計,我終于體會到了前人留下來的真理:紙上得來終覺淺,絕知此事要躬行!一個很淺顯的原理,在仿真上費了很大勁,到了調試程序有出現(xiàn)這出現(xiàn)那的問題,好不容易程序調好,到了硬件又出現(xiàn)意想不到的故障。為了排除故障,只能通過不斷的提高自己的認識水平和能力、不斷的學習新的方法、新的思想、新的思維方式、不斷地的改變自己的人生觀和方法論、感到自己不但成長且成熟了許多;通過不斷地把課本知識應用于實際,不斷地查閱資料和危險中有用的東西應用與實現(xiàn),不斷

124、地把所學的理論和方法應用與設計之中,從而提高了自己理論聯(lián)系實際的能力。</p><p>  在設計過程中,不斷地認識了步進電機調速系統(tǒng),加強了網上學習和查閱資料的能力。步進電機調速系統(tǒng)適用于各種現(xiàn)場自動化控制,特別應用與小功率負載的控制;具有成本低,性能穩(wěn)定,可靠性高的優(yōu)點。步進電機作為執(zhí)行元件,在科技進步中起到了非常重要的作用,而步進電機調速系統(tǒng)可以方便地應用與各種自動化系統(tǒng)和領域。</p>&l

125、t;p><b>  參考文獻</b></p><p>  1、張毅剛.單片機原理及應用.高等教育出版社.2003年</p><p>  2、李群芳,等.單片微型計算機與接口技術(第2版).電子工業(yè)出版社.2005</p><p>  3、張靖武,等.單片機系統(tǒng)的PROTEUS設計與仿真.電子工業(yè)出版社.2008</p>&l

126、t;p>  4、求是科技.單片機典型模塊設計實例導航.人們郵電出版社.2004</p><p>  5、郭天祥,新概念51單片機C語言教程 電子工業(yè)出版社</p><p>  6、彭偉,單片機C語言程序設計實訓100例:基于8051+Proteus仿真 電子工業(yè)出版社</p><p>  7、王曉明,電動機的單片機控制(第2版) 北京航空航天大學出版社 <

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論