Документация Engee
Notebook

Проверка параметров синхронного двигателя с постоянными магнитами по паспортным данным

В этом примере показаны две тестовых обвязки синхронного двигателя с постоянными магнитами (СДПМ) на основе блока PMSM. Первая схема позволяет проверить частоту вращения и крутящий момент в номинальном режиме и рассчитать КПД двигателя. Вторая схема предназначена для проверки крутящего момента при заблокированном роторе.

Параметры модели

Зададим параметры из технической документации на двигатель. Постоянную крутящего момента, амплитуду номинального фазного тока и электрическую частоту рассчитаем на их основе. Номинальный ток задан действующим значением, а ток при заблокированном роторе — пиковым.

В блоке PMSM для параметра Параметризация магнитного потока постоянных магнитов выбран вариант Постоянная крутящего момента. Параметры R и L задают активное сопротивление фазы статора и собственную индуктивность фазы статора.

In [ ]:
nPolePairs = 2;          # Число пар полюсов
iRated = 2.5;            # Действующее значение номинального фазного тока, А
rpmRated = 7500;         # Номинальная частота вращения, об/мин
torqueRated = 0.07;      # Номинальный крутящий момент на валу, Н·м
torqueStall = 0.28;      # Крутящий момент при заблокированном роторе, Н·м
R = 3.43;                # Активное сопротивление фазы статора, Ом
L = 0.53e-3;             # Собственная индуктивность фазы статора, Гн
iStall = 8.5;            # Пиковый фазный ток при заблокированном роторе, А
freqStall = 1e-9 / 60 * nPolePairs;  # Частота источников тока, Гц

torqueConstant = 2 / 3 * torqueStall / iStall;  # Постоянная крутящего момента, Н·м/А
iNom = sqrt(2) * iRated;                        # Амплитуда номинального фазного тока, А
freq = rpmRated / 60 * nPolePairs;              # Электрическая частота, Гц

Модель в номинальном режиме

nom_pmsm_motor_mode.engee
image.png

В модели nom_pmsm_motor_mode.engee учитываются вязкое трение, трение покоя и сухое трение. Зададим соответствующие параметры:

In [ ]:
viscousDamping = 1.13e-6;             # Коэффициент вязкого трения, Н·м/(рад/с)
staticFriction = 7e-4;                # Момент трения покоя, Н·м
coulFriction = 0.8 * staticFriction;  # Момент сухого трения, Н·м

Нагрузку на валу создаёт дополнительный вращательный демпфер. Рассчитаем его коэффициент так, чтобы при номинальной частоте вращения момент нагрузки был равен номинальному крутящему моменту:

In [ ]:
kDamp = torqueRated / (rpmRated * 2 * pi / 60);  # Коэффициент демпфирования нагрузки, Н·м/(рад/с)

Сравним рассчитанные частоту вращения и крутящий момент на валу с номинальными значениями, а также определим КПД двигателя.

Проверка параметров и расчёт КПД

Загрузим и запустим модель 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;      # Угловая скорость вала, рад/с
T_nom = collect(nom_results["T"]).value;      # Крутящий момент на валу, Н·м
Ia_nom = collect(nom_results["i_a"]).value;   # Ток в фазе a, А
Ib_nom = collect(nom_results["i_b"]).value;   # Ток в фазе b, А
Ic_nom = collect(nom_results["i_c"]).value;   # Ток в фазе c, А
Vab_nom = collect(nom_results["v_a"]).value;  # Линейное напряжение a–b, В
Vbc_nom = collect(nom_results["v_b"]).value;  # Линейное напряжение b–c, В
Vca_nom = collect(nom_results["v_c"]).value;  # Линейное напряжение c–a, В

Рассчитаем электрическую мощность по формуле .

Механическая мощность рассчитывается по формуле .

Для оценки КПД используем отношение средних мощностей за последний электрический период моделирования, когда номинальный режим установился:

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 %

Построим график частоты вращения вала и сравним результат моделирования с номинальным значением. Для графика переведём угловую скорость из рад/с в об/мин:

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="Крутящий момент, Н·м", 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="Ток, А", w = 2, label=["Фаза a" "Фаза b" "Фаза c"])
Out[0]:

После переходного процесса частота вращения вала и крутящий момент приближаются к номинальным значениям. Графики фазных токов показывают токи, при которых получен этот режим.

Модель с заблокированным ротором

stall_pmsm_motor_mode.engee
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;  # Крутящий момент при заблокированном роторе, Н·м

Сравним крутящий момент при заблокированном роторе со значением из технической документации:

In [ ]:
plot(t_stall, T_stall, title="Крутящий момент при заблокированном роторе", xlabel="Время, с", ylabel="Крутящий момент, Н·м", w = 2, label="Модель PMSM")
plot!(t_stall, fill(torqueStall, length(t_stall)), w = 2, linestyle=:dash, label="Значение из документации")
Out[0]:

Рассчитанный крутящий момент при заблокированном роторе близок к значению из технической документации. Совместно с проверкой номинального режима это позволяет оценить согласованность выбранных параметров двигателя.