0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机工控的电机减速算法是什么?

汽车电子技术 来源: 工控码农 作者: 工控码农 2023-02-07 09:43 次阅读

有不少网友感叹高铁技术之稳,一杯水放在窗户上面都不会晃动.要达到这个‘稳’,就要在电机启动停止时,有一个加减速.电机启动时,速度需要逐渐提高,停止时,速度逐渐减小,这就是步进电机的加减速过程。单片机给步进驱动一个脉冲,电机转动一个步距角,单片机给脉冲越快,步进电机单位时间内,转动的角度也就越大.即脉冲频率正比于电机转速.另一方面,速度的变化对应的物理量是加速度,高中物理可以知道,一个加速过程一般涉及:初始速度,加速度,加速时间这三个量.对应到电机转动:起始转速(rpm),最大速度(rpm),加速时间(min),转速对应单片机定时器的频率 pulse/ms(单片机定时器1毫秒中断次数).

工控行业电机加减速一般有T型加速,S型加速.负载惯量比较轻的情况就可以使用T型曲线,负载惯量比较重的情况一般使用S型曲线,S型曲线光滑,速度不突变.

单片机速度控制原理

单片机通过调节频率控制电机速度,频率是单片机定时器的定时间隔决定的,只需要在定时器中断处理程序里边翻转脉冲输出端口即可.单片机的RAMCPU不是很快,定时器的间隔使用查表的方法来获取,效率比较高.

图片

控制流程

图片

T型曲线

T型曲线的加速减阶段是线性加减速的,整个运动[加速,匀速,减速]速度变化看起来像一个等腰梯形.

图片

加速阶段就是一个一次线性函数,斜率不变[加速度不变],公式如下:

图片

单片机生成加速数组代码:

//生成T形加速数组
//Vmin:起始速度(pulse/s)
//Vmax:最大速度,即匀速速度(pulse/s)
//AccTime:加速时间(ms)
//pBuffer:数组缓存区
//返回值:数组长度
int GenTTable(uint Vmin,uint Vmax,int AccTime,uint* pBuffer)
{
  //计算加速度
  uint a = (Vmax-Vmin)/AccTime;
  uint v = Vmin;
  uint t = 0;
  int index = 0;
  while(v<=Vmax)
  {
    v = a*t+Vmin;
    pBuffer[index] = f/v;  //f为定时器的工作频率
    t += 1000000/v;  //v的速度为pulse/s,一个脉冲的时间为:1/v s=1000000/v us
    index++;
  }
  
  return index;
}

S形加减速

T形加速曲线的图形,可以看出加速阶段转向匀速阶段时加速度是突然变为零的,这对大惯量的设备晃动比较大,要想设备晃动比较小,就需要加速过渡到匀速阶段是渐进光滑的,加速度不突变,进入到匀速阶段时加速度刚好为0.数学模型的S形曲线就是光滑,加速度不突变的。数学方程可以参考**逻辑斯蒂**曲线,下图是公式推导:

图片

图片

单片机S形曲线加速数组生成:

上面的公式推导有一个结论:

图片

程序代码就是根据这个公式来生成数组数据

//生成S形加速数组
//Vmin:起始速度(pulse/s)
//Vmax:最大速度,即匀速速度(pulse/s)
//AccTime:加速时间(s)
//pBuffer:数组缓存区
//返回值:数组长度
int GenSTable(uint Vmin,uint Vmax,int AccTime,uint* pBuffer)
{
    double tSum = 0;
    double T= AccTime*f;      //f为定时器工作频率
    uint C0 = (uint)(f/Vmin);
    uint Cmax = (uint)(f/Vmax);
    uint index = 0;
    while (tSum < T)
    {
      pBuffer[index]= (uint)(Cmax+pow(C0-Cmax,(T-tSum)/T));
      tSum += pBuffer[index];
      index++;
    }
    return index;
}

上面生成的加速数据就是定时器的间隔,可以把这边这份数据写到Flash的扇区,这样不用电机每次运动都来生成一次,减少单片机的运算量.也可使用上位机改变电机的起始速度,匀速速度,加速时间来调节电机加速性能,不用重新编译单片机代码,使用起来很方便.

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620835
  • 电机
    +关注

    关注

    139

    文章

    8312

    浏览量

    142090
  • 脉冲频率
    +关注

    关注

    0

    文章

    11

    浏览量

    7895
收藏 人收藏

    评论

    相关推荐

    STM32:F407步进电机S形加减速算法的实现相关资料分享

    项目中对步进电机运行速度有了新要求,所以尝试实现梯形加减速算法,S形加减速算法。本文主要实现S形加减速算法。原理/思路步进电机有启动频率这一
    发表于 06-28 10:07

    启动停止频繁步进电机减速算法目的是什么

    电机减速算法目的:对于上述2、3的场合,步进电机容易出现丢步和过冲甚至无法启动的现象,所以加入该算法来解决这一问题。3. 算法实现3.1加
    发表于 07-07 07:58

    步进电机梯形加减速算法的原理是什么

    目录步进电机梯形加减速梯形加减速算法原理分析算法实现步进电机梯形加减速
    发表于 07-07 07:53

    步进电机驱动算法——S形加减速算法原理 精选资料下载

    目录步进电机S形加减速简介七段S形加减速算法原理分析五段S形加减速算法实现算法分析查表法编程实现思路及方法S曲线加
    发表于 07-08 09:18

    步进电机S型曲线加减速算法是什么?如何去实现?

    步进电机S型曲线加减速算法与实现Monte-Carlo2017-05-18 10:06:232653收藏2分类专栏:机器人运动学一年前做过的S型曲线加减速算法,再次做的时候竟然犯错,在此总结记录一下
    发表于 07-08 09:56

    F407步进电机梯形加减速算法是如何实现的?

    使用梯形/S形加减速算法。加减速算法的实现中,我没有采用之前的定时器主从模式的方式。因为没有想到如何消除在定时器中断服务程序中切换PWM波输出频率时产生的短暂延时。看来很多文章,还是试着用翻转电平的方法来产生PWM波。原理/思路...
    发表于 07-08 09:52

    步进电机梯形匀加速算法是什么

    最近公司的一个项目用带驱动器的步进电机,奈何,经理让我搞个匀加速的启动和停止。以前从来没考虑过算法的我,走了很多弯路,不过最后还是解决了这个问题。梯形加减速应该是指数加速算法和S型加
    发表于 07-08 06:49

    浅析步进电机S型曲线加减速算法

    一年前做过的S型曲线加减速算法,再次做的时候竟然犯错,在此总结记录一下,方便以后查阅,同时希望帮助初学者提供简单的参考资料(注:本项目采用的带细分的驱动器,MCU的OC比较输出模块产生50%的PWM
    发表于 09-03 08:35

    分享一种超级实用的步进电机速算法

    [导读] 大家好,我是逸珺。今天想分享一种超级实用的步进电机速算法,这种算法在步进电机调速方案中可以说是一种非常优异的方案。梯形调速算法
    发表于 09-03 09:05

    怎么实现S形加减速算法

    怎么实现S形加减速算法
    发表于 10-09 09:16

    怎么实现STM32步进电机S型加减速算法

    怎么实现STM32步进电机S型加减速算法
    发表于 10-11 07:57

    怎么实现步进电机S型曲线加减速算法

    怎么实现步进电机S型曲线加减速算法
    发表于 10-12 10:02

    步进电机减速算法相关资料分享

    步进电机减速算法
    发表于 01-11 06:45

    梯形加减速算法实现

    梯形加减速速度曲线采用“梯形”加减速算法,在运动过程中分成以下四个状态:空闲状态,加速状态,匀速状态与减速状态。图1 梯形加减速速度曲线加减速算法
    发表于 01-11 08:25

    步进电机S加减速算法与查表方式哪个更好?

    步进电机S加减速算法与查表方式哪个更好,有谁用过,能否提供实例?
    发表于 11-08 08:10