單片機(jī)控制步進(jìn)電機(jī)_第1頁
單片機(jī)控制步進(jìn)電機(jī)_第2頁
單片機(jī)控制步進(jìn)電機(jī)_第3頁
單片機(jī)控制步進(jìn)電機(jī)_第4頁
單片機(jī)控制步進(jìn)電機(jī)_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、51單片機(jī)控制步進(jìn)電機(jī)接觸單片機(jī)快兩年了,不過只是非常業(yè)余的興趣,實(shí)踐卻不多,到現(xiàn)在還算是個(gè)初學(xué)者吧。這幾天給自己的任務(wù)就是搞定步進(jìn)電機(jī)的單片機(jī)控制。以前曾看過有關(guān)步進(jìn)電機(jī)原理和控制的資料,畢竟自己沒有做過,對(duì)其具體原理還不是很清楚。今天從淘寶上買了一個(gè)EPSON的UMX-1型步進(jìn)電機(jī),此步進(jìn)電機(jī)為雙極性四相(后來才知道,四相和兩相步進(jìn)沒什么區(qū)別的!),接線共有六根,外形如下圖所示:拿到步進(jìn)電機(jī),根據(jù)以前看書對(duì)四相步進(jìn)電機(jī)的了解,我對(duì)它進(jìn)行了初步的測(cè)試,就是將5伏電源的正端接上最邊上兩根褐色的線,然后用5伏電源的地線分別和另外四根線(紅、蘭、白、橙)依次接觸,發(fā)現(xiàn)每接觸一下,步進(jìn)電機(jī)便轉(zhuǎn)動(dòng)一個(gè)

2、角度,來回五次,電機(jī)剛好轉(zhuǎn)一圈,說明此步進(jìn)電機(jī)的步進(jìn)角度為360/(4×5)18度。地線與四線接觸的順序相反,電機(jī)的轉(zhuǎn)向也相反。如果用單片機(jī)來控制此步進(jìn)電機(jī),則只需分別依次給四線一定時(shí)間的脈沖電流,電機(jī)便可連續(xù)轉(zhuǎn)動(dòng)起來。通過改變脈沖電流的時(shí)間間隔,就可以實(shí)現(xiàn)對(duì)轉(zhuǎn)速的控制;通過改變給四線脈沖電流的順序,則可實(shí)現(xiàn)對(duì)轉(zhuǎn)向的控制。所以,設(shè)計(jì)了如下電路圖:C51程序代碼為:代碼一#include <AT89X51.h>static unsigned int count;static unsigned int endcount;void del

3、ay();void main(void) count = 0;P1_0 = 0;P1_1 = 0;P1_2 = 0;P1_3 = 0;EA = 1;              /允許CPU中斷 TMOD = 0x11; /設(shè)定時(shí)器0和1為16位模式1 ET0 = 1;            

4、; /定時(shí)器0中斷允許TH0 = 0xFC; TL0 = 0x18;      /設(shè)定時(shí)每隔1ms中斷一次 TR0 = 1;           /開始計(jì)數(shù)startrun:P1_3 = 0;P1_0 = 1;delay();P1_0 = 0;P1_1 = 1;delay();P1_1 = 0;P1_2 = 1;delay();P1_2 = 0;P1_3 = 1;delay();goto star

5、trun;/定時(shí)器0中斷處理 void timeint(void) interrupt 1  TH0=0xFC; TL0=0x18; /設(shè)定時(shí)每隔1ms中斷一次count+;void delay()endcount=2;count=0;dowhile(count<endcount);將上面的程序編譯,用ISP下載線下載至單片機(jī)運(yùn)行,步進(jìn)電機(jī)便轉(zhuǎn)動(dòng)起來了,初步告捷!不過,上面的程序還只是實(shí)現(xiàn)了步進(jìn)電機(jī)的初步控制,速度和方向的控制還不夠靈活,另外,由于沒有利用步進(jìn)電機(jī)內(nèi)線圈之間的“中間狀態(tài)”,步進(jìn)電機(jī)的

6、步進(jìn)角度為18度。 二手步進(jìn)電機(jī)的要注意,有些退磁比較嚴(yán)重,這個(gè)店還是比較好的,加到12V,步進(jìn)的力氣很大,用手?jǐn)Q不?。『呛?,算是幫這個(gè)店做個(gè)廣告了O(_)O所以,我將程序代碼改進(jìn)了一下,如下:代碼二#include <AT89X51.h>static unsigned int count;static int step_index;void delay(unsigned int endcount);void gorun(bit turn, unsigned int speedlevel);v

7、oid main(void) count = 0;step_index = 0;P1_0 = 0;P1_1 = 0;P1_2 = 0;P1_3 = 0;EA = 1;             /允許CPU中斷 TMOD = 0x11; /設(shè)定時(shí)器0和1為16位模式1 ET0 = 1;           &#

8、160;/定時(shí)器0中斷允許TH0 = 0xFE; TL0 = 0x0C; /設(shè)定時(shí)每隔0.5ms中斷一次 TR0 = 1;         /開始計(jì)數(shù)do    gorun(1,60);while(1);/定時(shí)器0中斷處理 void timeint(void) interrupt 1  TH0=0xFE; TL0=0x0C; /設(shè)定時(shí)每隔0.5ms中斷一次count+

9、;void delay(unsigned int endcount)count=0;dowhile(count<endcount);void gorun(bit turn,unsigned int speedlevel)switch(step_index)case 0:    P1_0 = 1;    P1_1 = 0;    P1_2 = 0;    P1_3 = 0;   &#

10、160;break;case 1:    P1_0 = 1;    P1_1 = 1;    P1_2 = 0;    P1_3 = 0;    break;case 2:    P1_0 = 0;    P1_1 = 1;    P1_2 = 0;    P1_3 = 0;  

11、  break;case 3:    P1_0 = 0;    P1_1 = 1;    P1_2 = 1;    P1_3 = 0;    break;case 4:    P1_0 = 0;    P1_1 = 0;    P1_2 = 1;    P1_3 = 0;

12、0;   break;case 5:    P1_0 = 0;    P1_1 = 0;    P1_2 = 1;    P1_3 = 1;    break;case 6:    P1_0 = 0;    P1_1 = 0;    P1_2 = 0;    P1_3

13、= 1;    break;case 7:    P1_0 = 1;    P1_1 = 0;    P1_2 = 0;    P1_3 = 1;delay(speedlevel);if (turn=0)    step_index+;    if (step_index>7)    

14、0; step_index=0;else    step_index-;    if (step_index<0)      step_index=7;    改進(jìn)的代碼能實(shí)現(xiàn)速度和方向的控制,而且,通過step_index靜態(tài)全局變量能“記住”步進(jìn)電機(jī)的步進(jìn)位置,下次調(diào)用 gorun()函數(shù)時(shí)則可直接從上次步進(jìn)位置繼續(xù)轉(zhuǎn)動(dòng),從而實(shí)現(xiàn)精確步進(jìn);另外,由于利用了步進(jìn)電機(jī)內(nèi)線圈之間的“中間狀態(tài)”,步進(jìn)角度減小了一半,只為9度

15、,低速運(yùn)轉(zhuǎn)也相對(duì)穩(wěn)定一些了。但是,在代碼二中,步進(jìn)電機(jī)的運(yùn)轉(zhuǎn)控制是在主函數(shù)中,如果程序還需執(zhí)行其它任務(wù),則有可能使步進(jìn)電機(jī)的運(yùn)轉(zhuǎn)收到影響,另外還有其它方面的不便,總之不是很完美的控制。所以我又將代碼再次改進(jìn):代碼三#include <AT89X51.h>static unsigned int count; /計(jì)數(shù)static int step_index; /步進(jìn)索引數(shù),值為07static bit turn; /步進(jìn)電機(jī)轉(zhuǎn)動(dòng)方向static bit stop_flag; /步進(jìn)電機(jī)停止標(biāo)志s

16、tatic int speedlevel; /步進(jìn)電機(jī)轉(zhuǎn)速參數(shù),數(shù)值越大速度越慢,最小值為1,速度最快static int spcount;    /步進(jìn)電機(jī)轉(zhuǎn)速參數(shù)計(jì)數(shù)void delay(unsigned int endcount); /延時(shí)函數(shù),延時(shí)為endcount*0.5毫秒void gorun();          /步進(jìn)電機(jī)控制步進(jìn)函數(shù)void main(voi

17、d) count = 0;step_index = 0;spcount = 0;stop_flag = 0;P1_0 = 0;P1_1 = 0;P1_2 = 0;P1_3 = 0;EA = 1;            /允許CPU中斷 TMOD = 0x11; /設(shè)定時(shí)器0和1為16位模式1 ET0 = 1;           

18、;/定時(shí)器0中斷允許TH0 = 0xFE;TL0 = 0x0C;   /設(shè)定時(shí)每隔0.5ms中斷一次TR0 = 1;         /開始計(jì)數(shù)turn = 0;speedlevel = 2;delay(10000);speedlevel = 1;do    speedlevel = 2;    delay(10000);    speedlevel = 1;   

19、delay(10000);    stop_flag=1;    delay(10000);    stop_flag=0;while(1);/定時(shí)器0中斷處理 void timeint(void) interrupt 1  TH0=0xFE;TL0=0x0C; /設(shè)定時(shí)每隔0.5ms中斷一次count+;spcount-;if(spcount<=0)    spcount = speedlevel;  

20、60; gorun();void delay(unsigned int endcount)count=0;dowhile(count<endcount);void gorun()if (stop_flag=1)    P1_0 = 0;    P1_1 = 0;    P1_2 = 0;    P1_3 = 0;    return;switch(step_index)case 0

21、: /0    P1_0 = 1;    P1_1 = 0;    P1_2 = 0;    P1_3 = 0;    break;case 1: /0、1    P1_0 = 1;    P1_1 = 1;    P1_2 = 0;    P1_3 = 0;  

22、60; break;case 2: /1    P1_0 = 0;    P1_1 = 1;    P1_2 = 0;    P1_3 = 0;    break;case 3: /1、2    P1_0 = 0;    P1_1 = 1;    P1_2 = 1;   

23、; P1_3 = 0;    break;case 4: /2    P1_0 = 0;    P1_1 = 0;    P1_2 = 1;    P1_3 = 0;    break;case 5: /2、3    P1_0 = 0;    P1_1 = 0;   

24、P1_2 = 1;    P1_3 = 1;    break;case 6: /3    P1_0 = 0;    P1_1 = 0;    P1_2 = 0;    P1_3 = 1;    break;case 7: /3、0    P1_0 = 1;    P1_1 = 0;    P1_2 = 0;    P1_3 = 1;if (turn=0)    step_index+;   

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論