搜索
bottom↓
回复: 3

求助:步进电机使用加减速时电机旋转角度大于设置数值

[复制链接]

出0入0汤圆

发表于 2017-9-5 14:48:20 | 显示全部楼层 |阅读模式
使用场合:步进电机带动旋转部件,另外旋转带有一个编码器,用以检测实际旋转位置
配置:雷赛步进驱动+57步进电机+减速机(减速比1156:225)+齿轮传动(减速机齿轮25,旋转体齿轮90)/编码器齿轮16
按照旋转部件最大速度30rpm,1s加速时间。减速其实速度为0,每10ms更新一次脉冲频率,得出的计算表格如附件。
计算想法:
1、按照旋转的加速度计算每增加10ms,旋转部件旋转到多少圈(0.5*a*t*t),然后按传动比计算电机旋转旋转多少圈,然后按照电机3200脉冲一圈,计算需要多少个脉冲
     比如:旋转部件30rpm=0.5rps,a=v/t=0.5r/s2
              200ms时,旋转部件应旋转圈数:0.5*0.5*0.2*0.2=0.01r,按传动比计算电机旋转0.185r,按3200脉冲一圈计算,电机需运行592(计算591.87)个脉冲
     由此加速出加减速的脉冲数量和对应OCR1A值
     uint pulsetotal[100]=
     {
     1,6,13,24,37,53,73,95,120,148,
     179,213,250,290,333,379,428,479,534,592,
     653,716,783,852,925,1000,1079,1160,1244,1332,
     1422,1515,1611,1711,1813,1918,2026,2137,2251,2367,
     2487,2610,2736,2865,2996,3131,3269,3409,3553,3699,
     3849,4001,4156,4315,4476,4640,4807,4978,5151,5327,
     5506,5688,5873,6061,6252,6445,6642,6842,7045,7250,
     7459,7671,7885,8103,8323,8547,8773,9002,9235,9470,
     9708,9949,10194,10441,10691,10944,11200,11459,11721,11985,
     12253,12524,12798,13074,13354,13637,13922,14211,14502,14797
     };
     uint ocr1a[100]=
     {
     12456,4151,2490,1779,1383,1131,957,829,732,655,
     592,541,497,460,429,401,376,355,336,318,
     303,289,276,264,253,243,234,225,218,210,
     203,197,191,185,180,174,170,165,161,157,
     153,149,146,142,139,136,133,130,127,125,
     122,120,118,115,113,111,109,107,105,104,
     102,100,99,97,96,94,93,91,90,89,
     87,86,85,84,83,81,80,79,78,77,
     76,75,74,74,73,72,71,70,69,69,
     68,67,66,66,65,64,64,63,62,62
     };
     

2、按以上计算结果,加速到最大速度,电机需要脉冲为14797(计算14796.8)个脉冲

3、如果实际要求旋转脉冲超过14797*2时,则加速到最大速度,然后减速

4、如果脉冲少于14797*2时,则判断需要加速到哪个速度等级(共100级)。
     比如脉冲数量为1284,则电机加速运行592脉冲,减速运行592脉冲,匀速运行100脉冲

    3-4步代码如下
      rotpulnum为总脉冲数,accpulse为加速脉冲,conpulse为匀速脉冲,decpulse为减速脉冲,step_max标记为加速到哪一级,step为当前加减速等级:
      //Get Step
      pulnum=rotpulnum;
      pulnumtemp=rotpulnum;
      pulnumtemp>>=1;
      for(i=0;i<100;i++)
      {
         if(pulnumtemp>=pulsetotal)
         {
            step_max=i;
         }
      }
      
      //Get pulse1,pulse2
      accpulse=pulsetotal[step_max];
      decpulse=accpulse;
      conpulse=pulnum-accpulse-decpulse;
      
      //Set original
      pulsecounter=0;
      step=0;

5、开启TIMER1的匹配中断,按步进电机实际运行脉冲数进行累积,并判断下一步如何运行
     思路为:
     加速时:如果总脉冲数小于加速脉冲,则为加速;如果超过,则转为匀速
                 如果脉冲数达到下一级速度的脉冲值,则速度增加
     匀速时:如果没有达到减速脉冲值,不操作,达到后转为减速
     减速时:如果剩余脉冲小于减速脉冲,则为减速速;
                 如果剩余脉冲数达到下一级速度的脉冲值,则速度降低
     停止:   剩余脉冲数为0,则停止
   
     void Tim1CompA(void)
     {  
        //Step Counter
        pulsecounter++;
        pulseremain=pulnum-pulsecounter;
   
        //acc-mode
        if(pulsecounter<=accpulse)
        {
           if((pulsecounter==pulsetotal[step+1])&&(step<step_max))
               {
                  step++;
                 OCR1A=ocr1a[step];
               }
        }
        //con speed mode
        else if((pulsecounter>accpulse)&&(pulsecounter<(pulnum-decpulse)))
        {
      
        }
        //dec speed mode
        else if((pulseremain<=decpulse)&&(pulseremain!=0))
        {
           if((pulseremain==pulsetotal[step-1])&&(step<=step_max))
           {
              step--;
             OCR1A=ocr1a[step];                 
           }
        }
        //stop
        else if(pulseremain==0)
        {  
           TCCR1A=0x00;
           TCCR1B=0x00;
           TCCR1C=0x00;
           OCR1A=0x00;
           TIMSK&=~BIT(4);
        }

     }
     
6、问题
     测试运行32000脉冲,电机应旋转10圈。实测会达到10圈多一点,多次循环运行可以看出来
     专门将脉冲计数器pulsecounter的最终值显示出来看了一下,确实达到32000。

     故求助!






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2017-9-5 15:22:34 | 显示全部楼层
那不是计数器有问题吗

出0入0汤圆

 楼主| 发表于 2017-9-6 08:38:25 | 显示全部楼层
计数器记录数值和要求数值一致的

出0入0汤圆

 楼主| 发表于 2018-5-23 17:25:15 | 显示全部楼层
自己挖自己的坟。
今天尝试了一下,把每一个速度上的脉冲数设置为偶数,不出现奇数,解决了问题。不知道为什么
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 18:54

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

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