Engee 文档
Notebook

AFE 有源整流器运行建模与分析

本案例研究专门对 AFE(有源前端)整流器进行建模和分析,包括研究其控制算法、消耗和能量回收模式。基于 Engee 仿真,AFE 的主要优势得以体现:保持功率因数接近 1,将电流谐波畸变率降低至 5.8%,并稳定直流链路的电压。这项工作的成果对电力电子系统、高能效交通和工业电力驱动装置的设计者具有重要意义,因为在这些领域需要采用现代方法来控制能量流并最大限度地减少对电网的影响。

引言

有源前端(AFE)整流器是一种有源电子装置,用于将交流电转换为直流电,具有较高的功率因数和最小的谐波失真。它的诞生与 20 世纪 80 年代以来电力电子技术的发展有关,当时西门子、ABB、丹佛斯等公司开始引入 IGBT 和数字控制系统。与无源二极管整流器相比,AFE 使用 "在电网上 "工作的 IGBT,这确保了变流器的双向性:不仅可以从电网消耗能量,还可以将能量返回,例如在再生制动时。

AFE 整流器可用于工业驱动、可再生能源系统、交通运输(电动火车、地铁、电动公共汽车)和能源密集型工业(轧钢厂、数据中心)。例如,在地铁中,AFE 可将制动能量回收到电网中,从而降低总体能耗。这种整流器的主要优点是效率高、结构紧凑、降低电网噪音,并能在电压不稳定的情况下工作。这些特点使其在需要智能能源管理和环境可持续性的现代系统中不可或缺。

型号示例

本例中考虑的模型Active_front_end.engee 是由其类似模型Active_front_end.slx [1] 重新创建的。

image_2.png

电源部分由以下元件组成。

  • 三相电压源$U_{ЛИН\, rms}=220\, В$ 。
  • 测量相电压和电流的单元。
  • 带有电阻$R_ф=1\, Ом$ 和电感$L_ф=10\, мГн$ 的电缆线。
  • 桥式三相转换器Converter ,NPN-IGBT,带反向二极管,顶键由集电极接入三相网络,反向二极管作为整流器组。
  • 直流链路电容器的电容值为$С_к = 4700\, мкФ$ 。
  • 直流链路中的最小有功负载为电阻器,其电阻值为$R_1=100\, Ом$ 。
  • 直流链路中连接的有功负载为电阻器,电阻值为$R_2=100\, Ом$ 。
  • 在直流链路中连接反电动势,其值为$V_{brk}=750\, В$ ,电阻为$R_3=10\, Ом$ - 制动模拟。
  • 直流链路中的电压表。

负载$R_2$ 在$1.0\, с$ 模型时间打开,在$2.0\, с$ 关闭。计数器-EDS 电路在$3.0\, с$ 接通。

AFE 算法可在整流器的所有运行模式下工作。

AFE 工作原理说明

IGBT 逆变器 (Converter) 从 PWM 发生器模块 (PWM Generator) 接收 PWM 控制信号。PWM 参考信号是频率为$f_{PWM}=5\, кГц$ 的三角形信号。PWM 发生器参考信号是三相坐标系中的相电压$V_{abc\,ue}^*$ $abc$ :

$$V_{abc\,ue}^*=\frac{1}{8000}\cdot V_{abc}^*.$$

反过来,通过帕克-戈列夫逆变换 从$V_{abc}^*$ 得出$V_{dq}^*$

$$V_{abc}^* = \left[ \begin{matrix} \sin (\theta) & \cos (\theta) & 1 \\ \sin (\theta-\frac{2\pi}{3}) & \cos (\theta-\frac{2\pi}{3}) & 1 \\ \sin (\theta+\frac{2\pi}{3}) & \cos (\theta+\frac{2\pi}{3}) & 1 \\ \end{matrix} \right]\times V_{dq}^*,$$

其中$V_{dq}^*=\left[ \begin{matrix} V_{d}^* \\ V_{q}^* \\ 0 \\ \end{matrix} \right]$ 是旋转坐标系中的设定电压$dq0$ 、
$\theta$ - 旋转坐标系的旋转角度,由块PLL 中的相频自整定(PFA)计算得出。

这些分量由以下表达式确定:

$$V_{d}^*=V_d + 2 \pi \cdot f_0 \cdot L_ф \cdot I_{q} - V_{PI\,d}^*$$ $$V_{q}^*=V_q - 2 \pi \cdot f_0 \cdot L_ф \cdot I_{d} - V_{PI\,q}^*$$

这里: $f_0=50\,Гц$ - 电源电压的基本谐波; *$V_d,\,V_q$ - 在旋转坐标系中测得的电压$dq0$ ; *$I_{d},\,I_{q}$ - 在旋转坐标系中测量的相电流$dq0$ ; *$V_{PI,d}^,,V_{PI,q}^*$ - 旋转坐标系中 PI 电流控制器`Current Controller` 的输出电压$dq0$ ;

电压$V_d,\,V_q$ 和电流$I_{d},\,I_{q}$ 是通过Park-Gorev 直接转换 模块从测量的相电流和电压$V_a,\,V_b,\,V_c$ 和$I_a,\,I_b,\,I_c$ 得到的:

$$ \left[ \begin{matrix} V_d \\ V_q \\ 0 \\ \end{matrix} \right] = \frac{2}{3}\cdot \left[ \begin{matrix} \sin (\theta) & \sin (\theta-\frac{2\pi}{3}) & \sin (\theta+\frac{2\pi}{3}) \\ \cos (\theta) & \cos (\theta-\frac{2\pi}{3}) & \cos (\theta+\frac{2\pi}{3}) \\ \frac{1}{2} & \frac{1}{2} & \frac{1}{2} \\ \end{matrix} \right] \times \left[ \begin{matrix} V_a \\ V_b \\ V_c \\ \end{matrix} \right], $$ $$ \left[ \begin{matrix} I_d \\ I_q \\ 0 \\ \end{matrix} \right] = \frac{2}{3}\cdot \left[ \begin{matrix} \sin (\theta) & \sin (\theta-\frac{2\pi}{3}) & \sin (\theta+\frac{2\pi}{3}) \\ \cos (\theta) & \cos (\theta-\frac{2\pi}{3}) & \cos (\theta+\frac{2\pi}{3}) \\ \frac{1}{2} & \frac{1}{2} & \frac{1}{2} \\ \end{matrix} \right] \times \left[ \begin{matrix} I_a \\ I_b \\ I_c \\ \end{matrix} \right]. $$

PI 电流控制器Current Controller 获取旋转坐标系中测量电流信号与设定电流信号之间的差值$dq0$ :

$$\Delta I_d=I_d^*-I_d,$$ $$\Delta I_q=I_q^*-I_q.$$

设定电流在轴上的投影$D$,$I_d^*$ 是电压 PI 控制器Voltage Controller 的调节结果。它接收直流链路中测量电压值和设定电压值的差值:

$$\Delta V_{DC}=V_{DC}^*-V_{DC},$$ $$V_{DC}^*=600\,В.$$

设定点电流在轴上的投影$Q$,$I_q^*$ 设置为等于$0$ ,以形成$PF=1$

上图所示的 AFE 控制系统以框图的形式再现了上述关系。

建模

通过软件控制,我们运行了示例模型,并将模拟结果写入变量simout

In [ ]:
модель = engee.load("/user/start/examples/power_systems/active_front_end_rectifier/Active_front_end.engee", force = true);     # Загружаем модель
engee.run(модель);                                           # Выполняем модель и сохраняем данные

运行模型后,关闭模型并继续进行信号分析。

In [ ]:
engee.close(модель; force=true);

分析记录的信号

从模型记录的信号中,我们可以提取模拟时间、A 相电流和电压、直流链路电压等信号:

In [ ]:
t = simout["Active_front_end/Va"].time;
Va = simout["Active_front_end/Va"].value;
Ia = simout["Active_front_end/Ia"].value;
Vdc = simout["Active_front_end/Vdc"].value;

输出 A 相电流和电压在 AFE 不同运行模式下的振荡图:正常负载消耗、增加负载消耗和再生。

In [ ]:
using Plots; gr()

start = Int(1e6÷5*0.5);
start_load = Int(1e6÷5);
start_recup = Int(1e6÷5*3); 
stop = Int(1e6÷5/50*5);

usual = start:start+stop
load = start_load:start_load+stop
recup = start_recup:start_recup+stop;

plot_usual = plot(t[usual], [Ia[usual], Va[usual]]; label=["Ia⋅13, А" "Va, В"], title = "Обычная нагрузка")
plot_load = plot(t[load], [Ia[load], Va[load]]; label=["Ia⋅13, А" "Va, В"], title = "Повышенная нагрузка")
plot_recup = plot(t[recup], [Ia[recup], Va[recup]]; label=["Ia⋅13, А" "Va, В"], title = "Рекуперация")

plot(plot_usual, plot_load, plot_recup;
     size=(1200,300), legend = :topright, xlabel = "Время, с", ylabel = "Напряжение, ток", layout=(1,3))
Out[0]:

从这些振荡图可以看出,在消耗模式下,电流和电压的相位一致,消耗/产生的电流形状接近正弦波,而在再生模式下,电流和电压的相位颠倒。后者意味着,AFE 可将制动能量再生到网络中(通过加入直流链路计数器-EDS 进行模拟)。

根据下面的直流链路电压图,可以得出结论:在不同的 AFE 运行模式下,电压水平稳定并等于$V_{DC}^*=600\, В$ 的设定电压。

In [ ]:
gr(); plot(t[1:2000:end], Vdc[1:2000:end]; legend=:none, title = "Напряжение в звене постоянного тока")
Out[0]:

功率因数分析

安装和连接分析所需的库

In [ ]:
import Pkg; Pkg.add(["FFTW", "LinearAlgebra"]);
using FFTW, LinearAlgebra;

除了维持直流链路电压和向电网提供能量回收外,AFE 整流器还能补偿无功功率消耗,将功率因数$(PF,\, \cos\phi)$ 提高到接近 1。根据获得的数据(A 相电压和电流),计算并分析每个电压周期的功率因数。

In [ ]:
# Подключим функцию расчёта коэффициента мощности для каждого периода входных векторов тока и напряжения
include("/user/start/examples/power_systems/active_front_end_rectifier/pf_calculation.jl");
# Расчет коэффициентов
коэффициенты_мощности = calculate_power_factor(Vector(Va), Vector(Ia));
In [ ]:
# Построим интерактивный график коэффициента мощности
plotlyjs();
plot(0:0.02:3.98, коэффициенты_мощности;
    legend=:none, title="Коэффициент мощности", ylabel="cos(ϕ), о.е.")
Out[0]:

从获得的功率因数图中,我们可以判断出以下几点:

  • 在从电网消耗能源的模式下,$(PF > 0)$ AFE 提供$PF \approx 1$ ,与负载水平无关;
  • 在向电网回收能量的模式下,$(PF < 0)$ AFE 提供$PF \approx -1$ ;

AFE 运行期间的谐波失真分析

使用 AFE 有源整流器的另一个不可否认的优势是可以减少消耗和再生模式下的电流谐波失真。上述电流振荡图显示,与消耗模式相比,再生模式下的信号与正弦波形的差异更大。此外,在载波频率的某些周期内,谐波失真会比整个工作模式下更为明显。因此,为了估算电流和电压的最大总谐波失真,我们将以再生模式下电源电压$f_0=50\,Гц$ 的基波谐波的一个周期为基准。

In [ ]:
# Подключим функцию для расчёта THD и гармонического спектра
# Скрипт также устанавливает и подключает требуемые библиотеки (FFTW.jl, LinearAlgebra.jl)
include("/user/start/examples/power_systems/active_front_end_rectifier/thd_calculation.jl");
In [ ]:
# Зададим начальные условия
start_recup = Int(1e6÷5*3.02);  # Начальная точка анализа
stop = Int(1e6÷5*3.04);         # Конечная точка анализа

sample_rate = Int(1e6÷5)        # Частота дискретизации, Гц
f_base = 50;                    # Частота базовой гармоники, Гц
n_max = 40;                     # Наибольший порядок искажающей гармоники
In [ ]:
# Получим результаты анализа THD и гармонических спектров
result_Ia = calculate_thd(Ia[start_recup:stop], sample_rate, n_max, f_base);
result_Va = calculate_thd(Va[start_recup:stop], sample_rate, n_max, f_base);
In [ ]:
# Построим гармонические спектры тока и напряжения, выведем значения THD
gr();

let
    # График гармонического спектра тока
    plot(result_Ia.frequencies, result_Ia.amplitudes, 
        label="Спектр тока", linewidth=2)

    # График гармонического спектра напряжения
    plot!(result_Va.frequencies, result_Va.amplitudes, 
        label="Спектр напряжения", linewidth=1,
        seriestype=:path, linestyle=:dash, color=:black)

    # Маркер амплитуды базовой гармоники
    scatter!([result_Ia.frequencies[result_Ia.fundamental_idx]], 
            [result_Ia.amplitudes[result_Ia.fundamental_idx]],
            label="Базовая гармоника", markersize=4, color=:red)
    vline!([result_Ia.frequencies[result_Ia.fundamental_idx]], 
            linestyle=:dash, color=:gray, label=:none)

    # Маркеры амплитуд гармоник высших порядков
    if !isempty(result_Ia.frequencies[result_Ia.harmonic_indices])
        scatter!(result_Ia.frequencies[result_Ia.harmonic_indices], 
                result_Ia.amplitudes[result_Ia.harmonic_indices],
                label="Высшие гармоники", markersize=4, color=:green)
        vline!(result_Ia.frequencies[result_Ia.harmonic_indices],
              linestyle=:dash, color=:gray, label=:none)
    end
    
    # Настройки отображения
    xlims!(0, n_max)
    xticks!(1:2:n_max)
    display(plot!(yscale=:log; xlabel="Частота, (Гц)", ylabel="Амплитуда, log(A)",
            title="Гармонический анализ", legend=:bottom,))

    # Вывод значений суммарных гармонических искажений напряжения и тока
    println("THD_v: ", round(result_Va.thd, digits=2), " %")
    println("THD_i: ", round(result_Ia.thd, digits=2), " %")
end
THD_v: 0.01 %
THD_i: 5.8 %

以对数幅值表示谐波频谱的方法并不经典,但却能最直观地显示分析信号的频谱组成。从获得的数据中,我们可以判断出以下几点:

  • 电流谐波失真总水平$THD_{I\,\%}=5.82\, \%$ ,因此,AFE 完全可以减少来自不受控整流器的电流谐波失真。
  • 电流频谱上最明显的谐波属于$n=k\cdot m\pm 1,\, k \in\mathbb{N}^*$ ,其中$m=6$ 是整流电路的脉冲速率。

结论

一项案例研究利用 Engee 模拟了 AFE 整流器的运行,证实了该设备即使在再生模式下也能保持接近 1 的功率因数,并将电流谐波失真降至 5.8%。研究表明,该系统能在负载变化的情况下将直流链路电压稳定保持在给定水平(如 800 V),从而证明了双向能量管理的有效性。结果证实,AFE 能显著降低无功功率和电磁干扰,这对耗电设施(地铁、工业驱动装置)至关重要。

使用的电源

  1. Ricardo Palma (2025)。有源前端整流器 (https://www.mathworks.com/matlabcentral/fileexchange/63357-active-front-end-rectifier), MATLAB Central File Exchange.2025 年 4 月 29 日检索。