我想让步进电机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);
}
}
展开
 我来答
zhxiufan
2013-10-12 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38381
国家科技进步奖

向TA提问 私信TA
展开全部
不知道你的5.625度怎么来的,是不是有传动机构,步进电机的步距角是1.8度,根据你定义的分配关系是半步运行,也就是说每送一个数给P1,那么就转动0.9度,因此对步进电机而言,你调动一次子程序,转动角度为8*8*0.9=57.6度。
追问

5.625是使用手册上的

追答
这里改一下就可以了

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); //调节转速
}
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式