电机驱动是很常见的应用,在很多系统中我们都会碰到需要改变电机的速度以实现相应的控制功能,这就涉及到电机速度曲线规划的问题。在这篇中我们就来简单讨论一下电机的S型曲线规划的问题。
1、基本原理
S型速度曲线控制算法是工业控制领域另一种常用的加减速控制策略,S型曲线很好的克服了T型曲线加速度不连续的问题。
S型曲线实际就是实现一个加速度的T型变化过程,具体来说就是加速度增加、加速度恒定、将速度减小的过程。在整个速度调节规程中,加速度是连续变化的,而反映到速度的变化就是一条平滑的S型曲线。如下图所示:

这是比较常见的S曲线的形式,其函数表达式如下:

这一函数是这类函数的一个特例,其并不具有普遍性。在我们应用中,我们可能会需要根据应用的要求对S型曲线在横轴和纵轴两个方向平移或拉伸。所以这一函数更为普遍的描述如下:

在这一表达式中,A表示在纵轴方向的平移,B表示在纵轴方向的拉伸,a表示在横轴方向的拉伸,b表示在横轴方向的平移。具体反映到函数图形上就是如下图所示:

那么究竟如何使用这一S曲线函数来对电机进行调速呢?我们考虑到,所谓电机调速实际就是电机速度与运行时间之间存在一定的函数关系。很显然,纵轴就是电机速度,横轴就是运行时间。于是我们就可以得到电机的S型速度曲线的函数关系如下:

可能大家会发现,这个速度曲线的函数似乎与前面的数学函数有些许差别。这是为了更好的适应调速的区别。在数学上,数轴都是对称的,但在速度调节过程中,速度和时间都不可能存在负数的情况,所以我们需要对其进行平移。但是平移之后,S曲线的图形就不对称了,所以我们以整个调速过程的调速时间的中间点为轴就是对称的了,所以就有了上述的函数表达式。
2、设计与实现
我们已经简单描述了S型速度规划曲线的数学原理及应用表达式。接下来我们来考虑怎么实现它。
考虑到在同一个驱动器中可能因为应用场景的需要存在多条的速度规划曲线。所以我们以基于对象的思路来考虑它,这样我们在更换不同的曲线就只需要更换不同的曲线实力就可以了。所以我们先来分析一下曲线对象的属性和操作。
鉴于前面的分析,我们认为作为一个调速曲线对象至少要记录:开始调速时的初始速度、当前速度、目标速度、加速度、最大速度、最小速度、调速时间、调速时间跨度、曲线类型以及S曲线拉伸度等,我们将这些记为对象的属性。据此我们可以定义电机速度曲线的对象类型为:
/* 定义电机速度曲线对象 */
typedef struct CurveObject {
float startSpeed; //开始调速时的初始速度
float currentSpeed; //当前速度
float targetSpeed; //目标速度
float stepSpeed; //加速度
float speedMax; //最大速度
float speedMin; //最小速度
uint32_t aTimes; //调速时间
uint32_t maxTimes; //调速跨度
SpeedCurveType curveMode; //曲线类型
float flexible

本文探讨了S型速度曲线在电机驱动中的应用,介绍了基本原理,如何通过数学函数描述速度与时间的关系,并详细展示了设计与实现步骤,包括曲线对象的属性、调速函数的编写。还涉及了实际应用和参数调整建议。
最低0.47元/天 解锁文章
10万+





