步進(jìn)電機(jī)是機(jī)電控制中一種常用的執(zhí)行機(jī)構(gòu),它的用途是將電脈沖轉(zhuǎn)化為角位移,通俗地說:當(dāng)步進(jìn)驅(qū)動(dòng)器接收到一個(gè)脈沖信號(hào),它就驅(qū)動(dòng)步進(jìn)電機(jī)按設(shè)定的方向轉(zhuǎn)動(dòng)一個(gè)固定的角度(及步進(jìn)角)。通過控制脈沖個(gè)數(shù)即可以控制角位移量,從而達(dá)到準(zhǔn)確定位的目的;同時(shí)通過控制脈沖頻率來控制電機(jī)轉(zhuǎn)動(dòng)的速度和加速度,從而達(dá)到調(diào)速的目的。
T89C2051單片機(jī)驅(qū)動(dòng)步進(jìn)電機(jī)的電路和源碼
stepper.c
stepper.hex
/*
* STEPPER.C
* sweeping steppers rotor cw and cww 400 steps
* Copyright (c) 1999 by W.Sirichote
*/
#include c:mc518051io.h /* include i/o header file */
#include c:mc518051reg.h
register unsigned char j,flag1,temp;
register unsigned int cw_n,ccw_n;
unsigned char step[8]={0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90}
#define n 400
/* flag1 mask byte
0x01 run cw()
0x02 run ccw()
*/
main()
{
flag1=0;
serinit(9600);
dISAble(); /* no need timer interrupt */
cw_n = n; /* initial step number for cw */
flag1 |=0x01; /* initial enable cw() */
while(1){
{
tick_wait(); /* wait for 10ms elapsed */
energize(); /* round-robin execution the following tasks every 10ms */
cw();
ccw();
}
}
}
cw(){
if((flag10x01)!=0)
{
cw_n–; /* decrement cw step number */
if (cw_n !=0)
j++; /* if not zero increment index j */
else
{flag1=~0x01; /* dISAble cw() execution */
ccw_n = n; /* reload step number to ccw counter */
flag1 |=0x02; /* enable cww() execution */
}
}
}
ccw(){
if((flag10x02)!=0)
{
ccw_n–; /* decremnent ccw step number */
if (ccw_n !=0)
j–; /* if not zero decrement index j */
else
{flag1=~0x02; /* dISAble ccw() execution */
cw_n = n; /* reload step number to cw counter */
flag1 |=0x01; /* enable cw() execution */
}
}
}
tick_wait(){ /* cputick was replaced by simpler ASM code 10ms wait */
asm JNB TCON.5,*; /* wait for TF0 set */
asm CLR TCON.5; /* clear TF0 for further set */
asm ORL TH0,#$DC; /* reload TH0 with $DC, TL0 = 0 */
}
energize(){
P1 = step[(j0x07)]; /* only step 0-7 needed */
}
一、步進(jìn)電機(jī)常識(shí)
常見的步進(jìn)電機(jī)分三種:永磁式(PM),反應(yīng)式(VR)和混合式(HB),永磁式步進(jìn)一般為兩相,轉(zhuǎn)矩和體積較小,步進(jìn)角一般為7.5度 或15度;反應(yīng)式步進(jìn)一般為三相,可實(shí)現(xiàn)大轉(zhuǎn)矩輸出,步進(jìn)角一般為1.5度,但噪聲和振動(dòng)都很大。在歐美等發(fā)達(dá)國家80年代已被淘汰;混合式步進(jìn)是指混合了永磁式和反應(yīng)式的優(yōu)點(diǎn)。它又分為兩相和五相:兩相步進(jìn)角一般為1.8度而五相步進(jìn)角一般為 0.72度。這種步進(jìn)電機(jī)的應(yīng)用最為廣泛。
二、永磁式步進(jìn)電機(jī)的控制
下面以電子愛好者業(yè)余制作中常用的永磁式步進(jìn)電機(jī)為例,來介紹如何用單片機(jī)控制步進(jìn)電機(jī)。
圖1是35BY型永磁步進(jìn)電機(jī)的外形圖,圖2是該電機(jī)的接線圖,從圖中可以看出,電機(jī)共有四組線圈,四組線圈的一個(gè)端點(diǎn)連在一起引出,這樣一共有5根引出線。要使用步進(jìn)電機(jī)轉(zhuǎn)動(dòng),只要輪流給各引出端通電即可。將COM端標(biāo)識(shí)為C,只要AC、 C、BC、 C,輪流加電就能驅(qū)動(dòng)步進(jìn)電機(jī)運(yùn)轉(zhuǎn),加電的方式可以有多種,如果將COM端接正電源,那么只要用開關(guān)元件(如三極管),將A、 、B、 輪流接地。
下表列出了該電機(jī)的一些典型參數(shù):
表1 35BY48S03型步機(jī)電機(jī)參數(shù)
型號(hào) 步距角 相數(shù) 電壓 電流 電阻 最大靜轉(zhuǎn)距 定位轉(zhuǎn)距 轉(zhuǎn)動(dòng)慣量
35BY48S03 7.5 4 12 0.26 47 180 65 2.5
有了這些參數(shù),不難設(shè)計(jì)出控制電路,因其工作電壓為12V,最大電流為0.26A,因此用一塊開路輸出達(dá)林頓驅(qū)動(dòng)器(ULN2003)來作為驅(qū)動(dòng),通過 P1.4~P1.7來控制各線圈的接通與切斷,電路如圖3所示。開機(jī)時(shí),P1.4~P1.7均為高電平,依次將P1.4~P1.7切換為低電平即可驅(qū)動(dòng)步進(jìn)電機(jī)運(yùn)行,注意在切換之前將前一個(gè)輸出引腳變?yōu)楦唠娖健H绻淖冸姍C(jī)的轉(zhuǎn)動(dòng)速度只要改變兩次接通之間的時(shí)間,而要改變電機(jī)的轉(zhuǎn)動(dòng)方向,只要改變各線圈接通的順序。