Dual-monitor engineering workspace displaying Simulink control block diagrams and Bode plots next to an active suspension hardware testbench setup for LQR design

Освоение Simulink: Практическое руководство по моделированию систем управления и проектированию LQR-моделей

  • Автор: Джонни Лю, генеральный директор компании Dowway Vehicle.
  • Дата публикации: 29 апреля 2026 г.
  • Категория: Системы управления / Автомобильная инженерия / Моделирование

Об авторе

Меня зовут Джонни Лю, я генеральный директор компании… Транспортное средство для доуэй. Мы создаём экологически чистые силовые установки и интеллектуальные системы управления динамикой автомобиля. Более двадцати лет я работаю над активными подвесками автомобилей, электронным рулевым управлением и безопасностью шасси. В нашей мастерской мы никогда не изготавливаем детали, не протестировав их предварительно на экране.

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

Часть 1: Теория систем управления

Прежде чем начать перемещать блоки, необходимо понять математику. Теория управления делит модели на три основные формы.

1.1 Математическое моделирование

Динамическая модель показывает, как состояние системы и ее выходные параметры изменяются со временем при подаче входного сигнала.

1. Модели «затраты-выпуск»

  • Дифференциальные уравнения: Эти уравнения описывают физические законы системы во временной области. Примерами могут служить системы «масса-пружина» или электрические сети.
  • Передаточные функции (ПФ): Мы получаем их, применяя преобразование Лапласа к линейным, стационарным (LTI) дифференциальным уравнениям, предполагая, что все начальные условия равны нулю: $$G(s) = \frac{Y(s)}{U(s)} = \frac{b_m s^m + b_{m-1} s^{m-1} + \dots + b_0}{a_n s^n + a_{n-1} s^{n-1} + \dots + a_0}$$
  • Частотные характеристики: Мы получаем их, заменяя $s$ на $j\omega$ в передаточной функции. Это показывает, как система реагирует на синусоидальные входные сигналы с разной скоростью.

2. Модели пространства состояний

Современная теория управления использует модели пространства состояний. Вместо того чтобы рассматривать систему как скрытый ящик, мы отслеживаем внутренние переменные, называемые состояниями. Эти состояния определяют энергию и поведение системы в любой момент времени: $$\dot{x}(t) = Ax(t) + Bu(t)$$$$y(t) = Cx(t) + Du(t)$$

Где:

  • $x(t)$ — это вектор состояния.
  • $u(t)$ — это входной вектор.
  • $y(t)$ — это выходной вектор.
  • $A$ — это системная матрица (она определяет внутреннюю динамику).
  • $B$ — это входная матрица (она показывает, как входные данные влияют на состояния).
  • $C$ — это выходная матрица (она сопоставляет состояния с измеренными выходными сигналами).
  • $D$ — это матрица прямой передачи сигнала.

Вот как соотносятся передаточные функции и модели пространства состояний:

ОсобенностьПередаточная функция (ПФ)Пространство состояний (ПС)
Системная совместимостьРаботает только для конфигураций с одним входом и одним выходом (SISO) и линейных стационарных систем (LTI).Подходит для систем с многовходовой и многовыходовой конфигурацией (MIMO), нелинейных и изменяющихся во времени конфигураций.
УникальностьУникальный для любой заданной пары вход-выход.Неуникальный. Вы можете выбрать различные состояния, что изменит ваши матрицы.
Полнотапоказывает только управляемый части. Компенсация полюсов и нулей скрывает скрытую динамику.Показывает всё. Включает в себя как контролируемые, так и неконтролируемые части, а также наблюдаемые и ненаблюдаемые части.
ВычисленияИспользует алгебру в частотной области.Подходит для компьютеров и программ решения задач линейной алгебры.

3. Блок-схемы

Мы соединяем физические системы, используя три простых варианта схемы:

  • Последовательный (каскадный) цикл: Передаточные функции умножаются: $G_{\text{total}}(s) = G_1(s) \cdot G_2(s)$
  • Параллельно: Сумма передаточных функций: $G_{\text{total}}(s) = G_1(s) + G_2(s)$
  • Обратная связь: Формула для обратной связи в замкнутом контуре $H(s)$ имеет вид: $$G_{\text{closed}}(s) = \frac{G(s)}{1 \mp G(s)H(s)}$$

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

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

  • Перерегулирование ($M_p$): Максимальное значение по сравнению с конечным установившимся значением, выраженное в процентах: $$M_p = \frac{y(t_p) – y(\infty)}{y(\infty)} \times 100\%$$
  • Время стабилизации ($t_s$): Время, необходимое системе для стабилизации и удержания значения в пределах небольшой погрешности (обычно 2% или 5%) от конечного значения.
  • Пиковое время ($t_p$): Время, необходимое для достижения первого пика, превышающего заданный порог.
  • Время подъема ($t_r$): Время, необходимое для перехода от 10% до 90% (или от 0% до 100%) от конечной стоимости.

1.2 Методы анализа

Прежде чем создавать контроллер, необходимо проверить стабильность системы.

1. Анализ во временной области

Мы подаем на систему стандартные тестовые сигналы. К ним относятся: единичный импульс, единичный шаг, пандус для юнита, единичное ускорение, или единичные синусоидальные волны.

  • Правило устойчивости: Линейная стационарная система устойчива, если все её полюса (корни знаменателя) имеют отрицательные действительные части. Если хотя бы один полюс находится в правой части s-плоскости, система выйдет из строя.
  • Инструменты MATLAB:
    • zpk: Определяет систему с нулевым полюсным коэффициентом усиления.
    • корниНаходит корни знаменателя для проверки местоположения столбов.

2. Анализ корневого локуса

Мы строим график движения полюсов замкнутой системы в s-плоскости при изменении коэффициента усиления ($K$) от $0$ до $\infty$.

  • Для любой точки на графике должны совпадать два правила:
    • Условие величины: $|KG(s)H(s)| = 1$
    • Фазовое условие: $\angle G(s)H(s) = (2k+1)\pi$
  • Инструменты MATLAB: Использовать rlocus(sys) для проведения линий. Всегда используйте ось равна Сразу после этого горизонтальная и вертикальная оси будут иметь одинаковый масштаб. Это позволит сохранить правильное отображение углов.

3. Анализ в частотной области

Мы проверяем, как система обрабатывает устойчивые синусоидальные волны на разных частотах.

  • Сюжеты:
    • Диаграмма Найквиста: Полярная диаграмма функции $G(j\omega)$ в зависимости от частоты ($\omega$), изменяющейся от $-\infty$ до $+\infty$.
    • Диаграмма Боде: Два отдельных графика. На верхнем показана величина в децибелах ($20\log_{10}|G(j\omega)|$). На нижнем показан фазовый угол в градусах.
    • Сюжет Николса: Это позволяет разместить оба графика Боде на одном экране. График децибелов отображается непосредственно в зависимости от фазового угла, используя частоту в качестве скрытого маркера вдоль линии.
  • Инструменты MATLAB: Использовать nyquist(), bode(), и nichols().
  • Ключевые показатели: Резонансный пик ($M_r$), резонансная частота ($\omega_r$), ширина полосы пропускания и коэффициент усиления на нулевой частоте.
  • Проверки устойчивости (правило Найквиста): Ваша система устойчива, если линия Найквиста совершает оборот вокруг точки $(-1, j0)$ против часовой стрелки $N$ раз, где $N$ равно числу неустойчивых полюсов разомкнутой системы ($P$).
    • Прирост прибыли ($G_M$): Какой дополнительный прирост мощности можно получить, прежде чем система станет нестабильной?
    • Фазовый запас ($\Phi_M$): Дополнительная фазовая задержка, необходимая для того, чтобы сделать систему нестабильной.
    • Команда MATLAB: margin(sys) рассчитывает для вас эти запасы прочности.

4. Анализ пространства состояний

Мы используем матрицы для изучения сложных систем с большим количеством входных и выходных сигналов.

  • Стандартные формы: С помощью матрицы преобразования ($x = Pz$) можно сопоставить одну передаточную функцию с различными конфигурациями пространства состояний. Четыре основные конфигурации:
    1. Управляемая каноническая форма (помогает в разработке контроллеров с обратной связью по состоянию).
    2. Наблюдаемая каноническая форма (помогает создавать модели оценки состояния).
    3. Диагональная каноническая форма (несвязанные состояния вдоль диагонали, используются, когда полюса различны).
    4. Иорданская каноническая форма (используется, когда столбы повторяются).
    • Команды MATLAB: SS(), tf2ss(), zp2ss(), канон(), и Иордания().
  • Устойчивость Ляпунова: Система устойчива, если мы можем найти положительно определённую функцию энергии $V(x)$, производная которой по времени, $\dot{V}(x)$, всегда отрицательна. Для линейных систем мы решаем уравнение Уравнение Ляпунова: $$A^TP + PA = -Q$$ Если мы выберем любую положительно определённую матрицу $Q$ и получим единственную положительно определённую матрицу $P$, наша система будет устойчивой.
    • Команды MATLAB: lyap(A, Q) или lyap2() Решите это уравнение.

Теперь давайте рассмотрим блоки, которые мы используем для построения этих систем в Simulink.

2.1 Стандартная библиотека блоков

1. Непрерывная суббиблиотека

Здесь мы создаём модели непрерывного времени.

  • Блок пространства состояний: Вычисляет $\dot{x} = Ax+Bu$ и $y=Cx+Du$. Необходимо ввести Матрица A, B, C и Dа также начальный вектор состояния $x_0$.
  • Блок передачи FCN: Вы входите числитель (num) и знаменатель (ден) векторы как убывающие степени $s$.
  • Блок нулевого полюсного усиления: Вы вводите массивы для нули (z), полюса (п)и постоянная усиления (К).
  • Блоки ПИД-регулятора (1-степенной и 2-степенной): Эти блоки вычисляют пропорциональные, интегральные и производные члены.
    • Параметры: Вы настраиваете тип контроллера, его форму (параллельный или идеальный), временную область, коэффициенты ($P, I, D$) и константу фильтра ($N$). Вы можете задать начальные состояния и включить верхний и нижний уровни. пределы насыщения Чтобы предотвратить свертывание интегратора, на вкладке «Типы данных» можно установить границы. По умолчанию используются унаследованные правила без проверок на ограничения.
    • Чем отличается 2-степенной ПИД-регулятор от 1-степенного ПИД-регулятора: Стандартный контроллер с одной степенью свободы учитывает только ошибку $e = r – y$. 2-степенной ПИД-регулятор Контроллер разделяет отслеживание команд и подавление шума. Он использует весовые коэффициенты $b$ и $c$ на пропорциональной и дифференциальной цепях: $$u(t) = P \cdot (b \cdot r – y) + I \cdot \int (r – y) dt + D \cdot \frac{d}{dt}(c \cdot r – y)$$ Это предотвращает «рывок дифференциального скачка» при быстром изменении заданного значения, обеспечивая плавные движения исполнительного механизма.

2. Подбиблиотека «Разрывы»

Физическое оборудование никогда не бывает идеальным. Мы используем эти блоки для моделирования реальных ограничений:

  • Блокировка ответной реакции: Имитирует люфт в зубчатых передачах. Вы задаете ширину зоны нечувствительности и начальный выходной сигнал.
  • Блок мертвой зоны: Выходной сигнал блока остается равным нулю до тех пор, пока входной сигнал не превысит установленный вами верхний или нижний предел.
  • Блок насыщения: Ограничивает выходной сигнал. Вы устанавливаете верхний и нижний пределы. Всегда включайте. обнаружение пересечения нулевой отметки Таким образом, решатель находит точный момент, когда сигнал достигает предела.

3. Отдельная суббиблиотека

Мы используем эти блоки для моделирования цифровых процессоров и электронных блоков управления.

  • Блок задержки единицы ($z^{-1}$): Сохраняет входное значение на один тактовый шаг, а затем выводит его.
  • Блок нулевого порядка (ZOH): Производит выборку непрерывного сигнала и поддерживает его значение на заданном интервале времени ($T_s$).

? Совет: Как настройки решателя влияют на вашу симуляцию

Давайте посмотрим, что происходит при использовании Задержка единицы блокировать:

  • Если вы используете решатель с переменным шагом (например, ode45): Размер шагов решателя может динамически изменяться. Это может привести к ошибкам интерполяции внутри дискретных блоков, из-за чего сигналы будут выглядеть непрерывными, хотя таковыми быть не должны.
  • Если вы используете решатель с фиксированным шагом: Настройка решателя на Фиксированный шаг С интервалом выборки в 1,0 с все работает синхронно. Блок Unit Delay удерживает значение ровно одну секунду, создавая четкий, дискретный ступенчатый график на осциллографе.

2.2 Использование блока LTI-системы

Если у вас есть линейная модель в рабочей области MATLAB, вы можете перенести её в Simulink, используя… Блок системы LTI (находится в панели инструментов системы управления).

  • Как это настроить:
    1. Введите это напрямую: Введите команду TF прямо в поле параметров блока (например, так): tf([1 1],[1 5 1])).
    2. Используйте переменные рабочей области: Сначала определите свою модель в скрипте MATLAB:G1 = tf([1 1],[1 5 1]); Затем просто введите Г1 в блок LTI. В компании Dowway Vehicle мы используем этот скриптовый метод для упорядочивания параметров. Обратите внимание, что начальные состояния можно задавать только в том случае, если ваша модель LTI представлена ​​в форме пространства состояний.

Часть 3: Пошаговые проекты

Давайте создадим и запустим две практические системы.

Проект 1: Анализ устойчивости передаточной функции

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

Наша модель предприятия:

$$G(s) = \frac{25(s + 17)}{(s + 25)(s + 37)} = \frac{25s + 425}{s^2 + 62s + 925}$$

Скрипт MATLAB:

Запустите этот скрипт, чтобы сгенерировать диаграммы Боде, Найквиста и Николса.

% Project 1: Frequency Response Analysis
clear; clc; close all;

% Define numerator and denominator
num = 25 * [1 17];                 % 25s + 425
den = conv([1 25], [1 37]);        % s^2 + 62s + 925

% Create Transfer Function
G = tf(num, den);
disp('System Transfer Function:');
printsys(num, den);

% Draw Bode Plot
figure(1)
bode(G)
grid on;
title('System Bode Diagram');

% Draw Nyquist Plot
figure(2)
nyquist(G)
axis equal % Keeps the scale of real and imaginary axes equal
grid on;
title('System Nyquist Plot');

% Draw Nichols Plot
figure(3)
nichols(G)
grid on;
title('System Nichols Chart');
  1. Откройте пустую модель в Simulink.
  2. Добавить Шаг блок от Источники библиотека. Установите время шага равным $0$.
  3. Добавить Трансфер ФЦН блок от Непрерывный библиотека. Установите значение “Коэффициенты числителя” на [25 425] и «коэффициенты знаменателя» для [1 62 925].
  4. Добавить Объем блок от Раковины библиотека.
  5. Соедините блоки: [Step]>[Transfer Fcn]>[Scope].
  6. Запустите моделирование на 1,0 с. Осциллограф покажет стабильную, плавную реакцию на ступенчатый сигнал без колебаний.

Проект 2: Управление перевернутым маятником с обратной связью по состоянию на основе LQR-критерия.

Перевернутый маятник неустойчив и сложен в управлении. Мы линеаризуем его поведение, проверим его свойства и разработаем оптимальную модель. Линейно-квадратичный регулятор (ЛКР) чтобы сохранить равновесие.

Наш вектор состояния:

$$x = \begin{bmatrix} x & \theta & \dot{x} & \dot{\theta} \end{bmatrix}^T$$

Где $x$ — положение тележки, $\theta$ — угол маятника, $\dot{x}$ — скорость тележки, а $\dot{\theta}$ — угловая скорость.

Линеаризованные матрицы (неустойчивые в разомкнутой цепи):

$$A = \begin{bmatrix} 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & -0.524 & -3.129 & 0 \\ 0 & -15.332 & 9.012 & -0.562 \end{bmatrix}, \quad B = \begin{bmatrix} 0 \\ 0 \\ 81.23 \\ -120.1 \end{bmatrix}$$$$C = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \end{bmatrix}, \quad D = \begin{bmatrix} 0 \\ 0 \end{bmatrix}$$

Это МИМО система. Входные данные: сила ($u$). Выходные данные: положение тележки ($x$) и угол наклона маятника ($\theta$).

Скрипт оптимизации MATLAB:

Запустите этот код, чтобы рассчитать матрицу обратной связи LQR $K$.

% Project 2: Inverted Pendulum LQR Design
clear; clc; close all;

% System Matrices
A = [0,       0,      1,      0;
     0,       0,      0,      1;
     0,  -0.524, -3.129,      0;
     0, -15.332,  9.012, -0.562];

B = [0; 
     0; 
 81.23; 
-120.1];

C = [1, 0, 0, 0;    % Output 1: Cart Position
     0, 1, 0, 0];   % Output 2: Pendulum Angle

D = [0; 
     0];

% Create state-space model
sys = ss(A, B, C, D);

% Calculate eigenvalues
E = eig(A);
fprintf('Open-Loop Eigenvalues:\n');
disp(E);

% Test Controllability
OC = ctrb(A, B);
N_C = rank(OC);
fprintf('Controllability Rank: %d\n', N_C);

% Test Observability
OB = obsv(A, C);
N_B = rank(OB);
fprintf('Observability Rank: %d\n', N_B);

% LQR Tuning Matrices
Q = diag([10, 0.01, 0.01, 0.1]); 
R = 45;
N = 0; 

% Compute feedback gain matrix K
[K, S, e] = lqr(sys, Q, R, N);
fprintf('Calculated LQR Feedback Gain Matrix K:\n');
disp(K);

% Create Closed-Loop System (u = -Kx)
sysT = ss(A - B*K, B, C, D);

% Plot closed-loop step response
figure(1)
step(sysT)
grid on;
legend('Cart Position (x)', 'Pendulum Angle (theta)');
title('Closed-Loop LQR Step Response');

Собственные значения в разомкнутой системе показывают, что исходная система неустойчива. Матрицы управляемости и наблюдаемости имеют ранг 4. Это означает, что наша система полностью управляема и наблюдаема, что позволяет нам построить LQR-контроллер.

Для запуска этой модели в Simulink:

  1. Добавить Пространство состояний блок из непрерывной библиотеки.
  2. Настройте его параметры:
    • Набор А к А - Б*К.
    • Набор Б к Б.
    • Набор С к С.
    • Набор Д к Д. (Убедитесь, что ваш скрипт MATLAB был предварительно запущен, чтобы эти переменные были активны в вашей рабочей области).
  3. Подключите Шаг блок к входному порту.
  4. Подключите Объем блок к выходному порту.
  5. Запустите симуляцию. Ваш осциллограф построит две линии. Положение тележки плавно стабилизируется, и угол маятника возвращается к 0 (вертикальное положение) после короткого, контролируемого колебания.

Контрольный список Джонни для безопасных систем управления

В заключение, вот мой личный контрольный список для построения контуров управления в Simulink:

  • Сначала проверьте управляемость: Прежде чем тратить часы на настройку коэффициентов усиления для сложной системы, запустите… Ctrl в MATLAB. Если ранг слишком низкий, ни один алгоритм не сможет стабилизировать вашу систему.
  • Выберите подходящий решатель: Для систем с нелинейными блоками, такими как Насыщенность или Обратная реакция, включать Обнаружение пересечения нуля. Используйте решатели с переменным шагом (например, ode45) для быстрого тестирования, но переключитесь на решатель с фиксированным шагом, когда будете готовы скомпилировать код для реального оборудования.
  • Храните все переменные в одном месте: Никогда не вводите числа напрямую в поля параметров Simulink. Все данные следует хранить в центральном скрипте инициализации MATLAB. Это позволит поддерживать порядок и организованность в вашей работе.

Сообщите мне, если у вас возникнут какие-либо проблемы с настройкой или ошибки решателя. Оставьте комментарий ниже, и мы сможем это обсудить!

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Need a Quote or Have Questions?

Please fill out the form below, our engineers will contact you within 24 hours.