4、虚轴设计原则:加速度规划与位置环带宽设定

虚轴这东西,说白了就是个“影子主轴”。

在多轴同步系统里,我们不给每个实轴单独发指令,而是先建一条虚拟的轴,让它跑出理想轨迹,然后所有实轴都去跟它。这样同步精度会高很多。但虚轴要是设计不好,反而会引入震荡,让整个系统抖起来。

我见过不少工程师,上来就把虚轴当实轴调,结果越调越乱。今天咱们就聊聊虚轴设计的两个核心:加速度规划和位置环带宽设定。

核心原则:虚轴不是物理轴,它没有惯性、没有摩擦、没有反电动势。它的“动态特性”完全由你写的代码决定。所以,别用调实轴那套思路来调虚轴。

4.1 虚轴加速度规划:别让指令“跳变”

虚轴加速度规划,说白了就是让速度指令平滑变化。你想想看,如果加速度突然从0跳到最大值,那位置指令就会产生一个“拐点”。实轴为了追上这个拐点,电流会瞬间拉满,然后过冲、回调、震荡……

我个人习惯用S型速度曲线。梯形加减速虽然简单,但在启停阶段容易激起机械共振。S型曲线把加加速度(Jerk)也限制住了,指令更平滑。

经验值参考:

  • 梯形加减速:适用于低精度、低惯量系统(如小传送带)
  • S型加减速:适用于高精度、高惯量系统(如龙门架、大型转台)
  • Jerk限制值:一般设为加速度最大值的 5~10 倍

我在一个大型龙门铣项目里遇到过这种情况:虚轴用梯形加速,实轴在换向时总是抖一下。后来换成S型曲线,把Jerk限制在 8000 mm/s³,问题就解决了。嗯,有时候就是这点细节。

下面是一个简单的S型速度规划伪代码,你可以参考一下:

// 虚轴S型速度规划示例
float v_max = 100.0;      // 最大速度 mm/s
float a_max = 500.0;      // 最大加速度 mm/s²
float j_max = 4000.0;     // 最大加加速度 mm/s³

float t1 = a_max / j_max; // 加加速度段时间
float v1 = 0.5 * j_max * t1 * t1; // 加加速度段速度增量

// 计算各段持续时间
float t_acc = (v_max - 2 * v1) / a_max + 2 * t1;
// ... 后续分段插值逻辑

避坑指南:我曾经见过有人把虚轴的加速度设得比实轴还大。这会导致实轴永远追不上虚轴,位置误差越积越大,最后触发跟随误差报警。虚轴的加速度,一定要留出 20%~30% 的余量给实轴去追。

4.2 虚轴位置环带宽设定:别让虚轴“太灵敏”

虚轴的位置环带宽,决定了它对指令的响应速度。带宽设得太高,虚轴本身就会震荡;设得太低,实轴跟着跑的时候会有滞后。

我建议的设定原则:虚轴带宽 = 实轴带宽 × 0.6 ~ 0.8。

为什么会这样?因为虚轴没有物理阻尼,它的“阻尼”全靠算法里的微分项来模拟。如果带宽设得和实轴一样高,虚轴的位置环增益就会偏大,容易产生数值震荡。说白了,虚轴比实轴更容易“飘”。

参数 实轴典型值 虚轴推荐值 说明
位置环比例增益 Kp 50 ~ 200 1/s 30 ~ 120 1/s 虚轴取实轴的 60%~80%
位置环微分增益 Kd 0.5 ~ 5 s 0.3 ~ 3 s 虚轴微分不宜过大,否则噪声放大
速度前馈系数 80% ~ 100% 100% 虚轴可以全前馈,因为它没有滞后
加速度前馈系数 50% ~ 80% 100% 同上,虚轴可以全前馈

关键点:虚轴的位置环输出,就是实轴的位置指令。如果虚轴本身在震荡,那所有实轴都会跟着抖。所以,虚轴的稳定性是第一位的,响应速度可以适当牺牲。

4.3 避免虚轴震荡的三大措施

震荡是虚轴设计里最常见的坑。我总结了三招,基本能覆盖 90% 的情况:

  1. 限制位置环积分项:虚轴不需要消除静差,因为它是虚拟的。积分项只会引入低频震荡。我一般把虚轴的积分增益设为零,或者用一个很小的值(比如实轴的 10%)。
  2. 加入低通滤波:虚轴的位置指令更新周期通常很短(比如 1ms),但实轴的响应周期可能更长。在虚轴输出端加一个一阶低通滤波,截止频率设为实轴带宽的 2~3 倍,可以有效抑制高频噪声。
  3. 设置位置指令限幅:虚轴的位置增量不能太大。如果两个周期之间的位置差超过了实轴的最大跟随能力,就会产生冲击。我习惯把单周期位置增量限制在实轴最大速度 × 周期时间的 80%。

避坑指南:我曾经在一个六轴同步项目里,虚轴震荡了整整两天。最后发现是位置环的微分项对噪声太敏感。加了个截止频率 50Hz 的低通滤波,问题就解决了。有时候问题不在算法本身,而在信号质量。

4.4 虚轴设计知识体系

下面这张图把虚轴设计的核心逻辑串起来了。你可以对照着检查自己的设计:

虚轴设计知识体系 虚轴设计核心逻辑 目标轨迹输入 加速度规划 S型曲线 | Jerk限制 | 余量预留 位置环带宽设定 Kp=实轴×0.6~0.8 | 积分限幅 避免虚轴震荡 积分归零 | 低通滤波 | 位置增量限幅 实轴位置指令 虚轴输出 = 实轴目标 稳定性 > 响应速度

4.5 调试步骤总结

最后,我把自己常用的调试步骤列出来,你可以照着走一遍:

  1. 先定加速度:根据系统惯量和工艺要求,选择S型或梯形曲线,设定最大加速度和Jerk限制。
  2. 再设带宽:虚轴位置环增益取实轴的 60%~80%,积分项设为零或极小值。
  3. 加滤波:在虚轴输出端加一阶低通滤波,截止频率 = 实轴带宽 × 2~3。
  4. 限幅保护:设置单周期位置增量上限,防止指令跳变。
  5. 空跑验证:让虚轴单独跑一遍完整轨迹,观察位置指令是否平滑、有无震荡。
  6. 带载测试:接入实轴,观察跟随误差。如果误差波动超过 ±1 个脉冲,回头检查加速度规划。

小技巧:调试时可以把虚轴的位置指令和实轴的反馈位置画在同一张图上。如果两条曲线几乎重合,说明虚轴设计到位了。如果出现“毛刺”或“波浪”,大概率是带宽或滤波没调好。

嗯,虚轴设计就这些。记住一句话:虚轴是服务实轴的,别让它成为系统的瓶颈。