4、电流环PI参数整定:工程整定法、基于带宽的整定、仿真验证
电流环是整个双闭环系统的“内功心法”。
说白了,转矩响应快不快、稳不稳,全看电流环调得怎么样。我见过不少工程师,位置环调得花里胡哨,结果电流环没整好,一跑起来就抖得像筛糠。嗯,电流环才是真正的硬功夫。
4.1 电流环的数学模型——先搞清楚我们在调什么
在开始整定之前,得先明白电流环长什么样。以永磁同步电机(PMSM)为例,d-q轴下的电压方程是这样的:
ud = Rs * id + Ld * (did/dt) - ωe * Lq * iq
uq = Rs * iq + Lq * (diq/dt) + ωe * (Ld * id + ψf)
看着有点复杂是吧?其实你仔细看,d轴和q轴是耦合的。但在工程上,我们通常做一件事——解耦。
我个人习惯把电流环简化成一阶惯性环节来处理。为什么呢?因为电流环的带宽远高于速度环,它的动态响应可以近似为:
G(s) = 1 / (L·s + Rs)
这里L是电感,Rs是定子电阻。你看,这不就是一个典型的一阶系统吗?PI控制器配一阶对象,整定起来就有章可循了。
4.2 工程整定法——老工程师的“土办法”
我刚入行那会儿,没有仿真软件,全靠示波器和手感。工程整定法,说白了就是“试”——但有章法地试。
4.2.1 试凑法的基本步骤
- 先调比例增益Kp:把Ki设成0,只加Kp。从小到大慢慢加,直到电流响应出现轻微振荡。这个点叫“临界增益”。
- 再调积分增益Ki:把Kp退回到临界增益的60%~70%,然后加Ki。Ki的作用是消除稳态误差,但加多了会超调。
- 微调:反复试几次,直到阶跃响应“不抖、不慢、不超”为止。
4.2.2 工程整定的经验公式
如果你不想纯靠手感,这里有个经验公式,我用了很多年:
| 参数 | 经验公式 | 说明 |
|---|---|---|
| Kp | Kp ≈ L · ωc | ωc是期望的电流环截止频率 |
| Ki | Ki ≈ Rs · ωc | Rs是定子电阻 |
这个公式怎么来的?其实就是零极点对消。你想想看,PI控制器的传递函数是Kp + Ki/s,它的零点在s = -Ki/Kp。把这个零点放在被控对象的极点s = -Rs/L处,就实现了对消。
4.3 基于带宽的整定——更系统的做法
工程整定法虽然好用,但不够“优雅”。如果你想让电流环的响应有明确的数学预期,那就得用带宽法。
4.3.1 带宽法的核心思想
带宽法的思路很简单:你希望电流环的闭环带宽是多少,我就把PI参数算出来。
假设我们期望的电流环闭环带宽是ωb(单位:rad/s),那么:
Kp = L · ωb
Ki = Rs · ωb
你看,和工程整定的公式一模一样!区别在于,工程整定是“试出ωc”,带宽法是“指定ωb”。
4.3.2 带宽怎么选?
这个问题我经常被问到。我的建议是:
- 电流环带宽:通常是速度环带宽的5~10倍。比如速度环要100Hz,电流环至少500Hz。
- 上限:受限于PWM开关频率。一般取开关频率的1/10~1/20。比如10kHz的PWM,电流环带宽最多500~1000Hz。
- 下限:不能太低,否则电流响应慢,转矩会“拖后腿”。
4.4 仿真验证——用数据说话
参数算完了,别急着往硬件里烧。先仿真验证一下,这是最省钱的习惯。
4.4.1 搭建仿真模型
我用Python写了个简单的仿真脚本,模拟电流环的阶跃响应。核心代码长这样:
import numpy as np
import matplotlib.pyplot as plt
# 电机参数
Rs = 0.5 # 定子电阻 (Ω)
Ld = 0.005 # d轴电感 (H)
Lq = 0.005 # q轴电感 (H)
# 期望带宽
omega_b = 500 * 2 * np.pi # 500Hz 转 rad/s
# PI参数计算
Kp = Ld * omega_b
Ki = Rs * omega_b
print(f"Kp = {Kp:.3f}, Ki = {Ki:.3f}")
# 仿真一阶系统阶跃响应
dt = 1e-5
t = np.arange(0, 0.02, dt)
ref = np.ones_like(t) * 10 # 目标电流 10A
# 离散化PI控制器
integral = 0
output = []
for i in range(len(t)):
err = ref[i] - (output[-1] if output else 0)
integral += err * dt
u = Kp * err + Ki * integral
# 一阶系统响应
di_dt = (u - Rs * (output[-1] if output else 0)) / Ld
output.append((output[-1] if output else 0) + di_dt * dt)
plt.plot(t, output, label='电流响应')
plt.plot(t, ref, '--', label='给定值')
plt.xlabel('时间 (s)')
plt.ylabel('电流 (A)')
plt.legend()
plt.grid(True)
plt.show()
4.4.2 仿真结果怎么看?
跑完仿真,主要看三个指标:
- 上升时间:从10%到90%的时间,应该和带宽匹配。带宽500Hz,上升时间大约0.35/500 ≈ 0.7ms。
- 超调量:理想情况是0%,但实际会有5%~10%。如果超调太大,说明Kp偏大。
- 稳态误差:应该趋近于0。如果稳不住,说明Ki不够。
4.5 本章知识体系
为了让你更直观地理解电流环整定的全貌,我画了张流程图:
这张图把整定流程串起来了。你从电机参数出发,选择方法,计算参数,仿真验证,不合格就回去调,合格了就上硬件。嗯,就是这么个闭环。