3. 典型I型系统整定法在电流环中的应用
任务目标
本案例针对FOC电流环,采用典型I型系统整定法,根据给定的期望超调量σ%和调节时间ts,计算电流环PI调节器的比例系数Kp和积分系数Ki。整定对象为表贴式永磁同步电机(SPMSM)的d/q轴电流环,电气模型可等效为一阶惯性环节。
整定原理与公式
典型I型系统开环传递函数为:
G(s) = K / [s(TΣs + 1)]
其中K为开环增益,TΣ为小时间常数之和。电流环中,TΣ = Ts(开关周期)+ Td(数字控制延时,通常取1.5Ts)。按“二阶最佳”整定关系,取阻尼比ξ = 0.707时,超调量σ% ≈ 4.3%,此时:
K·TΣ = 0.5
若期望超调量非4.3%,需根据σ%查表或计算对应的K·TΣ值。本案例采用工程近似法:给定σ%后,由时域关系式反推ξ,再计算K·TΣ。调节时间ts(±2%误差带)与ξ、ωn的关系为:
ts ≈ 4 / (ξ·ωn)
结合典型I型系统闭环传递函数,可推导出PI参数计算公式。电流环被控对象为:
Gp(s) = 1 / (Ls + R)
其中L为定子电感,R为定子电阻。PI调节器传递函数为Kp + Ki/s,取零点对消对象极点,即Ki/Kp = R/L,则开环增益K = Kp/L。
参数计算实现
以下Python代码实现完整计算流程:输入电机电气参数、开关频率、期望超调量和调节时间,输出Kp和Ki。
import math
def calc_pi_params(L, R, f_sw, sigma_percent, ts_target):
"""
典型I型系统电流环PI参数整定
参数:
L: 定子电感 (H)
R: 定子电阻 (Ohm)
f_sw: 开关频率 (Hz)
sigma_percent: 期望超调量 (%)
ts_target: 期望调节时间 (s)
返回:
(Kp, Ki)
"""
# 1. 小时间常数: 开关周期 + 数字控制延时(1.5倍开关周期)
Ts = 1.0 / f_sw
T_sigma = Ts + 1.5 * Ts # = 2.5 * Ts
# 2. 由超调量反推阻尼比 (二阶系统近似)
# 超调量公式: sigma = exp(-pi*xi / sqrt(1-xi^2))
# 数值求解xi
xi = 0.707 # 初始猜测
for _ in range(100):
sigma_calc = math.exp(-math.pi * xi / math.sqrt(1 - xi * xi))
if abs(sigma_calc - sigma_percent / 100.0) < 1e-6:
break
# 牛顿迭代
f = sigma_calc - sigma_percent / 100.0
df = -math.pi * math.exp(-math.pi * xi / math.sqrt(1 - xi * xi)) / ((1 - xi * xi) ** 1.5)
xi -= f / df
xi = max(0.1, min(0.9, xi)) # 限制范围
# 3. 由调节时间计算自然频率
# ts ≈ 4 / (xi * wn) (2%误差带)
wn = 4.0 / (xi * ts_target)
# 4. 典型I型系统: 闭环自然频率与开环增益关系
# 闭环特征方程: s^2 + (1/T_sigma)*s + K/T_sigma = 0
# 标准二阶: s^2 + 2*xi*wn*s + wn^2 = 0
# 对比得: 2*xi*wn = 1/T_sigma → 验证约束
# 实际整定: 由期望wn计算所需开环增益K
K_open = wn * wn * T_sigma # 由wn^2 = K/T_sigma
# 5. 由开环增益反算Kp (K_open = Kp / L)
Kp = K_open * L
# 6. 零点对消: Ki/Kp = R/L
Ki = Kp * R / L
return Kp, Ki
# 示例: 某SPMSM参数
L = 0.0005 # 500 uH
R = 0.05 # 50 mOhm
f_sw = 20000 # 20 kHz
sigma_target = 4.3 # 期望超调量 4.3%
ts_target = 0.001 # 期望调节时间 1 ms
Kp, Ki = calc_pi_params(L, R, f_sw, sigma_target, ts_target)
print(f"Kp = {Kp:.4f}")
print(f"Ki = {Ki:.4f}")
# 验证: 计算实际超调量和调节时间
Ts = 1.0 / f_sw
T_sigma = 2.5 * Ts
K_open = Kp / L
wn_actual = math.sqrt(K_open / T_sigma)
xi_actual = 1.0 / (2 * T_sigma * wn_actual)
sigma_actual = math.exp(-math.pi * xi_actual / math.sqrt(1 - xi_actual * xi_actual)) * 100
ts_actual = 4.0 / (xi_actual * wn_actual)
print(f"验证: 实际超调量={sigma_actual:.2f}%, 实际调节时间={ts_actual*1000:.3f} ms")
运行与验证
运行方式:将代码保存为pi_tuning.py,在Python 3环境中执行python pi_tuning.py。
预期输出:代码会打印计算得到的Kp和Ki值,并输出验证结果。对于示例参数,由于σ%=4.3%对应ξ=0.707,且ts=1ms,计算得到的参数应使实际超调量接近4.3%、调节时间接近1ms。
验证方法:观察输出的验证行,实际超调量应接近期望值(误差<0.1%),实际调节时间应接近目标值(误差<5%)。若偏差较大,检查输入参数是否合理(如ts过小会导致Kp过大)。
常见问题
- 调节时间过短:当期望ts小于2.5TΣ时,计算出的Kp会非常大,可能导致实际系统饱和。建议ts ≥ 5TΣ。
- 超调量小于4.3%:此时ξ>0.707,系统响应变慢,需要增大ts目标值,否则无解。
- 离散化影响:本计算基于连续域,实际离散化后(如双线性变换)参数需微调,建议在仿真中验证后做±10%范围内调整。