4. 自整定技术概览:基于阶跃响应、基于继电反馈、基于模型辨识
好,咱们进入正题。自整定技术,说白了就是让驱动器自己学会怎么调参数。你想想看,一个电机换上去,还要人工去试PI参数,费时费力不说,还不一定最优。我这些年做项目,最怕的就是现场调试——环境一变,参数就得重来。
自整定技术主要有三条路:阶跃响应法、继电反馈法、模型辨识法。每条路都有自己的脾气,咱们一条一条捋清楚。
核心观点:自整定的本质,就是用算法代替人工试凑。你只需要告诉系统“我要什么性能”,它自己算出PI参数。
4.1 三种方法的总体对比
先给个全景图。我习惯把这三条路比作三种性格的人:
- 阶跃响应法——直来直去,给系统一个阶跃,看它怎么响应,然后算参数。简单粗暴,但容易受噪声影响。
- 继电反馈法——有点小聪明,让系统自己振荡起来,从振荡中提取信息。抗干扰能力强,工业上用得最多。
- 模型辨识法——最“学霸”,先建个数学模型,再用优化算法去拟合。精度高,但计算量大。
我早期做的一个伺服项目,用的就是阶跃响应法。当时觉得简单嘛,结果现场一跑,噪声一上来,参数抖得厉害。后来换成继电反馈,稳多了。
| 方法 | 原理 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 阶跃响应法 | 施加阶跃信号,提取响应特征 | 实现简单,物理意义明确 | 对噪声敏感,需人工判断稳态 | 实验室、低噪声环境 |
| 继电反馈法 | 引入继电环节,产生等幅振荡 | 抗干扰强,自动获取临界信息 | 振荡可能影响系统寿命 | 工业现场、在线整定 |
| 模型辨识法 | 采集数据,拟合传递函数 | 精度高,可离线优化 | 计算量大,需激励信号设计 | 高精度伺服、研发阶段 |
4.2 阶跃响应法——最直观的入门方法
阶跃响应法,我当年在学校里第一次接触PID时就在用。原理很简单:给系统一个阶跃指令,记录电流的响应曲线,然后从曲线上提取几个关键特征量。
具体怎么做?
- 施加阶跃:给电流环一个阶跃给定,比如从0A跳到1A。
- 记录响应:采集实际电流的上升过程。
- 提取特征:找到上升时间、超调量、稳态误差。
- 计算参数:用Ziegler-Nichols公式或改进公式算出Kp和Ki。
举个例子,Ziegler-Nichols的阶跃响应法公式:
// 从阶跃响应中提取 L(滞后时间)和 T(时间常数)
// 然后计算PI参数
Kp = 0.9 * T / (L * K) // K是系统增益
Ki = Kp / (3 * L) // 积分时间常数
注意:阶跃响应法对噪声非常敏感。我曾经在一个项目中,因为电流采样有1%的纹波,导致提取的L和T偏差了30%,算出来的参数根本不能用。后来加了低通滤波才解决。
阶跃响应法的优点是直观,你一眼就能看出系统响应快不快、有没有振荡。但缺点也很明显——它需要系统进入稳态才能开始测试,而且阶跃幅度要选好,太小信噪比低,太大可能触发保护。
4.3 继电反馈法——工业界的宠儿
继电反馈法,这是我在实际项目中最喜欢用的方法。为什么?因为它抗干扰能力强,而且不需要人工判断稳态。
原理是这样的:在电流环中插入一个继电环节(就是带滞环的比较器),让系统自己产生等幅振荡。从振荡的幅值和频率,就能算出临界增益Ku和临界周期Tu。
流程如下:
- 断开PI控制器,插入继电环节。
- 设置滞环宽度:一般取额定电流的1%~5%。
- 等待振荡稳定:通常3~5个周期就够了。
- 提取振荡信息:记录振荡幅值A和周期Tu。
- 计算临界参数:Ku = 4h / (πA),其中h是继电输出幅值。
- 整定PI参数:用Ziegler-Nichols或改进公式。
继电反馈法的Ziegler-Nichols整定公式:
// 从继电振荡中获取 Ku(临界增益)和 Tu(临界周期)
Kp = 0.45 * Ku
Ki = Kp / (0.85 * Tu) // 注意:这里是积分时间常数,不是Ki本身
实战技巧:滞环宽度不能设得太小,否则噪声会引起误触发。我一般取额定电流的2%~3%。如果系统噪声大,可以适当加大滞环,但振荡幅值也会变大,要注意电流限幅。
继电反馈法的最大优势是鲁棒性强。即使电流采样有噪声,只要滞环设置合理,振荡依然稳定。我在一个电机参数变化很大的项目中(温度从-20℃到80℃),继电反馈法每次都能给出可用的参数,而阶跃响应法就经常翻车。
4.4 模型辨识法——精度最高的选择
模型辨识法,说白了就是给电机“建模”。你先假设电流环的传递函数形式(比如一阶惯性+纯滞后),然后采集输入输出数据,用最小二乘法或递推算法去拟合模型参数。
这种方法精度最高,但代价也最大——计算量大,而且需要精心设计激励信号。
常用的模型结构:
- 一阶惯性+纯滞后:G(s) = K * e^(-Ls) / (Ts + 1)
- 二阶系统:G(s) = ωn² / (s² + 2ζωn s + ωn²)
- ARX模型:离散时间模型,适合在线辨识
我一般用递推最小二乘法(RLS)做在线辨识。代码框架如下:
// 递推最小二乘法(RLS)在线辨识
// 输入:u(k) 当前控制量,y(k) 当前反馈量
// 输出:theta 模型参数向量
// 初始化
P = 1000 * I; // 协方差矩阵,初始值要大
theta = [0; 0; 0]; // 参数向量
// 每次采样执行
phi = [-y(k-1), -y(k-2), u(k-1)]'; // 回归向量
e = y(k) - phi' * theta; // 预测误差
K = P * phi / (lambda + phi' * P * phi); // 增益矩阵
theta = theta + K * e; // 更新参数
P = (I - K * phi') * P / lambda; // 更新协方差,lambda是遗忘因子
注意:RLS的遗忘因子lambda很关键。lambda=1时,所有数据权重相同,适合时不变系统;lambda<1时,旧数据被遗忘,适合时变系统。我一般取0.98~0.995,太小了参数会抖。
模型辨识法的好处是,你不仅能得到PI参数,还能得到系统的完整数学模型。这对于后续的前馈补偿、抗饱和设计都很有用。但缺点也很明显——计算量大,在低成本MCU上跑起来有点吃力。
4.5 三种方法的知识体系图
下面这张图,把三种方法的流程和关系画清楚了。你可以看到,它们最终都指向同一个目标——算出Kp和Ki。
4.6 怎么选?我的建议
三种方法各有千秋,没有绝对的好坏。我个人的选择原则是这样的:
- 做原型验证:用阶跃响应法,快,能快速看到系统特性。
- 做产品量产:用继电反馈法,稳定可靠,抗干扰。
- 做高性能伺服:用模型辨识法,精度优先,算力不是问题。
还有一个组合拳:先用继电反馈法粗调,再用模型辨识法精调。我在一个机器人关节项目中就是这么干的——继电反馈先给出一个“能用”的参数,然后在线RLS微调,最终效果比单一方法好很多。
避坑指南:我曾经在一个项目中,直接用阶跃响应法整定大惯量负载,结果因为机械谐振,响应曲线乱七八糟,算出来的参数完全不对。后来加了前置滤波器,再用继电反馈法,才搞定。所以,系统有谐振时,优先用继电反馈法。