單片機課程設(shè)計——基于單片機的步進電機控制器設(shè)計_第1頁
已閱讀1頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p><b>  一、設(shè)計目的</b></p><p>  通過具體小型測試系統(tǒng)設(shè)計,實踐單片機系統(tǒng)設(shè)計及調(diào)試的全過程,以加深對單片機內(nèi)部結(jié)構(gòu)、功能和指令系統(tǒng)的理解,并進一步學習單片機開發(fā)系統(tǒng)的應(yīng)用及一些外圍芯片的接口和編程方法,初步掌握單片機系統(tǒng)的硬、軟件設(shè)計技術(shù)及調(diào)試技巧。</p><p><b>  二、設(shè)計要求</b><

2、/p><p>  1)電機轉(zhuǎn)速可以平穩(wěn)控制</p><p>  2)通過鍵盤和顯示器可以設(shè)置電機的轉(zhuǎn)速</p><p>  3)顯示電機的速度趨勢</p><p><b>  三、儀器設(shè)備</b></p><p><b>  四、硬件線路圖</b></p><

3、p> ?。?)單片機最小系統(tǒng)</p><p>  上圖所示為單片機最小系統(tǒng),該系統(tǒng)通過5V直流電源供電,可上電復位和手動復位。通過串口將程序燒寫到單片機。</p><p> ?。?)步進電機驅(qū)動電路</p><p>  由于步進電機運轉(zhuǎn)時所需電流較大,而單片機引腳提供的電流較小,所以單片機與步進電機間需要加上驅(qū)動芯片ULN2003A,如上圖所示,通過單片機的P

4、1口控制步進電機的運轉(zhuǎn)。</p><p><b> ?。?)顯示電路</b></p><p>  該系統(tǒng)用LCD12864作為顯示器,12864內(nèi)置字庫,每屏可顯示32個漢字,且編程容易,該系統(tǒng)中可用于顯示開機界面,電機轉(zhuǎn)速,速度變化趨勢等。其接口如圖所示。</p><p><b>  (4)按鍵電路</b></p&

5、gt;<p>  由于系統(tǒng)所用按鍵較少,所以鍵盤采用獨立按鍵形式,每個按鍵都有上拉電阻,提高了按鍵的穩(wěn)定性。</p><p><b>  五、主要芯片說明</b></p><p> ?。?)STC89C52</p><p>  STC89C52是STC公司生產(chǎn)的一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Fla

6、sh存儲器。STC89C52使用經(jīng)典的MCS-51內(nèi)核,但做了很多的改進使得芯片具有傳統(tǒng)51單片機不具備的功能。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。 具有以下標準功能: 8k字節(jié)Flash,512字節(jié)RAM, 32 位I/O 口線,看門狗定時器,內(nèi)置4KB EEPROM,MAX810復位電路,3個16 位定時器/計數(shù)器,4個外部中斷,一個

7、7向量4級中斷結(jié)構(gòu)(兼容傳統(tǒng)51的5向量2級中斷結(jié)構(gòu)),全雙工串行口。另外 STC89C52 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU 停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機一切工作停止,直到下一個中斷或硬件復位為止。最高運作頻率35MHz,6T/12T可選。</p><p> ?。?)ULN2003<

8、;/p><p>  ULN2003是高耐壓、大電流復合晶體管,由七個硅NPN 復合晶體管組成。ULN2003 的每一對達林頓都串聯(lián)一個2.7K 的基極電阻,在5V 的工作電壓下它能與TTL 和CMOS 電路直接相連,可以直接處理原先需要標準邏輯緩沖器來處理的數(shù)據(jù)。ULN2003 工作電壓高,工作電流大,灌電流可達500mA,并且能夠在關(guān)態(tài)時承受50V 的電壓,輸出還可以在高負載電流并行運行。</p>&

9、lt;p>  ULN2003是一個非門電路,包含7個單元,單獨每個單元驅(qū)動電流最大可達350mA,多用于單片機、智能儀表、PLC、數(shù)字量輸出卡等控制電路中。可直接驅(qū)動繼電器等負載。</p><p><b>  六、系統(tǒng)工作原理</b></p><p> ?。?)步進電機工作原理</p><p>  步進電機是將電脈沖信號轉(zhuǎn)變?yōu)榻俏灰苹蚓€位

10、移的開環(huán)控制元件。在非超載的情況下,電機的轉(zhuǎn)速、停止的位置只取決于脈沖信號的頻率和脈沖數(shù),而不受負載變化的影響,即給電機加一個脈沖信號,電機則轉(zhuǎn)過一個步距角。這一線性關(guān)系的存在,加上步進電機只有周期性的誤差而無累積誤差等特點。使得在速度、位置等控制領(lǐng)域用步進電機來控制變的非常的簡單。 雖然步進電機已被廣泛地應(yīng)用,但步進電機并不能象普通的直流電機,交流電機在常規(guī)下使用。它必須由雙環(huán)形脈沖信號、功率驅(qū)動電路等組成控制系統(tǒng)方可使用。</

11、p><p>  如圖步進電機為一四相步進電機,采用單極性直流電源供電。只要對步進電機的各相繞組按合適的時序通電,就能使步進電機步進轉(zhuǎn)動。</p><p>  開始時,開關(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)生錯齒。當開關(guān)SC接通電源,SB、SA、SD斷開時,由于C相繞組的磁力線和

12、1、4號齒之間磁力線的作用,使轉(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)動。四相步進電機按照通電順序的不同,可分為單四拍、雙四拍、八拍三種工作方式。單四拍與雙四拍的步距角相等,但單四拍的轉(zhuǎn)動力矩小。八拍工作方式的步距角是單四拍與雙四拍的一半,因此,八拍工作方式既可以保持較高的轉(zhuǎn)動力矩又可以

13、提高控制精度。</p><p> ?。?)步進電機調(diào)速原理</p><p>  步進電動機是一種將電脈沖信號轉(zhuǎn)換成角位移或線位移的機電元件。步進電動機的輸入量是脈沖序列,輸出量則為相應(yīng)的增量位移或步進運動。正常運動情況下,它每轉(zhuǎn)一周具有固定的步數(shù);做連續(xù)步進運動時,其旋轉(zhuǎn)轉(zhuǎn)速與輸入脈沖的頻率保持嚴格的對應(yīng)關(guān)系,不受電壓波動和負載變化的影響。</p><p>  在步

14、進電機工作方式確定后,其在每個脈沖下前進1步,因此只要改變給脈沖間的時間間隔即可改變步進電機的速度。程序中通過在每次脈沖后加可調(diào)時間延時來控制步進電機的速度。</p><p><b> ?。?)系統(tǒng)工作原理</b></p><p>  該系統(tǒng)可實現(xiàn)開機界面,步進電機工作方式選擇,步進電機加速、減速,顯示器可顯示步進電機速度變化趨勢,步進電機理論轉(zhuǎn)速。</p>

15、;<p>  開機后,系統(tǒng)進入開機界面,通過以下函數(shù)實現(xiàn):</p><p>  writestring(0,0,8,"歡迎使用");</p><p>  writestring(1,0,16,"步進電機控制器");</p><p>  delay(2000);</p><p>  writ

16、e(0x01,0); //清屏</p><p>  delay(100);</p><p>  writestring(1,0,16,"請選擇工作方式");</p><p>  稍作延時后系統(tǒng)提示選擇步進電機的工作方式,包括單相四拍,雙相四拍和四相八拍共三種工作方式。while(m)</p><p><b>

17、  {</b></p><p>  if(key1==0)</p><p><b>  delay(5);</b></p><p>  if(key1==0)</p><p><b>  n++;</b></p><p><b>  if(n==1)&l

18、t;/b></p><p><b>  {</b></p><p>  write(0x01,0);</p><p>  delay(100);</p><p>  writestring(1,2,8,"單相四拍");</p><p>  while(n==1)</

19、p><p><b>  {</b></p><p>  for(i=0;i<4;i++)</p><p><b>  {</b></p><p>  P1=string1[i];</p><p><b>  delay(1);</b></p>

20、;<p><b>  }</b></p><p>  if(key1==0) break;</p><p>  if(key4==0) {m=0;break;}</p><p><b>  }</b></p><p><b>  }</b></p>

21、<p><b>  if(n==2)</b></p><p><b>  {</b></p><p>  write(0x01,0);</p><p>  delay(100);</p><p>  writestring(1,2,8,"雙相四拍");</p>

22、;<p>  while(n==2)</p><p><b>  {</b></p><p>  for(i=0;i<4;i++)</p><p><b>  {</b></p><p>  P1=string2[i];</p><p><b>

23、  delay(1);</b></p><p><b>  }</b></p><p>  if(key1==0) break;</p><p>  if(key4==0) {m=0;break;}</p><p><b>  }</b></p><p><

24、b>  }</b></p><p><b>  if(n==3)</b></p><p><b>  {</b></p><p>  write(0x01,0);</p><p>  delay(100);</p><p>  writestring(1,2

25、,8,"四相八拍");</p><p>  while(n==3)</p><p><b>  {</b></p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>  P1=string3[i];

26、</p><p><b>  delay(1);</b></p><p><b>  }</b></p><p>  if(key1==0) break;</p><p>  if(key4==0) {m=0;break;}</p><p><b>  }&l

27、t;/b></p><p><b>  }</b></p><p><b>  if(n>3)</b></p><p><b>  n=0;</b></p><p><b>  }</b></p><p>  按鍵1為工

28、作方式選擇鍵,每次按下設(shè)定參數(shù)加1,程序檢測給定參數(shù)的值,從而控制步進電機做相應(yīng)運動,按鍵4為退出鍵,工作方式子函數(shù)中實時檢測按鍵4的狀態(tài),但按鍵4按下時,程序跳出當前循環(huán),回到主程序,步進電機停轉(zhuǎn),液晶顯示器從現(xiàn)實工作方式信息跳到下一環(huán)節(jié)。</p><p>  上述功能跳出后,系統(tǒng)進入調(diào)速功能,此時步進電機以一定的速度運轉(zhuǎn),液晶顯示此時電機的理論速度。當按鍵2按下時,步進電機每步間延時減小,電機加速;當按鍵3按

29、下時,步進電機每步間延時增加,步進電機減速,同時12864實時顯示步進電機速度及速度變化趨勢。</p><p>  該功能函數(shù)同樣檢測按鍵4的狀態(tài),當按鍵4按下時,系統(tǒng)退出,步進電機停轉(zhuǎn)。</p><p><b>  七、程序框圖</b></p><p><b>  123</b></p><p&g

30、t;<b>  YY</b></p><p><b>  Y</b></p><p><b>  Y</b></p><p>  Key2 Key3 Key4</p><p><b>  八、程序清單</b></p>&

31、lt;p>  #include<reg51.h></p><p>  #define uint unsigned int</p><p>  #define uchar unsigned char</p><p>  sbit RS=P2^0;</p><p>  sbit RW=P2^1;</p><p

32、>  sbit E=P2^2;</p><p>  sbit key1=P2^3;</p><p>  sbit key2=P2^4;</p><p>  sbit key3=P2^5;</p><p>  sbit key4=P2^6;</p><p>  uchar i,time=10,m=1,sudu;&l

33、t;/p><p>  static uchar n=0;</p><p>  uchar string1[]={0xfe,0xfd,0xfb,0xf7}; //單相四拍</p><p>  uchar string2[]={0xfc,0xf9,0xf3,0xf6}; //雙相四拍</p><p>  uchar string3[]={0x

34、fe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6}; //四相八拍</p><p>  uchar sudu1[3]; //速度暫存</p><p>  void write(uchar,bit);</p><p>  void writestring(uchar,uchar,uchar,uchar *p);</p&g

35、t;<p>  void init();</p><p>  void delay(uint);</p><p>  void main()</p><p><b>  {</b></p><p><b>  init();</b></p><p>  writ

36、estring(0,0,12," 歡迎使用");</p><p>  writestring(1,0,16,"步進電機控制器");</p><p>  delay(2000);</p><p>  write(0x01,0); //清屏</p><p>  delay(100);</p&

37、gt;<p>  writestring(1,0,16,"請選擇工作方式");</p><p><b>  while(m)</b></p><p><b>  {</b></p><p>  if(key1==0)</p><p><b>  delay

38、(5);</b></p><p>  if(key1==0)</p><p><b>  n++;</b></p><p><b>  if(n==1)</b></p><p>  { write(0x01,0);</p><p>  delay(100)

39、;</p><p>  writestring(1,2,8,"單相四拍");</p><p>  while(n==1)</p><p>  { for(i=0;i<4;i++)</p><p><b>  { </b></p><p>  P1=string

40、1[i];</p><p><b>  delay(1);</b></p><p><b>  }</b></p><p>  if(key1==0) break;</p><p>  if(key4==0) {m=0;break;}</p><p><b>  }

41、</b></p><p><b>  }</b></p><p><b>  if(n==2)</b></p><p><b>  {</b></p><p>  write(0x01,0);</p><p>  delay(100);<

42、;/p><p>  writestring(1,2,8,"雙相四拍");</p><p>  while(n==2)</p><p><b>  {</b></p><p>  for(i=0;i<4;i++)</p><p><b>  {</b>&l

43、t;/p><p>  P1=string2[i];</p><p><b>  delay(1);</b></p><p><b>  }</b></p><p>  if(key1==0) break;</p><p>  if(key4==0) {m=0;break;}<

44、;/p><p><b>  }</b></p><p><b>  }</b></p><p><b>  if(n==3)</b></p><p><b>  {</b></p><p>  write(0x01,0);</p&

45、gt;<p>  delay(100);</p><p>  writestring(1,2,8,"四相八拍");</p><p>  while(n==3)</p><p><b>  {</b></p><p>  for(i=0;i<8;i++)</p><

46、;p><b>  {</b></p><p>  P1=string3[i];</p><p><b>  delay(1);</b></p><p><b>  }</b></p><p>  if(key1==0) break;</p><p>

47、;  if(key4==0) {m=0;break;}</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  if(n>3)</b></p><p><b>  n=0;</b></p

48、><p><b>  }</b></p><p>  write(0x01,0);</p><p>  delay(1000);</p><p>  writestring(0,2,8,"調(diào)速控制");</p><p><b>  while(1)</b>&l

49、t;/p><p><b>  {</b></p><p>  writestring(1,0,6,"轉(zhuǎn)速:");</p><p>  writestring(1,5,5,"r/min");</p><p>  writestring(2,0,10,"速度趨勢:");

50、</p><p>  if(key3==0) //點動減速</p><p><b>  delay(5);</b></p><p>  if(key3==0)</p><p><b>  {</b></p><p><b>  time++;</b

51、></p><p>  writestring(2,5,4,"減速");</p><p><b>  }</b></p><p>  if(time>=30)</p><p><b>  time=10;</b></p><p>  if(ke

52、y2==0) //點動加速</p><p><b>  delay(5);</b></p><p>  if(key2==0)</p><p><b>  {</b></p><p><b>  time--;</b></p><p>  w

53、ritestring(2,5,4,"加速"); </p><p><b>  } </b></p><p>  if(time<=1)</p><p><b>  time=1;</b></p><p>  for(i=0;i<8;i++)</p&g

54、t;<p><b>  {</b></p><p>  P1=string3[i];</p><p>  delay(time);</p><p><b>  }</b></p><p>  sudu=358/time;</p><p>  sudu1[0]=s

55、udu/100+0x30;</p><p>  sudu1[1]=sudu%100/10+0x30;</p><p>  sudu1[2]=sudu%10+0x30;</p><p>  writestring(1,3,3,sudu1);</p><p>  if(key4==0)</p><p><b> 

56、 break;</b></p><p><b>  }</b></p><p>  write(0x01,0);</p><p>  delay(1000);</p><p>  writestring(1,2,10,"謝謝使用!");</p><p><b&

57、gt;  while(1);</b></p><p><b>  }</b></p><p>  void delay(uint z)</p><p><b>  {</b></p><p><b>  uint x,y;</b></p><p&

58、gt;  for(x=115;x>0;x--)</p><p>  for(y=z;y>0;y--);</p><p><b>  }</b></p><p>  void write(uchar dat,bit command)//寫函數(shù)</p><p><b>  {</b><

59、;/p><p><b>  P0=dat;</b></p><p>  RS=command;</p><p><b>  RW=0;</b></p><p><b>  E=1;</b></p><p><b>  E=0;</b>

60、</p><p><b>  }</b></p><p>  void init()//初始化</p><p><b>  {</b></p><p>  write(0x38,0); //8位點陣顯示</p><p>  write(0x01,0);</p>

61、;<p>  write(0x0c,0); //開顯示關(guān)光標</p><p><b>  }</b></p><p>  void writestring(uchar x,uchar y,uchar z,uchar *p)//寫字符串</p><p><b>  { </b></p>

62、<p><b>  uchar i;</b></p><p><b>  if(x==1)</b></p><p><b>  x=2;</b></p><p>  else if(x==2)</p><p><b>  x=1;</b>&l

63、t;/p><p>  write(0x80+8*x+y,0);</p><p>  for(i=0;i<z;i++)</p><p><b>  {</b></p><p>  write(*p,1);</p><p><b>  p++;</b></p>&

64、lt;p><b>  }</b></p><p><b>  }</b></p><p><b>  九、設(shè)計體會</b></p><p>  這次單片機課程設(shè)計不僅復習鞏固了學到的知識,還擴展了知識。通過這次課程設(shè)計,我們從純理論的人是上升到了實踐認識,鍛煉了創(chuàng)造能力,獨立思考能力,動手能力和

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論