我想让步进电机28BYJ-48一次转动一个固定的角度,52单片机的C程序该怎么写?
这是我参考别人的程序写的,它每一次转5.625度,转动64次;如果我现在要让它每次转45度,转8次,程序该怎么改?我改了好久都没反应,寻求各位的帮助#include<re...
这是我参考别人的程序写的,它每一次转5.625度,转动64次;如果我现在要让它每次转45度,转8次,程序该怎么改?我改了好久都没反应,寻求各位的帮助
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code CCW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //逆时钟旋转相序表
uchar code CW[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08}; //正时钟旋转相序表
void delaynms(uint aa)
{
uchar bb;
while(aa--)
{
for(bb=0;bb<115;bb++) //1ms基准延时程序
{
;
}
}
}
void motor_ccw(void) //正转每次转5.625度
{
uchar i,j;
for(j=0;j<8;j++)//电机旋转一周,不是外面所看到的一周,是里面的传动轮转了一周
{
for(i=0;i<8;i++) //旋转45度
{
P1=CCW[i];
delaynms(2); //调节转速
}
}
}
void motor_cw(void)//反转每次转5.625度
{
uchar i,j;
for(j=0;j<8;j++)
{
for(i=0;i<8;i++) //旋转45度
{
P1=CW[i];
delaynms(2); //调节转速
}
}
}
//停止转动
void MotorStop(void)
{
P1=0x00;
}
void main(void)
{
uchar r;
uchar N=64; //因为步进电机是减速步进电机,减速比的1/64 ,所以N=64时,步进电机主轴转一圈 64*5.625=360
while(1)
{
for(r=0;r<N;r++)
{
motor_ccw(); //电机正转
delaynms(100);
MotorStop();
delaynms(100);
}
MotorStop(); //停止转动
delaynms(500);
for(r=0;r<N;r++)
{
motor_cw(); //电机反转
delaynms(100);
MotorStop();
delaynms(100);
}
MotorStop(); //停止转动
delaynms(500);
}
} 展开
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code CCW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //逆时钟旋转相序表
uchar code CW[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08}; //正时钟旋转相序表
void delaynms(uint aa)
{
uchar bb;
while(aa--)
{
for(bb=0;bb<115;bb++) //1ms基准延时程序
{
;
}
}
}
void motor_ccw(void) //正转每次转5.625度
{
uchar i,j;
for(j=0;j<8;j++)//电机旋转一周,不是外面所看到的一周,是里面的传动轮转了一周
{
for(i=0;i<8;i++) //旋转45度
{
P1=CCW[i];
delaynms(2); //调节转速
}
}
}
void motor_cw(void)//反转每次转5.625度
{
uchar i,j;
for(j=0;j<8;j++)
{
for(i=0;i<8;i++) //旋转45度
{
P1=CW[i];
delaynms(2); //调节转速
}
}
}
//停止转动
void MotorStop(void)
{
P1=0x00;
}
void main(void)
{
uchar r;
uchar N=64; //因为步进电机是减速步进电机,减速比的1/64 ,所以N=64时,步进电机主轴转一圈 64*5.625=360
while(1)
{
for(r=0;r<N;r++)
{
motor_ccw(); //电机正转
delaynms(100);
MotorStop();
delaynms(100);
}
MotorStop(); //停止转动
delaynms(500);
for(r=0;r<N;r++)
{
motor_cw(); //电机反转
delaynms(100);
MotorStop();
delaynms(100);
}
MotorStop(); //停止转动
delaynms(500);
}
} 展开
1个回答
展开全部
不知道你的5.625度怎么来的,是不是有传动机构,步进电机的步距角是1.8度,根据你定义的分配关系是半步运行,也就是说每送一个数给P1,那么就转动0.9度,因此对步进电机而言,你调动一次子程序,转动角度为8*8*0.9=57.6度。
追答
这里改一下就可以了
void motor_ccw(void) //正转每次转45度
{
uchar i,j;
for(j=0;j<64;j++)//电机旋转一周,不是外面所看到的一周,是里面的传动轮转了一周
{
for(i=0;i<8;i++) //旋转45度
{
P1=CCW[i];
delaynms(2); //调节转速
}
}
}
void motor_cw(void)//反转每次转45度
{
uchar i,j;
for(j=0;j<64;j++)
{
for(i=0;i<8;i++) //旋转45度
{
P1=CW[i];
delaynms(2); //调节转速
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询