Оценка параметров модели электропривода

Автор
avatar-kirillkirill
Notebook

Оценка параметров модели электропривода

Часто при моделировании возникает ситуация, когда законы, описывающие поведение объекта, известны, однако некоторые параметры, входящие в уравнения, остаются неопределёнными. В данном примере поэтапно рассмотрен процесс оценки неизвестных параметров модели электропривода на основе экспериментальных данных.

Подключение необходимых пакетов

Установим необходимые пакеты:

In [ ]:
import Pkg
Pkg.add(["Interpolations","NLopt"])

Подключим необходимые пакеты:

In [ ]:
using DataFrames, Plots,Interpolations, NLopt, MATLAB

Модель электропривода

Рассмотрим модель электропривода "motor_pe", схема которой представлена на рисунке ниже. Она состоит из контроллера, усилителя и электродвигателя с нагрузкой. Вход модели представляет собой сигнал управляющий положением нагрузки, выход - положение нагрузки. image_2.png Для запуска симуляции модели нам необходимо указать значения следующих параметров:

  • J1 - инерция ротора электродвигателя, $[кг \cdot м^2]$;
  • J2 - инерция нагрузки, $[кг \cdot м^2]$;
  • k - жесткость гибкого вала, $[\frac{Н \cdot м}{рад}]$;
  • Km - постоянная электродвигателя, $[\frac{Н \cdot м}{В}]$;
  • Ka - коэффициент усиления усилителя, $[\frac{А}{В}]$;
  • b1 - коэффициент демпфирования подшипников электродвигателя, $[\frac{Н \cdot м \cdot с}{рад}]$;
  • b2 - коэффициент демпфирования подшипников нагрузки, $[\frac{Н \cdot м \cdot с}{рад}]$;
  • b12 - коэффициент демпфирования гибкого вала, $[\frac{Н \cdot м \cdot с}{рад}]$.

Некоторые из этих параметров известны и могут быть получены из технической документации или специализированных программ (например, систем автоматизированного проектирования — САПР), включая коэффициент усиления усилителя, моменты инерции нагрузки и ротора электродвигателя. Другие параметры могут быть определены с помощью прямых измерений, например, жесткость гибкого вала. Введём переменные, содержащие значения известных параметров:

In [ ]:
J1 = 1.00e-6; 
J2 = 1.35e-7;    
k = 0.001;      
Km = 16.4e-3;   
Ka = 1.3/2.5; 

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

In [ ]:
b1 = 1e-5;      
b2 = 1e-5;     
b12 = 1e-5;

Загрузка результатов измерений

Загрузим значения измеренных сигналов из файла с экспериментальными данными "motor_data". В вектор tdata запишем значения моментов времени, в которые проводились измерения, в вектор udata — входной сигнал, представляющий заданное положение нагрузки, а в вектор ydata — выходной сигнал, соответствующий измеренному положению нагрузки:

In [ ]:
data=read_matfile("$(@__DIR__)/motor_data.mat")
pa_input_voltage = jvector(data["pa_input_voltage"])
pa_output_voltage = jvector(data["pa_output_voltage"])
tdata = jvector(data["tdata"]) 
udata = jvector(data["udata"]) 
ydata = jvector(data["ydata"]);

Построим графики измеренных сигналов:

In [ ]:
gr()
input = plot(tdata, udata, title = "Вход", xlabel="t, c",legend=false)
output_measure = plot(tdata, ydata, title = "Выход", xlabel="t, c", legend=false)
plot(output_measure,input,layout = (2, 1))
Out[0]:

Сравнение результатов моделирования и измерений

Для сравнения результатов моделирования и экспериментальных измерений необходимо подать входной сигнал в модель и зарегистрировать её выходные данные. Создадим переменную типа WorkspaceArray для передачи входного сигнала udata в модель. Следует отметить, что в качестве значений времени для входного сигнала необходимо использовать вектор tdata.

In [ ]:
udata_workspace = WorkspaceArray("udata_workspace", DataFrame(time = tdata, value = udata));

С помощью блока Заданное положение нагрузки (выделенного жёлтым на изображении ниже) входной сигнал udata_workspace передаётся на вход контроллера. Выходной сигнал load_position регистрируется при помощи логирования, его значения становятся доступны после завершения симуляции. Блок Заданное положение нагрузки и сигнал load_position соответствуют точкам сбора входных и выходных данных реальной системы. image_2.png Откроем модель "motor_pe", выполним её симуляцию, а затем построим график, отображающий результаты эксперимента и моделирования:

In [ ]:
model = engee.load("motor_pe.engee")
logout = engee.run(model, verbose=false)
output = plot(tdata, ydata, title = "Выход", xlabel="t, c", label = "эксперимент", legend=true)
plot!(logout["load_position"].time, logout["load_position"].value, label = "моделирование", linewidth=2)
plot(output,input,layout = (2, 1))
Out[0]:

Как видно из графика, динамика реальной системы и модели не совпадают. Это указывает на необходимость более точной настройки неизвестных параметров b1, b2, b12.

Оценка параметров при помощи оптимизации

Необходимо определить такие значения параметров b1, b2, b21, при которых выходной сигнал модели, записываемый блоком Положение нагрузки, максимально точно соответствует измеренным данным ydata.

Для этого будем минимизировать сумму квадратов ошибок между измеренным и смоделированным выходными сигналами. Ошибки вычисляются как разность между значениями измеренного выходного сигнала ydata и выходного сигнала модели load_position в моменты времени, заданные вектором tdata. Для минимизации суммы квадратов ошибок используем один из доступных алгоритмов оптимизации.

Важно отметить, что оцениваемые параметры b1, b2, b21 должны быть переменными (отображаться в рабочей области) и использоваться в модели. В данном примере они задействованы в блоке motor_pe/Электродвигатель и нагрузка/State-Space.

Маски работают только в Редакторе кода, поэтому приводим скриншот интерфейса, который станет вам доступен после открытия файла motor_pe.ngscript.

screencapture_engee_prod_cut.png

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

  • b1 = 2.9731e-6 — коэффициент демпфирования подшипников электродвигателя;
  • b2 = 9.1799e-23 — коэффициент демпфирования подшипников нагрузки;
  • b12 = 7.439e-6 — коэффициент демпфирования гибкого вала.

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

Качество оценки параметров зависит от следующих факторов:

  • точности начальных значений параметров;
  • наложенных ограничений на значения параметров;
  • настроек алгоритма оптимизации;
  • количества оцениваемых параметров.

Результаты

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