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控制器配一阶对象,整定起来就有章可循了。

核心观点:电流环整定的本质,就是把PI控制器的零点,对消掉被控对象的极点。

4.2 工程整定法——老工程师的“土办法”

我刚入行那会儿,没有仿真软件,全靠示波器和手感。工程整定法,说白了就是“试”——但有章法地试。

4.2.1 试凑法的基本步骤

  1. 先调比例增益Kp:把Ki设成0,只加Kp。从小到大慢慢加,直到电流响应出现轻微振荡。这个点叫“临界增益”。
  2. 再调积分增益Ki:把Kp退回到临界增益的60%~70%,然后加Ki。Ki的作用是消除稳态误差,但加多了会超调。
  3. 微调:反复试几次,直到阶跃响应“不抖、不慢、不超”为止。
我的经验:我曾经在一个伺服项目里,电流环怎么调都振荡。后来发现是电流采样有延迟,加了个低通滤波器就好了。所以啊,调参数之前,先确认硬件没问题。

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不够。
避坑指南:我曾经在仿真里调得完美无缺,一上硬件就炸了。后来发现是仿真里没加PWM延迟和采样延迟。记住,仿真要加“真实感”——至少加一拍延迟。

4.5 本章知识体系

为了让你更直观地理解电流环整定的全貌,我画了张流程图:

电流环PI参数整定流程 1. 获取电机参数 Rs, Ld, Lq 2. 选择整定方法 工程法 / 带宽法 3. 计算PI参数 Kp, Ki 4. 仿真验证 阶跃响应 / 带宽测试 合格? 调整参数 硬件部署

这张图把整定流程串起来了。你从电机参数出发,选择方法,计算参数,仿真验证,不合格就回去调,合格了就上硬件。嗯,就是这么个闭环。

最后说一句:电流环整定没有“万能参数”。不同的电机、不同的工况,参数都不一样。但只要你掌握了工程整定法和带宽法,再配合仿真验证,就能快速找到合适的参数。我这些年就是这么过来的。

专注资料整理