28BYJ48型步进电机的控制方法

  • 格式:doc
  • 大小:29.00 KB
  • 文档页数:6

28BYJ48型步进电机的控制方法
2011-03-13 23:02:00|分类:单片机技术|举报|字号订阅前不久弄到一只28BYJ48型步进电机,没有资料,从网上查找,搜到一些资料,但按照网上介绍的程序实验,都没有成功。

后来根据资料的原理部分,试着自己编写了一段程序,经过多次实验调试,终于成功了。

哈哈,收获不小!!!
步进电机是一种将电脉冲转化为角位移的执行设备。

通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(即步进角)。

我们可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时我们可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

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 *
//*日
期: 2011-3-13 *
//*环境:使用自制单片机最小系统板测试通
过 *
//************************************************* *******************************
//*描述: 28BYJ-48步进电机正反转控
制 *
//*电机使用端口:P1.0、P1.1、P1.2、
P1.3 *
//*单双八拍工作方式:
A-AB-B-BC-C-CD-D-DA *
//************************************************* *******************************
#include <reg51.h>
#include <intrins.h>
//**********************正向旋转相序表
*****************************
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);
}
}。