myqiang1990 发表于 2011-11-20 14:16:07

做步进电机控制的朋友来看看

在做一个舞台摇头灯,步进电机细分加减速都很不错,但是就是遇到启动的时候步进电机会抖一下的情况,切换转向的时候也会出现,不是启动速度过快的原因,我的启动速度是相当慢的,而是相位和细分点不衔接的问题,我跟踪了相位,就是让相位能在换转向的时候能够很好的衔接上次的相位,如果转向的时候相位发生跳变,启动肯定卡一下,因为步进电机去寻找了新的相位点,这样做确实好了一些,不会抖一下,但是有时还是这样,我想问问,如何彻底解决这个问题???

myqiang1990 发表于 2011-11-20 14:18:11

虽然不明显,但是这样确实让人不爽.....

mcu5i51 发表于 2011-11-20 15:51:22

你的问题表达的一点也不清楚

chenyuqiu 发表于 2011-11-20 17:18:59

楼主要说清楚点啊。我从来就没遇到过你所说的这种问题,问题出现了肯定是你哪方面还处理得不好的原因。请问你是用什么专用驱动芯片的?

myqiang1990 发表于 2011-11-20 18:30:21

回复【3楼】chenyuqiu小陈
-----------------------------------------------------------------------

我也不知道怎么表达...如果让你们看现象就好了...用6225....就是启动的时候会有抖一下(会有响声,咔的一下...)...还有切换转向的时候.....

两相步进电机,4拍方式,就分4相位是吧(0-1-2-3)...

我想问问陈大哥,比如说:现在是64细分,你现在让步进电机走1000步,但是走完1000步后,步进电机并不在整步点上,就是循环走细分表,没走完表1000已经走完了,程序肯定有个变量专门来加减细分表的变量是吧,比如i,走完1000步后i=50(还差14走完细分表),这时候如果回到主函数从新设定步进电机轴5000步,那么这个寻细分表的变量是不是要从新初始化为零???

还有就是相位问题,如果走完1000步后,现在的相位在2的位置,那么如果下次切换方向后,这个记录相位的变量要不要清零??

如果这两个全部初始化为零,我发现,启动和换方向的时候会抖一下....我不知道问题说清楚没有.....

反正就是启动和换方向的时候会抖一下....

myqiang1990 发表于 2011-11-20 18:34:08

下面是转向,如果现在是正传,走完正转后相位在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;                  
      }
   }

chenyuqiu 发表于 2011-11-20 19:59:44

回复【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步。程序在处理算法上要正确,不然就有你所说的“漏拍”也就是失步问题

myqiang1990 发表于 2011-11-21 01:20:47

回复【6楼】chenyuqiu小陈
-----------------------------------------------------------------------
恩...谢谢小陈大哥的细心解答,我在认真检查一下,因为这个控制程序稍微有点复杂,应该是哪里出错了....

hyc07209 发表于 2012-7-4 18:05:44

角度不连续吧

xjbh001 发表于 2012-7-4 18:37:28

myqiang1990 发表于 2011-11-21 01:20 static/image/common/back.gif
回复【6楼】chenyuqiu小陈
-----------------------------------------------------------------------
...

正反转切换时先停止再切换就不会有抖动了

lixingling 发表于 2012-10-27 09:35:34

好的,我也想请这个问题

Q28182900 发表于 2012-10-27 09:43:55

页: [1]
查看完整版本: 做步进电机控制的朋友来看看