四相步進(jìn)電機(jī)全教程_第1頁
四相步進(jìn)電機(jī)全教程_第2頁
四相步進(jìn)電機(jī)全教程_第3頁
四相步進(jìn)電機(jī)全教程_第4頁
四相步進(jìn)電機(jī)全教程_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

四相步進(jìn)電機(jī)全教程——蓋爾@袁〔4、21〕前段時(shí)間就有玩過步進(jìn)電機(jī)了,但是后來因?yàn)橛脖P壞了,資料全沒了,之后想再玩的時(shí)間都不知道該怎么弄了,這時(shí)候覺得假設(shè)當(dāng)時(shí)有留點(diǎn)資料發(fā)到網(wǎng)上的話,那現(xiàn)在也就不會(huì)那么糾結(jié)了,所以,昨晚又再一次拿起那步進(jìn)電機(jī),再一次玩一下,大概把之前那些東西回想起來了,現(xiàn)在寫一份小教程〔之所以叫全教程,是因?yàn)榭戳诉@份資料之后,對(duì)應(yīng)地也就大概能用起來,對(duì)步進(jìn)電機(jī)也有一個(gè)大概的了解了〕,以共大家學(xué)習(xí),希望高手拍磚!〔里面有些是直接引用網(wǎng)上的資料,如有原作者看到的話,我在這里跟他說聲謝謝,因?yàn)槟鷮懙锰昧耍 瞅?qū)動(dòng)電路我用的是L298N這款很經(jīng)典的電機(jī)驅(qū)動(dòng)芯片,這芯片可以驅(qū)動(dòng)直流電機(jī),步進(jìn)電機(jī)等,功能相當(dāng)強(qiáng)大,很好用,雖然貴了點(diǎn)〔下面再介紹一種比擬好的,價(jià)格比擬低的驅(qū)動(dòng)電路,也相當(dāng)好用〕,但是還是用了,畢竟是經(jīng)典之作嘛!呵呵!電路如下:大家可以看到,上面這電機(jī)驅(qū)動(dòng)芯片L298N有四個(gè)輸入〔IN1,IN2,IN3,IN4〕和四個(gè)輸出〔M1,M2〕,對(duì)了,就是對(duì)應(yīng)單片機(jī)〔或者其它主控芯片,比方說M3,我用的就是這個(gè)〕的輸入控制端,然后這四個(gè)控制端通過L298N間接地控制了步進(jìn)電機(jī)〔也就是圖里的M1,M2〕,因?yàn)椴竭M(jìn)電機(jī)轉(zhuǎn)動(dòng)的時(shí)候需要比擬大的電流,單片機(jī)IO引腳沒法提供,只有通過這驅(qū)動(dòng)芯片才能夠帶動(dòng)起來!電路里面還有PWMA和PWMB,這是使能端,用于使能M1和M2是否被輸入控制的,高電平有效!一般我們假設(shè)需要控制的話,這個(gè)就接單片機(jī)的IO引腳上,假設(shè)不需要獨(dú)立控制的話那直接接高電平就行了!另外,大家可以看到電路里面還有一個(gè)5V的輸入,具體這個(gè)是做什么的我也不是很清楚,不過照給就是了,沒問題的!好,首先先把這電路焊出來,記得,因?yàn)長298N工作的時(shí)候電流比擬大,所以要求必需加上一個(gè)散熱片,這樣有利于保護(hù)電路不會(huì)因?yàn)檫^熱而燒了!這里有一個(gè)小知識(shí)跟大家說一下,焊電路最好是加上一個(gè)電源指示燈,這樣的好處多多,可以防止電源接反而完全不知!OK,這個(gè)方案介紹完了,下面介紹另一種本錢比擬低的驅(qū)動(dòng)方案!假設(shè)手頭上有ULN2003的話,也可以用來當(dāng)成驅(qū)動(dòng)電路用,我們只要知道驅(qū)動(dòng)電路的作用就是放大那個(gè)電流,那任何一種能夠放大電流的方法都可以拿過來用,包括你用三極管都行!下面提供一個(gè)三極管的驅(qū)動(dòng)電路!至于ULN2003,具體電路我就不說了!很簡單的,看下芯片的PDF就知道了。對(duì)了,這里順便介紹一個(gè)找PDF比擬全的網(wǎng)站——ICPDF,當(dāng)然IC37也很全!步進(jìn)電機(jī)原理按照常理來說,步進(jìn)電機(jī)接線要根據(jù)線的顏色來區(qū)分接線。但是不同公司生產(chǎn)的步進(jìn)電機(jī),線的顏色不一樣。特別是國外的步進(jìn)電機(jī)。那么,步進(jìn)電機(jī)接線應(yīng)該用萬用表打表。步進(jìn)電機(jī)內(nèi)部構(gòu)造如下列圖:通過上圖可知,A,~A是聯(lián)通的,B和~B是聯(lián)通。那么,A和~A是一組a,B和~B是一組b。不管是兩相四相,四相五線,四相六線步進(jìn)電機(jī)。內(nèi)部構(gòu)造都是如此。至于究竟是四線,五線,還是六線。就要看A和~A之間,B和B~之間有沒有公共端com抽線。如果a組和b組各自有一個(gè)com端,那么該步進(jìn)電機(jī)六線,如果a和b組的公共端連在一起,那么是5線的。所以,要弄清步進(jìn)電機(jī)如何接線,只需把a(bǔ)組和b組分開。用萬用表打。四線:由于四線沒有com公共抽線,所以,a和b組是絕對(duì)絕緣的,不連通的。所以,用萬用表測,不連通的是一組。五線:由于五線中,a和b組的公共端是連接在一起的。用萬用表測,當(dāng)發(fā)現(xiàn)有一根線和其他幾根線的電阻是相當(dāng)?shù)?,那么,這根線就是公共com端。對(duì)于驅(qū)動(dòng)五線步進(jìn)電機(jī),公共com端不連接也是可以驅(qū)動(dòng)步進(jìn)電機(jī)的。六線:a和b組的公共抽線com端是不連通的。同樣,用萬用表測電阻,發(fā)現(xiàn)其中一根線和其他兩根線阻止是一樣的,那么這根線是com端,另2根線就屬于一組。對(duì)于驅(qū)動(dòng)四相六線步進(jìn)電機(jī),兩根公共com端不接先也可以驅(qū)動(dòng)該步進(jìn)電機(jī)的。通過上面的方法都可以測得不同線對(duì)應(yīng)的接線,當(dāng)然,也還有一些朋友不知道,那測出AA’和BB’之后,怎么分開哪根是A哪根是A’,哪根是B哪根是B’呢?之前我也有一樣的問題,相信初學(xué)步進(jìn)電機(jī)的朋友也一樣,我這里有一看到一個(gè)帖,里面介紹了一種方法,不知道好不好用〔我這邊的步進(jìn)電機(jī)就不行〕:拿到步進(jìn)電機(jī),根據(jù)以前看書對(duì)四相步進(jìn)電機(jī)的了解,我對(duì)它進(jìn)行了初步的測試,就是將5伏電源的正端接上最邊上兩根褐色〔指的是公共端,不同電機(jī)顏色不同〕的線,然后用5伏電源的地線分別和另外四根線〔紅、蘭、白、橙〕〔指的是剩下的控制線,不同電機(jī)顏色不同〕依次接觸,發(fā)現(xiàn)每接觸一下,步進(jìn)電機(jī)便轉(zhuǎn)動(dòng)一個(gè)角度,來回五次,電機(jī)剛好轉(zhuǎn)一圈,說明此步進(jìn)電機(jī)的步進(jìn)角度為360/(4×5)=18度。地線與四線接觸的順序相反,電機(jī)的轉(zhuǎn)向也相反。除了上面這種方法,現(xiàn)在還沒有看到有帖介紹如何區(qū)分這四條線的,當(dāng)然,假設(shè)有朋友研究出來還請(qǐng)共享一下!謝謝!如果實(shí)在不行,最好是找下別人現(xiàn)有的程序,然后一個(gè)一個(gè)試!沒方法!驅(qū)動(dòng)方法我們驅(qū)動(dòng)步進(jìn)電機(jī)的話有好幾種方法,個(gè)人覺得比擬簡單也比擬常用的還是下面這兩種,有四相四拍運(yùn)行方式即AB-BC-CD-DA-AB,四相八拍運(yùn)行方式即A-AB-B-BC-C-CD-D-DA-A.,什么是四相四拍,什么是四相八拍,這些字母代表什么意思,請(qǐng)往下看!上圖是表示剛剛步進(jìn)電機(jī)的內(nèi)部結(jié)構(gòu)〔手工畫的不好看〕,沒有畫中線抽頭。中間那個(gè)表示電機(jī)轉(zhuǎn)子,左邊藍(lán)色的表示A線圈,上面紅色的表示B線圈,大家看到上面標(biāo)志中還有一些是打括號(hào)的,表示什么呢?就是說這個(gè)接線是一開始講到的A’接線,跟剛剛講到的那個(gè)C字母表示的接線其實(shí)是同一根線!那現(xiàn)在我就用圖來表示解釋下什么是四相四拍,AB-BC-CD-DA-AB表示的是什么。AB-BC-CD-DA-AB中的出現(xiàn)的字母表示這根線對(duì)應(yīng)加上高電平,其余的都是低電平。具體就是,在AB處于高電平,CD處于低電平,延時(shí)一小段時(shí)間;然后BC處于高電平,AD處于低電平,再延時(shí)一小段時(shí)間,如此下去CD高,AB低,延時(shí),DA高,BC低,延時(shí)……那究竟為什么要這樣子呢?下面我用圖給大家解釋一下。第一:AB高,CD低,電流那么如下列圖黃色線所示方向流動(dòng),產(chǎn)生的磁場使得電機(jī)轉(zhuǎn)子順時(shí)針轉(zhuǎn)動(dòng)90度,轉(zhuǎn)過90度之后就停在那里了;第二:BC高,AD低,電流如下列圖所示,同樣道理,電機(jī)轉(zhuǎn)子轉(zhuǎn)過90度;第三,CD高,AB低,如下列圖:第四,DA高,BC低,如下列圖:如此一循環(huán)之后,電機(jī)轉(zhuǎn)子就轉(zhuǎn)過了一周,如果這樣循環(huán)這樣一個(gè)動(dòng)作的話,那電機(jī)就會(huì)轉(zhuǎn)起來了!現(xiàn)在大家應(yīng)該明白了什么是四相四拍了吧!同理,四相八拍也是一樣的道理,這里就不多說了,大家應(yīng)該明白!上面講述的是順時(shí)針轉(zhuǎn)動(dòng),那逆時(shí)針轉(zhuǎn)動(dòng)的話該怎么弄了,相信明白上面原理的朋友自己都能夠畫出來,我這里就只是簡單地提供一下給大家做參考,時(shí)序?yàn)镈A-CD-BC-AB!軟件局部:知道了硬件原理,軟件方面就簡單好辦了,只要按照上面說的對(duì)應(yīng)地給上高電平低電平的,再來個(gè)延時(shí)就可以實(shí)現(xiàn)了。對(duì)于四相四拍的驅(qū)動(dòng)方法,程序形式如下:While(1){IN1=1;IN2=1;IN3=0;IN4=0;Delay();IN1=0;IN2=1;IN3=1;IN4=0;Delay();IN1=0;IN2=0;IN3=1;IN4=1;Delay();IN1=1;IN2=0;IN3=0;IN4=1;Delay();}同樣,反向轉(zhuǎn)動(dòng)的也能夠搞定,四相八拍的也一樣道理。那程序是不是就非常之簡單呢?當(dāng)然不是,程序里面最難的要確定的就是——延時(shí),這個(gè)延時(shí)的時(shí)間把握得好才能夠驅(qū)動(dòng)起來,太長了不行,太短了也不行,那究竟是多少才適宜呢?這里我教大家一個(gè)方法,原理很簡單,就是用一個(gè)for循環(huán)來變換不同的延時(shí)時(shí)間,通過這樣來確定在哪個(gè)延時(shí)時(shí)間范圍之內(nèi)比擬適宜,這樣來慢慢試:For(num=0;num<100;num++){For(time=0;time<100;time++) {IN1=1;IN2=1;IN3=0;IN4=0;Delay(num*1000);IN1=0;IN2=1;IN3=1;IN4=0;Delay(num*1000);IN1=0;IN2=0;IN3=1;IN4=1;Delay(num*1000);IN1=1;IN2=0;IN3=0;IN4=1;Delay(num*1000);}}程序里面,num是用來調(diào)整每次延時(shí)時(shí)長的,time是做為每次一個(gè)固定時(shí)長讓電機(jī)轉(zhuǎn)一定的時(shí)間,因?yàn)槲覀儾豢梢宰岆姍C(jī)一直變變變,而需要變一下轉(zhuǎn)幾圈看看合不適宜,就是這樣的道理了,通過這種方法大家可以大概知道電機(jī)適時(shí)多長時(shí)長比擬適宜,在一個(gè)適合的延時(shí)里電機(jī)才能夠轉(zhuǎn)動(dòng),不同的延時(shí)電機(jī)轉(zhuǎn)動(dòng)速度不同。下面提供一些C51的程序代碼〔注:這些是在另一份資料找到的,非本人所寫,在這里感謝原作者的無私〕:C51程序代碼為:代碼一#include<AT89X51.h>staticunsignedintcount;staticunsignedintendcount;voiddelay();voidmain(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;

//定時(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();gotostartrun;

}//定時(shí)器0中斷處理voidtimeint(void)interrupt1

{

TH0=0xFC;

TL0=0x18;//設(shè)定時(shí)每隔1ms中斷一次

count++;

}voiddelay()

{

endcount=2;

count=0;do{}while(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ī)的步進(jìn)角度為18度。所以,我將程序代碼改良了一下,如下:代碼二#include<AT89X51.h>staticunsignedintcount;staticintstep_index;voiddelay(unsignedintendcount);voidgorun(bitturn,unsignedintspeedlevel);voidmain(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;

//定時(shí)器0中斷允許

TH0=0xFE;

TL0=0x0C;

//設(shè)定時(shí)每隔0.5ms中斷一次

TR0=1;

//開始計(jì)數(shù)do{

gorun(1,60);

}while(1);}//定時(shí)器0中斷處理voidtimeint(void)interrupt1

{

TH0=0xFE;

TL0=0x0C;//設(shè)定時(shí)每隔0.5ms中斷一次

count++;

}voiddelay(unsignedintendcount)

{

count=0;do{}while(count<endcount);

}voidgorun(bitturn,unsignedintspeedlevel)

{switch(step_index)

{case0:

P1_0=1;

P1_1=0;

P1_2=0;

P1_3=0;break;case1:

P1_0=1;

P1_1=1;

P1_2=0;

P1_3=0;break;case2:

P1_0=0;

P1_1=1;

P1_2=0;

P1_3=0;break;case3:

P1_0=0;

P1_1=1;

P1_2=1;

P1_3=0;break;case4:

P1_0=0;

P1_1=0;

P1_2=1;

P1_3=0;break;case5:

P1_0=0;

P1_1=0;

P1_2=1;

P1_3=1;break;case6:

P1_0=0;

P1_1=0;

P1_2=0;

P1_3=1;break;case7:

P1_0=1;

P1_1=0;

P1_2=0;

P1_3=1;

}

delay(speedlevel);if(turn==0)

{

step_index++;if(step_index>7)

step_index=0;

}else

{

step_index--;if(step_index<0)

step_index=7;

}

}改良的代碼能實(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度,低速運(yùn)轉(zhuǎn)也相對(duì)穩(wěn)定一些了。但是,在代碼二中,步進(jìn)電機(jī)的運(yùn)轉(zhuǎn)控制是在主函數(shù)中,如果程序還需執(zhí)行其它任務(wù),那么有可能使步進(jìn)電機(jī)的運(yùn)轉(zhuǎn)收到影響,另外還有其它方面的不便,總之不是很完美的控制。所以我又將代碼再次改良:代碼三#include<AT89X51.h>staticunsignedintcount;

//計(jì)數(shù)staticintstep_index;

//步進(jìn)索引數(shù),值為0-7staticbitturn;

//步進(jìn)電機(jī)轉(zhuǎn)動(dòng)方向staticbitstop_flag;

//步進(jìn)電機(jī)停止標(biāo)志staticintspeedlevel;//步進(jìn)電機(jī)轉(zhuǎn)速參數(shù),數(shù)值越大速度越慢,最小值為1,速度最快staticintspcount;

//步進(jìn)電機(jī)轉(zhuǎn)速參數(shù)計(jì)數(shù)voiddelay(unsignedintendcount);

//延時(shí)函數(shù),延時(shí)為endcount*0.5毫秒voidgorun();

//步進(jìn)電機(jī)控制步進(jìn)函數(shù)voidmain(void)

{

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;

//定時(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;

delay(10000);

stop_flag=1;

delay(10000);

stop_flag=0;

}while(1);}//定時(shí)器0中斷處理

voidtimeint(void)interrupt1

{

TH0=0xFE;

TL0=0x0C;//設(shè)定時(shí)每隔0.5ms中斷一次

count++;

spcount--;if(spcount<=0)

{

spcount=speedlevel;

gorun();

}}voiddelay(unsignedintendcount)

{

count=0;do{}while(count<endcount);

}voidgorun()

{if(stop_flag==1)

{

P1_0=0;

P1_1=0;

P1_2=0;

P1_3=0;return;

}switch(step_index)

{case0://0

P1_0=1;

P1_1=0;

P1_2=0;

P1_3=0;break;case1://0、1

P1_0=1;

P1_1=1;

P1_2=0;

P1_3=0;break;case2://1

P1_0=0;

P1_1=1;

P1_2=0;

P1_3=0;break;case3://1、2

P1_0=0;

P1_1=1;

P1_2=1;

P1_3=0;break;case4:

//2

P1_0=0;

P1_1=0;

P1_2=1;

P1_3=0;break;case5://2、3

P1_0=0;

P1_1=0;

P1_2=1;

P1_3=1;break;case6://3

P1_0=0;

P1_1=0

溫馨提示

  • 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)論