“S“型曲线加减速在42步进电机的位置控制和速度控制中的交叉应用

"S"型曲线加减速在42步进电机位置和速度交叉控制应用

兴趣使然,兴趣使然…哈哈,花了一个多星期研究了一下S型曲线在步进电机的加速减速中应用,以及简单的结合了一下位置控制和速度控制交叉着对电机进行控制,同时也花了两天时间把上位机也捣腾出来。有需要源码的请在评论区留下邮箱。

  1. 硬件介绍
    (1)驱动器型号:使用了“普菲德”公司的TB6600驱动器,价格便宜拿来玩玩还是可以的(不是打广告,哈哈);
    (2)使用了普通的“42”步进电机;
    (3)单片机用的是STM32F103C8T6。
    唔,感觉还是放下一图片吧,哈哈
    在这里插入图片描述
  2. “S”型加速理论解析
    (1)一个物体从起点运动到终点,要经历加速,匀速,减速的过程,把整个过程中速度随时间变化关系画出来,就是速度曲线.
    S型加减速就是指速度曲线中加减速阶段的曲线呈现一个英文字母’S’型.
    S型加减速相对于梯形加减速更加平稳,对电机和传动系统的冲击更小.
    S型加减速的曲线并没有限定是什么曲线,所以可以是指数曲线,可以是正弦曲线.这里分析的S型加减速是基于加速度匀速变化的曲线.
    S型加减速的优点就是启动和停止都很平滑,不会有很大的冲击,但缺点就是启动和停止的时间比较长
    在这里插入图片描述
    上图就是S型加速曲线和对应的加速度曲线示意图在加速过程中,前半部分由于加速度是匀速递增的,这段曲线我们称为加加速段曲线(后面称它为IncAccel),后半部分是加速度匀速递减的,称为减加速段(DeAccel).
    加加速段是加速度关于时间的斜率为正的直线,减加速则是加速度关于时间的斜率为负的直线.加速度从0开始变化,到了最大值开始减小,最后为0,由于加速度的斜率是相同的,所以加加速度和减加速度所用的时间是一样.这两段曲线是关于加速度最大值的对应的速度中心对称的.在这里插入图片描述
    我们的目标就是根据定的条件:Vt,V0,t计算出控制步进电机的每一步的速度。
    (2)IncAccel:
    加速度从零变化到最大值。有 a=Jt;(J是加加速度,即速度的变化率,加速度a对时间的导数,为常数),而dv = adt;对加速度积分就可以得到速度
    在这里插入图片描述
    所以有:
    在这里插入图片描述
    只要知道加加速度即可得到IncAccel的速度变化,当a变化到最大值的时候有V=Vm,可得:
    在这里插入图片描述
    这样就得到了速度关于时间的变化公式(V-t)而这一段的步数可以对速度求积分得到;
    在这里插入图片描述
    最终的速度公式:
    在这里插入图片描述
    只要t变化的足够小,那么速度的变化就越平滑,得到的速度曲线就会越接近目标曲线。
    在这里插入图片描述
    根据以上的分析,只要给定一个合适的t值以及合适的加速次数,那就可以得到一个平滑的曲线。
  3. 程序实现
    在步进电机的控制中,改变频率即是对步进电机速度的改变。所以V0 =Frde(最小频率),我们从0速度开始,即Frde(最小频率) = 0;由于我定时器分频1000,所以定时器驱动频率为72KHz.设定我们要到达的目标速度Vt对应的频率为Fred(最大) = 12000;在这里我的加速点设置为1600。
    (1)综合上面的分析,加速曲线计算函数可写为:
/*
************************************************************
4. 函数名称:SModelLineExspeed
5.  6. 函数功能:计算S型加速曲线的加速点的值
6.  8. 
************************************************************
*/
void SModelLineExspeed(float fre[],  unsigned short period[],   float  len,  float fre_max,  float fre_min, float flexible)
{
  int i=0;
  float deno ;
  float melo ;
  float delt = fre_max-fre_min;
  for(; i<len; i++)
  {
      melo = flexible * (i-len/2) / (len/2);
      deno = 1.0 / (1 + expf(-melo));  
      fre[i] = delt * deno + fre_min;
      period[i] = (unsigned short)(72000.0 / fre[i]);    
  }
 return ;
}

(2)减速曲线计算函数可写为:

/*
************************************************************
7. 函数名称:SModelLineDespeed
8.  11. 函数功能:计算S型减速曲线
9.  13. 
************************************************************
*/
void SModelLineDespeed(float defre[],  unsigned short deperiod[],   float  len,  float fre_max,  float fre_min, float flexible)
{
int i=0;
  float deno ;
  float melo ;
  float delt = fre_max-fre_min;
  for(; i<len; i++)
  {
      melo = flexible * (i-len/2) / (len/2);
      deno = 1.0 / (1 + expf(-melo));   
      fre[i] = fre_max - delt * deno ;
      period[i] = (unsigned short)(72000.0 / fre[i]);   
  }
 return ;
}
  1. 控制逻辑的制定
    由于时间仓促,所以制定的逻辑有些粗糙,有待进一步的完善(其实是工作忙,哈哈哈)。
    在这里插入图片描述
  2. 成果演示
    (1)上位机交互界面:
    在这里插入图片描述
    (2)通过逻辑分析仪可以看到S型加速和减速时的输出脉冲效果
    (2.1)速度控制下的加速
    在这里插入图片描述
    上图为加速过程,同时在上位机上看到的速度曲线效果如下图:
    在这里插入图片描述

由于上位机的读取数据的局限性,在后面的s不是很明显,因为频率太高。
(2.2)速度控制下的减速
在这里插入图片描述
上图为减速过程,同时在上位机上看到的速度曲线效果如下图:
在这里插入图片描述
由于上位机的读取数据的局限性,在前面的s不是很明显,因为频率太高。
(2.3)位置控制下的效果
在这里插入图片描述
在这里插入图片描述
嗯,就写这么多吧,希望对大家有帮助,哈哈。始终不遗余力的竭尽全力,探索技术上大家可以多多交流。 2022.03.06------修才生

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

修才生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值