步进电机转动控制
时间:10-02
整理:3721RD
点击:
int main (void)
{
UINT32 i=0,j=0;
UINT32 a[10]={300,800,1200,1000,461,1800,2160,1540,1446,711};
while(1)
{
if(K2==0) //按键,每按一次程序执行一次,相当于从数组中提取一个数据。
{
if(j==0) //第一个数据
{
bc_vcw; //控制电机方向,顺时针;
for(i=0;i<=a[j];i++) //控制电机转动角度(每次转1/12度)
{
bs_vfin; //控制电机转动速度
delay1ms(1);
bc_vfin;
delay1ms(1);
}
}
else
{
if((a[j]-a[j-1])>=0) //和前一个数比,若大于则继续转动差值的对应的角度
{
bc_vcw;//IO0CLR|=1<<13; //顺时针
for(i=0;i<=(a[j]-a[j-1]);i++)
{
bs_vfin;
delay1ms(1);
bc_vfin;
delay1ms(1);
}
}
else //if((a[j]<a[j-1])) //和前一个数比,若小于。则往回转动差值的角度
{
bs_vcw;//IO0SET|=1<<13; //逆时针
for(i=0;i<=(a[j-1]-a[j]);i++)
{
bs_vfin;
delay1ms(1);
bc_vfin;
delay1ms(1);
}
}
}
j++;
}
}
}
程序的目的是为了能连续输入数据,控制步进电机转相应的角度。单片机是LCP2292芯片,控制电机的是UM12017芯片。
上面程序测试的结果是:后一个数比前一个数大的时候(if条件满足)能达到想要的效果,但是当前一个数比后一个数大的时候(if条件不满足,本应该是执行else)就出错,电机一直顺时针转,停不下来。
求高手帮忙看看哪里有问题。
{
UINT32 i=0,j=0;
UINT32 a[10]={300,800,1200,1000,461,1800,2160,1540,1446,711};
while(1)
{
if(K2==0) //按键,每按一次程序执行一次,相当于从数组中提取一个数据。
{
if(j==0) //第一个数据
{
bc_vcw; //控制电机方向,顺时针;
for(i=0;i<=a[j];i++) //控制电机转动角度(每次转1/12度)
{
bs_vfin; //控制电机转动速度
delay1ms(1);
bc_vfin;
delay1ms(1);
}
}
else
{
if((a[j]-a[j-1])>=0) //和前一个数比,若大于则继续转动差值的对应的角度
{
bc_vcw;//IO0CLR|=1<<13; //顺时针
for(i=0;i<=(a[j]-a[j-1]);i++)
{
bs_vfin;
delay1ms(1);
bc_vfin;
delay1ms(1);
}
}
else //if((a[j]<a[j-1])) //和前一个数比,若小于。则往回转动差值的角度
{
bs_vcw;//IO0SET|=1<<13; //逆时针
for(i=0;i<=(a[j-1]-a[j]);i++)
{
bs_vfin;
delay1ms(1);
bc_vfin;
delay1ms(1);
}
}
}
j++;
}
}
}
程序的目的是为了能连续输入数据,控制步进电机转相应的角度。单片机是LCP2292芯片,控制电机的是UM12017芯片。
上面程序测试的结果是:后一个数比前一个数大的时候(if条件满足)能达到想要的效果,但是当前一个数比后一个数大的时候(if条件不满足,本应该是执行else)就出错,电机一直顺时针转,停不下来。
求高手帮忙看看哪里有问题。
应该是你的if嵌套逻辑不够完整,需要先让步进电机停下来
学习了
怎么该?谢谢
用SWITCH选择语句比较好些,在设置下条件不成立,电机停止转动
谢谢小编分享,再次感谢。
dddddddddddddddddddddddddddddddddddddddd
那是C語言寫的!太厲害了!