做步进电机控制的朋友来看看
在做一个舞台摇头灯,步进电机细分加减速都很不错,但是就是遇到启动的时候步进电机会抖一下的情况,切换转向的时候也会出现,不是启动速度过快的原因,我的启动速度是相当慢的,而是相位和细分点不衔接的问题,我跟踪了相位,就是让相位能在换转向的时候能够很好的衔接上次的相位,如果转向的时候相位发生跳变,启动肯定卡一下,因为步进电机去寻找了新的相位点,这样做确实好了一些,不会抖一下,但是有时还是这样,我想问问,如何彻底解决这个问题??? 虽然不明显,但是这样确实让人不爽..... 你的问题表达的一点也不清楚 楼主要说清楚点啊。我从来就没遇到过你所说的这种问题,问题出现了肯定是你哪方面还处理得不好的原因。请问你是用什么专用驱动芯片的? 回复【3楼】chenyuqiu小陈-----------------------------------------------------------------------
我也不知道怎么表达...如果让你们看现象就好了...用6225....就是启动的时候会有抖一下(会有响声,咔的一下...)...还有切换转向的时候.....
两相步进电机,4拍方式,就分4相位是吧(0-1-2-3)...
我想问问陈大哥,比如说:现在是64细分,你现在让步进电机走1000步,但是走完1000步后,步进电机并不在整步点上,就是循环走细分表,没走完表1000已经走完了,程序肯定有个变量专门来加减细分表的变量是吧,比如i,走完1000步后i=50(还差14走完细分表),这时候如果回到主函数从新设定步进电机轴5000步,那么这个寻细分表的变量是不是要从新初始化为零???
还有就是相位问题,如果走完1000步后,现在的相位在2的位置,那么如果下次切换方向后,这个记录相位的变量要不要清零??
如果这两个全部初始化为零,我发现,启动和换方向的时候会抖一下....我不知道问题说清楚没有.....
反正就是启动和换方向的时候会抖一下.... 下面是转向,如果现在是正传,走完正转后相位在2的位置,那么下次变成反转,然后把相位点从新从0开始,那会不会导致电机抖一下??因为2一下就回到0的位置,我想应该会抖,就像步进电机上电的时候会寻找整步点位置而会抖一下一样,那么下次反转,应该从哪个相位开始???
if((StepMotoStruct.Direction==FORWARD)&&(DivStruct.DivIndex==LOWSPEEDDIV))//正转低速表
{
// StepMotoStruct.CopyDirection=FORWARD;
switch(StepMotoStruct.Quardrant)//相位0-3
{
case 0: //第一象限
PH1=SinTwo;//控制A
PH2=0;//控制A-
PH3=CosTwo;//控制B
PH4=0;//控制B-
break;
case 1://...
PH1=SinTwo;
PH2=0;
PH3=0;
PH4=CosTwo;
break;
case 2:
PH1=0;
PH2=SinTwo;
PH3=0;
PH4=CosTwo;
break;
case 3:
PH1=0;
PH2=SinTwo;
PH3=CosTwo;//控制B
PH4=0;
break;
default:break;
}
}
if((StepMotoStruct.Direction==BACK)&&(DivStruct.DivIndex==HIGHSPEEDDIV))//正转高速表
{
//StepMotoStruct.CopyDirection=BACK;
switch(StepMotoStruct.Quardrant)//相位0-3
{
case 0: //第一象限
PH1=0;
PH2=SinOne;
PH3=CosOne;//控制B
PH4=0;
break;
case 1://...
PH1=0;
PH2=SinOne;
PH3=0;
PH4=CosOne;
break;
case 2:
PH1=SinOne;
PH2=0;
PH3=0;
PH4=CosOne;
break;
case 3:
PH1=SinOne;//控制A
PH2=0;//控制A-
PH3=CosOne;//控制B
PH4=0;//控制B-
break;
default:break;
}
} 回复【4楼】myqiang1990 小松鼠
回复【3楼】chenyuqiu小陈
-----------------------------------------------------------------------
我也不知道怎么表达...如果让你们看现象就好了...用6225....就是启动的时候会有抖一下(会有响声,咔的一下...)...还有切换转向的时候.....
两相步进电机,4拍方式,就分4相位是吧(0-1-2-3)...
我想问问陈大哥,比如说:现在是64细分,你现在让步进电机走1000步,但是走完1000步后,步进电机并不在整步点上,就是循环走细分表,没走完表1000已经走完了,程序肯定有个变量专门来加减细分表的变量是吧,比如i,走完1000步后i=50(还差14走完细分表),这时候如果回到主函数从新设定步进电机轴5000步,那么这个寻细分表的变量是不是要从新初始化为零???
还有就是相位问题,如......
-----------------------------------------------------------------------
4按照你上面的描述应该是你计算步进步数错误了。1.8°的步进电机转1圈就是360°/ 1.8°= 200步,如果你是64细分的话得200 * 64 = 12800步。程序在处理算法上要正确,不然就有你所说的“漏拍”也就是失步问题 回复【6楼】chenyuqiu小陈
-----------------------------------------------------------------------
恩...谢谢小陈大哥的细心解答,我在认真检查一下,因为这个控制程序稍微有点复杂,应该是哪里出错了.... 角度不连续吧 myqiang1990 发表于 2011-11-21 01:20 static/image/common/back.gif
回复【6楼】chenyuqiu小陈
-----------------------------------------------------------------------
...
正反转切换时先停止再切换就不会有抖动了 好的,我也想请这个问题
页:
[1]