AnyMath 文档
Notebook

实验台上永磁同步电机参数的确定

在使用真实引擎时,经常会发生技术文档中没有指定所有必要的参数。 此示例显示了在永磁同步电机(PMSM)的流量耦合未知时如何确定其反电动势系数和转矩常数。

想象一下,我们有一个真正的电机在发电机模式下运行,在其端子处可以测量电压。 我们将以角速度旋转它的轴:

In [ ]:
angular_velocity = 5; # 高兴/高兴

实验台在模型中呈现 PMSMParameterization.engee 个屏蔽子系统。
与实际实验测量一样,电压信号具有噪声。

PMSMParameterization--1790948367664.png

以下是基于PMSM块(库物理建模/电力/电机/带永磁体)的模型。

我们将在此示例中定义PMSM块的缺失参数。

image_2.png

在单位设置中,您可以选择参数化永久磁铁磁通量的方法**。 你可以问:

*流量耦合 (指定通量联动),
*恒定扭矩 (指定扭矩常数)
*反电动势比 (指定反电动势常数)。

选择设置反电动势系数。 反电动势系数是未知的,所以首先我们将其设置为任意值。:

In [ ]:
Ke = 0.1;  # B*c/高兴。

启动模型:

In [ ]:
engee.addpath(@__DIR__)
if "PMSMParameterization" in [m.name for m in engee.get_all_models()]
    m = engee.open( "PMSMParameterization" ) # 加载模型
else
    m = engee.load( "PMSMParameterization.engee" )
end
results1 = engee.run(m, verbose=true)
Building...
Progress 0%
Progress 5%
Progress 10%
Progress 15%
Progress 20%
Progress 25%
Progress 30%
Progress 35%
Progress 40%
Progress 45%
Progress 50%
Progress 55%
Progress 60%
Progress 65%
Progress 70%
Progress 75%
Progress 80%
Progress 85%
Progress 90%
Progress 95%
Progress 100%
Progress 100%
Out[0]:
SimulationResult(
    run_id => 1,
    "I_exp" => WorkspaceArray{Float64}("PMSMParameterization/I_exp")
,
    "T_exp" => WorkspaceArray{Float64}("PMSMParameterization/T_exp")
,
    "V_model" => WorkspaceArray{Float64}("PMSMParameterization/V_model")
,
    "V_exp" => WorkspaceArray{Float64}("PMSMParameterization/V_exp")
,
    "I_model" => WorkspaceArray{Float64}("PMSMParameterization/I_model")

)

从模型读取数据:

In [ ]:
t = collect(results1["V_exp"]).time;             # 时间
V_model  = collect(results1["V_model"]).value;   # 在PMSM模型中测量的电压
V_exp = collect(results1["V_exp"]).value;        # 实验装置的电压C

让我们绘制实验电机a相绕组*上的电压及其模型。 电压幅值变化显着,因为反电动势系数的值是 任意设置。

In [ ]:
using Plots
plotlyjs();
plot(t, V_exp, title="实验", xlabel="时间,c", ylabel="电压,V", w = 2, label="实验设置")
plot!(t, V_model, title="模型", xlabel="时间,c", ylabel="电压,V", w = 2, label="PMSM模型")
Out[0]:

反电动势系数的计算

反电动势系数 它可以使用公式计算:


-a相绕组上电压的峰值;
-转子的旋转角速度。

该公式对于定子绕组中的可忽略电流有效。 在模型中,每个相通过电阻连接到地 欧姆,这使得测量条件更接近开路模式。

峰值电压值 估计为信号的最大值和最小值之差的一半。 为了降低高频噪声的影响,我们对测量电压进行了预滤波。

In [ ]:
# 测电压信号的滤波:
using DSP
window_size = 100;
# A相绕组两端峰值电压的计算
V_exp_filt = filt(ones(window_size) / window_size, 1, V_exp);
V_a_peak = (maximum(V_exp_filt)-minimum(V_exp_filt))/2;

计算反电动势系数:

In [ ]:
Ke = V_a_peak / angular_velocity;
println("Коэффициента противо-ЭДС: $Ke В∙с/рад")
Коэффициента противо-ЭДС: 0.18476486146112153 В∙с/рад

让我们用反电动势系数的计算值运行模型。

In [ ]:
results2 = engee.run(m, verbose=true)
Building...
Progress 0%
Progress 5%
Progress 10%
Progress 15%
Progress 20%
Progress 25%
Progress 30%
Progress 35%
Progress 40%
Progress 45%
Progress 50%
Progress 55%
Progress 60%
Progress 65%
Progress 70%
Progress 75%
Progress 80%
Progress 85%
Progress 90%
Progress 95%
Progress 100%
Progress 100%
Out[0]:
SimulationResult(
    run_id => 2,
    "I_exp" => WorkspaceArray{Float64}("PMSMParameterization/I_exp")
,
    "T_exp" => WorkspaceArray{Float64}("PMSMParameterization/T_exp")
,
    "V_model" => WorkspaceArray{Float64}("PMSMParameterization/V_model")
,
    "V_exp" => WorkspaceArray{Float64}("PMSMParameterization/V_exp")
,
    "I_model" => WorkspaceArray{Float64}("PMSMParameterization/I_model")

)
In [ ]:
if "PMSMParameterization" in [m.name for m in engee.get_all_models()]
    m = engee.open("PMSMParameterization") # 加载模型
else
    m = engee.load("PMSMParameterization.engee")
end
results2 = engee.run(m, verbose=true)
Building...
Progress 0%
Progress 5%
Progress 10%
Progress 15%
Progress 20%
Progress 25%
Progress 30%
Progress 35%
Progress 40%
Progress 45%
Progress 50%
Progress 55%
Progress 60%
Progress 65%
Progress 70%
Progress 75%
Progress 80%
Progress 85%
Progress 90%
Progress 95%
Progress 100%
Progress 100%
Out[0]:
SimulationResult(
    run_id => 3,
    "I_exp" => WorkspaceArray{Float64}("PMSMParameterization/I_exp")
,
    "T_exp" => WorkspaceArray{Float64}("PMSMParameterization/T_exp")
,
    "V_model" => WorkspaceArray{Float64}("PMSMParameterization/V_model")
,
    "V_exp" => WorkspaceArray{Float64}("PMSMParameterization/V_exp")
,
    "I_model" => WorkspaceArray{Float64}("PMSMParameterization/I_model")

)

从模型读取数据:

In [ ]:
t = collect(results2["V_exp"]).time;             # 时间
V_model  = collect(results2["V_model"]).value;   # 在PMSM模型中测量的电压
V_exp = collect(results2["V_exp"]).value;        # 实验装置的电压C
In [ ]:
plot(t, V_exp, title="实验", xlabel="时间,c", ylabel="电压,V", w = 2, label="实验设置")
plot!(t, V_model, title="模型", xlabel="时间,c", ylabel="电压,V", w = 2, label="PMSM模型")
Out[0]:

计算反电动势系数后,实验电机a相绕组上的电压与模型形状和幅值相似。

扭矩常数的计算

将流动耦合参数化的另一种方法是在PMSM单元设置中选择转矩常数以进行*永磁体磁通联动参数化 (指定扭矩常数)。
在本例中,我们不会在模型中更改此设置,而是考虑计算扭矩常数的过程。:

扭矩常数也可用于对流动耦合进行参数化。 . 要做到这一点,在参数参数化永磁体的磁通量选择一个选项扭矩常数。 在本例中,我们将保留所选的参数化方法,但计算 基于测量结果:

-绕组中的峰值电流值a相 ;

-施加在电机轴上的扭矩。

从模型读取数据:

In [ ]:
I_model  = collect(results2["I_model"]).value;   # 在PMSM模型中测量的电流
I_exp = collect(results2["I_exp"]).value;        # 来自实验装置的电流
T_exp = collect(results2["T_exp"]).value;        # 真正引擎上的时刻
In [ ]:
using Statistics
T = abs(mean(T_exp));
window_size = 1000;
I_exp_filt = filt(ones(window_size) / window_size, 1, I_exp);
I_exp_peak = (maximum(I_exp_filt)-minimum(I_exp_filt))/2;
Kt = 2/3*T/I_exp_peak;
println("Константа крутящего момента: $Kt Н∙м/А")
Константа крутящего момента: 0.1816540795303888 Н∙м/А

让我们比较实验电机的a相绕组中的电流和模型:

In [ ]:
plot(t, I_exp, title="实验", xlabel="时间,c", ylabel="电流,A", w = 2, label="实验设置")
plot!(t, I_model, title="模型", xlabel="时间,c", ylabel="电流,A", w = 2, label="PMSM模型")
Out[0]:

计算的反电动势系数和扭矩常数具有相似的数值。: 和 由于它们与永磁体的磁通耦合有关 通过数对电机极 :