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% 的情况:
- 限制位置环积分项:虚轴不需要消除静差,因为它是虚拟的。积分项只会引入低频震荡。我一般把虚轴的积分增益设为零,或者用一个很小的值(比如实轴的 10%)。
- 加入低通滤波:虚轴的位置指令更新周期通常很短(比如 1ms),但实轴的响应周期可能更长。在虚轴输出端加一个一阶低通滤波,截止频率设为实轴带宽的 2~3 倍,可以有效抑制高频噪声。
- 设置位置指令限幅:虚轴的位置增量不能太大。如果两个周期之间的位置差超过了实轴的最大跟随能力,就会产生冲击。我习惯把单周期位置增量限制在实轴最大速度 × 周期时间的 80%。
避坑指南:我曾经在一个六轴同步项目里,虚轴震荡了整整两天。最后发现是位置环的微分项对噪声太敏感。加了个截止频率 50Hz 的低通滤波,问题就解决了。有时候问题不在算法本身,而在信号质量。
4.4 虚轴设计知识体系
下面这张图把虚轴设计的核心逻辑串起来了。你可以对照着检查自己的设计:
4.5 调试步骤总结
最后,我把自己常用的调试步骤列出来,你可以照着走一遍:
- 先定加速度:根据系统惯量和工艺要求,选择S型或梯形曲线,设定最大加速度和Jerk限制。
- 再设带宽:虚轴位置环增益取实轴的 60%~80%,积分项设为零或极小值。
- 加滤波:在虚轴输出端加一阶低通滤波,截止频率 = 实轴带宽 × 2~3。
- 限幅保护:设置单周期位置增量上限,防止指令跳变。
- 空跑验证:让虚轴单独跑一遍完整轨迹,观察位置指令是否平滑、有无震荡。
- 带载测试:接入实轴,观察跟随误差。如果误差波动超过 ±1 个脉冲,回头检查加速度规划。
小技巧:调试时可以把虚轴的位置指令和实轴的反馈位置画在同一张图上。如果两条曲线几乎重合,说明虚轴设计到位了。如果出现“毛刺”或“波浪”,大概率是带宽或滤波没调好。
嗯,虚轴设计就这些。记住一句话:虚轴是服务实轴的,别让它成为系统的瓶颈。