在电机控制和并网逆变器领域,工程师们经常需要处理交流信号的精确跟踪问题。传统PI控制器对直流信号表现优异,但遇到50Hz/60Hz的交流信号时就显得力不从心。我曾在一个光伏逆变器项目中深有体会——当电网频率波动时,PI控制输出的THD(总谐波失真)会急剧上升到8%以上,完全无法满足并网要求。
这时候准PR控制器就展现出独特优势。它的谐振环节能够针对特定频率(如工频50Hz)实现近乎零稳态误差的跟踪,实测THD可以控制在1%以内。这得益于其传递函数中的二阶谐振项:G(s)=Kp+2Krωcs/(s²+2ωcs+ω0²)。其中ω0就是需要跟踪的谐振频率,而ωc决定了控制器的带宽。
举个例子,当我们需要跟踪220V/50Hz的电网电压时,只需将ω0设为314rad/s(2π×50),系统就能自动锁定这个频率。去年我参与设计的充电桩项目就采用这种方案,在-10%到+10%的电网频率波动范围内都能保持稳定输出。
Kp参数直接影响系统的动态响应速度。在调试某型号伺服电机时,我发现当Kp从1增加到5时,阶跃响应的上升时间从120ms缩短到40ms。但要注意,过大的Kp会导致超调量增加——当Kp超过8时,电机的转速会出现明显的振荡。
这里有个实用技巧:可以先关闭谐振项(设置Kr=0),单独调试Kp。找到系统开始出现轻微振荡的临界值后,取60%-70%作为最终值。比如临界Kp是12时,实际工程中可以取7-8。
Kr决定了谐振峰值的增益。在并网逆变器调试中,Kr=100时对50Hz信号的跟踪误差是0.5%,但将Kr提升到500后误差会降到0.1%。不过代价是系统相位裕度从60°降到35°,在负载突变时容易失稳。
建议采用渐进式调试:
ωc影响着控制器的抗干扰能力。根据IEEE 1547标准,电网频率允许±0.5Hz波动,对应ωc应≤3.14rad/s。但在实际风电变流器项目中,我发现取0.5-1rad/s(对应0.08-0.16Hz)既能保证足够的带宽,又能有效抑制高频噪声。
一个记忆口诀:"ωc取百分一,稳定精度两相宜"。意思是ω0的1%左右通常是个不错的起点。
在DSP中实现时,双线性变换(Tustin)比前向差分更稳定。以TI C2000系列为例,离散化后的差分方程系数可以预先计算:
c复制// 预计算系数(ω0=314, ωc=3.14, Kp=5, Kr=100, Ts=100us)
float a0 = (4*Kp/Ts/Ts + 4*wc*(Kp+Kr)/Ts + Kp*w0*w0);
float a1 = (-8*Kp/Ts/Ts + 2*Kp*w0*w0);
float a2 = (4*Kp/Ts/Ts - 4*wc*(Kp+Kr)/Ts + Kp*w0*w0);
float b0 = (4/Ts/Ts + 4*wc/Ts + w0*w0);
float b1 = (-8/Ts/Ts + 2*w0*w0);
float b2 = (4/Ts/Ts - 4*wc/Ts + w0*w0);
// 归一化系数
float a0_norm = a0/b0;
float a1_norm = a1/b0;
float a2_norm = a2/b0;
float b1_norm = b1/b0;
float b2_norm = b2/b0;
在实际运行中,积分项容易饱和。我在某型号UPS中采用以下抗饱和策略:
对应的代码实现:
c复制// 抗饱和处理
if(fabs(controller_output) > LIMIT){
kr_integrator = 0; // 冻结谐振积分
} else {
error = reference - feedback;
kr_integrator += a1_norm*error - b1_norm*last_output;
}
当实际频率与ω0不匹配时,系统性能会急剧下降。在某个海外项目中,当地电网频率在49.8-50.2Hz波动,我们采用自适应调频策略:
c复制// 实时频率检测
if(crossing_count++ > 20){
actual_freq = 1.0/(2*last_period);
w0 = 2*PI*actual_freq; // 动态调整w0
update_coefficients(); // 重算所有系数
}
在定点DSP(如STM32F334)中,系数量化会导致性能损失。通过以下方法可以改善:
实测表明,Q15格式下谐振峰的增益误差可以控制在3%以内,完全满足大多数应用需求。
对于需要同时抑制多个谐波(如5次、7次)的场景,可以采用并联多个准PR控制器的方式。在某型号APF(有源电力滤波器)中,我们实现了5个谐振峰并联,总CPU开销仅增加15%。