1. 项目背景与核心挑战
去年接手的一个工业自动化项目让我第一次深度接触高创伺服系统在龙门架结构上的应用调试。这个项目是为某大型包装生产线设计的三轴联动搬运机械臂,X/Y轴采用经典的龙门式结构,Z轴负责末端执行器的垂直运动。整套系统选用了高创CDHD系列伺服驱动器配合17位绝对值编码器电机,控制部分基于TwinCAT3平台开发。
龙门结构的特殊性给伺服调试带来了几个典型挑战:
- 双驱同步问题:X轴采用两侧电机共同驱动横梁,任何微小的力矩差异都会导致"扭梁"现象
- 机械谐振抑制:3米长的横梁在高速启停时容易激发6-8Hz范围内的机械振动
- 动态负载变化:Z轴在横梁不同位置运动时,X轴负载惯量会随之改变
2. 硬件配置与基础参数整定
2.1 电机与机械参数测量
调试前先用TwinCAT的Scope功能记录了空载情况下的机械特性:
iecst复制// 基本参数测量脚本
PROGRAM MAIN
VAR
fbMC_Home : MC_Home;
fbMC_MoveVelocity : MC_MoveVelocity;
END_VAR
测得关键机械参数如下表:
| 参数名称 | X轴左电机 | X轴右电机 | 单位 |
|---|---|---|---|
| 转子惯量 | 1.2e-4 | 1.25e-4 | kg·m² |
| 静摩擦力矩 | 0.38 | 0.42 | Nm |
| 动摩擦力矩 | 0.28 | 0.31 | Nm |
| 机械时间常数 | 8.7 | 9.2 | ms |
注意:高创伺服对惯量比非常敏感,建议控制在额定值30倍以内。我们实测的负载惯量比达到25倍,已接近临界值。
2.2 基础PID参数整定
使用高创调试软件Sysmac Studio进行初步自整定:
- 先关闭所有高级算法(如陷波滤波、前馈控制)
- 设置速度环带宽为50Hz,位置环15Hz
- 启用实时自动调谐功能
调试过程中发现右电机始终存在约5%的超调,通过调整速度环积分时间从20ms延长到35ms后解决。基础参数最终设定:
xml复制<AxisParams>
<VelocityLoop>
<Kp>1.2</Kp>
<Ki>0.035</Ki>
<Kd>0.002</Kd>
</VelocityLoop>
<PositionLoop>
<Kp>25</Kp>
<Ki>0</Ki>
</PositionLoop>
</AxisParams>
3. 龙门同步控制实现
3.1 主从控制架构
采用虚拟主轴+电子齿轮方案,系统架构如下:
code复制[虚拟主轴] --> [X轴主电机]
--> [X轴从电机(齿轮比1:1)]
--> [Y轴(凸轮曲线)]
关键同步参数配置:
- 同步窗口时间:500μs
- 最大位置误差:1000脉冲(约0.036°)
- 动态扭矩补偿系数:0.8
3.2 扭力平衡算法
开发了基于位置偏差的动态扭矩补偿算法:
cpp复制float sync_compensation(float master_pos, float slave_pos)
{
static float integral = 0;
float error = master_pos - slave_pos;
integral += error * 0.001f; // 积分时间1ms
// 抗积分饱和处理
if(fabs(integral) > MAX_COMP_VALUE) {
integral = copysign(MAX_COMP_VALUE, integral);
}
return error * KP_SYNC + integral * KI_SYNC;
}
实测效果显示,在1m/s速度下同步误差可控制在±5个脉冲以内。调试中发现的两个典型问题:
-
急停时从电机报过载警报
- 原因:制动电阻功率不足导致母线电压升高
- 解决:外接300W制动电阻并修改减速曲线
-
长时间运行后出现累积误差
- 原因:电子齿轮比计算时的浮点舍入误差
- 解决:改用Q格式定点数运算并每10分钟复位积分项
4. 机械谐振抑制方案
4.1 振动特征分析
使用频响分析工具捕捉到以下谐振点:
| 阶次 | 频率(Hz) | 振幅(dB) | 可能原因 |
|---|---|---|---|
| 1 | 6.8 | -12 | 横梁弯曲振动 |
| 2 | 15.2 | -18 | 导轨安装面共振 |
| 3 | 23.5 | -25 | 联轴器扭转振动 |
4.2 陷波滤波器配置
在高创驱动器中配置了三组自适应陷波滤波器:
ini复制[NotchFilter1]
Enable=1
Freq=6.8
Width=2.0
Depth=80%
[NotchFilter2]
Enable=1
Freq=15.2
Width=3.0
Depth=60%
[NotchFilter3]
Enable=0 // 暂未启用
Freq=23.5
调试技巧:
- 先设置较大Width值(如5Hz),再逐步收窄
- 深度从50%开始递增,避免过度滤波影响动态响应
- 配合实时示波器观察效果
5. 动态负载补偿策略
5.1 惯量识别算法
开发了基于运动学方程的在线惯量识别模块:
python复制def estimate_inertia(accel, torque):
"""滑动窗口最小二乘法惯量估计"""
window_size = 50
J_est = []
for i in range(len(accel)-window_size):
A = accel[i:i+window_size]
T = torque[i:i+window_size]
J = np.linalg.lstsq(A.reshape(-1,1), T, rcond=None)[0][0]
J_est.append(J)
return np.median(J_est)
实测数据显示Z轴在不同位置时,X轴惯量变化范围达18-27kg·m²。
5.2 变增益PID控制
根据惯量变化实时调整控制参数:
c复制void update_pid_params(float inertia_ratio)
{
// 基准参数(惯量比=1时的值)
const float base_kp = 1.2f;
const float base_ki = 0.035f;
// 变增益计算
current_kp = base_kp * sqrtf(inertia_ratio);
current_ki = base_ki / inertia_ratio;
// 限幅保护
current_kp = fminf(current_kp, 3.0f);
current_ki = fmaxf(current_ki, 0.01f);
}
6. 现场调试问题实录
6.1 编码器干扰问题
现象:偶尔出现位置跳变(±3个脉冲)
排查过程:
- 检查接地电阻 <1Ω(合格)
- 用示波器捕捉到电源线上有100kHz噪声
- 发现伺服动力线与编码器线平行走线
解决措施:
- 改用屏蔽双绞编码器线
- 增加磁环滤波器
- 重新布线保持30cm间距
6.2 过温保护误触发
现象:连续运行2小时后驱动器报Err21
分析:
- 实际散热片温度仅65℃(阈值85℃)
- 检查发现温度传感器安装位置不当
改进方案:
- 重新涂抹导热硅脂
- 将传感器移至散热片中心
- 修改温度补偿参数Offset=+5℃
7. 最终性能指标
经过两周调试后达到的指标:
| 项目 | 指标值 | 测试条件 |
|---|---|---|
| 定位精度 | ±0.01mm | 全行程激光测量 |
| 重复定位精度 | ±0.005mm | ISO 9283标准 |
| 最大速度 | 2.5m/s | 空载 |
| 同步误差 | <±0.02° | 1m/s速度下 |
| 整定时间 | 80ms | 0.5m/s→1m/s阶跃 |
这套参数最终固化到驱动器的多组参数表中,通过PLC指令可实时切换不同运动模式下的控制参数。调试过程中积累的经验表明,高创伺服在龙门应用中最关键的是正确处理双驱同步和机械谐振这两个相互耦合的问题,需要反复在机械结构和控制参数之间寻找平衡点。