加减速算法是运动控制中的关键技术之一,也是实现高速、高效率的关键因素之一。在工业控制中,一方面要求加工的过程平滑、稳定,柔性冲击小;另一方面需要响应时间快,反应迅速。在保证控制精度的前提下来提高加工效率,实现机械运动平滑稳定,是目前工业加工中一直要解决的关键问题。当前运动控制系统中常用的加减速算法主要有:梯形曲线加减速、S形曲线加减速、指数曲线加减速、抛物线曲线加减速等。

1、“梯形”加减速

定义:指按直线方式(从启动速度到目标速度的加减速),以一定的比例进行加速/减速

图1: “梯形”加减速速度及加速度曲线

计算公式:

优缺点: 梯形曲线其特点是算法简便,占用时少、响应快、效率高,实现方便。但匀加速和匀减速阶段不符合步进电机速度变化规律,在变速和匀速转折点不能平滑过渡。所以这种算法主要应用在对升降速过程要求不高的场合。

“指数形”加减速

定义:指按指数函数方式进行加减速。

图2: “指数型”加减速速度及加速度曲线

计算公式

优缺点:指数曲线克服了梯形加减速的速度不平稳问题,运动精度得到了提高,但初始加速度大,容易引起机械部件的冲击,在加减速的起点仍然存在加减速突变,限制了加速度的提高。

“S形”加减速

定义:加速/减速开始时速度比较缓慢,然后逐渐加快。在加速/减速接近结束时速度再次减慢下来,从而使移动较为稳定。S 字加减速的类型有Sin 曲线、2次曲线、循环曲线、3 次曲线

图3: “S型”加减速速度及加速度曲线

计算公式:

优缺点:S曲线加减速是一种柔性程序较好的控制策略,能让电机性能得到充分的发挥,冲击振动小,但是实现过程比较复杂,计算量相对较大,并且加减速效率不高。

加减速控制评价指标

1、机械运动轨迹及位置误差应该尽量的小

2、机械运动过程平稳、抖动小,且响应迅速

3、加减速算法应该尽量简单,便于实现,能够满足控制的实时性要求

梯形加减速速度曲线

采用“梯形”加减速算法,在运动过程中分成以下四个状态:空闲状态,加速状态,匀速状态与减速状态。

加减速算法实现

图2 加减速实现算法

脉冲产生单元:用来产生指定频率的脉冲信号。

脉冲计数单元:用来记录各个运动状态下输出的脉冲个数。

脉宽计算单元:根据总的脉冲个数及记录的各个运动状态下的脉冲输出个数,进行状态跳转及速度计算。

脉冲产生单元

初始化STM32定时器,在定时器中断里面,翻转IO口,输出脉冲信号。

//初始化定时器功能,用来翻转IO信号,产生脉冲输出信号
void TIM3_Int_Init(u16 arr,u16 psc)
{TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能//定时器TIM3初始化TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值   TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断//中断优先级NVIC设置NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;  //先占优先级1级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  //从优先级0级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器TIM_Cmd(TIM3, DISABLE);  //不使能TIMx
}
//设置定时器值,用来产生指定频率的脉冲信号
void Motor0TimeSet(unsigned int ARR,bool TimeEnable)
{   TIM3->ARR = (uint16_t)ARR;   if(TimeEnable) TIM_Cmd(TIM3, ENABLE);else TIM_Cmd(TIM3, DISABLE);
}
//翻转IO
void TIM3_IRQHandler(void)   //TIM3中断
{if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  {TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  MotorPulsePinOut(&MotorControl[0]);}
}

脉冲计数单元

用来记录各个阶段输出的脉冲信号;根据设置的值和输出脉冲进行加减速状态切换。

图 3  加减速状态切换

void MotorRunState(MOTOR_CTRL *Motor)
{switch(Motor->NowState.RunState){case MIDLE://开始Motor->NowState.AllowMaxAddStep = Motor->SetData.RunStep/2;Motor->NowState.RunState = MACC;break;case MACC://加速状态Motor->NowState.AddStep ++;Motor->NowState.RunStep ++;if(Motor->NowState.AddStep >= Motor->NowState.AllowMaxAddStep)//三角形加速Motor->NowState.RunState = MDEC;else if(Motor->NowState.Speed >= Motor->SetData.SpeedMax)Motor->NowState.RunState = MKEEP;break;case MKEEP://最大速度阶段Motor->NowState.RunStep ++;if(Motor->NowState.AddStep >= Motor->SetData.RunStep - Motor->NowState.RunStep)Motor->NowState.RunState = MDEC;break;case MDEC://减速阶段Motor->NowState.RunStep ++;if(Motor->NowState.RunStep >= Motor->SetData.RunStep)//脉冲输出完成{Motor->TimeSet_Call_Back(Motor->NowState.TimeCountNum,false);//关闭定时器,停止脉冲信号输出Motor->NowState.SysState = MOV_IDLE;Motor->NowState.Consequence = 0; //执行结果}}if(Motor->NowState.SysState)Motor->TimeSet_Call_Back(Motor->NowState.TimeCountNum,true);//设置下一次脉冲输出频率}

速度计算单元

根据当前处于电机加减速的那个状态,进行速度计算。采用定时1MS计算一次速度的方式。

图 4 速度计算模块

void MotorCalculateSpeed(MOTOR_CTRL *Motor)
{switch(Motor->NowState.RunState){case MIDLE:Motor->NowState.Speed = Motor->SetData.Speed0;break;case MACC:Motor->NowState.Speed += Motor->SetData.SpeedAdd;if(Motor->NowState.Speed > Motor->SetData.SpeedMax)Motor->NowState.Speed = Motor->SetData.SpeedMax;break;case MKEEP:Motor->NowState.Speed = Motor->SetData.SpeedMax;break;case MDEC:Motor->NowState.Speed -= Motor->SetData.SpeedAdd;if(Motor->NowState.Speed < Motor->SetData.Speed0)Motor->NowState.Speed = Motor->SetData.Speed0;break;}if(Motor->NowState.Busy){     Motor->NowState.TimeCountNum = 1000*1000/Motor->NowState.Speed;//计算定时器应该重装的值Motor->NowState.MotorRunTime++;//统计电机运行时间}
}

比较几种步进电机加减速控制方案相关推荐

  1. 步进电机的加减速控制---QYC

    文章目录 前言 一.步进电机 二.步进电机的分类与驱动 1.步进电机的相与极 2.步进电机的驱动与细分 三.步进电机的加减速控制 1.步进电机的梯形加减速控制 1.1梯形加减速的速度与脉冲周期 1.2 ...

  2. STM32-步进电机S型加减速控制

    基于STM32的步进电机S型加减速控制算法 STM32简介 STM32代表ARM Cortex-M内核的32位微控制器.专为要求高性能.低成本.低功耗的嵌入式应用专门设计的: STM32系列的内核主要 ...

  3. 步进电机加减速算法介绍和基于AVR446_Linear speed control of stepper motor的步进电机加减速实现

    本文大部分内容来自<硬石电机控制专题指导手册> 一.引出 1.步进电机速度,是根据输入的脉冲信号的变化来改变的.理论上,给一个脉冲,步进电机就旋转一个步距角.但实际上,如果脉冲信号变化太快 ...

  4. 基于FPGA的PWM加减速控制实现

    2022.07.01 由于工作忙碌,再加上自己的十分懒惰,一直未更新(其实早已调试完毕). 根据实现的复杂性以及系统的限制,选择了脉冲频率采用T型曲线,脉冲数采用指数曲线,发现运动平稳性有明显改善,能 ...

  5. 步进电机驱动基础2——细分驱动、加减速控制

    之前小白白写过一篇步进电机驱动基础,讲了最基本的步进电机驱动方法:步进电机驱动基础_xiaobaibai_2021的博客-CSDN博客_步进电机驱动 这里,接着以前的文章,再讲一些步进电机驱动相关的知 ...

  6. 单片机步进电机加减速表生成软件

    单片机步进电机加减速表生成软件 介绍 功能细节 使用步骤 匀加速效果 平滑效果 软件链接 介绍 使用场景: 基于中断的查表法步进控制程序: 每中断一次就更新一次比较值,并输出一个步进(若翻转电平,速度 ...

  7. stm32控制步进电机加减速

    实习公司项目需要控制步进电机,电机方面主要包括控制运动.加减速.限位. 下面介绍一下在电机控制方面的心得,由于对于电机的控制不需要很精确,并且自身能力有限,相比于大牛有很大的差距. 1.需要实现的功能 ...

  8. 步进电机S曲线加减速控制生成器-VB6.0实现

    程序功能:生成步进电机S曲线运动数组代码 程序语言:VB6.0 对应硬件线路连接见上章: https://blog.csdn.net/LuDanTongXue/article/details/8786 ...

  9. blinker控制步进电机起保停,正反转,加减速(Arduino uno+esp8266+TB6600驱动器)

    blinker控制步进电机起保停,正反转,加减速(Arduino uno+esp8266+TB6600驱动器) 本文针对上一篇的<blinker控制步进电机起保停,正反转(Arduino uno ...

最新文章

  1. 在Ubuntu11.10中安装配置OpenCV2.3.1和CodeBlocks
  2. 使用IDEA2017创建java web +maven项目
  3. html导入有道云笔记,有道云笔记批量导入到showdoc(一)
  4. 11 旋转数组的最小数字
  5. vim 快捷键_VIM学习笔记 环绕字符编辑(surround)
  6. [2017-AspNet-MVC4] 案例演化:加法测试-1
  7. mac上安装mongoDb以及简单使用
  8. 兄弟打印机内存已满清零方法_兄弟打印机全部清零操作方法
  9. iso硬盘安装 凤凰os_phoenix os安装全教程 凤凰系统进不去安装注意事项
  10. springboot项目部署在服务器上
  11. 微信获取openid的时候报40163错的原因
  12. 重磅!微信二维码引擎OpenCV开源!3行代码让你拥有微信扫码能力
  13. 计算机二级MS office(word 01)
  14. 2020年10月份电脑选购计划
  15. Beginning WF4读书笔计 - 第一章 03设计示图及xaml代码
  16. Python 爬取今日头条的图片新闻
  17. 开放原子开源基金会项目适用的CLA及DCO
  18. 工具用得好,头发掉的少!
  19. 工业互联网数字化中台解决方案
  20. python画星空的程序_python画画梵高

热门文章

  1. HDU-2017 多校训练赛9-1005-FFF at Valentine
  2. StringWriter介绍
  3. char *const p ,char const *p,const char *p的区别
  4. 2021 An Updated Comparison of Four Low Earth Orbit Satellite Constellation Systems to Provide Global
  5. iOS7新特性的兼容性处理方法
  6. 七届世界冠军迈克尔-舒马赫将正式退役
  7. html图片左右转换,jquery实现图片左右切换的方法
  8. C/C++新手学习项目(三) 魔兽世界之三:开战
  9. HTML+CSS案例展示(CSS3D效果旋转相册)
  10. php 正则保留数字和,只保留汉字,字母,数字正则