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

Dominando o Simulink: Meu Guia Prático para Simulação de Sistemas de Controle e Projeto LQR

  • Autor: Johnny Liu, CEO da Dowway Vehicle
  • Data de publicação: 29 de abril de 2026
  • Categoria: Sistemas de Controle / Engenharia Automotiva / Simulação

Sobre o autor

Eu sou Johnny Liu, CEO da Veículo Dowway. Criamos sistemas de propulsão limpos e dinâmica veicular inteligente. Há mais de vinte anos, trabalho com suspensões ativas para carros, direção eletrônica e segurança de chassis. Em nossa oficina, jamais construímos uma peça física sem antes testá-la em uma tela.

O Simulink nos ajuda a fazer isso. Ele nos permite executar testes de segurança e experimentar novos algoritmos de controle antes de dobrar qualquer metal. Neste guia, compartilharei os fluxos de trabalho exatos que usamos para modelar, analisar e controlar sistemas dinâmicos.

Parte 1: Teoria de Sistemas de Controle

Precisamos entender a matemática antes de começar a arrastar blocos. A teoria de controle divide os modelos em três formas principais.

1.1 Modelagem Matemática

Um modelo dinâmico mostra como o estado e as saídas de um sistema mudam ao longo do tempo quando se aplica uma entrada.

1. Modelos de entrada-saída

  • Equações Diferenciais: Esses diagramas descrevem as leis físicas do sistema no domínio do tempo. Exemplos incluem sistemas massa-mola ou redes elétricas.
  • Funções de Transferência (FT): Obtemos esses resultados aplicando a transformada de Laplace a equações diferenciais lineares invariantes no tempo (LTI), assumindo que todas as condições iniciais são zero: $$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}$$
  • Características de frequência: Obtemos esses valores trocando $s$ por $j\omega$ na função de transferência. Isso mostra como o sistema responde a entradas de onda senoidal em diferentes velocidades.

2. Modelos de Espaço de Estados

A teoria de controle moderna utiliza modelos de espaço de estados. Em vez de tratar o sistema como uma caixa oculta, rastreamos variáveis ​​internas chamadas estados. Esses estados definem a energia e o comportamento do sistema em qualquer instante: $$\dot{x}(t) = Ax(t) + Bu(t)$$$$y(t) = Cx(t) + Du(t)$$

Onde:

  • $x(t)$ é o vetor de estado.
  • $u(t)$ é o vetor de entrada.
  • $y(t)$ é o vetor de saída.
  • $A$ é a matriz do sistema (ela governa a dinâmica interna).
  • $B$ é a matriz de entrada (ela mostra como as entradas afetam os estados).
  • $C$ é a matriz de saída (ela mapeia os estados para as saídas medidas).
  • $D$ é a matriz de passagem direta.

Eis uma comparação entre as funções de transferência e os modelos de espaço de estados:

RecursoFunção de Transferência (FT)Espaço de estados (SS)
Compatibilidade do sistemaFunciona apenas em configurações de entrada única e saída única (SISO) e lineares invariantes no tempo (LTI).Funciona em configurações MIMO (Multiple-Input Multi-Output), não lineares e variáveis ​​no tempo.
SingularidadeExclusivo para qualquer par entrada-saída dado.Não único. Você pode escolher diferentes estados, o que altera suas matrizes.
CompletudeMostra apenas o controlável partes. Cancelamentos de polos e zeros ocultam dinâmicas ocultas.Mostra tudo. Abrange tudo. tanto controláveis ​​quanto incontroláveis partes, além de partes observáveis ​​e não observáveis.
ComputaçãoUtiliza álgebra no domínio da frequência.Adequado para computadores e solucionadores de álgebra linear.

3. Diagramas de Blocos

Conectamos sistemas físicos usando três layouts simples:

  • Série (Cascata): As funções de transferência se multiplicam: $G_{\text{total}}(s) = G_1(s) \cdot G_2(s)$
  • Paralelo: As funções de transferência se somam: $G_{\text{total}}(s) = G_1(s) + G_2(s)$
  • Opinião: A fórmula para a realimentação em malha fechada $H(s)$ é: $$G_{\text{fechado}}(s) = \frac{G(s)}{1 \mp G(s)H(s)}$$

Indicadores de desempenho do sistema

Ao executarmos testes de desempenho em etapas, avaliamos o desempenho transitório usando quatro números:

  • Ultrapassagem ($M_p$): O valor de pico comparado ao valor estável final, expresso em porcentagem: $$M_p = \frac{y(t_p) – y(\infty)}{y(\infty)} \times 100\%$$
  • Tempo de acomodação ($t_s$): O tempo necessário para o sistema se estabilizar e permanecer dentro de uma pequena margem de erro (geralmente de 2% ou 5%) em relação ao seu valor final.
  • Horário de pico ($t_p$): O tempo necessário para atingir o primeiro pico de ultrapassagem.
  • Hora de subida ($t_r$): O tempo necessário para ir de $10% a $90% (ou de $0% a $100%) do valor final.

1.2 Métodos de análise

Precisamos testar a estabilidade de um sistema antes de construirmos um controlador.

1. Análise no Domínio do Tempo

Aplicamos sinais de teste padrão ao sistema. Estes incluem: impulso unitário, degrau unitário, rampa da unidade, aceleração unitária, ou ondas senoidais unitárias.

  • Regra de estabilidade: Um sistema LTI é estável se todos os seus polos (as raízes do denominador) tiverem partes reais negativas. Se ao menos um polo estiver no lado direito do plano s, o sistema entrará em colapso.
  • Ferramentas MATLAB:
    • zpkDefine um sistema de ganho zero-polo.
    • raízesEncontra as raízes do denominador para verificar a localização dos polos.

2. Análise do Lugar da Raiz

Mostramos graficamente como os polos de malha fechada se movem no plano s à medida que variamos o ganho ($K$) de $0$ para $\infty$.

  • Para qualquer ponto no gráfico, duas regras devem ser atendidas:
    • Condição de Magnitude: $|KG(s)H(s)| = 1$
    • Condição de fase: $\angle G(s)H(s) = (2k+1)\pi$
  • Ferramentas MATLAB: Usar rlocus(sys) para desenhar as linhas. Sempre use eixo igual logo em seguida, os eixos horizontal e vertical usam a mesma escala. Isso mantém os ângulos corretos.

3. Análise no Domínio da Frequência

Verificamos como um sistema lida com ondas senoidais constantes em diferentes frequências.

  • Os enredos:
    • Gráfico de Nyquist: Um gráfico polar de $G(j\omega)$ em função da frequência ($\omega$) varia de $-\infty$ a $+\infty$.
    • Diagrama de Bode: Dois gráficos separados. O de cima mostra a magnitude em decibéis ($20\log_{10}|G(j\omega)|$). O de baixo mostra o ângulo de fase em graus.
    • Enredo de Nichols: Isso coloca ambos os gráficos de Bode em uma única tela. Ele plota os decibéis diretamente em função do ângulo de fase, usando a frequência como um marcador oculto ao longo da linha.
  • Ferramentas MATLAB: Usar nyquist(), bode(), e nichols().
  • Números-chave: Pico de ressonância ($M_r$), frequência de ressonância ($\omega_r$), largura de banda e ganho de frequência zero.
  • Verificações de estabilidade (Regra de Nyquist): Seu sistema é estável se a linha de Nyquist circundar o ponto $(-1, j0)$ no sentido anti-horário $N$ vezes, onde $N$ é igual ao seu número de polos instáveis ​​de malha aberta ($P$).
    • Margem de Ganho ($G_M$): Quanto ganho adicional você pode adicionar antes que o sistema se torne instável.
    • Margem de Fase ($\Phi_M$): O atraso de fase adicional necessário para tornar o sistema instável.
    • Comando MATLAB: margem(sys) calcula essas margens de segurança para você.

4. Análise do Espaço de Estados

Utilizamos matrizes para estudar sistemas complexos com muitas entradas e saídas.

  • Formulários padrão: É possível mapear uma única função de transferência para diferentes configurações de espaço de estados usando uma matriz de transformação ($x = Pz$). As quatro configurações principais são:
    1. Forma canônica controlável (auxilia no projeto de controladores de realimentação de estado).
    2. Forma canônica observável (Auxilia na construção de estimadores de estado).
    3. Forma canônica diagonal (estados desacoplados ao longo da diagonal, usados ​​quando os polos são distintos).
    4. Forma canônica de Jordan (usado quando os polos se repetem).
    • Comandos do MATLAB: ss(), tf2ss(), zp2ss(), cânone(), e Jordânia().
  • Estabilidade de Lyapunov: Um sistema é estável se pudermos encontrar uma função de energia definida positiva $V(x)$ cuja derivada em relação ao tempo, $\dot{V}(x)$, seja sempre negativa. Para sistemas lineares, resolvemos a equação de Bhaskara. Equação de Lyapunov: $$A^TP + PA = -Q$$ Se escolhermos qualquer matriz definida positiva $Q$ e obtivermos uma matriz definida positiva única $P$, nosso sistema é estável.
    • Comandos do MATLAB: lyap(A, Q) ou lyap2() Resolva esta equação.

Agora vamos analisar os blocos que usamos para construir esses sistemas no Simulink.

2.1 A Biblioteca de Blocos Padrão

1. Sub-biblioteca contínua

É aqui que construímos modelos de tempo contínuo.

  • Bloco de espaço de estados: Calcula $\dot{x} = Ax+Bu$ e $y=Cx+Du$. Você deve inserir Matrizes A, B, C e D, juntamente com o vetor de estado inicial $x_0$.
  • Bloco de transferência Fcn: Você entra no numerador (num) e denominador (den) vetores como potências decrescentes de $s$.
  • Bloco de ganho de polo zero: Você insere os arrays para zeros (z), polos (p)e a constante de ganho (K).
  • Blocos de controle PID (1 grau de liberdade e 2 graus de liberdade): Esses blocos calculam termos proporcionais, integrais e derivativos.
    • Parâmetros: Você configura o tipo de controlador, sua forma (Paralelo ou Ideal), o domínio do tempo, os coeficientes ($P, I, D$) e a constante do filtro ($N$). Você pode definir os estados iniciais e ativar os limites superior e inferior. limites de saturação Para evitar a sobrecarga do integrador, na guia Tipos de Dados, você pode definir limites. Por padrão, são usadas regras herdadas sem verificações de limite.
    • Qual a diferença entre um PID de 2 graus de liberdade e um PID de 1 grau de liberdade: Um controlador padrão de 1 grau de liberdade (1-DOF) analisa apenas o erro $e = r – y$. PID de 2 graus de liberdade O controlador separa a forma como rastreia os comandos da forma como rejeita o ruído. Ele usa valores de peso $b$ e $c$ nos caminhos proporcional e derivativo: $$u(t) = P \cdot (b \cdot r – y) + I \cdot \int (r – y) dt + D \cdot \frac{d}{dt}(c \cdot r – y)$$ Isso impede o “salto derivativo” quando você muda seu ponto de ajuste rapidamente, mantendo os movimentos do atuador suaves.

2. Sub-biblioteca de Descontinuidades

O hardware físico nunca é perfeito. Usamos esses blocos para modelar as limitações do mundo real:

  • Bloqueio de reação: Simula o funcionamento de engrenagens. Você define a largura da zona morta e a potência de saída inicial.
  • Bloco de Zona Morta: A saída do bloco permanece em zero até que a entrada ultrapasse seus limites superior ou inferior.
  • Bloco de saturação: Limita a saída. Você define os limites superior e inferior. Sempre ligado. detecção de cruzamento por zero Assim, o solucionador encontra o momento exato em que o sinal atinge o limite.

3. Sub-biblioteca Discreta

Utilizamos esses blocos para modelar processadores digitais e ECUs.

  • Bloco de atraso unitário ($z^{-1}$): Mantém o valor de entrada por um ciclo de clock e, em seguida, o emite.
  • Bloco de retenção de ordem zero (ZOH): Amostra um sinal contínuo e mantém seu valor constante por um tempo de amostragem definido ($T_s$).

? Dica: Como as configurações do Solver afetam sua simulação

Vejamos o que acontece quando você usa um Atraso unitário bloquear:

  • Se você usar um solucionador de passo variável (como o ode45): O tamanho das etapas do solucionador pode mudar dinamicamente. Isso pode levar a erros de interpolação dentro dos seus blocos discretos, fazendo com que seus sinais pareçam contínuos quando não deveriam ser.
  • Se você usar um solucionador de passo fixo: Configurar o solucionador para Degrau fixo Com um tempo de amostragem de 1,0 s, tudo funciona em sincronia. O bloco Unit Delay mantém o valor por exatamente um segundo, criando um gráfico de escada limpo e discreto no seu Scope.

2.2 Utilizando o Bloco de Sistema LTI

Se você tiver um modelo linear em seu espaço de trabalho do MATLAB, poderá importá-lo para o Simulink usando o Bloco do sistema LTI (encontrado na Caixa de Ferramentas do Sistema de Controle).

  • Como configurar:
    1. Digite diretamente: Insira o comando TF diretamente na caixa de parâmetros do bloco (como tf([1 1],[1 5 1])).
    2. Utilizar variáveis ​​de espaço de trabalho: Defina primeiro o seu modelo em um script MATLAB:G1 = tf([1 1],[1 5 1]); Então, basta inserir G1 no bloco LTI. Na Dowway Vehicle, usamos esse método de script para manter nossos parâmetros organizados. Observe que você só pode definir estados iniciais se o seu modelo LTI estiver no formato de espaço de estados.

Parte 3: Projetos passo a passo

Vamos construir e executar dois sistemas práticos.

Projeto 1: Análise de Estabilidade da Função de Transferência

Analisaremos uma função de transferência contínua para observar seu comportamento sob entradas em degrau e varreduras de frequência.

Nosso modelo de planta:

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

O script MATLAB:

Execute este script para gerar seus diagramas de Bode, Nyquist e Nichols.

% 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. Abra um modelo em branco no Simulink.
  2. Adicionar um Etapa bloco do Fontes biblioteca. Defina seu tempo de passo para $0$.
  3. Adicionar um Transferência Fcn bloco do Contínuo biblioteca. Defina “Coeficientes do numerador” para [25 425] e “coeficientes do denominador” para [1 62 925].
  4. Adicionar um Escopo bloco do Pias biblioteca.
  5. Conecte os blocos: [Step]->[Transfer Fcn]->[Scope].
  6. Execute a simulação por 1,0 s. O osciloscópio mostrará uma resposta ao degrau estável e suave, sem oscilações.

Projeto 2: Controle de realimentação de estado LQR para um pêndulo invertido

Um pêndulo invertido é instável e difícil de controlar. Vamos linearizar seu comportamento, verificar suas propriedades e projetar um pêndulo otimizado. Regulador Linear Quadrático (LQR) Para manter o equilíbrio.

Nosso vetor estadual:

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

Onde $x$ é a posição do carrinho, $\theta$ é o ângulo do pêndulo, $\dot{x}$ é a velocidade do carrinho e $\dot{\theta}$ é a velocidade angular.

Matrizes Linearizadas (Instáveis ​​em Malha Aberta):

$$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}$$

Isto é um MIMO sistema. A entrada é a força ($u$). As saídas são a posição do carrinho ($x$) e o ângulo de inclinação do pêndulo ($\theta$).

Script de otimização em MATLAB:

Execute este código para calcular sua matriz de feedback 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');

Os autovalores em malha aberta mostram que o sistema bruto é instável. As matrizes de controlabilidade e observabilidade têm ambas classificação 4. Isso significa que nosso sistema é totalmente controlável e observável, permitindo-nos construir um controlador LQR.

Para executar este modelo no Simulink:

  1. Adicionar um Espaço de estados bloco da biblioteca contínua.
  2. Configure seus parâmetros:
    • Definir UM para A - B*K.
    • Definir B para B.
    • Definir C para C.
    • Definir D para D. (Certifique-se de que seu script MATLAB foi executado primeiro para que essas variáveis ​​estejam ativas em seu espaço de trabalho).
  3. Conecte um Etapa Bloqueie a porta de entrada.
  4. Conecte um Escopo bloco para a porta de saída.
  5. Execute a simulação. Seu Scope irá plotar duas linhas. A posição do carrinho se estabiliza suavemente e o ângulo do pêndulo retorna a 0 (na vertical) após uma breve oscilação controlada.

Lista de verificação de Johnny para sistemas de controle seguros

Para finalizar, aqui está minha lista de verificação pessoal para construir malhas de controle no Simulink:

  • Teste primeiro a controlabilidade: Antes de perder horas ajustando os ganhos de uma planta complexa, execute ctrb Em MATLAB. Se a classificação for muito baixa, nenhum algoritmo conseguirá estabilizar o seu sistema.
  • Escolha a ferramenta de resolução adequada: Para sistemas com blocos não lineares como Saturação ou Retaliação, ligar Detecção de cruzamento por zero. Use solucionadores de passo variável (como ode45) para testes rápidos, mas mude para um solucionador de passo fixo quando estiver pronto para compilar o código para hardware real.
  • Mantenha suas variáveis ​​em um só lugar: Nunca digite números brutos diretamente nas caixas de parâmetros do Simulink. Coloque tudo em um script de inicialização central do MATLAB. Isso mantém seu trabalho organizado e limpo.

Se você encontrar algum problema de ajuste ou erro no solucionador, me avise. Deixe um comentário abaixo e podemos discutir o assunto!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Need a Quote or Have Questions?

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