AnyMath 文档
Notebook

根据护照数据检查永磁同步电机的参数

此示例显示了基于PMSM单元的永磁同步电机的两个测试绑定。 第一个电路允许您检查额定模式下的速度和扭矩,并计算发动机的效率。 第二电路设计用于检查转子锁定时的扭矩。

模型参数

让我们从引擎的技术文档中设置参数。 我们将根据它们计算扭矩常数,标称相电流的幅度和电气频率。 额定电流设为电流值,转子锁定时的电流为峰值电流。

在PMSM块中,选项被选择为永磁体磁通量的参数参数化****扭矩常数。 参数 R 和 L 定子相的有功电阻和定子相的本征电感。

In [ ]:
nPolePairs = 2;          # 对极数
iRated = 2.5;            # 额定相电流的有效值,以及
rpmRated = 7500;         # 额定转速,rpm
torqueRated = 0.07;      # 额定轴扭矩,N*m
torqueStall = 0.28;      # 转子锁定时的扭矩,NM
R = 3.43;                # 定子相的有源电阻,欧姆
L = 0.53e-3;             # 定子的固有相电感,Gn
iStall = 8.5;            # 转子阻塞时的峰值相电流,以及
freqStall = 1e-9 / 60 * nPolePairs;  # 电流源频率,Hz

torqueConstant = 2 / 3 * torqueStall / iStall;  # 扭矩常数,N*m/A
iNom = sqrt(2) * iRated;                        # 额定相电流的幅值,A
freq = rpmRated / 60 * nPolePairs;              # 电气频率,Hz

模型处于标称模式

nom_pmsm_motor_mode。工程师
image.png

在模型中 nom_pmsm_motor_mode.engee 粘性摩擦、静息摩擦和干摩擦都被考虑在内。 我们将设置相应的参数:

In [ ]:
viscousDamping = 1.13e-6;             # 粘性摩擦系数,N*m/(rad/s)
staticFriction = 7e-4;                # 静止摩擦力矩,nm
coulFriction = 0.8 * staticFriction;  # 干摩擦矩,N*m

一个额外的旋转阻尼器在轴上产生负载. 让我们计算它的系数,以便在标称转速下,负载力矩等于标称扭矩。:

In [ ]:
kDamp = torqueRated / (rpmRated * 2 * pi / 60);  # 载荷阻尼系数,N*m/(rad/s)

让我们将计算出的转速和轴扭矩与标称值进行比较,并确定发动机的效率。

参数检查和效率计算

下载并运行模型 nom_pmsm_motor_mode.engee:

In [ ]:
engee.addpath(@__DIR__)
if "nom_pmsm_motor_mode" in [m.name for m in engee.get_all_models()]
    m = engee.open("nom_pmsm_motor_mode")
else
    m = engee.load("nom_pmsm_motor_mode.engee")
end
nom_results = engee.run(m, verbose=true)
Building...
Progress 0%
Progress 8%
Progress 40%
Progress 69%
Progress 92%
Progress 100%
Progress 100%
Out[0]:
SimulationResult(
    run_id => 19,
    "i_c" => WorkspaceArray{Float64}("nom_pmsm_motor_mode/i_c")
,
    "i_b" => WorkspaceArray{Float64}("nom_pmsm_motor_mode/i_b")
,
    "A" => WorkspaceArray{Float64}("nom_pmsm_motor_mode/A")
,
    "W" => WorkspaceArray{Float64}("nom_pmsm_motor_mode/W")
,
    "T" => WorkspaceArray{Float64}("nom_pmsm_motor_mode/T")
,
    "v_b" => WorkspaceArray{Float64}("nom_pmsm_motor_mode/v_b")
,
    "v_a" => WorkspaceArray{Float64}("nom_pmsm_motor_mode/v_a")
,
    "v_c" => WorkspaceArray{Float64}("nom_pmsm_motor_mode/v_c")
,
    "i_a" => WorkspaceArray{Float64}("nom_pmsm_motor_mode/i_a")

)

仿真结果得到的角速度、转矩、相电流和线电压。 信号 v_a, v_b 和 v_c 对应于相a–b、b–c和c-a之间的电压:

In [ ]:
t_nom = collect(nom_results["W"]).time;       # 时间,从
W_nom = collect(nom_results["W"]).value;      # 轴的角速度,rad/s
T_nom = collect(nom_results["T"]).value;      # 轴扭矩,NM
Ia_nom = collect(nom_results["i_a"]).value;   # A相中的电流,以及
Ib_nom = collect(nom_results["i_b"]).value;   # B、a相电流
Ic_nom = collect(nom_results["i_c"]).value;   # C相电流,A
Vab_nom = collect(nom_results["v_a"]).value;  # 线电压a-B,V
Vbc_nom = collect(nom_results["v_b"]).value;  # 线路电压b-c,V
Vca_nom = collect(nom_results["v_c"]).value;  # 线电压c-a,V

使用公式计算电功率 .

机械功率使用公式计算 .

为了估计效率,我们使用了标称模式建立时最后一个电气模拟周期内的平均功率之比。:

In [ ]:
using Statistics
electricalPower = Ia_nom .* Vab_nom - Ic_nom .* Vbc_nom;
mechanicalPower = W_nom .* T_nom;
steady = t_nom .>= t_nom[end] - 1 / freq;
efficiency = 100 * mean(mechanicalPower[steady]) / mean(electricalPower[steady]);
println("КПД в номинальном режиме: $(round(efficiency, digits=2)) %")
КПД в номинальном режиме: 45.97 %

让我们绘制轴速并将仿真结果与标称值进行比较。 对于图形,我们将角速度从rad/s转换为rpm:

In [ ]:
using Plots
plotlyjs();
In [ ]:
plot(t_nom, 60 / (2 * pi) * W_nom, title="轴旋转速度", xlabel="时间,从", ylabel="Частота вращения, об/мин", w = 2, label="PMSM模型")
plot!(t_nom, fill(rpmRated, length(t_nom)), w = 2, linestyle=:dash, label="名义价值")
Out[0]:

让我们将轴扭矩与标称值进行比较:

In [ ]:
plot(t_nom, T_nom, title="轴扭矩", xlabel="时间,从", ylabel="扭矩,NM", w = 2, label="PMSM模型")
plot!(t_nom, fill(torqueRated, length(t_nom)), w = 2, linestyle=:dash, label="名义价值")
Out[0]:

让我们绘制定子三相的电流:

In [ ]:
plot(t_nom, [Ia_nom Ib_nom Ic_nom], title="相电流", xlabel="时间,从", ylabel="电流,A", w = 2, label=["A阶段" "B阶段" "C期"])
Out[0]:

在过渡过程之后,轴转速和扭矩接近标称值。 相电流图显示了获得该模式的电流。

具有锁定转子的模型

stall_pmsm_motor_mode。工程师
image.png

在模型中 stall_pmsm_motor_mode.engee 转子是静止的。 让我们检查给定峰值相电流下的扭矩。

下载并运行模型 stall_pmsm_motor_mode.engee:

In [ ]:
if "stall_pmsm_motor_mode" in [m.name for m in engee.get_all_models()]
    m = engee.open("stall_pmsm_motor_mode")
else
    m = engee.load("stall_pmsm_motor_mode.engee")
end
stall_results = engee.run(m, verbose=true)
Building...
Progress 0%
Progress 10%
Progress 84%
Progress 100%
Progress 100%
Out[0]:
SimulationResult(
    run_id => 20,
    "T" => WorkspaceArray{Float64}("stall_pmsm_motor_mode/T")

)

来自仿真结果的扭矩:

In [ ]:
t_stall = collect(stall_results["T"]).time;   # 时间,从
T_stall = collect(stall_results["T"]).value;  # 转子锁定时的扭矩,NM

让我们将锁定转子扭矩与技术文档中的值进行比较。:

In [ ]:
plot(t_stall, T_stall, title="转子锁定时的扭矩", xlabel="时间,从", ylabel="扭矩,NM", w = 2, label="PMSM模型")
plot!(t_stall, fill(torqueStall, length(t_stall)), w = 2, linestyle=:dash, label="文档中的价值")
Out[0]:

计算出的转子锁定扭矩接近技术文档中的值。 与检查额定模式一起,这允许您评估所选发动机参数的一致性。