Использование массивов LTI для симуляции многомодовой динамики

В этом примере показано, как создать представление Линейного параметра (LPV) системы, которая показывает многомодовую динамику.

Введение

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

  • Упругий мяч, прыгающий на твердую поверхность.

  • Дроссельный клапан двигателя, который ограничен близостью не более, чем$90^o$ использование жесткой пружины.

  • Пассажир, сидящий на сиденье автомобиля из пенополиуретана, вязкоупругого материала.

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

Моделирование динамики отклонения

Рисунок 1 показывает модель масса-пружина-демпфер системы. Масса 1 свободно падает под действием силы тяжести. Его свойства упругости описаны константой жесткости$k_1$ и коэффициентом демпфирования. $c_1$Когда эта масса попадает на фиксированную поверхность, влияние заставляет массу 1 и массу 2 двигаться вниз вместе. После определенного «времени пребывания», в течение которого Масса 1 деформируется и восстанавливается, она полностью теряет контакт с Массой 2, чтобы следовать движению снаряда. Таким образом, общая динамика разбита на два различных режима - когда массы не находятся в контакте и когда они движутся совместно.

Фигура 1: Упругое тело прыгает на неподвижную упругую поверхность.

Нерастянутая (без нагрузки) длина пружины, присоединенной к Массу 1, равна, $a_1$в то время как длина Массы 2 равна. $a_2$Переменные$y_1(t)$ и $y_2(t)$обозначают положения двух масс. Когда массы не контактируют («Mode 1»), их движения управляются следующими уравнениями:

$$\ddot{y}_1 = -g$$

$$m_2\ddot{y}_2 + c_2\dot{y}_2 + k_2(y_2-a_2) = -m_2g$$

с начальными условиями$y_1(0) = h_1$,,,. $\dot{y}_1(0) = 0$$y_2(0) = h_2$$\dot{y}_2(0) = 0$- $h_1$высота, с которой первоначально сбрасывается масса 1. -$h_2 = a_2$ начальное положение массы 2, которое соответствует нерастянутому состоянию ее пружины.

Когда Масса 1 касается Массы 2 («Mode 2»), их смещения и скорости становятся взаимосвязанными. Управляющие уравнения в этом режиме:

$$m_1\ddot{y}_1 + c_1(\dot{y}_1 - \dot{y}_2) + k_1(y_1-y_2-a_1) = -m_1g$$

$$m_2\ddot{y}_2 + c_2\dot{y}_2 + k_2(y_2-a_2) - c_1(\dot{y}_1 - \dot{y}_2) - k_1(y_1-y_2-a_1) = -m_2g$$

с, $y_1(t_c) = y_2(t_c)$где$t_c$ - время, в которое Mass 1 впервые касается Mass 2.

Представление LPV

Управляющие уравнения линейны и инвариантны по времени. Однако существуют два различных поведенческих режима, соответствующих различным уравнениям движения. Оба режима управляются наборами уравнений второго порядка. Если мы выберем положения и скорости масс как переменные состояния, мы можем представить каждый режим уравнением пространства состояний 4-го порядка.

В виде пространства состояний становится возможным рассматривать эти два режима как одну систему, коэффициенты которой изменяются как функция определенного условия, которое определяет, какой режим является активным. Условием является, конечно, то, движутся ли две массы свободно или совместно. Такое представление, где коэффициенты линейной системы параметризованы внешним, но измеримым параметром, называется моделью Linear Parameter Variing (LPV). Общее представление модели LPV осуществляется с помощью массива линейных моделей пространства состояний и набора параметров планирования, которые диктуют правила выбора правильной модели при заданных условиях. Массив линейных моделей должен быть определен с помощью тех же переменных состояния.

Для нашего примера нам нужны две модели пространства состояний, по одной для каждого режима работы. Нам также нужно определить переменную планирования, чтобы переключаться между ними. Начнем с записи вышеуказанных уравнений движения в форме пространство состояний.

Задайте значения масс и их коэффициентов упругости.

m1 = 7;     % first mass (g)
k1 = 100;   % spring constant for first mass (g/s^2)
c1 = 2;     % damping coefficient associated with first mass (g/s)

m2 = 20;    % second mass (g)
k2 = 300;   % spring constant for second mass (g/s^2)
c2 = 5;     % damping coefficient associated with second mass (g/s)

g = 9.81;   % gravitational acceleration (m/s^2)

a1 = 12;    % uncompressed lengths of spring 1 (mm)
a2 = 20;    % uncompressed lengths of spring 2 (mm)

h1 = 100;   % initial height of mass m1 (mm)
h2 = a2;    % initial height of mass m2 (mm)

Первый режим: представление динамики в пространстве состояний, когда массы не контактируют.

A11 = [0 1; 0 0];
B11 = [0; -g];
C11 = [1 0];
D11 = 0;

A12 = [0 1; -k2/m2, -c2/m2];
B12 = [0; -g+(k2*a2/m2)];
C12 = [1 0];
D12 = 0;

A1 = blkdiag(A11, A12);
B1 = [B11; B12];
C1 = blkdiag(C11, C12);
D1 = [D11; D12];

sys1 = ss(A1,B1,C1,D1);

Второй режим: представление динамики в пространстве состояний, когда массы находятся в контакте.

A2 = [ 0        1,         0,             0; ...
      -k1/m1,   -c1/m1,    k1/m1,         c1/m1;...
      0,        0,         0,             1; ...
      k1/m2,    c1/m2,     -(k1+k2)/m2,   -(c1+c2)/m2];

B2 = [0; -g+k1*a1/m1; 0; -g+(k2/m2*a2)-(k1/m2*a1)];
C2 = [1 0 0 0; 0 0 1 0];
D2 = [0;0];

sys2 = ss(A2,B2,C2,D2);

Теперь мы сложим две модели sys1 и sys2 вместе, чтобы создать массив пространства состояний.

sys = stack(1,sys1,sys2);

Используйте информацию о том, перемещаются ли массы свободно или совместно для планирования. Назовем этот параметр «FreeMove», который принимает значение 1, когда массы перемещаются свободно, и 0, когда они находятся в контакте и перемещаются совместно. Информация о параметре планирования включена в объект массива состояний (sys) при помощи своего свойства «SamplingGrid»:

sys.SamplingGrid = struct('FreeMove',[1; 0]);

Находятся ли массы в контакте или нет, определяется относительными положениями двух масс; когда массы $y_1-y_2 > a_1$не контактируют.

Симуляция модели LPV в Simulink

Массив пространств состояний sys имеет необходимую информацию, чтобы представлять модель LPV. Мы можем симулировать эту модель в Simulink, используя блок «LPV System» из библиотеки блоков Control System Toolbox™.

Откройте предварительно сконфигурированную модель Simulink LPVBouncingMass.slx

open_system('LPVBouncingMass')
open_system('LPVBouncingMass/Bouncing Mass Model','mask')

Блок под названием «Прыгающая модель массы» является блоком LPV System. Его параметры заданы следующим образом:

  • Для поля «Массив пространства состояний» задайте массив моделей пространства состояний sys который был создан выше.

  • Для поля «Начальное состояние» задайте начальные положения и скорости двух масс. Обратите внимание, что вектор состояния:. $[y_1, \dot{y}_1, y_2, \dot{y}_2]$Задайте его значение как [h1 0 h2 0] '.

  • На вкладке «Планирование» установите «Метод интерполяции» на «Ближайший». Этот выбор заставляет только одну из двух моделей массива быть активными в любое время. В нашем примере режимы поведения являются взаимоисключающими.

  • На вкладке «Outputs» снимите все флажки для необязательных выходных портов. Мы будем наблюдать только позиции двух масс.

Постоянный блок выводит модуль значение. Это служит входом для модели и подается от первого входного порта блока LPV. Блок имеет только один выходной порт, который выводит положения двух масс как вектор 2 на 1.

Второй входной порт блока LPV предназначен для определения сигнала планирования. Как обсуждалось ранее, этот сигнал представляет параметр планирования «FreeMove» и принимает дискретные значения 0 (массы в контакте) или 1 (массы не в контакте). Значение этого параметра вычисляется как функция выходного сигнала блока. Этот расчет выполняется блоками с голубым цветом фона. Мы берем различие между двумя выходами (после демуксирования) и сравниваем результат с нерастянутой длиной пружины, присоединенной к массе 1. Получившийся логический результат преобразуется в сигнал double, которое служит значению параметров планирования.

Теперь мы готовы выполнить симуляцию.

open_system('LPVBouncingMass/Scope')
sim('LPVBouncingMass')

Желтая кривая показывает положение массы 1, пурпурная кривая - положение массы 2. В начале симуляции Масса 1 подвергается свободному падению, пока не достигает Массы 2. Столкновение приводит к смещению Массы 2, но быстро восстанавливается и отскакивает от Массы 1. Две массы находятся в контакте в течение времени, где. $y_1 - y_2 < a_1$Когда массы оседают, их равновесные значения определяются статическим осаждением из-за силы тяжести. Для примера абсолютное положение массы 1 является $a_1 + a_2 -m1*g/k1 - (m2+m1)*g/k2 = 30.43 mm.$

Заключения

Этот пример показывает, как модель Linear Parameter Variging может быть построена с помощью массива моделей пространства состояний и подходящих переменных планирования. Пример описывает случай взаимоисключающих режимов, хотя аналогичный подход может использоваться в случаях, когда на динамическое поведение при заданном значении параметров планирования влияет несколько линейных моделей.

Блок LPV System облегчает симуляцию переменных параметров систем. Блок также поддерживает генерацию кода для различных аппаратных целей.