Baixe o app para aproveitar ainda mais
Prévia do material em texto
Introdução aoMatlab e Simulink Leandro Baroni Sistemas de controle I Junho 2018 SUMÁRIO I Matlab 3 1 Introdução 4 1.1 Comandos básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2 Vetores e matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2 Gráficos 10 3 Script doMatlab 13 4 Funções 13 5 Controle de execução 14 5.1 Declarações de controle condicional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 5.1.1 Declaração if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 5.1.2 Declaração switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 5.2 Declarações de controle de loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 5.2.1 Declaração for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 5.2.2 Declaração while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 5.2.3 Declaração continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 5.2.4 Declaração break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 6 Solução de equações diferenciais 18 6.1 Equações diferenciais ordinárias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 6.1.1 Exemplo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 7 Sistemas de controle 21 7.1 Espaço de estados noMatlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 1 7.2 Funções de transferência noMatlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 7.3 Respostas de um sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 7.3.1 Exemplo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 7.3.2 Exemplo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 II Simulink 26 8 Introdução 27 9 Início 27 9.1 Organização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 9.2 Configurações da simulação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 10 Interação do Simulink com oMatlab 30 11 Alguns blocos de comando 30 12 Exemplos 31 12.1 Exemplo 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 12.2 Exemplo 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2 Parte I Matlab 3 1. INTRODUÇÃO OMatlab é um softwarematemático otimizado para a resolução de problemas científicos e de enge- nharia. A linguagem doMatlab é baseada no tratamento de matrizes e possui recursos de programa- ção estruturada que permitem a implementação de códigos mais complexos, visualização gráfica e simulação de sistemas dinâmicos entre outras características. Este texto introdutório foi escrito para o Matlab R2014b. A interface doMatlab está bastante consoli- dada, de modo que outras versões não devem apresentar alterações significativas. A referênciaMatlat®Prime é um texto introdutório produzido pelaMathWorks para oMatlab R2018a e de onde alguns exemplos foram tirados. 1.1 Comandos básicos Ao iniciar o Matlab a tela da Figura 1.1 aparece em conjunto com o símbolo >>, indicando que o software está pronto para receber comandos. Este é o prompt doMatlab. Ao digitar a expressão abaixo seguida da tecla <enter>: >> 12/2+3*(2^4) Tem-se a resposta: ans = 54 Pode-se armazenar valores em variáveis noMatlab, no qual todas as variáveis constituem-se emma- trizes. Assim, as operações +, -, *, / e ^ são designadas como operações matriciais, enquanto que operações com escalares podem ser utilizados os símbolos .+, .-, .*, ./ e .^. Quando o arranjo é um número pode-se usar um ou outro símbolo indistintamente. As variáveis devem ter um nome único, começando com uma letra e podem conter dígitos ou o sím- bolo _ (underline). O Matlab distingue letras maiúsculas de minúsculas. >> distancia = 100 distancia = 100 >> tempo = 3 tempo = 3 4 Figura 1.1: Tela de comando doMatlab >> velocidade_media = distancia / tempo velocidade_media = 33.3333 Note que ao digitar o nome da variável, o símbolo = e o seu valor, o Matlab armazena a variável e a apresenta na tela. Para suprimir a exibição da variável adiciona-se um ponto-e-vírgula ao final do comando. Quando uma expressão é criada e não armazenada em uma variável, o Matlab a salva automaticamente na variável ans. O comando whomostra todas as variáveis armazenadas durante uma sessão do Matlab. O comando whos tem amesma função de who, porém exibindo mais detalhes. >> who Your variables are: ans tempo distancia velocidade_media O comando clear limpa uma oumais variáveis. 5 >> clear tempo Para apagar TODAS as variáveis da sessão: >> clear all A Tabela 1.1 mostra algumas variáveis especiais. A Tabela 1.2 mostra algumas funções especiais. Tabela 1.1: Variáveis especiais ans Nome de variável padrão usado para resultados pi 3.1416 eps Menor número que somado a 1, cria um número maior do que 1 inf Infinito NaN Não número i e j p−1 realmin menor número real positivo realmax maior número real positivo Tabela 1.2: Funções matemáticas elementares abs(x) Valor absoluto sqrt(x) Raiz quadrada sin(x) Seno cos(x) Cosseno tan(x) Tangente asin(x) Arco seno acos(x) Arco cosseno atan(x) Arco tangente exp(x) Exponencial (ex) log(x) Logaritmo natural (base e) log10(x) Logaritmo na base 10 sind(x) Seno (x em graus) cosd(x) Cosseno (x em graus) tand(x) Tangente (x em graus) 1.2 Vetores ematrizes NoMatlab, um vetor é definido como: >> A = [0 1 2 3 4 5] A = 0 1 2 3 4 5 6 >> X = [0 0.2*pi 0.4*pi 0.6*pi 0.8*pi pi] X = 0 0.6283 1.2566 1.8850 2.5133 3.1416 Outra forma de se criar um vetor (o primeiro valor é o valor inicial, o segundo o passo e o terceiro o valor final): >> A = 1 : 1 : 5 A = 1 2 3 4 5 >> X = 0 : pi/5 : pi X = 0 0.6283 1.2566 1.8850 2.5133 3.1416 A função linspace gera um vetor linearmente espaçado a partir de um valor inicial, um valor final e um número de elementos: >> X = linspace(0, pi, 6) X = 0 0.6283 1.2566 1.8850 2.5133 3.1416 De forma semelhante, a função logspace gera um vetor logaritmicamente espaçado a partir de uma potência inicial, uma potência final e um número de valores. >> V = logspace(0, 2, 5) V = 1.0000 3.1623 10.0000 31.6228 100.0000 Matrizes são criadas da seguinte forma: >> M = [1 0 -1 ; 2 3 4 ; -7 1 3] M = 1 0 -1 2 3 4 -7 1 3 7 Esta é uma matriz 3× 3. Note que os elementos da linha são separados por espaço em branco e as linhas são separadas por ponto-e-vírgula. Note também que um vetor é uma matriz com uma linha (ou uma coluna). As operações commatrizes ou vetores são feitas usando os operadores básicos: >> B = 2 * A B = 2 4 6 8 10 >> Y = sin(X) Y = 0 0.5878 0.9511 0.9511 0.5878 0.0000 >> Z = A.^2 Z = 1 4 9 16 25 Os operadores *, / e ^ devem ser precedidos por um ponto para serem utilizados em matrizes ou vetores quando deseja-se que a operação seja realizada sobre cada um de seus elementos. I A^2 significa potência de matrizes (A * A). I A.^2 significa elevar cada elemento do vetor A ao quadrado. Elevando cada elemento do vetor A ao quadrado: >> Z = A.^2 Z = 1 4 9 16 25 Elevando o vetor A ao quadrado: >> Z = A^2 Error using ^ Inputs must be a scalar and a square matrix. To compute elementwise POWER, use POWER (.^) instead. Tem-se um erro pois o vetor A é uma matriz 1× 5 e a operação A*A não existe neste caso. Assim, deve-se tomar ocuidado em operações que exigem concordância das dimensões das matrizes: 8 >> A = [1 2 3]; >> B = [4 5 6]; >> A*B Error using * Inner matrix dimensions must agree. >> A*B' ans = 32 O símbolo ' (aspas simples) significa transposição: >> M' ans = 1 2 -7 0 3 1 -1 4 3 Acesso a um elemento de um vetor: >> Z(1) ans = 1 >> Z(2) ans = 4 >> Z(6) Index exceeds matrix dimensions. Tem-se um erro quando acessa-se uma posição inexistente do vetor. Para acessar vários elementos: >> Z(1:3) ans = 1 4 9 >> Z(3:5) ans = 9 9 16 25 >> Z(2:4) ans = 4 9 16 Para acessar umelemento de umamatriz é necessária a especificação de dois índices (linha e coluna): >> M(2, 1) ans = 2 Pode-se criar matrizes a partir de vetores ou outras matrizes: >> b = [2 -3 1]; >> Mx = [b' M(:, 2:3)] Mx = 2 0 -1 -3 3 4 1 1 3 M(:, 2:3) significa a parte damatriz M compreendida por todas as linhas (:) e as colunas 2 e 3 (2:3). A matriz Mx foi gerada concatenando-se o vetor b transposto e as colunas 2 e 3 da matriz M. As funções det(M) e inv(M) produzem o determinante e a inversa de umamatriz: >> det(M) ans = -18 >> inv(M) ans = -0.2778 0.0556 -0.1667 1.8889 0.2222 0.3333 -1.2778 0.0556 -0.1667 Ao digitar no prompt help nome_do_comando, exibe-se uma pequena explicação sobre a função do comando e sua sintaxe. 10 2. GRÁFICOS Pode-se gerar gráficos a partir de matrizes: >> X = linspace(0, 2*pi, 100); >> Y = sin(X); >> plot(X, Y) O gráfico é gerado pelo comando plot. A variável X contém os valores do eixo x e a variável Y contém os valores do eixo y . As variáveis X e Y devem ter amesma dimensão (Figura 2.1(a)). Pode-se desenhar duas curvas no mesmo gráfico (Figura 2.1(b)): >> Y2 = cos(X); >> plot(X, Y, X, Y2) Ou de outra forma: >> plot(X, Y); >> hold; >> plot(X, Y2) O comando holdmantém o gráfico anterior na janela que se desenha o próximo gráfico. (a) Uma curva (b) Duas curvas no mesmo gráfico Figura 2.1: Gráficos gerados noMatlab A cor e o tipo da linha podem ser especificadas dentro do comando plot, após as variáveis de cada curva (Figura 2.2(a)): 11 >> plot(X, Y, 'r-', X, Y2, 'g.') O parâmetro 'r-', por exemplo, significa que a curva será desenhada como uma linha na cor ver- melha. 'g.' significa que a curva será de pontos na cor verde. A Tabela 2.1 mostra algumas opções possíveis. Tabela 2.1: Cores e símbolos dos gráficos Cores Símbolos b blue . point - solid g green o circle : dotted r red x x-mark -. dashdot c cyan + plus - - dashed m magenta * star d diamond y yellow s square (none) no line k black < triangle (left) ^ triangle (up) w white v triangle (down) > triangle (right) h hexagram p pentagram O comando legend insere uma legenda: >> legend('Seno de X', 'Cosseno de X'); Outras personalizações (Figura 2.2(b)): I Título para o gráfico: >> title('seno(x) e cosseno(x)') I Nome para o eixo x: >> xlabel('Ângulo (em radianos)') I Nome para o eixo y : >> ylabel('Variáveis dependentes') I Insere linhas de grade: 12 >> grid I Dimensões dos eixos: >> axis([xmin xmax ymin ymax]); (a) Gráfico com ajuste de cores e símbolos (b) Nomes dos eixos e legenda Figura 2.2: Gráficos personalizados 3. SCRIPT DOMATLAB Os comandos podem ser escritos em um arquivo de texto, conhecidos como arquivo de script do Matlab, e salvo com extensão .m. Os comandos no script são executados sequencialmente, como se estivessem sendo inseridos no prompt. Os arquivos de script podem ser executados no prompt digitando o nome do arquivo de script. Por exemplo, os comandos da Tabela 3.1 salvo em um arquivo chamado graficos.m são executados como: >> graficos O caractere % insere um comentário, que é ignorado na execução. OMatlab possui um editor de texto integrado (M-file Editor), que pode executar o script apertando a tecla <F5>. 4. FUNÇÕES Pode-se definir funções no Matlab, que são chamadas dentro de um script. As funções são definidas em arquivos de texto salvos com o nome da função e com extensão .m, na mesma pasta onde o pro- grama principal está sendo executado e cuja primeira linha deve conter o comando function. Este comando deve ter a seguinte sintaxe: 13 Tabela 3.1: Script graficos.m clear all; clc; % limpa a tela T = 0 : 0.1 : 10; % define o vetor tempo X1 = T.^2; X2 = exp(T); plot(T, X1, 'r.', T, X2, 'bo'); % desenha os gráficos axis([0 5 0 100]); legend('t^2', 'e^{t}'); xlabel('Tempo [s]'); ylabel('Resposta'); function [variaveis_de_saida] = nome_da_função (variaveis_de_entrada) Pode-se ter várias variáveis de entrada e saída na função, separadas por vírgula. Por exemplo, dada a equação de segundo grau: ax2+bx+ c = 0 pode-se criar uma função que retorna as raízes desta equação, com o código dado na Tabela 4.1: Tabela 4.1: Arquivo raizes.m function [r1, r2] = raizes (a, b, c) % Entradas: a, b, c (coeficientes da equação de 2o. grau) % Saídas: r1, r2 (raízes) delta = b^2 - 4 * a * c; r1 = ( -b + sqrt(delta) ) / (2 * a); r2 = ( -b - sqrt(delta) ) / (2 * a); O arquivo da Tabela 4.2 faz uso da função raizes.m. 5. CONTROLEDE EXECUÇÃO Em um determinado programa, muitas vezes torna-se necessário repetir um bloco de código ate que uma determinada condição seja verificada ou aindamudar a ordemde execução dos comandos. Para isso, é definido noMatlab declarações de controle condicional e controle de loop. 5.1 Declarações de controle condicional As declarações de controle condicional (if, else, switch) permitem selecionar quando umbloco de código deve ser executado. 14 Tabela 4.2: Arquivo principal clear all; clc; % definição dos parâmetros da eq. de 2o. grau: a*x^2 + b*x + c = 0 a = 1; b = -3; c = 2; [r, s] = raizes (a, b, c); v = [r s]'; disp('As raízes são:'); disp(v); 5.1.1 Declaração if A forma geral para o uso da declaracao if é a seguinte: if <expressão booleana 1> <sequência de comandos 1> elseif <expressão booleana 2> <sequência de comandos 2> else <sequência de comandos 3> end Quando a<expressão booleana 1> for verdadeira, as linhas de comandos definidas em<sequên- cia de comandos 1> serão executadas e, caso contrário, se a <expressão booleana 2> for verdadeira, os comandos definidos em <sequência de comandos 2> serão executados e, caso contrário, serão executadas os comandos definidos na <sequência de comandos 3>. O resul- tado da <expressão booleana> é verdadeiro ou falso e é definido a partir de operadores lógicos e relacionais, descritos na Tabela 5.1. Tabela 5.1: Operadores lógicos e relacionais Lógicos Relacionais & e < menor que | ou > maior que ~ nao > maior que =< menor ou igual >= maior ou igual == igual ~= diferente Uma formamais simples da declaração if é: 15 if <expressão booleana> <sequência de comandos> end Neste caso, a <sequência de comandos> será executada somente quando a <expressão boo- leana> for verdadeira. Um exemplo do uso da declaração if está na Tabela 5.2. Tabela 5.2: Exemplo do uso do if % Generate a random number a = randi(100, 1); % If it is even, divide by 2 if rem(a, 2) == 0 disp('a is even') b = a/2; end 5.1.2 Declaração switch Por outro lado, quando deseja-se um teste com relação a um conjunto de valores conhecidos, usa-se a declaração switch. Por exemplo: [dayNum, dayString] = weekday (date, 'long', 'local'); switch dayString case 'Segunda-feira' disp('Início da semana de trabalho') case 'Terça-feira' disp('Dia 2') case 'Quarta-feira' disp('Dia 3') case 'Quinta-feira' disp('Dia 4') case 'Sexta-feira' disp('Último dia da semana de trabalho') otherwise disp('Fim de semana!') end Tanto para if quanto para switch, o Matlab executa o código correspondente até a primeira condi- ção verdadeira, então termina o bloco. Cada declaração requerum end correspondente. 16 5.2 Declarações de controle de loop As declarações de controle de loop (for, while, continue, break) permitem controlar a exe- cução de loops no programa. 5.2.1 Declaração for O loop for repete um bloco de código um número fixo e predeterminado de vezes. Um end delimita a declaração. A forma geral do loop for e:: for <contador> = <valor inicial> : <incremento> : <valor final> <sequência de comandos> end onde <contador> é a variável de controle, <valor inicial> é o valor inicial da variável, <incre- mento> é o incremento dado à variável <contador>, podendo ser positivo ou negativo (quando o incremento for igual a 0, o loop não será executado) e <valor final> é omaior oumenor valor que a variável <contador> pode assumir. Um end correspondente delimita a declarações. A Tabela 5.3 mostra um exemplo do uso do for para loops agrupados. Tabela 5.3: Exemplo do uso do for for i = 1 : m for j = 1 : n H(i,j) = 1 / (i + j); end end 5.2.2 Declaração while O loop while repete umgrupo de declarações umnúmero indefinido de vezes, sob o controle de uma condição lógica. Um end correspondente delimita as declarações. A estrutura de um loop while e: while <expressão booleana> <sequência de comandos> end Na estrutura, a <sequência de comandos> sera executada enquanto a <expressão booleana> retornar um valor verdadeiro. A Tabela 5.4 apresenta um código para calcular a raiz do polinômio x3−2x−5 usando ométodo da bisseção. 17 Tabela 5.4: Exemplo do uso do while a = 0; fa = -Inf; b = 3; fb = Inf; while b - a > eps * b x = (a + b) / 2; fx = x^3 - 2 * x - 5; if sign(fx) == sign(fa) a = x; fa = fx; else b = x; fb = fx; end end 5.2.3 Declaração continue A declaração continue passa o controle para a próxima iteração do loop for ou while no qual aparece, saltando quaisquer declarações restantes. Isto também é válido para loops agrupados, ou seja, a execução continua no início do loop no qual a declaração continue está colocada. 5.2.4 Declaração break A declaração break permite terminar um loop for ou while. Em loops agrupados, break termina somente o loopmais interno. 6. SOLUÇÃODE EQUAÇÕESDIFERENCIAIS OMatlab possui funções nativas para resolução numérica de equações diferenciais, descritas na Ta- bela 6.1. Tabela 6.1: Funções de resolução de EDOs noMatlab ode45 Usamétodos de Runge-Kutta de quarta e quinta ordens simultaneamente para estimar o erro e o tamanho do passo. Use esta função como primeira escolha para resolver uma equação diferencial. ode23 Usa métodos de Runge-Kutta de segunda e terceira ordens simultaneamente para estimar o erro e o tamanho do passo. ode23 é computacionalmente mais leve do que ode45. ode113 Usa método de Adams-Bashforth-Moulton de ordem variável. Para problemas com pouca tolerância a erros ou problemas computacionalmente pesados. ode15s Se ode45 se torna um processo lento, a equação diferencial deve ser de um problema stiff. Neste caso use ode15s, ode23s, ode23t, ode23tb. 18 6.1 Equações diferenciais ordinárias OMatlab apenas calcula soluções numéricas de sistemas de equações diferenciais de 1.a ordem. Uma equação diferencial ordinária (EDO) deve ser formatada como: dy dt = f (t , y) com condição inicial y(t0)= y0, onde t é a variável independente e y é a variável dependente. Uma EDO, para ser resolvida usando as funções doMatlab, deve ser escrita em um arquivo definindo uma função. Por exemplo, a EDO y˙ +5y = 0 ⇒ y˙ =−5y deve ser escrita como a função da Tabela 6.2. Tabela 6.2: Definição de uma EDO function [yp] = problema1 (t, y) % Definição do problema yp = -5 * y; Obs.: mesmo que a variável t não apareça explicitamente na equação diferencial, deve ser colocado na definição da função. Para resolver EDOs de ordem superior, deve-se convertê-las, por intermédio de uma mudança de variáveis, em um sistema de EDOs de 1.a ordem. Por exemplo, a EDO de 2.a ordem: x¨+4x˙+6x = 0 com condições iniciais x(0)= x0 e x˙(0)= x˙0 deve ser convertida em um sistema de EDOs de primeira ordem: x˙1 = x2 x˙2 =−4x2−6x1 onde x1 = x e x2 = x˙ e condições iniciais x1(0)= x0 e x2(0)= x˙0. As variáveis em um sistema de EDOs são colocadas em forma de vetor coluna no Matlab. Assim, a função é escrita de acordo com a Ta- bela 6.3. Observe que esse sistema de EDOs de 1.a ordem deve ser escrito na forma de equação de estados. A solução deste sistema de EDOs pode ser obtida usando a função ode45. A sintaxe é dada por: [T, X] = ode45 (@funcao_edo, [t_inicial t_final], x0) onde: 19 Tabela 6.3: Definição de uma EDO de 2.a ordem function [xp] = problema2 (t, x) % Definição da EDO de 2a. ordem como um sistema de EDOs de 1a. ordem xp(1, 1) = x(2); xp(2, 1) = -4 * x(2) - 6 * x(1); I funcao_edo: nome da função que define as EDOs I [t_inicial t_final]: vetor com os valores inicial e final da variável independente I x0: vetor com os valores das condições iniciais As saídas da função ode45 são os vetores T, com os valores da variável independente, e X, matriz com os valores de cada variável do sistema de EDOs. Para resolver o sistema definido pelo código da Tabela 6.3, condições iniciais x1 = 3 e x2 = 0 e 0≤ t ≤ 5, usa-se o comando: >> [T, X] = ode45 (@problema2, [0 5], [3 ; 0]); A função ode45 retorna o vetor T de dimensão n×1 (n pode ser obtido com o comando n = size (T, 1)) e a matriz X de dimensão n×2, com os valores de x1 na primeira coluna e x2 na segunda coluna. Caso seja útil passar valores de parâmetros para a função que define a EDO, ela deve ser definida de acordo com o código da Tabela 6.4: Tabela 6.4: Definição de uma EDO passando os valores dos parâmetros function [xp] = problema3 (t, x, a, b) % Definição da EDO, passando os valores de a e b xp(1, 1) = x(2); xp(2, 1) = -a * x(2) - b * x(1); Dados os valores a = 3 e b = 1, a solução é obtida por: >> [T, X] = ode45 (@(t, x) problema2(t, x, 3, 1), [0 5], [3 ; 0]); 6.1.1 Exemplo 1 Seja o sistemamassa-mola-amortecedor da Figura 6.1. Este sistema é definido pela EDO: x¨(t )+ b k x˙(t )+ k m x(t )= 1 m f (t ) 20 m u(t ) x k b Figura 6.1: Sistemamassa-mola-amortecedor Escrevendo na representação de espaços de estados, com x1 = x(t ), x2 = x˙(t ) e y = x1 tem-se: x˙1 = x2 x˙2 =− k m x1− b m x2+ 1 m f (t ) y = x1 Dados os valores m = 1,5kg, b = 0,9Ns/m e k = 60N/m, desenhar os gráficos de x1 e x2 no Matlab considerando as condições iniciais x(0)= 0,05m e x˙(0)= 0m/s e f (t ) nula. 1)Definir o código da EDO noMatlab (arquivo mma.m, Tabela 6.5): Tabela 6.5: Arquivo mma.m function [xp] = mma (t, x) % Definição das EDOs do sistema massa-mola-amortecedor m = 1.5; % [kg] b = 0.9; % [Ns/m] k = 60; % [N/m] f = 0; % [N] xp(1, 1) = x(2); xp(2, 1) = -(k / m) * x(1) - (b / m) * x(2) + (1 / m) * f; 2) Programa principal (arquivo sim_mma.m) que resolve as EDOs e desenha os gráficos (Tabela 6.6). O resultado são os gráficos da Figura 6.2. Observe que a saída do sistema é o estado x1. 7. SISTEMASDE CONTROLE Os comandos apresentados neste capítulo fazem parte do Toolbox Control Systems, o qual deve estar instalado. 21 Tabela 6.6: Arquivo sim_mma.m clear all; clc; [T, X] = ode45 (@mma, [0 20], [0.05 ; 0]); % Resolve as EDOs figure; % Abre uma nova janela de gráfico plot (T, X(:, 1)); grid; xlabel ('Tempo [s]'); ylabel ('x [m]'); figure; % Abre outra janela de gráfico plot (T, X(:, 2)); grid; xlabel ('Tempo [s]'); ylabel ('\dot{x} [m]'); (a) Curva de x1 (b) Curva de x2 Figura 6.2: Gráficos do sistemamassa-mola-amortecedor 7.1 Espaço de estados noMatlab Um sistema de EDOs com coeficientes constantes pode representado no espaço de estados, da se- guinte forma: x˙=Ax+Bu y =Cx+Du onde x é um vetor contendo as variáveis de estado, u é a entrada, y é a saída, e A, B,C e D são matri- zes constantes. Este sistema pode ser definido no Matlab usando o comando ss(), especificando as matrizes A, B, C eD. 22 >> sys = ss(A, B, C, D); sys é um objeto que representa o sistema noMatlab. 7.2 Funções de transferência noMatlab Um função de transferência da forma: G(s)= b0s 3+b1s2+b2s+b3 a0s4+a1s3+a2s2+a3s+a4 pode ser definida no Matlab a partir dos polinômios do numerador e denominador, os quais devem ser declarados como um vetor com os coeficientes: >> num = [b0 b1 b2 b3]; >> den = [a0 a1 a2 a3 a4]; Em seguida, define-se a função de transferência pelo comando tf(): >> sys = tf(num, den); Uma forma alternativa de definir a função de transferência é: >> s = tf('s'); >> sys = (b0*s^3 + b1*s^2 + b2*s + b3) / (a0*s^4 + a1*s^3 + a2*s^2 + a3*s + a4); Damesma forma que o comando ss(), tf() retorna um objeto que representa o sistema noMatlab. 7.3 Respostas de um sistema Pode-se obter as respostas a umdegrau unitário, impulso ou uma entrada qualquer usando o sistema definido na variável sys com os seguintes comandos: I step(sys): produz a resposta e plota a resposta do sistema sys a um degrau unitário. I impluse(sys): produz e plota a resposta do sistema sys a um impulso unitário I lsim(sys, u, t): plota a resposta do sistema sys a uma entrada u no intervalo de tempo t I Definir o tempo t, de 0 a 4 s com 0,01 s de incremento t = 0 : 0.01 : 4; I Definir a entrada u u = sin(10 * t); 23 7.3.1 Exemplo 2 A representação no espaço de estados do exemplo anterior é dada por: x˙= [ 0 1 − km − bm ] x+ [ 0 1 m ] f (t ) y = [ 1 0 ] x considerando o estado como x= [ x(t ) x˙(t ) ]T . A resposta ao degrau pode ser obtida com o código do arquivo sim_mma2.m, Tabela 7.1. O comando step no script sim_mma2.m produz o gráfico da Figura 7.1. Tabela 7.1: Arquivo sim_mma2.m m = 1.5; % [kg] b = 0.9; % [Ns/m] k = 60; % [N/m] A = [0 1 ; -k/m -b/m]; B = [0 ; 1/m]; C = [1 0]; D = 0; sys = ss(A, B, C, D); step(sys); Figura 7.1: Resposta ao degrau unitário do sistemamassa-mola-amortecedor. 7.3.2 Exemplo 3 A equação diferencial que descreve o sistemamassa-mola-amortecedor dado na Subseção 6.1.1 é: x¨(t )+ b k x˙(t )+ k m x(t )= 1 m f (t ) 24 Para calcular a função de transferência do sistema, aplica-se a transformada de Laplace (com condi- ções iniciais nulas): s2X (s)+ b k sX (s)+ k m X (s)= 1 m F (s) Assim, tem-se a função de transferência: X (s) F (s) = 1 m s2+ bm s+ km Usando os valores dem, b e k definidos na Subseção 6.1.1, a resposta à rampaunitária pode ser obtida executando o script sim_mma3.m. Tabela 7.2: Arquivo sim_mma3.m m = 1.5; % [kg] b = 0.9; % [Ns/m] k = 60; % [N/m] num = 1/m; % Numerador da função de transferência den = [1 b/m k/m]; % Denominador da função de transferência sys = tf(num, den); % Função de transferência step(sys); O resultado deve ser o gráfico da Figura 7.2. Figura 7.2: Resposta ao degrau unitário do sistemamassa-mola-amortecedor. 25 Parte II Simulink 26 8. INTRODUÇÃO O Simulink é uma ferramenta integrante do Matlabque permite a modelagem, simulação e análise de sistemas dinâmicos. Sua interface é um ambiente gráfica baseado em diagramas de blocos e pos- sui bibliotecas de blocos configuráveis. O Simulink oferece integração com o ambiente do Matlab, permitindo que se aproveite as vantagens de ambos os softwares. 9. INÍCIO A partir do prompt doMatlab, pode-se iniciar o Simulink com o comando: >> simulink ou a partir do ícone na janela principal do Matlab indicado na Figura 9.1. Figura 9.1: Janela principal do Matlab com o ícone do Simulink. A janela principal do Simulink mostra um conjunto de blocos de comando divididos em bibliotecas, como apresentado na Figura 9.2. A janela de trabalho, mostrada na Figura 9.3, é criada quando se inicia um novo modelo de sistemas ou abre um existente, pelos ícones indicados na Figura 9.2. Os modelos são construídos na janela de trabalho a partir dos blocos de comando das bibliotecas, 27 Figura 9.2: Janela principal do Simulink. Figura 9.3: Janela de trabalho do Simulink. 28 arrastando ou copiando-os para a janela de trabalho. A conexão entre os blocos é feita arrastando a saída de um bloco até a entrada de outro. Um clique duplo sobre os blocos abre a janela de configu- ração dos parâmetros, específica para cada bloco. Para iniciar a simulação, basta usar a opção 'Simulation > Run' domenu principal. 9.1 Organização Uma forma de organizar os blocos quando o sistema se torna complexo é o agrupamento de blocos em subsistemas. Para isso, arraste uma área de seleção sobre os blocos desejados e selecione omenu 'Diagram > Subsystem & Model Reference > Create Subsystem from Selection'. Os sinais entram e saem dos subsistemas usando as portas 'Inport' e 'Outport', respectivamente. Pode-se adicionar comentários na janela de trabalho para ajudar a compreensão do sistema. Um clique duplo cria uma área na qual pode-se escrever um texto. Os nomes dos blocos também podem ser alterados. A seleção domenu 'Display > Signal & Ports > Signal Dimensions' permite visualizar a dimensão de cada sinal do sistema. 9.2 Configurações da simulação O Simulink, como todos os programas que de simulação de sistemas dinâmicos, utiliza-se de algo- ritmos de integração para resolver numericamente as equações diferenciais do sistema. A janela de configuração da simulação (Figura 9.4), acessada a partir do menu 'Simulation > Model Con- figuration Parameters', permite ao usuário fazer a configuração do tempo de simulação, inte- grador, passo de integração tolerâncias, entre outras características. Figura 9.4: Janela de configuração da simulação. 29 O Simulink utiliza algoritmos de passo variável por padrão, isto é, o passo de integração varia entre os valores mínimo e máximo da janela de parâmetros conforme um algoritmo interno de escolha, relacionado com os valores dos parâmetros de tolerância. Pode-se alterar para algoritmos de passo fixo, se necessário. É importante sempre verificar se as configurações estão adequadas e a simulação ocorre como esperado. 10. INTERAÇÃODO SIMULINK COMOMATLAB Variáveis definidas na área de trabalho do Matlab podem ser usadas pelo Simulink. Para isso, deve- se previamente definir o nome e o valor da variável no Matlab e configurar o bloco de comando para usar esta variável. É umaprática comumdefinir os valores de constantes emum script doMatlab para usá-las em simulações do Simulink. Pode-se tambémusar dados usando os blocos From Workspace e From File para carregá-los no Simulink. O Simulink envia variáveis para a área de trabalho do Matlabpor meio do bloco To Workspace. O bloco To File salva o sinal em um arquivo no formato .mat. 11. ALGUNS BLOCOSDE COMANDO A biblioteca de blocos é organizada em grupos funcionais: I Sources: blocos para a geração de sinais de entrada I Sinks: blocos para a coleta e visualização de sinais I Math: blocos para manipulação matemática I Continuous: blocos para a definição de funções de transferências contínuas Na biblioteca Source, os blocos mais comumente utilizados são: I Constant: gerar um valor constante I Step: gerar uma função degrau I Ramp: gerar uma função rampa I Sine Wave: gerar uma função seniodal I From Workspace: sinal previamente gerado na área de trabalho doMatlab I Clock: tempo em cada passo de simulação Na biblioteca Sinks, tem-se: I Scope: mostra um sinal como função do tempo I XYGraph: gráfico do sinal y como função do sinal x I To Workspace: salva o sinal na área de trabalho doMatlab 30 Na biblioteca Continuous, tem-se: I Transfer Fcn: permite definir uma função de transferência especificando os coeficientes dos polinômiosdo numerador e denominador I Zero-Pole: permite definir uma função de transferência especificando os polos e zeros 12. EXEMPLOS 12.1 Exemplo 4 A implementação em Simulink da equação diferencial que descreve o sistema massa-mola-amorte- cedor do exemplo da Subseção 6.1.1 está mostrada na Figura 12.1. Os nomes originais dos blocos foram mantidos e os valores das variáveism, b e k devem ser previamente definidos na área de tra- balho doMatlab. Figura 12.1: Sistemamassa-mola-amortecedor. As respostas para x ('x') e x˙ ('xp') dadas as condições iniciais podem ser vistas nos blocos 'Scope' correspondentes (Figura 12.2). 12.2 Exemplo 5 A resposta do sistema massa-mola-amortecedor pode ser obtida usando o bloco 'Transfer Fcn' para definir a função de transferência do sistema no Simulink. Este bloco deve ser configurado com os polinômios do numerador e denominador da função de transferência do sistema (Subseção 7.3.2). A implementação em Simulink está mostrada na Figura 12.3 e a resposta ao degrau unitário está na Figura 12.4. 31 (a) Resposta de 'x' (b) Resposta de 'xp' Figura 12.2: Respostas do sistemamassa-mola-amortecedor Figura 12.3: Sistemamassa-mola-amortecedor definido pela função de transferência. 32 Figura 12.4: Resposta ao degrau unitário do sistemamassa-mola-amortecedor. 33 I Matlab Introdução Comandos básicos Vetores e matrizes Gráficos Script do Matlab Funções Controle de execução Declarações de controle condicional Declaração if Declaração switch Declarações de controle de loop Declaração for Declaração while Declaração continue Declaração break Solução de equações diferenciais Equações diferenciais ordinárias Exemplo 1 Sistemas de controle Espaço de estados no Matlab Funções de transferência no Matlab Respostas de um sistema Exemplo 2 Exemplo 3 II Simulink Introdução Início Organização Configurações da simulação Interação do Simulink com o Matlab Alguns blocos de comando Exemplos Exemplo 4 Exemplo 5
Compartilhar