Определение параметров PMSM на экспериментальном стенде
Определение параметров синхронного двигателя с постоянными магнитами (PMSM) на экспериментальном стенде
При работе c реальными двигателями часто бывает, что в технической документации указаны не все необходимые параметры. В этом примере показано, как определить коэффициент противо-ЭДС и постоянную крутящего момента синхронного двигателя с постоянными магнитами (PMSM), если его потокосцепление неизвестно.
Представим, что у нас есть реальный двигатель, работающий в режиме генератора, на выводах которого можно измерить напряжение. Будем вращать его вал с угловой скоростью:
angular_velocity = 5; # рад/с
Экспериментальный стенд представлен в модели PMSMParameterization.engee маскированной подсистемой.
Как и при реальных экспериментальных измерениях, сигнал напряжения зашумлен.

Ниже показана модель на основе блока PMSM (библиотека Физическое моделирование/Электричество/Электрические машины/С постоянными магнитами).
Недостающие параметры блока PMSM мы определим в этом примере.

В настройках блока можно выбрать способ Параметризации магнитного потока постоянных магнитов. Можно задать:
- потокосцепление (Specify flux linkage),
- постоянную крутящего момента (Specify torque constant)
- коэффициент противо-ЭДС (Specify back EMF constant).
Выберем Задать коэффициент противо-ЭДС. Коэффициент противо-ЭДС неизвестен, поэтому сначала зададим ему произвольное значение:
Ke = 0.1; # В*с/рад.
Запуск модели:
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)
Чтение данных из модели:
t = collect(results1["V_exp"]).time; # Время
V_model = collect(results1["V_model"]).value; # Напряжение измеренное в модели PMSM
V_exp = collect(results1["V_exp"]).value; # Напряжение c экспериментальной установки
Построим графики напряжения на обмотке фазы a экспериментального двигателя и его модели. Амплитуды напряжений заметно различаются, поскольку значение коэффициента противо-ЭДС задано произвольно.
using Plots
plotlyjs();
plot(t, V_exp, title="Эксперимент", xlabel="Время, c", ylabel="Напряжение, В", w = 2, label="Экспериментальная установка")
plot!(t, V_model, title="Модель", xlabel="Время, c", ylabel="Напряжение, В", w = 2, label="Модель PMSM")
Расчет коэффициента противо-ЭДС
Коэффициент противо-ЭДС можно рассчитать по формуле:
– пиковое значение напряжения на обмотке фазы a;
– угловая скорость вращения ротора.
Формула справедлива при пренебрежимо малом токе в обмотках статора. В модели каждая фаза соединена с землёй через сопротивление Ом, что приближает условия измерения к режиму разомкнутой цепи.
Пиковое значение напряжения оценивают как половину разности максимального и минимального значений сигнала. Для уменьшения влияния высокочастотного шума предварительно отфильтруем измеренное напряжение.
# фильтрация измеряемого сигнала напряжения:
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;
Рассчитаем коэффициент противо-ЭДС:
Ke = V_a_peak / angular_velocity;
println("Коэффициента противо-ЭДС: $Ke В∙с/рад")
Запустим модель с рассчитанным значением коэффициента противо-ЭДС.
results2 = engee.run(m, verbose=true)
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)
Чтение данных из модели:
t = collect(results2["V_exp"]).time; # Время
V_model = collect(results2["V_model"]).value; # Напряжение измеренное в модели PMSM
V_exp = collect(results2["V_exp"]).value; # Напряжение c экспериментальной установки
plot(t, V_exp, title="Эксперимент", xlabel="Время, c", ylabel="Напряжение, В", w = 2, label="Экспериментальная установка")
plot!(t, V_model, title="Модель", xlabel="Время, c", ylabel="Напряжение, В", w = 2, label="Модель PMSM")
После расчёта коэффициента противо-ЭДС напряжения на обмотке фазы a экспериментального двигателя и модели близки по форме и амплитуде.
Расчет постоянной крутящего момента
Другой способ параметризовать потокосцепление - выбрать в настройках блока PMSM для Permanent magnet flux linkage parameterization константу крутящего момента (Specify torque constant).
В этом примере, мы не будем менять эту настройку в модели, но рассмотрим процесс расчета константы крутящего момента:
Для параметризации потокосцепления также можно использовать постоянную крутящего момента . Для этого в параметре Параметризация магнитного потока постоянных магнитов выбирают вариант Постоянная крутящего момента. В этом примере оставим выбранный способ параметризации, но рассчитаем по результатам измерений:
— пиковое значение тока в обмотке фазы a ;
—крутящий момент, приложенный к валу двигателя.
Чтение данных из модели:
I_model = collect(results2["I_model"]).value; # Ток измеренное в модели PMSM
I_exp = collect(results2["I_exp"]).value; # Ток c экспериментальной установки
T_exp = collect(results2["T_exp"]).value; # Момент на реальном двигателе
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 Н∙м/А")
Сравним токи в обмотке фазы a экспериментального двигателя и модели:
plot(t, I_exp, title="Эксперимент", xlabel="Время, c", ylabel="Ток, А", w = 2, label="Экспериментальная установка")
plot!(t, I_model, title="Модель", xlabel="Время, c", ylabel="Ток, А", w = 2, label="Модель PMSM")
Рассчитанные коэффициент противо-ЭДС и постоянная крутящего момента имеют близкие численные значения: и , так как они связаны с потокосцеплением постоянных магнитов через число пар полюсов двигателя :