步进电机--S 曲线的C算法

Created with Raphaël 2.1.0 Foo1 Foo1 Foo2 Foo2 Foo3 Foo3 Foo4 Foo4 Foo5 Foo5 To boundary To control To entity To database

S 曲线生成 函数

static void Calc_S_Curve(S_MOTOR *pmotor,u8 model)
{
/* 
S型 曲线生成 公式

1.变量说明
Jmax: 最大加加速度。
Amax:最大的加速度。
Fstart:启动速度
T:阶段时间(三个阶段时间相等)

2.基本换算公式
Jmax=Amax/T
Faa=Fstart+0.5*Jmax*t*t
Fua=Faa+Amax*t
Fra=Fmax-0.5*Jmax*(T-t)*(T-t) 

2.已知 Fstart,T,Fmax 计算其他分量

Fra(min)=Fua(max)
Fmax-0.5*Jmax*T*T=Amax*T+Fstart+0.5*Jmax*T*T
Fmax-0.5*Amax*T=Amax*T+Fstart+0.5*Amax*T

Amax=(Fmax-Fstart)/(2T)
JMAX=Amax/T=(Fmax-Fstart)/(2T*T)

*/

float f;
u32 i;
float   STEP_FACTOR;
float Amax;
float T=pmotor->s.T;
float Jmax;
float Fstart =pmotor->s.Fstart;
float Fmax   =pmotor->s.Fmax;
float val;


STEP_FACTOR=DEFAULT_STEP_FACTOR;    


/* 已知 Fstart,T,Fmax 计算其他分量 */

if(model==3)//3/3
{

}
else if(model=2)//2/3
{
T=T*2/3;
Fmax=Fmax*2/3;
}
else//1/3
{
 T=T*1/3;
 Fmax=Fmax*1/3;
}


Amax=(Fmax-Fstart)/(2*T);
Jmax=Amax/T;
pmotor->s.Amax=Amax;
pmotor->s.Jmax=Jmax;    




   /*  加加速度阶段 */
    for(i=0;i<DIVERGENCE_CNT;i++)
    {
        f=Fstart+0.5*Jmax*(i*T/DIVERGENCE_CNT)*(i*T/DIVERGENCE_CNT);
        pmotor->s.atime[i]=FREQ_2_TIME/f;
        pmotor->s.astep[i]=f*(T/DIVERGENCE_CNT)/STEP_FACTOR;
    }

   /* 恒速加速阶段 */
    Fstart=f;
      for(i=0;i<DIVERGENCE_CNT;i++)
    {
        f=Fstart+Amax*(i*T/DIVERGENCE_CNT);
        pmotor->s.atime[i+DIVERGENCE_CNT]=FREQ_2_TIME/f;
        pmotor->s.astep[i+DIVERGENCE_CNT]=f*(T/DIVERGENCE_CNT)/STEP_FACTOR;
    }
    /* 减加速阶段 */
     for(i=0;i<DIVERGENCE_CNT;i++)
    {
        f=Fmax-0.5*Jmax*(T-i*T/DIVERGENCE_CNT)*(T-i*T/DIVERGENCE_CNT);
        pmotor->s.atime[i+DIVERGENCE_CNT*2]=FREQ_2_TIME/f;
        pmotor->s.astep[i+DIVERGENCE_CNT*2]=f*(T/DIVERGENCE_CNT)/STEP_FACTOR;
    }

    //计算 S曲线形成需要的最少步数,上升和下降 完全对称
    pmotor->s.s_steps=0;
    for(i=0;i<(DIVERGENCE_CNT*3);i++)
    {
    pmotor->s.s_steps+=pmotor->s.astep[i];
    }

}

引用块内容

标题

  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
步进电机的s曲线算法是一种用于控制电机速度和位置的算法,采用C语言实现。s曲线算法可以实现电机平滑地加速和减速,避免了突然速度变化带来的冲击和抖动,提高了步进电机的精度和稳定性。 s曲线算法的基本思想是根据预设的加速度和减速度,在每个微步时刻更新电机速度,并根据当前速度实时控制电机位置移动。具体实现步骤如下: 1. 初始化相关变量和参数,包括目标位置、当前位置、加速度、减速度、当前速度等。 2. 设置起始速度为0,即静止状态。 3. 在每个微步时刻更新当前位置,根据当前速度控制电机移动。 4. 根据当前位置与目标位置之间的差值,判断是加速还是减速或保持匀速,以确定当前速度的变化方向和大小。 5. 如果未达到目标位置,则根据当前速度分别增加或减少微步数,实现电机的平滑加速和减速。 6. 如果达到目标位置,则停止电机运动。 7. 循环执行以上步骤,直到达到目标位置。 在实际编程中,可以使用周期性中断或定时器来控制每个微步的时间间隔,根据需要调整速度和加速度参数,以适应不同的应用场景。 s曲线算法的优点是可以实现步进电机平滑运动,减少了脉冲和振动,提高了步进电机的工作效率和精度。但是需要注意的是,具体的实现细节可能会受到硬件和环境等因素的限制,需要根据实际情况进行调试和优化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值