重复控制器的MATLAB/Simulink仿真
在现代电力电子系统中,对电能质量的要求日益严苛。无论是并网逆变器、有源滤波器(APF)还是不间断电源(UPS),用户不再满足于“能工作”,而是追求 电流或电压波形的高度纯净与精确跟踪 。尤其是在非线性负载广泛接入、电网谐波污染加剧的背景下,传统PI控制逐渐暴露出短板——它虽能实现基本调节,却难以彻底消除周期性畸变带来的稳态误差。
这时候,一种源自内模原理的先进控制策略开始崭露头角: 重复控制 (Repetitive Control, RC)。它的设计理念颇具“学习”意味——不是被动响应误差,而是主动记住上一周期的偏差,并在下一个周期加以补偿。这种机制使得它在处理5次、7次等典型电网谐波时表现出色,甚至理论上可在所有谐波频率处提供无限增益,实现无静差抑制。
而借助 MATLAB/Simulink 强大的建模能力,工程师可以在硬件实现前就完成控制器结构设计、参数整定和稳定性分析,极大降低开发风险。本文将带你从零构建一个可运行的重复控制器仿真模型,深入理解其工作逻辑与工程实践中的关键细节。
内模原理:为什么重复控制能“记住”误差?
要真正理解重复控制,必须回到控制理论的核心之一—— 内模原理 。该原理指出:如果一个闭环系统要对外部输入信号实现无静差跟踪(或对扰动完全抑制),那么控制器内部必须包含该信号的动态模型。
对于周期为 $ T_0 $ 的正弦信号,其频域特性是在基波及其各次谐波频率处存在分量。这意味着理想的控制器需要在这些频率点都有极点,才能提供足够的增益来抵消误差。但连续系统中不可能为无穷多个频率都配置极点,这正是传统PI控制无法完美应对多频谐波的原因。
但在离散域中,事情变得有趣起来。一个周期为 $ N $ 个采样点的周期性信号,可以用一个延时环节 $ z^{-N} $ 来描述其周期性特征。如果我们构造一个正反馈回路,把 $ u(k-N) $ 加回到当前输出中,相当于在Z域中引入了形如 $ \frac{1}{1 - z^{-N}} $ 的传递函数——这个系统的单位圆上有 $ N $ 个极点,恰好覆盖了所有谐波频率!
这就是重复控制器的数学本质:通过一个 周期延时正反馈结构 ,在数字控制器中等效实现了针对周期性信号的“内模”。
其基本控制律如下:
$$
u(k) = Q \cdot u(k-N) + K \cdot e(k)
$$
其中:
- $ u(k) $ 是当前时刻的控制输出;
- $ u(k-N) $ 是上一周期同一相位点的输出值;
- $ e(k) $ 是当前误差;
- $ Q $ 是稳定补偿因子(通常略小于1);
- $ K $ 是学习增益,决定收敛速度。
你可能会问:为什么不直接让 $ Q=1 $?那样不是能更彻底地保留历史信息吗?确实如此,但从稳定性角度看,$ Q<1 $ 能有效衰减长期累积的能量,防止因建模误差或外部突变导致系统发散。这是一种典型的鲁棒性权衡。
Simulink 中如何搭建重复控制器?
虽然公式看起来简洁,但在 Simulink 中实现时有几个关键问题需要解决: 如何高效存储一个完整周期的历史控制量?如何保证延时精度?如何加入必要的相位补偿?
核心模块设计思路
最直观的方式是使用 Memory Block + Buffer 组合来实现环形缓冲区。但由于 Simulink 原生不支持动态数组,我们通常采用以下两种方式之一:
方法一:使用 Unit Delay × N 级联(适用于小N)
当采样频率不高或基波频率较高时(例如 $ f_s = 2kHz, f_0=50Hz \Rightarrow N=40 $),可以手动串联 $ N $ 个 Unit Delay 模块构成 $ z^{-N} $。优点是结构清晰,缺点是当 $ N $ 较大时(如 $ N=200 $)会显著增加模型复杂度。
方法二:MATLAB Function Block 实现环形缓冲(推荐)
这是更为灵活且接近实际嵌入式实现的方法。下面是一个经过优化的 MATLAB Function Block 实现代码:
function u_out = repetitive_controller(e_k, index, N, K, Q)
% 重复控制器核心逻辑(无需外部传入buffer,内部persistent维护)
persistent u_buffer;
if isempty(u_buffer)
u_buffer = zeros(N, 1); % 初始化缓冲区
end
% 获取上一周期对应时刻的输出
u_prev = u_buffer(index + 1); % index从0开始,MATLAB索引+1
% 计算当前输出
u_out = Q * u_prev + K * e_k;
% 更新缓冲区
u_buffer(index + 1) = u_out;
% 更新指针(循环)
index = mod(index + 1, N);
💡 提示:此版本省去了
u_buffer的外部传递,利用persistent变量在函数内部保存状态,更符合模块化设计思想。只需向该函数输入当前误差e_k和当前索引index即可。
在 Simulink 模型中,你可以用一个 Counter Free-Running 模块生成 $ 0 \sim N-1 $ 的循环索引,配合 PLL 锁定电网相位后同步复位,确保每个工频周期起始时索引归零。
实际应用案例:单相并网逆变器电流控制
让我们以一个典型的单相并网逆变器为例,看看重复控制是如何提升系统性能的。
控制架构设计
现实中很少单独使用重复控制器,因为它动态响应慢——毕竟它依赖“逐周期学习”。因此最常见的做法是将其与 PI 控制器并联,形成复合控制结构:
参考电流 Ir* —→ [PI控制器] ——————→ +
↘ ↓
→ 加法器 → PWM发生器 → 逆变桥 → L滤波 → 电网
↗ ↑
[重复控制器] ← 误差 e(k)
- PI控制器 :负责快速响应负载变化和启动过程;
- 重复控制器 :专注于稳态下对周期性谐波的精细补偿;
- 两者输出相加,兼顾了动态与稳态性能。
这种结构在工业产品中极为常见,比如高端光伏逆变器和UPS系统。
仿真设置建议
为了验证效果,推荐以下参数配置:
| 参数 | 数值 | 说明 |
|---|---|---|
| 基波频率 $ f_0 $ | 50 Hz | 中国/欧洲标准 |
| 采样频率 $ f_s $ | 10 kHz | 满足至少每周期200点 |
| 每周期采样点数 $ N $ | 200 | $ N = f_s / f_0 $ |
| 学习增益 $ K $ | 0.95 | 初始调试推荐值 |
| 补偿系数 $ Q $ | 0.98 | 平衡精度与稳定性 |
在 Simscape Power Systems 中搭建主电路模型时,注意以下几点:
- 使用理想电压源模拟电网,叠加3%的3次、5次、7次谐波电压用于测试抗扰能力;
- 设置PWM模块载波频率为10kHz,与控制周期一致;
- 添加锁相环(PLL)模块提取电网相位,用于同步重复控制器的计数器;
- 在Scope中观察输出电流波形及FFT分析结果。
如何看出“学习”过程?
重复控制的魅力在于它的“渐进式修正”。在仿真开始后的前几个工频周期内,你会看到输出电流仍存在明显畸变;但随着控制器不断积累误差信息,THD(总谐波畸变率)会逐步下降,大约在第5~10个周期趋于稳定。
举个例子,在仅使用PI控制时,THD可能维持在3%左右;而加入重复控制后,可降至0.8%以下,尤其对5次、7次谐波的抑制效果显著。你可以在Simulink中使用 FFT Analyzer 或 Signal Analyzer 工具对比前后频谱变化。
工程实践中必须面对的设计挑战
尽管理论优美,但在真实系统中部署重复控制仍有不少“坑”。以下是来自实际项目的经验总结:
1. 相位滞后必须补偿,否则必振
重复控制器要求被控对象在各次谐波频率处的相位接近0°,否则延迟 $ z^{-N} $ 会导致相位错位,负反馈变成正反馈,引发振荡。
解决方案是在控制器前端加入 相位超前补偿网络 $ C(z) $。常用形式包括:
- 一阶超前环节:$ C(z) = \frac{z + a}{z + b} $
- FIR型预测器:$ C(z) = c_0 + c_1 z^{+1} + c_2 z^{+2} $
具体参数可通过 MATLAB 的
bode
图辅助设计。目标是使开环相位在 $ f_0, 2f_0, …, (N/2)f_0 $ 处尽可能接近0°。
2. 采样同步至关重要
若采样时钟与电网频率不同步(例如电网频率波动至49.8Hz),则实际周期对应的采样点数不再是整数 $ N $,造成 $ z^{-N} $ 不准,历史误差无法对齐,导致控制失效。
解决办法是使用高性能PLL,并结合 分数延迟滤波器 或 自适应N调整机制 。对于固定频率场景(如UPS内部逆变),也可采用硬件定时器触发中断确保严格同步。
3. 启动阶段怎么办?
初始时刻没有历史数据,重复控制器输出为0,完全依赖PI控制器。此时若负载突加,可能出现较大瞬态偏差。
建议策略:
- 设定一个使能延时(如3个周期后才投入RC);
- 或采用“软启动”机制,让 $ K $ 增益从0逐渐上升至设定值;
- 更高级的做法是预加载典型误差模板作为初始缓冲值。
4. 内存占用与计算资源
当 $ N=200 $ 时,仅需200个浮点数缓存,现代DSP完全可承受。但若应用于三相系统且每相独立控制,则需三组缓冲区;若再叠加多层嵌套控制(如双闭环+谐波补偿),内存压力上升。
优化方向:
- 使用定点运算减少存储开销;
- 采用降维重复控制(如基于dq变换后的直流偏置补偿);
- 探索多速率控制架构,降低高频部分的更新频率。
它比PR控制强在哪?又输在哪里?
在电力电子领域,另一种常用于谐波抑制的技术是 比例谐振控制 (PR控制)。两者都基于内模原理,但路径不同:
| 对比维度 | 重复控制(RC) | PR控制 |
|---|---|---|
| 抑制频率 | 所有谐波(无限增益) | 仅指定频率(如±5次) |
| 参数整定 | 简单(K, Q, N) | 需为每个谐波设参数 |
| 灵活性 | 自动学习未知周期扰动 | 必须预先知道目标频率 |
| 动态响应 | 慢(逐周期收敛) | 快(即时作用) |
| 实现难度 | 中等(需缓存管理) | 简单(标准滤波器结构) |
所以可以说:
- 若你的系统面临多种未知谐波干扰,且稳态精度优先,选
重复控制
;
- 若只关心特定几次谐波,且希望快速响应,
PR控制
更合适。
当然,也有方案将二者结合,比如在外环用RC做整体修正,内环用PR处理主要谐波,进一步提升综合性能。
结语:不只是仿真,更是通往高精度控制的思维跃迁
重复控制器的价值远不止于“降低THD”这一技术指标。它代表了一种 从被动响应到主动学习 的控制哲学转变。在Simulink中成功仿真只是一个起点,真正的挑战在于如何在有限的处理器资源、不确定的工况变化和严格的实时性约束下,将其稳健落地。
未来的发展也令人期待:自适应重复控制可应对电网频率漂移;模糊逻辑增强型RC能处理轻微非周期扰动;结合预测控制的思想,甚至有望突破“慢动态”的固有局限。
掌握重复控制的建模与仿真方法,不仅是学会了一个工具,更是打开了一扇门——通向更高阶、更智能的电力电子控制系统设计之路。当你能在波形中“看见”那个逐周期收敛的学习过程时,你就已经站在了高质量电能变换的前沿阵地。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
84

被折叠的 条评论
为什么被折叠?



