您的位置首页百科问答

机器人制作之STC单片机控制步进电机

机器人制作之STC单片机控制步进电机

的有关信息介绍如下:

机器人制作之STC单片机控制步进电机

步进电机因运行平稳、控制性好,在自动化和机器人制作中应用广泛。通过STC15系列单片机及L293D或L298N电机驱动芯片能很好地控制步进电机的运行。

#include

//2相4拍,STEP1-STEP2-STEP3-STEP4是顺时针转动,STEP1-STEP4-STEP3-STEP2是逆时针转动。

#define STEP1 {A1=1;A2=0;B1=1;B2=0;}

#define STEP2 {A1=1;A2=0;B1=0;B2=1;}

#define STEP3 {A1=0;A2=1;B1=0;B2=1;}

#define STEP4 {A1=0;A2=1;B1=1;B2=0;}

sbit EN1 = P1^0;

sbit A1 = P1^1;

sbit A2 = P1^2;

sbit EN2 = P1^3;

sbit B1 = P1^4;

sbit B2 = P1^5;

//延时函数

void DelayMS(unsigned int a){

unsigned int i;

while( a-- != 0){

for(i = 0; i < 600; i++);

}

}

/*****

函数名:步进电机控制

调用:stepper(bit direction,unsigned char speed,unsigned long steps)

参数:direction(控制方向0为顺时针,1为逆时针),speed(控制速度最快是1,速度快容易失步),steps(走多少步)

返回值:无

*****/

void stepper(bit direction,unsigned char speed,unsigned long steps){

unsigned long j;

unsigned long k=0;

//stepsX4=steps/4;

if(direction==0){ //顺时针

for(j=0;j

STEP1;

DelayMS(speed);

k++;

if(k==steps){break;} //steps一步是1.8度,到达设定步数就跳出循环

STEP2;

DelayMS(speed);

k++;

if(k==steps){break;}

STEP3;

DelayMS(speed);

k++;

if(k==steps){break;}

STEP4;

DelayMS(speed);

k++;

if(k==steps){break;}

}

}else{ //逆时针

for(j=0;j

STEP1;

DelayMS(speed);

k++;

if(k==steps){break;}

STEP4;

DelayMS(speed);

k++;

if(k==steps){break;}

STEP3;

DelayMS(speed);

k++;

if(k==steps){break;}

STEP2;

DelayMS(speed);

k++;

if(k==steps){break;}

}

}

}

//主函数

void main(void)

{

EN1=1;

EN2=1;

while(1){

stepper(0,5,200);

DelayMS(1000);

stepper(1,1,200);

DelayMS(1000);

}

}