4. 速度环控制器设计:从PI到改进型PI的实战之路

速度环是EPS系统的核心环节。说白了,它决定了你打方向盘时,电机能不能跟得上你的手速。我做了这么多年EPS,见过太多因为速度环调不好导致的“手感怪异”问题——轻的时候像在搅棉花,重的时候又像在掰钢筋。

今天咱们就聊聊速度环控制器的设计。从最经典的PI控制器开始,再到它的各种“进化版”。

4.1 PI控制器原理:为什么是比例+积分?

先问个问题:为什么速度环不用P控制器,非得加个I?

你想想看,如果只用比例控制,电机转速和目标转速之间永远有个静差。比如你设定1000rpm,实际可能只有950rpm。这个误差靠P是消不掉的,因为P的输出和误差成正比,误差小了输出就小,永远差那么一口气。

积分项就是来解决这个问题的。它把过去的误差累积起来,只要还有静差,积分项就会一直增长,直到把误差推平。

PI控制器的数学表达式很简单:

u(t) = Kp * e(t) + Ki * ∫e(t)dt

其中:

  • Kp:比例增益,决定响应速度
  • Ki:积分增益,决定稳态精度
  • e(t):速度误差 = 目标速度 - 实际速度

我在项目中遇到过一种情况:Kp调得太大,电机一启动就“嗡嗡”响,像蚊子叫。后来发现是比例增益太大导致的高频振荡。嗯,这里要注意,Kp不是越大越好。

4.2 PI参数整定方法:两种主流套路

参数怎么定?我一般用两种方法。新手建议从Ziegler-Nichols开始,老手可以直接上极点配置。

4.2.1 Ziegler-Nichols法:简单粗暴但有效

这个方法的核心思想是:先把积分项去掉,只留比例控制。然后慢慢增大Kp,直到系统开始等幅振荡。记下这个临界增益Ku和振荡周期Tu

然后按这个表算参数:

控制器类型 Kp Ki Kd
P 0.5 * Ku - -
PI 0.45 * Ku 1.2 * Kp / Tu -
PID 0.6 * Ku 2 * Kp / Tu Kp * Tu / 8
我的经验:Z-N法给出的参数通常偏激进。我习惯在算出来的基础上再打个7折,尤其是积分项。曾经有一次按Z-N法算完直接上机,电机抖得跟筛糠似的...从那以后我就学乖了。

4.2.2 极点配置法:更精确但需要模型

如果你有电机的数学模型,极点配置法会更精确。说白了,就是把你想要的速度环闭环极点位置定好,反推PI参数。

假设电机模型是:

G(s) = K / (J*s + B)

其中J是转动惯量,B是阻尼系数。速度环闭环传递函数是:

G_cl(s) = (Kp*s + Ki) / (J*s² + (B+Kp)*s + Ki)

你想让闭环极点落在s = -ωn ± jωn√(1-ζ²)的位置,那么:

Kp = 2*ζ*ωn*J - B
Ki = ωn² * J

我个人习惯把阻尼比ζ设在0.7到1.0之间。太小的阻尼比会有超调,太大的阻尼比响应太慢。自然频率ωn则取决于你想要的带宽。

注意:极点配置法依赖模型精度。如果你的电机参数不准(比如惯量J变了),算出来的参数可能不work。我曾经在一个项目中,电机带负载和不带负载的惯量差了3倍,用同一组参数结果完全不一样。

4.3 PI控制器的局限性:不是万能药

PI控制器虽然经典,但有几个硬伤:

  • 积分饱和:当输出达到限幅时,积分项还在累积。等误差反向时,积分项需要很长时间才能退回来,导致超调甚至振荡。
  • 响应速度与超调的矛盾:想快就得大Kp,但大Kp容易超调。想稳就得小Ki,但小Ki消除静差慢。
  • 对参数变化敏感:电机参数随温度、负载变化,固定PI参数很难在所有工况下都表现好。

你想想看,EPS系统里方向盘打到底时,电机输出饱和了。这时候积分项还在拼命累积,等你回方向盘时,它还在那“使劲推”,手感能不怪吗?

4.4 改进型PI控制器:实战中的进化

针对上面这些问题,工程上有很多改进方案。我重点讲两个最常用的。

4.4.1 积分分离

核心思想:误差大的时候,别让积分起作用。误差小的时候,再让积分慢慢消除静差。

实现方式很简单:

if |e(t)| > ε:
    u(t) = Kp * e(t)  // 只有比例
else:
    u(t) = Kp * e(t) + Ki * ∫e(t)dt  // 正常PI

这个ε怎么选?我一般取目标速度的5%-10%。太小了积分分离没效果,太大了又失去了积分的作用。

实战效果:积分分离最大的好处是启动阶段没有超调。我在一个EPS项目中用了这个方案,方向盘从静止到转动的瞬间,手感明显比纯PI要“干净”。

4.4.2 抗积分饱和

积分饱和的根源是:输出已经限幅了,但积分还在累积。抗积分饱和的思路是:一旦输出饱和,就停止积分,或者把积分往回拉。

常用的方法有两种:

  1. 条件积分法:输出饱和时,冻结积分项。
  2. 反计算法:输出饱和时,把超出限幅的部分反馈到积分输入端,把积分“拉回来”。

反计算法的实现:

u_sat = saturate(u)  // 限幅后的输出
if u != u_sat:
    Ki = Ki - Kc * (u - u_sat)  // Kc是反馈增益

Kc怎么选?我一般取Kc = 1/Kp。太大容易引起振荡,太小又起不到抗饱和的作用。

避坑指南:我曾经在一个项目中,抗积分饱和的反馈增益Kc设得太大了,结果系统在饱和区附近来回振荡,比不抗饱和还糟糕。后来把Kc降到0.5/Kp,问题就解决了。

4.5 本章小结:选型建议

说了这么多,到底该用哪种?我的建议是:

  • 简单应用:纯PI + Z-N整定,够用就行
  • 有模型且参数稳定:极点配置法,精度更高
  • 启动频繁或有大阶跃:积分分离,防止超调
  • 输出经常饱和:抗积分饱和,防止振荡
  • 追求极致性能:积分分离 + 抗积分饱和一起上

最后说一句:再好的控制器,参数调不好也是白搭。我见过太多人把时间花在“研究新算法”上,结果连最基本的PI参数都没调明白。先把基础打牢,再谈改进。


公众号:蓝海资料掘金营,微信deep3321