搜索
bottom↓
回复: 11

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

[复制链接]

出0入0汤圆

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

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2011-11-20 14:18:11 | 显示全部楼层
虽然不明显,但是这样确实让人不爽.....

出0入0汤圆

发表于 2011-11-20 15:51:22 | 显示全部楼层
你的问题表达的一点也不清楚

出0入0汤圆

发表于 2011-11-20 17:18:59 | 显示全部楼层
楼主要说清楚点啊。我从来就没遇到过你所说的这种问题,问题出现了肯定是你哪方面还处理得不好的原因。请问你是用什么专用驱动芯片的?

出0入0汤圆

 楼主| 发表于 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的位置,那么如果下次切换方向后,这个记录相位的变量要不要清零??

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

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

出0入0汤圆

 楼主| 发表于 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[DivStruct.DivID];//控制A
             PH2=0;//控制A-
             PH3=CosTwo[DivStruct.DivID];//控制B
             PH4=0;//控制B-
           break;
           case 1://...
             PH1=SinTwo[DivStruct.DivID];
             PH2=0;
             PH3=0;
             PH4=CosTwo[DivStruct.DivID];
           break;
           case 2:
             PH1=0;
             PH2=SinTwo[DivStruct.DivID];
             PH3=0;
             PH4=CosTwo[DivStruct.DivID];        
           break;
           case 3:
             PH1=0;
             PH2=SinTwo[DivStruct.DivID];
             PH3=CosTwo[DivStruct.DivID];//控制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[DivStruct.DivID];
             PH3=CosOne[DivStruct.DivID];//控制B
             PH4=0;
           break;
                   case 1://...
                         PH1=0;
             PH2=SinOne[DivStruct.DivID];
             PH3=0;
             PH4=CosOne[DivStruct.DivID];        
           break;
           case 2:
             PH1=SinOne[DivStruct.DivID];
             PH2=0;
             PH3=0;
             PH4=CosOne[DivStruct.DivID];        
           break;
           case 3:
                         PH1=SinOne[DivStruct.DivID];//控制A
             PH2=0;//控制A-
             PH3=CosOne[DivStruct.DivID];//控制B
             PH4=0;//控制B-
           break;
           default:break;                  
        }
     }

出0入0汤圆

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

出0入0汤圆

 楼主| 发表于 2011-11-21 01:20:47 | 显示全部楼层
回复【6楼】chenyuqiu  小陈
-----------------------------------------------------------------------
恩...谢谢小陈大哥的细心解答,我在认真检查一下,因为这个控制程序稍微有点复杂,应该是哪里出错了....

出0入0汤圆

发表于 2012-7-4 18:05:44 | 显示全部楼层
角度不连续吧

出0入0汤圆

发表于 2012-7-4 18:37:28 | 显示全部楼层
myqiang1990 发表于 2011-11-21 01:20
回复【6楼】chenyuqiu  小陈
-----------------------------------------------------------------------
...

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

出0入0汤圆

发表于 2012-10-27 09:35:34 | 显示全部楼层
好的,我也想请这个问题
头像被屏蔽

出0入0汤圆

发表于 2012-10-27 09:43:55 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-4 04:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表