? ? ??我以2相4線步進(jìn)電機(jī)為例介紹步進(jìn)電機(jī)驅(qū)動原理。大家都知道:通電的導(dǎo)體在磁場中產(chǎn)生力的作用;通電的線圈產(chǎn)生磁場。前一條是直流電機(jī)驅(qū)動原理,這里不作介紹。后一條原理是步進(jìn)電機(jī)的運(yùn)動依據(jù)。先來看看2相4線步進(jìn)電機(jī)構(gòu)造示意圖,如下:
從上圖我們可以看出,步進(jìn)電機(jī)有一個轉(zhuǎn)子和一個定子。所謂轉(zhuǎn)子,就是該器件是活動的,可以轉(zhuǎn)動的。所謂定子,就是該器件是固定,不動的。轉(zhuǎn)子,就是中間那個磁體,我們可看到它的N極、S極已經(jīng)標(biāo)出。定子,外圍那個環(huán),它上面繞著有A(A+)、B(B+)、A(A-)、B(B-)4個線圈,每個線圈都有引出一條給外部連接的線,其中A、A是一相,是連通的,暫且叫它A相,B、B是一相,是連通的,暫且叫它B相。2相4線的說法就是來自這里。A相或B相通電時,會讓它自身變?yōu)橐粋€磁體,這個磁體會對轉(zhuǎn)子上的磁體產(chǎn)生強(qiáng)大引力,從而拉動轉(zhuǎn)子的轉(zhuǎn)動。當(dāng)然,磁體的極性要有一定規(guī)律,力矩才能按照自己的需求作用在一個方向,不然力可能會被抵消,導(dǎo)致電機(jī)通電后不轉(zhuǎn)動或者亂抖動。A相或B相通電的通電規(guī)律,就是我們熟悉的步進(jìn)電機(jī)的時序問題。關(guān)于電機(jī)的時序,下面我們會用程序來介紹。先說明3個重要參數(shù),如下:
??齒距角: 表示兩個齒距之間的夾角,我用的42步進(jìn)電機(jī)有50個齒,齒距角α=360/50=7.2°? ? ? ?
? ? ? ?拍數(shù):轉(zhuǎn)過一個齒距角所需脈沖數(shù),或者說完成一個磁場周期性變化所需脈沖數(shù),用n表示,
? ? ? ? ? ? ? ? 下面程序是4拍運(yùn)行方式,即AB→BA→AB→AB。
? ? ? ?步距角:表示控制系統(tǒng)每發(fā)送一個脈沖信號,電機(jī)所轉(zhuǎn)動的角度θ。θ=齒距角/拍數(shù)=7.2/4=1.8°。? ??
我們需要用到的關(guān)于步進(jìn)電機(jī)的關(guān)鍵信息上面已經(jīng)介紹完,接下來要說的是這里所用2相4線步進(jìn)電機(jī)的接線示意圖,如下圖:
? ? ??最后,我以一個Arduino程序來說明步進(jìn)電機(jī)的驅(qū)動過程。這里我用到:42步進(jìn)電機(jī) ;控制板,arduino nano開發(fā)板(HW-284);驅(qū)動板,L298N(HW-095)。接線示意圖如下:
程序如下:
#include
?
#define D2 2 //A+??黑線 OUT1
#define D3 3 //A-??綠線 OUT2
#define D4 4 //B+??紅線 OUT3
#define D5 5 //B-??藍(lán)線 OUT4
?
void setup() {
?
? pinMode(D2,OUTPUT);
? pinMode(D3,OUTPUT);
? pinMode(D4,OUTPUT);
? pinMode(D5,OUTPUT);
?
}
?
void loop() {
?//我使用的步進(jìn)電機(jī)為50齒,齒距角為α=7.2°,讓電機(jī)全步運(yùn)行,也就是4拍,那么步距角 β=α/4,也就是發(fā)一個脈沖,電機(jī)轉(zhuǎn)1.8°
?//我想讓電機(jī)轉(zhuǎn)速為V=2轉(zhuǎn)/s,那么可以算出每個脈沖的長度PL=(1000/2)/(360°/1.8°)=2.5ms
?//AB通電
? digitalWrite(D2,HIGH);
? digitalWrite(D3,LOW);//A相正向通電
? digitalWrite(D4,HIGH);
? digitalWrite(D5,LOW);//B相正向通電
? delay(2.5);//設(shè)置脈沖長度為2.5ms,電機(jī)轉(zhuǎn)速為2轉(zhuǎn)每秒
?
?//BA通電
? digitalWrite(D2,LOW);
? digitalWrite(D3,HIGH);//A相反向通電
? digitalWrite(D4,HIGH);
? digitalWrite(D5,LOW);//B相正向通電
? delay(2.5);
?
?//AB通電
? digitalWrite(D2,LOW);
? digitalWrite(D3,HIGH);//A相反向通電
? digitalWrite(D4,LOW);
? digitalWrite(D5,HIGH);//B相反向通電
? delay(2.5);
?
?//AB通電
? digitalWrite(D2,HIGH);
? digitalWrite(D3,LOW);//A相正向通電
? digitalWrite(D4,LOW);
? digitalWrite(D5,HIGH);//B相反向通電
? delay(2.5);
}
深圳市宏維微電子有限公司:20190922