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

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

3天内不再提示

电机运动控制算法之S速度曲线规划算法

strongerHuang 来源:小麦大叔 作者:小麦大叔 2023-09-14 09:28 次阅读

转自| 小麦大叔

搞过电机或运动控制的小伙伴应该知道,S曲线很重要,下面一张动图对比一下,你就知道S曲线的好处。

今天就给大家描述一下S速度曲线规划算法

1 前言

S形加减速的最重要特征是该算法的加速度/减速度曲线的形状如字母 S。S形加减速的速度曲线平滑 ,从而能够减少对控制过程中的冲击,并使插补过程具有柔性 [^1]。由于T形曲线在加速到匀速的切换过程中,实际中存在较大过冲,因此这里对比一下T曲线和7段S曲线的实际过程;

T形:加速 -> 匀速 -> 减速

S形:加加速(T1) -> 匀加速(T2) -> 减加速(T3)-> 匀速(T4)-> 加减速(T5)-> 匀减速(T6)-> 减减速(T7)

上文在加速这块的文字描述可能读起来起来有点绕,下面看图:
fe6dc1b4-5294-11ee-a25d-92fbcf53809c.png

2 理论分析

由于S曲线在加减速的过程中,其加速度是变化的,因此这里引入了新的一个变量 J,即加加速度
image.png

因此对应上图的7段S速度曲线中,规定最大加速为amax,最小加速度为-amax,则加速度的关系;

image.png

所以通常需要确定三个最基本的系统参数 :系统最大速度umax ,最大加速度a_{max} ,加加速度,就可以可确定整个运行过程[^2] ;

最大速度:反映了系统的最大运行能力 ;

最大加速度:反映了系统的最大加减速能力 ;

加加速度:反映了系统的柔性;

柔性越大,过冲越大,运行时间越短;

柔性越小,过冲越小,运行时间越长;

2.1 加速度时间关系方程

整个加速度变化的过程具体如下图所示;

fe8a3970-5294-11ee-a25d-92fbcf53809c.png

image.png

2.2 速度时间关系方程

速度和加速度满足 ;加加速度和速度的关系满足:

结合加速度时间关系并结合② 式可以得到速度曲线关系,具体关系如下图所示;
fe9930ce-5294-11ee-a25d-92fbcf53809c.png
进一步简化可以得到:
feb4bb5a-5294-11ee-a25d-92fbcf53809c.png

2.3 位移时间关系方程

image.png

积分忘的差不多了,回去再复习一下;

最终位移的方程如下所示;
feca83ea-5294-11ee-a25d-92fbcf53809c.png

3 程序实现的思路

正如前面所提到的,S曲线规划需要确定三个最基本的系统参数 :系统最大速度 ,最大加速度a_{max} ,加加速度,这样就可以确定这个运行过程。这里有一个隐性的条件,就是在运行的过程中可以达到最大速度,这样才是完整的7段S曲线,另外这里还有一些中间参数:

image.png
image.png

image.png

4 matlab 程序

matlab程序亲测可以运行,做了简单的修改,因为这里直接给定了整个运行过程的时间,所以需要在SCurvePara函数中求出加加速度 的值,路程为 1:

SCurvePara

function[Tf1,V,A,J,T]=SCurvePara(Tf,v,a)
T=zeros(1,7);
fori=1:1000
%加加速度J
J=(a^2*v)/(Tf*v*a-v^2-a);
%Tk
T(1)=a/J;
T(2)=v/a-a/J;%t2=v/a-t1;
T(3)=T(1);
T(4)=Tf-2*a/J-2*v/a;%t4=Tf-4*t1-2*t2;
T(5)=T(3);
T(6)=T(2);
T(7)=T(1);
%根据T2和T4判断S曲线的类型
ifT(2)< -1e-6
        a = sqrt(v*J);
        display('t2<0');
    elseif T(4) < -1e-6
        v = Tf*a/2 - a*a/J;
        display('t4<0');
    elseif J < -1e-6
        Tf = (v^2 + a) / (v*a) + 1e-1;
        display('J<0');
    else
        break;
    end
end

 A = a;
 V = v;
 Tf1 = Tf;
 end

SCurveScaling

functions=SCurveScaling(t,V,A,J,T,Tf)
%J=(A^2*V)/(Tf*V*A-V^2-A);
%T(1)=A/J;
%T(2)=V/A-A/J;%T(2)=V/A-T(1);
%T(3)=T(1);
%T(4)=Tf-2*A/J-2*V/A;%T(4)=Tf-4*T(1)-2*T(2);
%T(5)=T(3);
%T(6)=T(2);
%T(7)=T(1);
%%
if(t>=0&&t<= T(1))
    s = 1/6 * J * t^3;
elseif (  t >T(1)&&t<= T(1)+T(2) )
    dt = t - T(1);
    s = 1/2 * A * dt^2 + A^2/(2*J) * dt...
        + A^3/(6*J^2);
elseif ( t >T(1)+T(2)&&t<= T(1)+T(2)+T(3) )
     dt = t - T(1) - T(2);
     s = -1/6*J*dt^3 + 1/2*A*dt^2 + (A*T(2) + A^2/(2*J))*dt ...
         + 1/2*A*T(2)^2 + A^2/(2*J)*T(2) + A^3/(6*J^2);
elseif ( t >T(1)+T(2)+T(3)&&t<= T(1)+T(2)+T(3)+T(4) )
     dt = t - T(1) - T(2) - T(3);
     s = V*dt ...
         +  (-1/6*J*T(3)^3) + 1/2*A*T(3)^2 + (A*T(2) + A^2/(2*J))*T(3) + 1/2*A*T(2)^2 + A^2/(2*J)*T(2) + A^3/(6*J^2);
elseif ( t >T(1)+T(2)+T(3)+T(4)&&t<= T(1)+T(2)+T(3)+T(4)+T(5) )
     t_temp = Tf - t; 
     dt = t_temp - T(1) - T(2);
     s = -1/6*J*dt^3 + 1/2*A*dt^2 + (A*T(2) + A^2/(2*J))*dt ...
         + 1/2*A*T(2)^2 + A^2/(2*J)*T(2) + A^3/(6*J^2);
     s = 1 - s;
elseif ( t >T(1)+T(2)+T(3)+T(4)+T(5)&&t<= T(1)+T(2)+T(3)+T(4)+T(5)+T(6) )
     t_temp = Tf - t; 
     dt = t_temp - T(1);
     s = 1/2 * A * dt^2 + A^2/(2*J) * dt + A^3/(6*J^2);
     s = 1 - s;  
elseif ( t >T(1)+T(2)+T(3)+T(4)+T(5)+T(6)&&t<= T(1)+T(2)+T(3)+T(4)+T(5)+T(6)+T(7) + 1e5 )
     t_temp = Tf - t; 
     s = 1/6 * J * t_temp^3;
     s = 1 - s;     
end
 
end

测试的代码如下:TEST

%%
N=500;

ThetaStart=0;%起始位置
ThetaEnd=90;%最终位置
VTheta=90;%1速度
ATheta=135;%1.5加速度
Tf=1.8;%总行程时间

v=VTheta/(ThetaEnd-ThetaStart);
a=ATheta/(ThetaEnd-ThetaStart);
v=abs(v);
a=abs(a);


Theta=zeros(1,N);
s=zeros(1,N);
sd=zeros(1,N);
sdd=zeros(1,N);

[TF,V,A,J,T]=SCurvePara(Tf,v,a);
display(J,'J:');
display(TF,'Tf:');
display(V,'v:');
display(A,'da:');

display(TF-Tf,'dTf:');
display(V-v,'dv:');
display(A-a,'da:');

t=linspace(0,TF,N);
dt=t(2)-t(1);
fori=1:N
ifi==N
a=a;
end
s(i)=SCurveScaling(t(i),V,A,J,T,TF);
Theta(i)=ThetaStart+s(i)*(ThetaEnd-ThetaStart);
ifi>1
sd(i-1)=(s(i)-s(i-1))/dt;
end
ifi>2
sdd(i-2)=(sd(i-1)-sd(i-2))/dt;
end
end

subplot(3,1,1);
legend('Theta');
xlabel('t');
subplot(3,1,1);
plot(t,s)
legend('位移');
xlabel('t');
title('位置曲线');

subplot(3,1,2);
plot(t,sd);
legend('速度');
xlabel('t');
title('速度曲线');

subplot(3,1,3);
plot(t,sdd);
legend('加速度');
xlabel('t');
title('加速度曲线');

看到最终仿真结果和预期相同;fef5f17e-5294-11ee-a25d-92fbcf53809c.jpg

最后再看一下T形和S形速度曲线规划的效果对比:

5 总结

本文只对7段的S曲线规划做了详细的推导和介绍,matlab中的程序对于4段和5段都有做实现,很多是在理想情况下进行推导的,初始速度默认为0,终止速度也为0,并且假设加减速区域相互对称。最终运行结果符合预期效果。

审核编辑:汤梓红

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

    关注

    139

    文章

    8312

    浏览量

    142099
  • 运动控制
    +关注

    关注

    4

    文章

    523

    浏览量

    32427
  • 控制算法
    +关注

    关注

    4

    文章

    156

    浏览量

    21495

原文标题:电机运动控制算法总结

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    DSP 速度曲线规划 电机

    请教大家,如何做DSP 电机速度曲线规划? eg:做一个梯形的速度曲线规划,有一个先加速,再匀速,再减速的过程。程序上如何实现呢?已经实现了位置环控制。本人想在位置环内
    发表于 04-25 18:04

    动态规划算法

    动态规划算法资料。
    发表于 08-30 20:44

    电机控制常用算法概述(4)

    通用DC电机控制算法通用电机速度控制,特别是采用2种电路的
    发表于 10-26 11:00

    LCS的动态规划算法

    LCS的动态规划算法(自底向上)
    发表于 05-25 15:06

    步进电机T型与S速度曲线

    一种用于步进电机速度的新算法可以实现速度曲线的实时参数化和计算。该算法可以在低端微控制器上运行
    发表于 06-28 10:15

    有什么方法可以实时生成步进电机速度曲线

    实时生成步进电机速度曲线一种用于步进电机速度的新算法可以实现速度曲线的实时参数化和计算。该
    发表于 07-07 07:18

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

    目录步进电机S形加减速简介七段S形加减速算法原理分析五段S形加减速算法实现
    发表于 07-08 09:18

    电机的梯形曲线规划的问题

      电机驱动是很常见的应用,在很多系统中我们都会碰到需要改变电机速度以实现相应的控制功能,这就涉及到电机
    发表于 09-03 08:34

    电机S曲线规划的问题

      电机驱动是很常见的应用,在很多系统中我们都会碰到需要改变电机速度以实现相应的控制功能,这就涉及到电机
    发表于 09-03 06:51

    介绍一种永磁同步电机控制的轨迹规划方案

    位置到目标位置的过渡过程进行轨迹规划,本文将介绍三次多项式速度轨迹,数学计算简单,速度曲线光滑连续,适合伺服电机轨迹规划。2.数学模型在伺服
    发表于 10-12 14:51

    实时生成步进电机速度曲线

    步进电机加速的新算法能够将速度曲线参数化并进行实时计算。这种算法能在低端微控制器上运行,只采用简单的定点运算,没有数据表。它为恒加速和减速线
    发表于 01-02 11:09 206次下载

    工业机器人空间曲线实时轨迹规划算法

    本文设计了一种六轴机械臂沿空间曲线行走的控制算法算法使机器人对输入空间曲线计算出各关节的电机
    发表于 02-23 13:52 49次下载

    基于路径跟踪方法的路径规划算法

    为解决拖挂式移动机器人系统路径规划算法精准性低、稳定性差和无法考虑系统间安全性等的问题,提出一种基于路径跟踪方法的路径规划算法。该算法融合快速拓展随机树( RRT)基本算法和路径跟踪
    发表于 12-04 14:18 6次下载
    基于路径跟踪方法的路径<b class='flag-5'>规划算法</b>

    如何使用S曲线进行步进电机加减速的控制设计资料说明

    针对不同约束条件下步进电机加减速的控制问题,首先分析了 S 曲线算法原理,寻找 S 曲线算法与其
    发表于 03-13 08:00 0次下载
    如何使用S<b class='flag-5'>曲线</b>进行步进<b class='flag-5'>电机</b>加减速的<b class='flag-5'>控制</b>设计资料说明

    详解S型加减速曲线规划算法总结

    S形加减速的最重要特征是该算法的加速度/减速度曲线的形状如字母 S。S形加减速的速度曲线平滑 ,从而能够减少对控制过程中的冲击,并使插补过程
    的头像 发表于 04-09 17:18 2.8w次阅读
    详解S型加减速<b class='flag-5'>曲线规划算法</b>总结