步进电机是一种将电脉冲转化为角位移的执行设备。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(即步进角)。我们可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时我们可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
28BYJ48型步进电机是四相八拍电机,电压为DC5V~DC12V。当对步进电机按一定顺序施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号使得步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A……),双(双相绕组通电)四拍(AB-BC-CD-DA-AB……),四相八拍(A-AB-B-BC-C-CD-D-DA-A……)。本例是使用四相八拍驱动方式实现的。
下面是我写的C语言控制程序实现28BYJ48型步进电机正转五圈然后倒转五圈的效果:
//********************************************************************************
//* 标题: 步进电机正反转演示程序 *
//* 文件: 步进电机正反转演示.C *
//* 日期: 2015-3-13 *
//* 环境: 使用自制单片机最小系统板测试通过 *
//********************************************************************************
//* 描述: 28BYJ-48步进电机正反转控制 *
//* 电机使用端口:P1.0、P1.1、P1.2、P1.3 *
//* 单双八拍工作方式:A-AB-B-BC-C-CD-D-DA *
//********************************************************************************
#include
#include
//**********************正向旋转相序表*****************************
unsigned char code FFW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};
//**********************反向旋转相序表*****************************
unsigned char code REV[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};
//***********************延时子程序********************************
void delay(unsigned int t)
{
unsigned int k;
while(t--)
{
for(k=0; k<125; k++)
{}
}
}
//**********************步进电机正转******************************
void motor_ffw(unsigned int n)
{
unsigned char i;
unsigned int j;
for (j=0; j<8*64*n; j++)
{
for (i=0; i<8; i++)
{
P1 = FFW[i];
delay(1);
}
}
}
//*********************步进电机反转********************************
void motor_rev(unsigned int n)
{
unsigned char i;
unsigned int j;
for (j=0; j<8*64*n; j++)
{
for (i=0; i<8; i++)
{
P1 = REV[i];
delay(1);
}
}
}
//*************************主程序*********************************
main()
{
while(1)
{
motor_ffw(5); //电机正转5圈
delay(1000);
motor_rev(5); //电机反转5圈
delay(1000);
}
}