硬石社区

 找回密码
 立即注册
查看: 2167|回复: 1

[STM32F1] 关于步进电机梯形加减速历程中的急减速的步数计算

[复制链接]

1

主题

1

帖子

1556

积分

队长

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1556
发表于 2021-9-27 20:51:34 | 显示全部楼层 |阅读模式
[C] 纯文本查看 复制代码
      case ACCEL:
        step_count++;
        if(srd.dir==CW)
        {	  	
          position++;
        }
        else
        {
          position--;
        }
        srd.accel_count++;
        new_step_delay = srd.step_delay - (((2 * (long)srd.step_delay) + rest)/(4 * srd.accel_count + 1));
        rest = ((2 * (long)srd.step_delay)+rest)%(4 * srd.accel_count + 1);
        if(step_count >= srd.decel_start  || bStopCmd || (bLmtPos && srd.dir==CW) || (bLmtNeg && srd.dir==CCW))
        {
          if(bStopCmd)
          {
            bStopCmd=FALSE;
            srd.accel_count = T1_FREQ/2/stpdecel*T1_FREQ/srd.step_delay/srd.step_delay*-1;
          }
          else if((bLmtPos && srd.dir==CW) || (bLmtNeg && srd.dir==CCW))
          {
            srd.accel_count = T1_FREQ/2/stpdecel*T1_FREQ/srd.step_delay/srd.step_delay*-1;
            bEmgStopping=TRUE;
          }
          else
          {
            srd.accel_count = srd.decel_val;
          }
          
          srd.run_state = DECEL;
        }
        else if(new_step_delay <= srd.min_delay)
        {
          last_accel_delay = new_step_delay;
          new_step_delay = srd.min_delay;
          rest = 0;
          srd.run_state = RUN;
        }
        break;


请教下srd.accel_count = T1_FREQ/2/stpdecel*T1_FREQ/srd.step_delay/srd.step_delay*-1;这个公式是这么得到的,一直没想明白
回复

使用道具 举报

1

主题

1

帖子

1556

积分

队长

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1556
 楼主| 发表于 2021-9-28 08:47:25 | 显示全部楼层
那个分析完源码的大佬指点下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Comsenz Inc. ( 粤ICP备16080364号

GMT+8, 2022-9-26 04:30 , Processed in 0.055195 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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