普中A2开发板,单片机stc89c52,步进电机28BYJ-48,驱动ULN2003,旋转某个设定的角度

注意:步进电机内有一个转子(在电机的内部,看不到),外部还有一个旋转的转子(就是直接能看见的),它俩旋转的角度不是一样的,见内部结构图。内部的转子旋转64周,外部的才旋转1周。这个问题搞了我好久,最终在参考1才知道。

旋转角度的计算公式在参考3中。

感谢以下分享:

1、ULN2003驱动步进电机28BYJ-48

2、STM32F103控制28BYJ-48步进电机正转或者反转一定的角度

3、步进电机基本结构和工作原理

内部结构

普中A2开发板,单片机stc89c52,步进电机28BYJ-48,驱动ULN2003,旋转某个设定的角度_第1张图片

代码

/*******************************************************************************
* 实验名		: 步进电机旋转某个设定角度
* 开发板		: 普中A2开发板,单片机stc89c52
* 使用的IO	: 电机用P0口低四位
*******************************************************************************/

#include "reg52.h"

#define STEEP_MOTOR P0 //电机IO

unsigned char code Forward[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}; //正转顺序
unsigned char code Backward[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; //反转顺序

void Motor(); 
void Delay_Ms(unsigned int ms);
void Step_Motor_Forward();
void Step_Motor_Backward();
void Motor_Direction_Angle(int direction, int angle);
void Motor_Stop(void);

void main(void) 
{ 
    while(1)
	{
        Motor_Direction_Angle(1, 90); //正转90度
        Delay_Ms(500);
        Motor_Direction_Angle(0, 90); //反转90度
        Delay_Ms(500);
	}
}

void Step_Motor_Forward() //正转
{
	unsigned char j;
	for ( j = 0; j < 8; j++ ) //磁场循环8脉冲(8拍),步进电机内部转子可以旋转5.625°;也就是说,64个脉冲,就可以旋转1圈。
	{
		STEEP_MOTOR = Forward[j];
        Delay_Ms(1);
	}
}

void Step_Motor_Backward() //反转
{
	unsigned char j;
	for ( j = 0; j < 8; j++ )
	{
		STEEP_MOTOR = Backward[j];
        Delay_Ms(1);
	}
}

void Delay_Ms( unsigned int ms )
{
    unsigned int k;
    while(ms--)
    {
  	    for(k=0; k<80; k++)
  	    { }
    }
}

//控制电机正转反转某个角度angle
//direction:1为正转,0为反转
//angle角度,可为0-360具有实际意义
void Motor_Direction_Angle(int direction, int angle)
{
	unsigned int j;
	if(direction == 1)
	{
		for(j=0;j<64.0*angle/45.0;j++)  //步进电机【输出端】要旋转angle度,所需的脉冲数:angle/(5.625/64*8)
		{
			Step_Motor_Forward();//正转
		}
		STEEP_MOTOR = 0xff;//停止
    }
	else if(direction == 0)
	{
		for(j=0;j<64.0*angle/45.0;j++) 
		{
			Step_Motor_Backward();//反转
		}
		STEEP_MOTOR = 0xff;//停止
	}
}

疑惑:不知道为什么,外面看得到的转子的起始位置会发生变化,如图:

次序 第一次旋转   第二次转转
路径 1——>2 ——> 3——>4

普中A2开发板,单片机stc89c52,步进电机28BYJ-48,驱动ULN2003,旋转某个设定的角度_第2张图片

如果有其他不足,希望大家指出。

你可能感兴趣的:(步进电机28BYJ-48,STC89C52,步进电机,嵌入式,单片机)