Mecatron – Projetos e Consultoria JúniorSolução de problemas usando Matlab® Daniel Augusto Pereira Alysson Fernandes Mazoni 2006 1 Sumário Sistemas lineares.................................................................................................................................. 3 Problema exemplo........................................................................................................................... 3 Espaço de estados............................................................................................................................ 4 Função de transferência................................................................................................................... 8 Conversão de formas de representação............................................................................................8 Pólos, zeros, freqüência natural e fator de amortecimento............................................................. 9 Reposta a entradas padronizadas................................................................................................... 10 Resposta em freqüência................................................................................................................. 13 A ferramenta LTIview................................................................................................................... 16 Controle linear básico.................................................................................................................... 17 Controle proporcional............................................................................................................... 18 Outras configurações de controle..............................................................................................22 Ferramenta SISOtool (SISO – Single input single output)............................................................22 Simulação de sistemas de controle no Simulink................................................................................ 25 Otimização..........................................................................................................................................34 Problema exemplo ........................................................................................................................ 35 Otimização multiobjetivo.............................................................................................................. 36 Problema exemplo.....................................................................................................................37 Computação simbólica....................................................................................................................... 39 Exemplo: sistemas lineares............................................................................................................ 40 Exemplo: equações diferenciais.....................................................................................................41 2 Sistemas lineares Ao chamar um sistema físico de linear estamos impondo sobre ele a hipótese da validade do princípio da superposição, ou seja, para uma combinação linear das entradas, a saída é uma combinação linear das saídas para cada entrada individualmente. Matematicamente, um sistema é linear se suas equações de evolução dinâmica (ao longo do tempo) são difenrenciais lineares e ordinárias. Um sem número de sistemas de importância na engenharia são tratados como lineares. A exemplo: circuitos analógicos, motores de corrente contínua, sistema de troca de calor e estruturas flexíveis (metálica); outros são considerados lineares por trechos, comportam-se como lineares em uma faixa restrita de operação, como estruturas não lineares, atuadores hidráulicos, entre outros. Problema exemplo Para utilizar as funções do Matlab apropriadas para simulação e controle de sistemas lineares, utilizaremos o exemplo bastante comum de controle de um motor de corrente contínua. A representação utilizada aqui é a usual de um conjunto de equações diferenciais com o tempo como variável dependente, o que configura o que se chama de sistema dinâmico em tempo contínuo. Um esquema da interação entre as partes elétrica e mecânica do motor é mostrado na figura abaixo: Para esse modelo são escritas as equações diferenciais: J ˙ o+co−K i a =0 L ˙ i a +¦ R a +R s )i a +K o=V ˙ 0=o em que 0 é a posição angular do rotor, o , a velocidade; J é a inércia associada; K, a constante eletromecânica; L, a indutância da armadura, R a , a resistência de armadura; R s , resistência em série com a armadura; e i a é a corrente de armadura. Os valores medidos para um motor em particular são mostrados na tabela: 3 Parâmetro Valor J 3,4E-4 Kg.m 2 L 5,03E-3 H K 1,3E-2 N.m/A c 6,7E-5 N.s/m R a 4,03 D R s 1 D Espaço de estados Como é discutido em cursos de introdução a sistemas lineares e modelagem, um sistema como esse admite a conversão para forma de espaço de estados, o que corresponde a escrevê-lo na forma de um conjunto de equações diferenciais de primeira ordem. Para um sistema linear, isso leva, em notação vetorial, a ˙ x=A x+Bu y=C x+Du em que x representa um vetor com as funções no tempo que são soluções do sistema de equações diferenciais e é chamado vetor de estado. y é o vetor com as funções do tempo que se deseja observar: as saídas. u, é o vetor com sinais impostos ao sistema descrito ao longo do tempo de observação, é o vetor de entradas. As matrizes A, B, C e D contêm a representação do sistema dinâmico. Um resultado elementar da teoria de sistemas lineares é o de que existem infinitas matrizes dessa forma que representam a mesma relação entre entrada e saída (o mesmo sistema), bastando escolher vetores de estado diferentes, ajustados entre um e outro por transformações lineares. No caso particular em que o vetor de estados é constituído de variáveis físicas, diz-se que se possui um modelo físico nas matrizes citadas. Para o caso do motor de corrente contínua citado um modelo físico pode ser escrito como: [ ˙ i a ˙ o ˙ 0 | = [ −¦ R a +R s ) L −K L 0 K J −c J 0 0 1 0 | [ i a o 0 | + [ 1 L 0 0 | V y=[ 0 1 0| [ i a o 0 | +[ 0| V Dessa forma tem-se a entrada representada por V, a saída pela velocidade angular e o vetor de estados dados pela seqüência corrente, velocidade e posição. A saída observada, a velocidade angular, é definida pela forma como foi escrita a matriz C. No Matlab, sugere-se declarar o modelo como: 4 >> J = 3.4e-4; >> c = 6.7e-5; >> K = 1.3e-2; >> L = 5.03e-3; >> R = 5.03; >> A = [-R/L -K/L 0; K/J -c/J 0; 0 1 0]; >> B = [1/L; 0; 0]; >> C = [0 1 0]; >> D =[0]; Como já dito, há outras formas possíveis de representar a mesma relação matemática entre a entrada e a saída do sistema, porém com interpretações diferentes para os estados. Qualquer uma dessas representações pode ser usada para calcular, a cada instante de tempo desejado, a evolução dos estados no tempo usando os método usuais de integração direta. Dadas as matrizes, isso seria conseguido definindo uma função e usando um método como o ode45. Para tanto, é necessário também definir uma entrada, por exemplo senoidal. function u=entrada(t) u=sin(t); function z = f_motor(t,x); global A B u = entrada(t); z = A*x+B*u; >> tin = 0; % tempo inicial >> tfin = 10; % tempo final >> x0 = [0;0;0]; % condição inicial >> global A B >> [t,y] = ode45('f_motor',[tin tfin],x0); Note que as matrizes, usadas recorrentemente dentro e fora da função, foram definidas como variáveis globais. A figura abaixo mostra as respostas temporais do sistema, ou seja, mostra a evolução no tempo da corrente de armadura, da velocidade angular e da posição angular. Observa- se que foi calculada a evolução temporal de todos os estados. >> u = entrada(t); >> figure, plot(t,y,t,u); >> legend('Corrente de armadura [A]' , 'Velocidade Angular [rad/s]' , 'Posição angular [rad]' , 'Tensão de alimentação [V]'); 5 O Matlab contém estruturas de dados específicas para lidar com sistemas lineares representados nesse padrão. Um sistema linear é declarado numa estrutura de Matlab que mantém a representação em espaço de estados com o comando: >> p = ss(A,B,C,D) em que p passa a ser uma variável representando um sistema linear. A partir dessa estrutura de dados, existem comandos no Matlab específicos para o cálculo da resposta temporal de um sistema. No caso da estrutura p definida o seguinte código pode ser utlizado: >> t = 0:0.1:10; >> u = sin(t); >> x0 = [0;0;0]; >> figure, lsim(p,u,t,x0) Nota-se que é visualizada apenas a saída selecionada pela matriz C do modelo no espaço de estados. Caso seja de interesse calcular a evolução temporal de todos os estados, bastaria redefinir a matriz C, criar sua nova representação no espaço de estados e então utilizar novamente o comando lsim. >> C2=[1 0 0;0 1 0;0 0 1]; % Cálculo de todas as possíveis saídas >> p2 = ss(A,B,C2,D); >> figure, lsim(p2,u,t,x0) Verifica-se a nova resposta na figura com as três saídas. Assim, fica evidente a importância do conhecimento da posição de cada estado dentro do vetor de variáveis de estado para a correta observação da saída desejada. 6 0 1 2 3 4 5 6 7 8 9 1 0 - 1 0 - 5 0 5 1 0 1 5 2 0 2 5 3 0 C o r r e n t e d e a r m a d u r a [ A ] V e l o c i d a d e A n g u l a r [ r a d / s ] P o s i ç ã o a n g u l a r [ r a d ] T e n s ã o d e a l i m e n t a ç ã o [ V ] 7 0 1 2 3 4 5 6 7 8 9 1 0 - 8 - 6 - 4 - 2 0 2 4 6 8 1 0 1 2 L i n e a r S i m u l a t i o n R e s u l t s T i m e ( s e c ) A m p l i t u d e - 1 - 0 . 5 0 0 . 5 1 T o : O u t ( 1 ) - 1 0 - 5 0 5 1 0 1 5 2 0 T o : O u t ( 2 ) 0 1 2 3 4 5 6 7 8 9 1 0 - 2 0 - 1 0 0 1 0 2 0 3 0 4 0 T o : O u t ( 3 ) L i n e a r S i m u l a t i o n R e s u l t s T i m e ( s e c ) A m p l it u d e Os gráficos gerados a partir do comando lsim podem ser editados clicando-se o botão direito do mouse e selecionando as opções desejadas. Caso o interesse seja armazenar os valores no tempo da saída em um vetor, ao invés de traçar um gráfico, basta fazer o seguinte: >> y = lsim(p,u,t,x0); Função de transferência Outra maneira de representar um sistema linear é através de funções de transferência. A função de transferência é definida como a razão entre a transformada de Laplace da função de saída sobre a transformada de Laplace da função da entrada. Conforme estudado no cursos elementares de equações diferenciais, essa razão, para condições iniciais nulas, pode ser facilmente obtida das equações diferenciais do sistema dinâmico representado. Há uma função de transferência para cada par de entrada e saída do sistema. Para o sistema do motor de corrente contínua a função de transferência entre a alimentação e a velocidade é escrita como o¦ s) V ¦ s) = K /¦ JL) s²+ ¦ ¦ R a +R s ) L + c J ) s+ c¦ R a +R s ) JL + K 2 JL . A transformada de Laplace de um sistema linear e invariante no tempo é sempre uma razão de polinômios na variável de Laplace (s). Desse modo, funções de transferência são especificadas através dos coeficientes dos polinômios do numerador e do denominador. A função de transferência é uma maneira unívoca de representar o sistema. Em código de Matlab: >> np = [K/(J*L)]; >> dp =[1 ((Ra+Rs)/L+c/J) c*(Ra+Rs)/(J*L)+K^2/(J*L)]; >> H = tf(np,dp) Alternativamente, pode ser definida da seguinte forma: >> s = tf('s'); >> H = (K/(J*L))/(s^2 + ((Ra+Rs)/L+c/J)*s + c*(Ra+Rs)/(J*L) + K^2/(J*L)) A variável criada (H) é também um sistema linear, porém representado na forma de função de transferência. Os comandos de manipulação, caracterização e simulação de sistemas lineares que serão vistos a seguir aplicam-se tanto a uma quanto a outra forma de representação. Conversão de formas de representação As formas de representação definidas pelos comandos ss e tf podem ser convertidas de uma para a outra: >> [a,b,c,d] = tf2ss(np,dp); >> sys_mat = ss(a,b,c,d); 8 >> sys_fisico = ss(A,B,C,D); >> [num,den]=ss2tf(a,b,c,d); >> H=tf(num,den) >> [num,den]=ss2tf(A,B,C,D); >> H=tf(num,den) É importante observar que as matrizes a, b, c e d fornecidas pelo comando tf2ss não são iguais àquelas deduzidas a partir do modelo físico (A, B, C e D). Isso ocorre porque a respresentação de um sistema no espaço de estados não é única e a representação padrão do Matlab não é, e nem poderia ser, igual à representação baseada no modelo físico (intuitivamente mais óbvia). É possível checar que os sistemas descritos pelas difenentes matrizes no espaço de estados são os mesmos. Para isso, basta verificar que os autovalores da matriz A (e consequentemente os pólos do sistema) são os mesmos para ambas as representações: >> eig(A) >> eig(a) Pólos, zeros, freqüência natural e fator de amortecimento Os pólos e zeros de um sistema linear podem ser obtidos diretamente a partir da função de transferência do mesmo, calculando-se as raízes dos polinômios do denominador e do numerador, respectivamente: >> polos = roots(dp) >> zeros = roots(np) Os pólos podem ser obtidos através da matriz A do sistema no espaço de estados pois são iguais aos autovalores dessa matriz: >> polos = eig(A) Existe ainda um comando específico para verificar os pólos de um sistema: >> pole(H) >> pole(sys_mat) Graficamente é possível verificar a posição dos pólos e zeros no plano complexo: >> pzmap(H) >> pzmap(sys_mat) 9 Conhecidos os pólos e os zeros de um dado sistema, além de seu ganho estático (ganho em regime permanente, ou seja, s = 0 na função de transferência), pode-se definir um outra forma de representação de sistemas lineares: >> k=dcgain(H); >> z=roots(np); >> p=roots(dp); >> zp = zpk (z,p,k) Para um sistema definido em uma variável de uma certa estrutura (função de transferência ou espaço de estados) é possível calcular a freqüência natural e o fator de amortecimento associados a cada um dos pólos: >> damp(H) >> damp(sys_fisico) >> [wn,z,polos]=damp(H) Reposta a entradas padronizadas Uma vez com o sistema definido em uma variável, as repostas a entradas notáveis da teoria de sistemas lineares, usadas para caracterizar o compostamento do sistema, são obtidas imediatamente. Por exemplo, a resposta ao degrau: >> step(p) 10 - 1 0 0 0 - 9 0 0 - 8 0 0 - 7 0 0 - 6 0 0 - 5 0 0 - 4 0 0 - 3 0 0 - 2 0 0 - 1 0 0 0 - 1 - 0 . 8 - 0 . 6 - 0 . 4 - 0 . 2 0 0 . 2 0 . 4 0 . 6 0 . 8 1 P o l e - Z e r o M a p R e a l A x i s I m a g i n a r y A x i s >> step(H) Com esse comando é traçado o gráfico da resposta ao degrau do sistema. Uma das vantagens da utilização da função step é a possibilidade de avaliar diretamente no gráfico os parâmetros da resposta ao degrau (sobressinal, tempo de estabilização, tempo de subida e valor de regime). Para isso, basta pressionar o botão direito do mouse, selecionar a opção characteristics e em seguida selecionar os parâmetros desejados (Peak Response, Settling Time, Rise Rime, Steady State). Ou ainda, pode-se desejar obter os valores no tempo da resposta e não traçar o gráfico: >> [y,t] = step(p); >> [y,t] = step(H); Assim é possível armazernar os valores desejados para cálculos futuros ou para traçar gráficos de forma mais conveniente. Outro exemplo clásssico é a resposta ao impulso: >> impulse(p) >> impulse(s) >> [y,t] = impulse(p); >> [y,t] = impulse(s); O gráfico gerado pela função impulse também pode ser editado clicando-se o botão direito do mouse. 11 12 S t e p R e s p o n s e T i m e ( s e c ) A m p l i t u d e 0 2 4 6 8 1 0 1 2 1 4 1 6 1 8 2 0 0 5 1 0 1 5 2 0 2 5 3 0 S y s t e m : H F i n a l V a l u e : 2 5 . 7 S y s t e m : H S e t t l i n g T i m e ( s e c ) : 1 3 . 2 S y s t e m : H R i s e T i m e ( s e c ) : 7 . 4 3 I m p u l s e R e s p o n s e T i m e ( s e c ) A m p l i t u d e 0 2 4 6 8 1 0 1 2 1 4 1 6 1 8 2 0 0 1 2 3 4 5 6 7 8 S y s t e m : H P e a k a m p l i t u d e : 7 . 5 2 A t t i m e ( s e c ) : 0 . 0 3 7 3 S y s t e m : H S e t t l i n g T i m e ( s e c ) : 1 3 . 3 Resposta em freqüência O termo resposta em freqüência significa a resposta em regime permanente de um sistema a uma entrada senoidal. Nos métodos de resposta em freqüência varia-se a freqüência do sinal de entrada dentro de um certo intervalo e estuda-se a resposta resultante. Uma das vantagens dos métodos de resposta em freqüência é a possibilidade de se utilizar os dados obtidos diretamente a partir das medições em um certo sistema físico sem necessitar recorrer a modelos matemáticos. Os métodos de resposta em freqüência foram desenvolvidos no período entre 1930 e 1940 por Nyquist, Bode, Nichols e muitos outros. Esses métodos são dos mais poderosos na teoria de controle convencional. As respostas em regime permanente às entradas senoidais podem ser obtidas diretamente a partir da substituição de s por na jω função de transferência, onde ω é a freqüência. Dessa forma, a resposta em regime permanente é dada por: H¦ j o)=Me j ! onde M é o módulo da função de transferência senoidal (ou relação de amplitude entre a entrada e a saída) e φ é a defasagem (ou diferença de fase entre a entrada e a saída). Ressalta-se que qualquer número complexo pode ser escrito em função um módulo e uma fase. O diagrama de Bode é constituído de dois gráficos: um é o gráfico do módulo em dB (20 log |H(jω)|) de uma função de transferência senoidal; o outro é o gráfico do ângulo de fase (em graus). Ambos são traçados em relação à freqüência em escala logarítmica. Ou seja, os gráficos são traçados a partir do cômputo dos valores do módulo e da fase para toda uma faixa de freqüências. A principal vantagem de se utilizar o diagrama de Bode é que a multiplicação dos módulos pode ser convertida em soma. Além disso, as curvas podem ser traçadas a partir de aproximações assintóticas simples. A expansão da faixa de baixas freqüências pelo uso da escala logarítmica de freqüência é muito vantajosa, visto que as características dos sistemas em baixas freqüências, na prática, são as mais importantes. É muito simples obter o diagrama de Bode no Matlab. O código em Matlab a seguir mostra duas formas de se obter graficamente o diagrama utilizando a função bode. >> figure, bode(H) >> w = 0:0.01:10e4; >> [mag,phase] = bode(H,w); >> magdb = zeros(1,length(mag)); % ajuste de dimensão >> phase_mod = zeros(1,length(phase)); % ajuste de dimensão >> magdb(1,:) = 20*log10(mag(1,1,:)); >> phase_mod(1,:) = phase(1,1,:); >> figure, subplot(2,1,1), semilogx(w,magdb), axis([0 10e4 -150 50]) >> subplot(2,1,2), semilogx(w,phase_mod) 13 14 - 1 5 0 - 1 0 0 - 5 0 0 5 0 M a g n i t u d e ( d B ) 1 0 - 2 1 0 - 1 1 0 0 1 0 1 1 0 2 1 0 3 1 0 4 1 0 5 - 1 8 0 - 1 3 5 - 9 0 - 4 5 0 P h a s e ( d e g ) B o d e D i a g r a m F r e q u e n c y ( r a d / s e c ) Para analisar a estabilidade de um sistema linear pode ser utilizado o diagrama de Nyquist, que é o lugar geométrico de H(jω) no plano complexo à medida que ω varia de -∞ a +∞. Νo gráfico é possível perceber a marcação do ponto -1 no eixo real. Esse ponto é fundamental para a análise da estabilidade do sistema. Sem entrar em detalhes, nesse caso percebe-se que o sistema é estável porque o ponto -1+j0 não é envolvido pela curva fechada que representa o lugar geométrico de H(jω). 15 1 0 - 2 1 0 0 1 0 2 1 0 4 - 1 5 0 - 1 0 0 - 5 0 0 5 0 1 0 - 2 1 0 0 1 0 2 1 0 4 1 0 6 - 2 0 0 - 1 5 0 - 1 0 0 - 5 0 0 A ferramenta LTIview As funcionalidades de análise de sistemas LIT (lineares invariantes no tempo) são centralizadas na ferramenta LTIview, que permite acessar diversos tipos de gráficos já vistos, como dagrama de Bode, de Nyquist, resposta ao degrau, diagrama de lugar das raízes e outras como carta de Nichols e diagrama de valor singular. Nada pode ser alterado no sistema, esse é apenas um gerenciador gráfico para as diversas abordagens de visualizar um sistema LIT. É acessada por: >> ltiview Usando o menu Edit – Plot configurations escolhe-se quatro gráficos por janela e as opções de resposta seguintes na ordem: resposta ao degrau, resposta ao impulso, diagrama de bode em magnitude e diagrama de Nyquist. A configuração e as respostas obtidas são mostradas nas duas figuras abaixo. 16 - 5 0 5 1 0 1 5 2 0 2 5 3 0 - 1 5 - 1 0 - 5 0 5 1 0 1 5 N y q u i s t D i a g r a m R e a l A x i s I m a g in a r y A x i s Controle linear básico Um dos objetivos de se obter um modelo de um sistema linear é projetar um controlador ou compensador para que se obtenham algumas características particulares na sua resposta. O caso mais comum de objetivo de controle é o regulador: um sistema que tem o objetivo de levar a resposta do sistema a zero em um tempo finito diante de qualquer entrada, ou tão próximo disso quanto possível. Já o controlador chamado rastreador tem a função de fazer a saída do sistema acompanhar a sua entrada, da forma mais próxima possível, para qualquer entrada. É comum denominar o sistema a ser controlado de planta e a configuração com planta e controlador de malha fechada. A teoria de controle de sistemas lineares é extensa e ainda em desenvolvimento, porém, pode-se dizer que a configuração de controle mais comum, ou seja, a conexão lógica e física entre um sistema e o seu controlador mais recorrente, é a seguinte: 17 Essa configuração corresponde ao controle em realimentação de saída. O controlador é um sistema linear que dispõe da informação da saída da planta. A entrada da planta com o controlador passa a ser a diferença entre a entrada original e o sinal de controle. Há uma infinidade de outras configurações possíveis, por exemplo: em que o controlador recebe o sinal de erro, ou seja, a diferença entre a entrada e a saída da planta. Controle proporcional O primeiro controlador possível é o controlador proporcional, representado por uma constante multiplicativa na segunda configuração mostrada acima. Isto é, regula-se o controle como um múltiplo do sinal de erro. Para ajustar o sinal o comportamento do sistema controlado pelos pólos que ele possui pode- se usar o diagrama no lugar das raízes. Esse diagrama traça a localização dos pólos do sistema quando há um controlador proporcional. Variando-se o ganho desse controlador, os pólos variam; o gráfico resultante é o citado diagrama. Ou seja, o ganha proporcional altera a localização dos pólos no plano complexo. Para o sistema do motor de corrente contínua que usamos como exemplo, o diagrama de lugar das raízes produzido pode ser usado para ajustar um ganho de 32,9 levando a pólos de malha fechada complexos e de parte real -500 e imaginária 15,8. Esse valor foi escolhido ao acaso apenas para ilustração, levando-se em conta obviamente que o ganho deve levar a pólos de malha fechada que mantenham o sistema estável (pólos no semiplano esquerdo do plano complexo). >> rlocus(p) 18 Planta Controlador Saída Entrada Planta Controlador Saída Entrada Para se obter a malha fechada como variável usa-se o comando: >> mf = feedback(p,32.9) Nesse caso, a variável recém criada é um sistema linear que representa o motor original com o controlador proporcional. Nota-se que esse controlador está inserido no ramo da realimentação (conforme a primeira figura dos diagramas de controle). Podem ser traçados sua resposta ao impulso e mapa de pólos e zeros para verificar as características do novo sistema com a inclusão do controlador projetado. >> step(mf) >> pzmap(mf) 19 A posição atingida ao final das variações é próxima de 0,03, distante do valor do degrau (1). Esse erro pode ser corrigido multiplicando a entrada do sistema por um valor de ajuste. No mapa de pólos e zeros, pólos são representados por X e zeros por círculos. São visualizados para esse caso, três pólos (um na origem e um par complexo conjugado com parte real -500 e imaginária 16,9) e um zero na origem. Verificou-se que há uma difenrença na parte imaginária, que foi definida anteriormente como sendo 15,8. Isso surgiu devido à forma do diagrama, que possui uma mudança abrupta nessa 20 região, ou seja, é apenas uma erro devido à forma como é feita a interpolação dos pontos do gráfico. Uma outra abordagem seria utilizar o modelo com a saída em posição e não em velocidade. O diagrama para esse caso, depois de aproximado por zoom: Usando o ganho de 11,8 o sistema obtido possui o seguinte comportamento de resposta ao degrau. 21 A figura mostra um sistema de elevada freqüência natural (com oscilações rápidas) comparativamente com o primeiro caso. Usando o clique direito pode-se marcar características padrão da resposta do sistema, como o tempo de estabilização ou o valor de regime permanente. Outras configurações de controle Outros tipos de controlador e configurações são usadas. O primeiro passo nesse sentido é supor um controlador que não é estático (um ganho) mas um sistema também dinâmico. Os mais comuns são os controladores PID e avanço-atraso. Seus médotos de projeto podem ser executados em Matlab usando os comandos citados e testando a resposta. Ferramenta SISOtool (SISO – Single input single output) O projeto de sistemas de controle pode fazer uso da janela de funções acessada por: >> sisotool Acessa-se o menu File – Import para obter a variável com os dados do sistema. Ou, já informando o sistema a ser analisado: >> sisotool(H) 22 Na janela que se abre na parte superior direita há um diagrama de blocos indicando qual a estrutura de controle usada. Clicando sobre o botão FS as posições dos blocos são alteradas. Nota-se que são considerados os seguintes tipos de bloco: a planta (G), o sensor (H – caso precise ser levado em conta no modelo), um pré-filtro da entrada (F) e o controlador (C). A função do sensor tem o objetivo de modelar a dinâmica do transdutor utilizado para medir a saída do sistema quando da modelagem de uma planta real. O pré-filtro simula a característica de limitação em banda de freqüência do sinal que se pode impor à planta e ao controlador. No caso aqui apresentado supõe-se que o sensor mede perfeitamente, sem atraso e sem ganho a saída e que a entrada não possuirá componentes em freqüência que não possam ser realmente impostas à planta e ao controlador. Ou seja, F = H = 1. À esquerda mostra-se a forma do controlador a ser ajustada (current compensator). Abaixo, os três gráficos padrão são o diagrama do lugar das raízes e os dois gráficos do diagrama de Bode. O SISOtool se aplica apenas a sistemas com uma entrada e uma saída (como diz o nome em inglês). Sua operação consiste em escolher uma forma no domínio de Laplace para o controlador e ajustar seus parâmetros variando características requeridas nos gráficos de resposta mostrados. Usando o modelo do motor com saída em velocidade e a configuração de controle fornecida pela janela inicial, clica-se sobre a caixa de edição do controlador. Alí pode-se escolher a função de transferência desejada acrescentado ou retirando pólos e zeros. Para adicionar pólos ou zeros reais ou imaginários basta clicar no botão correspondente e digitar o valor inicial desejado. Para excluir, marca-se a opção delete. 23 Sugere-se incluir um pólo e um zero reais e negativos. Essa configuração corresponde aos controladores em avanço ou em atraso. Ou seja, um controlador com a seguinte função de transferência: C¦ s)=K s+z s+p . Escolhida a estrutura do controlador (clicando em OK), a ferramenta permite alterar qualquer desses três parâmetros dinamicamente. Nos gráficos de resposta mostrados basta clicar e arrastar os elementos que se deseja alterar e observar ar mudanças correspondentes nos outros gráficos. Pólos de malha fechada são representados por quadrados. Pólos do controlador por X e zeros do controlador por círculos. Todos esses elementos pode ser arrastados com o mouse e as alterações correspondentes serão efetuadas. A curva de resposta do diagrama de Bode à direita pode ser arrastada para cima ou para baixo, mudando a banda de passagem e o ganho do controlador. Um exemplo de teste assim com o sistema exemplo pode levar ao gráfico mostrado abaixo: 24 Os pólos e zeros do controlador podem ser acrescntados ou retirados também usando o clique direito sobre um dos gráficos e add pole/zero ou delete pole/zero. Os casos de derivador (differentiator) ou integrador (integrator) presentes por exemplo em um controlador PID podem ser acrescentador diretamente. Outros gráficos podem ser mostrados na janela do SISOtool usando o menu View e escolhendo o gráfico ou dado a ser mostrado. No menu Analysis pode-se acessar a resposta do sistema em malha fechada invocando o LTIview, por exemplo, a resposta ao degrau é obtida em uma nova janela em Analysis – Rejection of step disturbance. Simulação de sistemas de controle no Simulink Os sistemas de controle trabalhados anteriormente podem ser simulados através do Simulink. Nota-se que os controladores devem ser previamente projetados porque o Simulink é uma ferramenta de simulação e de suporte à análise. O primeiro caso de simulação a ser abordado é o controle proporcional da velocidade angular do mesmo motor de corrente contínua que vem sendo utilizado. Nesse caso, há duas diferentes maneiras de se posicionar o controlador: no ramo direto (amplificando o sinal de erro que entra na planta) ou no ramo inverso (amplificando o sinal de saída enviado para realimentação). As 25 duas hipóteses foram simuladas. Para tanto, utilizou-se o mesmo ganho proporcional (Kp) projetado anteriormente, ou seja, um ganho de 32,9. A figura a seguir mostra os dois esquemas de controle proporcional utilizados para simulação. Para a simulação, é utilizada como entrada uma função do tipo degrau unitário. Esse tipo de entrada é gerada a partir do bloco Step disponível na opção Sources da biblioteca de blocos. Ao ser inserido na área de criação, o bloco pode ser editado clicando-se duas vezes sobre o mesmo. Aqui o valor do degrau é mantido unitário, mas caso fosse necessário poderia ser escolhido uma “amplitude” diferente de 1 e também poderia ser alterado o instante no qual o degrau é aplicado. 26 O sistema sob controle (motor CC) é definido a partir de seu modelo de estados (matrizes A, B, C e D) utilizando-se o bloco State-Space encontrado na opção Continuous. É necessário duplo clique sobre a caixa inserida para que se defina as matrizes de estado desejadas. Pode-se digitar as matrizes diretamente nos espaços disponíveis ou apenas digitar nos espaços adequados as variáveis já calculadas e disponíveis na área de comando do Matlab, conforme mostra a figura a seguir. O ganho proporcional Kp é representado pelo bloco Gain encontrado na opção Commonly Used Blocks. Para alterar o ganho basta clicar no bloco e fazer a alteração. A visualização da resposta é feita através do bloco Scope retirado da opção Sinks. Clicando- se no bloco aparece uma janela com um gráfico bidimensional. Salienta-se que é padrão do Matla mostrar apenas os últimos 5000 pontos calculados, o que pode ser alterado clicando-se no segundo ícone no canto superior esquerdo (parameters) da janela gráfica, conforme mostra a figura abaixo. 27 A simulação das duas configurações de controle proporcional, Kp no ramo direto e Kp no ramo inverso, são mostradas, respectivamente, nas duas figuras a seguir. Observa-se que os resultados são os mesmos obtidos nas simulações anteriores, quando não foi utilizado o Simulink. 28 Para realizar o controle de posição, o procedimento é o mesmo adotado para o controle de velocidade. Para tanto, basta alterar a matriz C do sistema no espaço de estados para [0 0 1], o que pode ser feito diretamente na área de trabalho ou no próprio bloco State-Space. Utiliza-se o mesmo ganho proporcional projetado anteriormente, ou seja Kp = 11,8. Novamente são utilizadas as configurações com Kp no ramo direto e Kp no ramo inverso. Os diagramas são mostrados nas figuras a seguir. 29 A simulação dos dois sistemas de controle pode ser vista nas duas figuras a seguir. A primeira figura é resultado da aplicação de Kp no ramo direto e a segunda da aplicação de Kp no ramo inverso. Outro tipo de controlador projetado anteriormente, com o auxílio da ferramenta SISOtool, foi um controlador em avanço (ou em atraso) de fase. Para inserir um controlador desse tipo, basta escolher a estrutura Zero-Pole encontrada na opção Continuous, e então definir os pólos, os zeros e o ganho desejados para realizar o controle em avanço (ou atraso). A figura a seguir mostra o esquema desse tipo de controlador. A figura a seguir mostra a resposta ao degrau visualizada no bloco Scope. Uma consideração importante a se fazer: é possível alterar o método (solver) utilizado pelo Simulink para calcular as respostas temporais que são mostradas nos blocos Scope. Por exemplo, pode-se mudar de passo fixo para passo variável, o que evita problemas quando há singularidades. Para isso, é necessário clicar na opção Simulation na barra de ferramentas superior e escolher a opção Configuration Parameters... e então aparecerá a janela mostrada a seguir, onde é possível fazer todas as alterações desejadas. 30 Também é possível definir o sistema a ser simulado diretamente a partir de sua função de transferência. Para isso basta definir seu diagrama de blocos, o qual pode ser facilmente construído no Simulink, conforme mostrado na figura abaixo. Nesse caso não são mostrados os valores dos ganhos, os quais são tirados diretamente da função de transferência entre alimentação e velocidade (motor CC). 31 Nota-se novamente a existência de um bloco somador, Sum, o qual está disponível na opção Commonly Used Blocks. Esse bloco pode ser editado conforme os demais. Assim, é possível alterar o número de entradas e os sinais das mesmas. Há ainda blocos integradores, que são os responsaveis por integrar a derivada da posição para fornecer a posição. Esses blocos estão disponíveis na opção Continuous com o nome Integrator. É possível criar subsistemas selecionando certos blocos, clicando-se o botão direito e selecionando a opção Create Subsystem. Selecionando todo o subsistema correspondente ao motor de corrente contínua, será criado um subsistema conforme mostrado na figura a seguir. 32 Também é possível fazer um controle proporcional conforme os anteriores, bastando para isso utlizar o subsistema gerado a partir do diagrama de blocos, os ganhos e o somador para a realimentação. Um controlador proporcional (para a velocidade) inserido no ramo direto, com o mesmo Kp já projetado ( Kp = 32,9). A figura com o resultado da simulação pode ser observada abaixo. Percebe-se que os 33 resultados são os mesmos já obtidos quando o sistema foi definido com o bloco State-Space. Otimização O problema matemático da otimização é o de encontrar, para uma dada função, seu valor mínimo (ou máximo) e o ponto ou intervalo em que ele ocorre. Isso pode ser escrito como: min x f ¦ x) ou max x f ¦ x) . Determinar x para o qual f(x) é mínimo ou máximo. x é potencialmente uma variável vetorial, ou seja, f pode depender de várias variáveis. Para o caso de valor mínimo tem-se um problema de minimização; maximização para o caso contrário. As funções da Matlab e outros programas e pacotes em geral são escritas de modo a contemplar apenas um dos dois problemas (geralmente o de minimização). Isso porque eles são intercambiáveis: maximizar f(x) é o mesmo que minimizar -f(x). A função f é chamada função objetivo. Essa descrição é a de um problema de otimização irrestrita, ou seja, a variável x pode assumir qualquer valor. O conjunto de problemas mais complexo é o da otimização restrita, dado por: min x f ¦ x) sujeito a g¦ x)0 h¦ x)=0 . O que quer dizer que a variável (chamada em teoria de otimização de variável de decisão) deve pertencer a um conjunto delimitado por funções na forma de igualdades e desigualdades (f e g são funções vetoriais, podendo haver várias igualdades e várias desigualdades, que podem ser estritas ou não). Para o caso de desigualdades no sentido positivo, basta mutilplicá-las por -1, pois g(x) < 0 é o mesmo que -g(x) > 0. Esses dois problemas representam a primeira divisão na otimização, há métodos específicos para problemas irrestritos e para problemas restritos (muito mais complicados). Outros casos que representam divisores de águas na otimização são: 34 • função objetivo linear e restrições lineares – problema de programação linear, resolvido usando o algoritmo simplex ou um método de ponto interior (para muitas variáveis, centenas); • função objetivo quadrática e restrições lineares – algoritmo de programação quadrática; • função objetivo não linear e restrições não lineares – programação quadrática seqüêncial, método da penalidade, lagrangiano aumentado, métodos de ponto interior; • função objetivo não linear, sem restrições – método de Newton; • função objetivo descontínua ou “caixa preta” (sem informação das derivadas nem aproximações) – método de Nelder-Mead (busca), algoritmo genéticos; • variável de decisão restrita a ser um número inteiro – programação inteira; no caso de a variável além de inteira ser binária tem-se a programação inteira binária. O Matlab possui implementações para todas essas classes de problemas, em alguns casos, as funções identificam a ordem de grandeza do problema e trocam de algoritmo ou modo de operação dependendo do tamanho do problema. Um problema historicamente anterior ao de otimização porém que pode ser tratado por algoritmos semelhantes é o de resolver um sistema de equações não lineares, ou seja, encontrar x tal que h(x) = 0. Por essa razão são incluídos no mesmo pacote de otimização no Matlab. A funções apropriadas para lidar com esses problemas são mostradas na tabela abaixo. Todavia, não esgotam o universo de funções de otimização do Matlab: Classe de problema Função(ões) Minimização escalar (uma função e uma variável) fminbnd Minimização irrestrita fminunc, fminsearch Programação linear linprog Progração quadrática quadprog Minimização restrita fmincon Programação inteira binária bintprog Solução de equação não linear fzero Solução de sistema não linear fsolve As funções de otimização exigem que sejam passadas a função objetivo e as funções da restrições. Isso pode ser feito de duas formas, definindo cada função na forma de um arquivo de Matlab (.m), definindo um função inline ou uma função anônima. Problema exemplo Como exemplo propõe-se o seguinte problema de otimização restrita: min f ¦ x)=e x 1 ¦4x 1 2 +2x 2 2 +4x 1 x 2 +2x 2 +1) sujeito a x 1 x 2 −x 1 −x 2 +1,5<0 x 1 x 2 ¯−10 . Convertendo a segunda restrição para a forma menor do que zero, podem-se definir duas funções no Matlab para representar a função objetivo e as restrições. 35 A função das restrições, pelo padrão da método a ser usado (fmincon) deve fornecer também restrições de igualdade como matriz vazia caso não existam. function [c, ceq] = confun(x) % Restrições de desigualdade. c = [1.5 + x(1)*x(2) - x(1) - x(2); -x(1)*x(2) - 10]; % Restrições de igualdade. Ceq = []; function z = fobj(x); % Função objetivo. Z = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1); Esse é um problema de duas variáveis. Uma chamada possível para a função fmincon, supondo um ponto inicial de busca da solução [-1, 1] é x0 = [-1,1]; options = optimset('LargeScale','off'); [x, fval] = ... fmincon(@fobj,x0,[],[],[],[],[],[],@confun,options) A variável options é usada para determinar parâmetros que controlam a execução do algorimo. Quase todas as funções do pacote de otimização admitem a estrutura com tais parâmetros. Essa estrutura pode ser criada pela função optimset informando nome e valor dos parâmetros que se deseja fazer diferentes dos padrões. Neste caso, escolheu-se usar a forma padrão do algoritmo e desativar o modo de problemas de grande porte, que é inicializidado por padrão e pode inclusive ser trocado automaticamente caso isso seja decidido pela função de otimização chamada. O valor ótimo da função obtido é armazenado em fval e a variável de decisão ótima em x. x = -9.5474 1.0474 fval = 0.0236 A restrições foram quase exatamente satisfeitas (quase nulas), como pode ser verificado avaliando-as: >> [c,ceq] = confun(x) c = 1.0e-007 * -0.9032 0.9032 ceq = [] Otimização multiobjetivo Todos esses problemas envolvem uma função objetivo escalar, ou seja, apenas um objetivo de otimização. Uma extensão da otimização está em imaginar que várias funções devem ser otimizadas simultaneamente. Nesse ponto entra a otimização multiobjetivo. A abordagem mais 36 comum é a de definir uma função que combina de forma monotônica todas as funções envolvidas e minimizar essa função definida. Outra abordagem é a de obter computacionalmente o que se chama se superfície de Pareto: o conjunto dos pontos para os quais há pelo menos uma das funções objetivos otimizada sem que se possa melhorar outra função sem piorar alguma que já é ótimo. O Matlab não implementa, até a presente versão, métodos de otimização que produzem automaticamente superfícies de Pareto, isso precisaria ser programado pelo usuário. No entanto, a primeira maneira citada de lidar com o problema pode ser usada. Problema exemplo O problema exemplo de minimização multiobjetivo consiste de encontrar valores ótimos para um controlador PID para otimizar o erro na resposta no controle de um sistema afetado por não linearidades de atuação. Considere o sistema descrito pela função de transferência: H ¦ s)= 1,5 50s 3 +43s 2 +3s+1 , em cuja entrada existam duas não linearidades: um limite de saturação e um limite no slew rate, que é o tempo mínimo para uma rampa de 1 V. Coloca-se um controlador PID na entrada com parâmetros iniciais provisórios inicializados no espaço de trabalho e constrói-se o modelo no Simulink. Coloca-se um degrau como entrada no sistema e o sinal de erro entre referência e saída é alimentado no controlador. Dentro do bloco do controlador colocam-se variáveis como valores dos parâmetros: Kp, Kd e Ki. O diagrama em Simulink será então usado para simular repetidamente e obter a resposta do sistema variando os valores dos parâmtros do controlador até atingir valores ótimos no sentido de minimizar a soma dos quadrados dos erros entre a entrada em degrau e a saída. Aqui entra o conceito de multiobjetivo, pois a idéia é minimizar todos os erros simultaneamente, o critário adotador é o de minimizar a soma dos quadrados de todos eles. Basta definir em Matlab uma função que invoca o diagrama e o simula dados os parâmetros 37 do controlador. A sugestão aqui é a de usar uma função que produzirá os parâmetros ótimos pela seqüência: inicialização e chamada da função de minimização de quadrados. Sugere-se também, por organização, definir a função que produz o sinal de erro a ser minimiado dentro da função geral. function [Kp,Ki,Kd] = otimizaPID % Otimização de parâmetros de um PID por mínimos quadrados. pid0 = [0.63 0.0504 1.9688]; % valores iniciais % Opções do algoritmo de otimização. options = optimset('LargeScale','off','Display','iter',... 'TolX',0.001,'TolFun',0.001); % minimização do erro usando a funçõ definida abaixo pid = lsqnonlin(@erro, pid0, [], [], options); Kp = pid(1); Ki = pid(2); Kd = pid(3); function F = erro(pid) % Produz o sinal de erro entre a saída e o degrau unitário. Kp = pid(1); Ki = pid(2); Kd = pid(3); % Parâmetros de simulação simopt = simset('solver','ode5','SrcWorkspace','Current'); % Simulação [tout,xout,yout] = sim('optsim',[0 100],simopt); % Erro entre saída e degrau F = yout-1; end end O resultado obtido ao se invocar [Kp,Ki,Kd] = otimizaPID é >> Kp Kp = 0.6300 >> Kd Kd = 1.9688 >> Ki Ki = 0.0504 38 Computação simbólica A manipulação matemática de símbolos representando variáveis é chamada computação simbólica. É uma área da matemática ainda de desenvolvimento e cheia de problemas ainda não resolvidos, por exemplo, não há algoritmo definitivo ou mesmo robusto para simplificação de expressões matemáticas que opere para um conjunto amplo de tipos de expressões. Teoricamente, os programas de computação simbólica usam de estruturas de árvores para armazenam e manipular as expressões. O Matlab implementa algumas técnicas de manipulação simbólica através do Symbolic Toolbox. É bastante conhecido que esse é o ponto fraco do programa e há pacotes mais adaptados para manipulação simbólica no mercado, como o Mathematica. No entanto a presença desse pacote atende a um requisito de completude do programa. Define-se uma variável simbólica através de um nome de variável (como em outros casos) e uma string que é a representação escrita na tela desta variável. Para definir uma variável chamada var escrita na tela como x, >> var = sym('x') Para definir uma variável simbólica representada por uma string lexicamente idêntica ao seu nome pode-se usar o atalho (variável x escrita como x) >> syms x A utilizada da primeira versão do comando consiste em usar representações simbólicas familiares mesmo quando as letras usadas coincidem com nomes de outras variáveis em um programa longo. As funções são baseadas em analogias com operações realizadas quando se realiza manipulação de expressões manualmente. Isto é, há funções para fatorar um termo, expandir produtos notáveis, entre outras na tabela abaixo: Operação Função Agrupar termos comuns collect Expansão de polinômios expand Fatorar factor Separar numerador e denominador numden Procurar forma mais curta de escrever simple Simplificação simplify Reescrever em termo de sub- expressões subexpr Ainda, muitas funções numéricas são sobrecarregadas no pacote simbólico, pode ser aplicadas com a mesma chamada sobre variáveis numéricas ou simbólicas, outras são exclusivar do pacote, algumas mais comuns: 39 Operação Função Derivada diff Integral int Matriz jacobiana jacobian Limite limit Expressão para uma série symsum Série de Taylor taylor Determinante det Autovalores e autovetores eig Matriz inversa inv Triângularização superior de matrizes triu Triângularização inferior de matrizes tril Valores singulares svd Exponencial matricial expm Composição de funções compose Solução de equações solve Função inversa finverse Solução de equação diferencial dsolve Gráfico de função simbólica ezplot Ainda, todos os operadores do Matlab matém sua validade para variáveis simbólicas, tais como /, *, .*, ./, \,. Exemplo: sistemas lineares Definindo as variáveis simbólicas e o sistema: >> syms a b c d r s >> A = [a b; c d]; >> y = [r; s]; >> x = A\y x = -(b*s-r*d)/(a*d-c*b) (a*s-c*r)/(a*d-c*b) 40 Exemplo: equações diferenciais Para esse caso há um comando particular no pacote simbólico: dsolve. O operador de derivada é denotado por uma letra D seguida de um número representando a ordem da derivada. Para esta função, os argumentos são strings não havendo a necessidade de definir variáveis, porém, o resultado produzido é uma estrutura contento variáveis simbólicas. >> resp = dsolve('2*Dy+3*y-x=5','Dx+x+(1/2)*y=0','y(0)=0','x(0)=0'); >> resp.x ans = -5/7+1/2*exp(-5/4*t)*(50/21*sin(1/4*3^(1/2)*t)*3^(1/2)+10/7*cos(1/4*3^(1/2)*t)) >> resp.y ans = 10/7+exp(-5/4*t)*(20/21*sin(1/4*3^(1/2)*t)*3^(1/2)-10/7*cos(1/4*3^(1/2)*t)) Argumentos opcionais são as condições iniciais e a variável independente. Quando não informadas as respostas produzidas dependem de constantes padronizadas C1, C2, etc, e da variável t. Ou seja, outra maneira de chamar esta função seria: >> resp = dsolve('2*Dy+3*y-x=5','Dx+x+(1/2)*y=0','x'); O que produziria respostas em função das constantes e com x como variável independente. 41 Sumário Sistemas lineares.................................................................................................................................. 3 Problema exemplo........................................................................................................................... 3 Espaço de estados............................................................................................................................ 4 Função de transferência................................................................................................................... 8 Conversão de formas de representação............................................................................................8 Pólos, zeros, freqüência natural e fator de amortecimento............................................................. 9 Reposta a entradas padronizadas................................................................................................... 10 Resposta em freqüência................................................................................................................. 13 A ferramenta LTIview................................................................................................................... 16 Controle linear básico.................................................................................................................... 17 Controle proporcional............................................................................................................... 18 Outras configurações de controle..............................................................................................22 Ferramenta SISOtool (SISO – Single input single output)............................................................22 Simulação de sistemas de controle no Simulink................................................................................ 25 Otimização..........................................................................................................................................34 Problema exemplo ........................................................................................................................ 35 Otimização multiobjetivo.............................................................................................................. 36 Problema exemplo.....................................................................................................................37 Computação simbólica....................................................................................................................... 39 Exemplo: sistemas lineares............................................................................................................ 40 Exemplo: equações diferenciais.....................................................................................................41 2 Sistemas lineares Ao chamar um sistema físico de linear estamos impondo sobre ele a hipótese da validade do princípio da superposição, ou seja, para uma combinação linear das entradas, a saída é uma combinação linear das saídas para cada entrada individualmente. Matematicamente, um sistema é linear se suas equações de evolução dinâmica (ao longo do tempo) são difenrenciais lineares e ordinárias. Um sem número de sistemas de importância na engenharia são tratados como lineares. A exemplo: circuitos analógicos, motores de corrente contínua, sistema de troca de calor e estruturas flexíveis (metálica); outros são considerados lineares por trechos, comportam-se como lineares em uma faixa restrita de operação, como estruturas não lineares, atuadores hidráulicos, entre outros. Problema exemplo Para utilizar as funções do Matlab apropriadas para simulação e controle de sistemas lineares, utilizaremos o exemplo bastante comum de controle de um motor de corrente contínua. A representação utilizada aqui é a usual de um conjunto de equações diferenciais com o tempo como variável dependente, o que configura o que se chama de sistema dinâmico em tempo contínuo. Um esquema da interação entre as partes elétrica e mecânica do motor é mostrado na figura abaixo: Para esse modelo são escritas as equações diferenciais: J c −K i a=0 ˙ L i˙a Ra Rs i aK =V ˙ = em que é a posição angular do rotor, , a velocidade; J é a inércia associada; K, a constante eletromecânica; L, a indutância da armadura, Ra , a resistência de armadura; Rs , resistência em série com a armadura; e i a é a corrente de armadura. Os valores medidos para um motor em particular são mostrados na tabela: 3 Parâmetro J L K c Ra Rs Valor 3,4E-4 Kg.m2 5,03E-3 H 1,3E-2 N.m/A 6,7E-5 N.s/m 4,03 1 Espaço de estados Como é discutido em cursos de introdução a sistemas lineares e modelagem, um sistema como esse admite a conversão para forma de espaço de estados, o que corresponde a escrevê-lo na forma de um conjunto de equações diferenciais de primeira ordem. Para um sistema linear, isso leva, em notação vetorial, a x= A xB u ˙ y=C xD u em que x representa um vetor com as funções no tempo que são soluções do sistema de equações diferenciais e é chamado vetor de estado. y é o vetor com as funções do tempo que se deseja observar: as saídas. u, é o vetor com sinais impostos ao sistema descrito ao longo do tempo de observação, é o vetor de entradas. As matrizes A, B, C e D contêm a representação do sistema dinâmico. Um resultado elementar da teoria de sistemas lineares é o de que existem infinitas matrizes dessa forma que representam a mesma relação entre entrada e saída (o mesmo sistema), bastando escolher vetores de estado diferentes, ajustados entre um e outro por transformações lineares. No caso particular em que o vetor de estados é constituído de variáveis físicas, diz-se que se possui um modelo físico nas matrizes citadas. Para o caso do motor de corrente contínua citado um modelo físico pode ser escrito como: [] − R aR s −K i˙a L L = K −c ˙ ˙ J J 0 1 [ 0 ia y=[ 0 1 0 ] [ 0 ] V [] 1 ia L V 0 0 0 0 ][ ] [ ] Dessa forma tem-se a entrada representada por V, a saída pela velocidade angular e o vetor de estados dados pela seqüência corrente, velocidade e posição. A saída observada, a velocidade angular, é definida pela forma como foi escrita a matriz C. No Matlab, sugere-se declarar o modelo como: 4 B = [1/L.03. mostra a evolução no tempo da corrente de armadura. usadas recorrentemente dentro e fora da função. % tempo final x0 = [0. plot(t. z = A*x+B*u.03e-3. Como já dito. >> u = entrada(t). há outras formas possíveis de representar a mesma relação matemática entre a entrada e a saída do sistema. 5 . isso seria conseguido definindo uma função e usando um método como o ode45.t. function u=entrada(t) u=sin(t). 'Tensão de alimentação [V]').x). % condição inicial global A B [t. >> >> >> >> >> tin = 0.4e-4.7e-5. K/J -c/J 0. C = [0 1 0]. 0]. Qualquer uma dessas representações pode ser usada para calcular.y. K = 1. R = 5. foram definidas como variáveis globais. 'Posição angular [rad]' . c = 6.0]. 0 1 0]. Dadas as matrizes. da velocidade angular e da posição angular.[tin tfin]. D =[0]. ou seja. a cada instante de tempo desejado. a evolução dos estados no tempo usando os método usuais de integração direta.0.u). por exemplo senoidal. L = 5. 'Velocidade Angular [rad/s]' . % tempo inicial tfin = 10. Observase que foi calculada a evolução temporal de todos os estados. >> legend('Corrente de armadura [A]' . function z = f_motor(t.>> >> >> >> >> >> >> >> >> J = 3. 0. global A B u = entrada(t).x0). A = [-R/L -K/L 0. é necessário também definir uma entrada.3e-2. Para tanto. porém com interpretações diferentes para os estados. Note que as matrizes. A figura abaixo mostra as respostas temporais do sistema. >> figure.y] = ode45('f_motor'. lsim(p.B.D). x0 = [0. A partir dessa estrutura de dados.1:10.0.0 1 0.30 C o rre n te d e a rm a d u ra [A ] V e lo c id a d e A n g u la r [ ra d / s ] P o s iç ã o a n g u la r [ ra d ] T e n s ã o d e a lim e n t a ç ã o [ V ] 25 20 15 10 5 0 -5 -1 0 0 1 2 3 4 5 6 7 8 9 10 O Matlab contém estruturas de dados específicas para lidar com sistemas lineares representados nesse padrão. u = sin(t). Um sistema linear é declarado numa estrutura de Matlab que mantém a representação em espaço de estados com o comando: >> p = ss(A.u.0]. >> C2=[1 0 0. bastaria redefinir a matriz C. >> figure. lsim(p2.D) em que p passa a ser uma variável representando um sistema linear.x0) Verifica-se a nova resposta na figura com as três saídas. No caso da estrutura p definida o seguinte código pode ser utlizado: >> >> >> >> t = 0:0.0 0 1].t.u. fica evidente a importância do conhecimento da posição de cada estado dentro do vetor de variáveis de estado para a correta observação da saída desejada. criar sua nova representação no espaço de estados e então utilizar novamente o comando lsim. Assim.x0) Nota-se que é visualizada apenas a saída selecionada pela matriz C do modelo no espaço de estados. 6 .C. Caso seja de interesse calcular a evolução temporal de todos os estados. figure. existem comandos no Matlab específicos para o cálculo da resposta temporal de um sistema. % Cálculo de todas as possíveis saídas >> p2 = ss(A.C2.t.B. 5 -1 20 15 10 5 0 -5 -1 0 40 30 20 10 0 -1 0 -2 0 0 1 2 3 4 5 T im e ( s e c ) 6 7 8 9 10 7 .5 T o : O u t( 1 ) T o : O u t( 2 ) T o : O u t( 3 ) A m p lit u d e 0 -0 .L in e a r S im u la t io n R e s u lt s 12 10 8 6 4 A m p lit u d e 2 0 -2 -4 -6 -8 0 1 2 3 4 5 T im e ( s e c ) 6 7 8 9 10 L in e a r S im u la t io n R e s u lt s 1 0 . Para o sistema do motor de corrente contínua a função de transferência entre a alimentação e a velocidade é escrita como s = V s K / JL Ra Rs c c Ra R s K 2 . A função de transferência é definida como a razão entre a transformada de Laplace da função de saída sobre a transformada de Laplace da função da entrada.c. essa razão. Os comandos de manipulação. Função de transferência Outra maneira de representar um sistema linear é através de funções de transferência. A função de transferência é uma maneira unívoca de representar o sistema. Conforme estudado no cursos elementares de equações diferenciais.b.b. >> sys_mat = ss(a. >> H = (K/(J*L))/(s^2 + ((Ra+Rs)/L+c/J)*s + c*(Ra+Rs)/(J*L) + K^2/(J*L)) A variável criada (H) é também um sistema linear. s² s L J JL JL A transformada de Laplace de um sistema linear e invariante no tempo é sempre uma razão de polinômios na variável de Laplace (s).u.d).c. Conversão de formas de representação As formas de representação definidas pelos comandos ss e tf podem ser convertidas de uma para a outra: >> [a.dp). caracterização e simulação de sistemas lineares que serão vistos a seguir aplicam-se tanto a uma quanto a outra forma de representação.d] = tf2ss(np. Em código de Matlab: >> np = [K/(J*L)]. 8 . >> dp =[1 ((Ra+Rs)/L+c/J) c*(Ra+Rs)/(J*L)+K^2/(J*L)].t. porém representado na forma de função de transferência. Desse modo. Caso o interesse seja armazenar os valores no tempo da saída em um vetor. Há uma função de transferência para cada par de entrada e saída do sistema. funções de transferência são especificadas através dos coeficientes dos polinômios do numerador e do denominador. ao invés de traçar um gráfico. >> H = tf(np.dp) Alternativamente. basta fazer o seguinte: >> y = lsim(p. para condições iniciais nulas. pode ser facilmente obtida das equações diferenciais do sistema dinâmico representado. pode ser definida da seguinte forma: >> s = tf('s').x0).Os gráficos gerados a partir do comando lsim podem ser editados clicando-se o botão direito do mouse e selecionando as opções desejadas. d). B.b.>> >> >> >> >> sys_fisico = ss(A. H=tf(num.C. [num.den) [num. É possível checar que os sistemas descritos pelas difenentes matrizes no espaço de estados são os mesmos. freqüência natural e fator de amortecimento Os pólos e zeros de um sistema linear podem ser obtidos diretamente a partir da função de transferência do mesmo.B. b.den]=ss2tf(a. Para isso. Isso ocorre porque a respresentação de um sistema no espaço de estados não é única e a representação padrão do Matlab não é. calculando-se as raízes dos polinômios do denominador e do numerador.den]=ss2tf(A. e nem poderia ser.c. zeros.D).C.B. respectivamente: >> polos = roots(dp) >> zeros = roots(np) Os pólos podem ser obtidos através da matriz A do sistema no espaço de estados pois são iguais aos autovalores dessa matriz: >> polos = eig(A) Existe ainda um comando específico para verificar os pólos de um sistema: >> pole(H) >> pole(sys_mat) Graficamente é possível verificar a posição dos pólos e zeros no plano complexo: >> pzmap(H) >> pzmap(sys_mat) 9 . igual à representação baseada no modelo físico (intuitivamente mais óbvia).den) É importante observar que as matrizes a. basta verificar que os autovalores da matriz A (e consequentemente os pólos do sistema) são os mesmos para ambas as representações: >> eig(A) >> eig(a) Pólos. C e D).D). H=tf(num. c e d fornecidas pelo comando tf2ss não são iguais àquelas deduzidas a partir do modelo físico (A. 4 .6 .2 0 .2 .8 -1 -1 0 0 0 -9 0 0 -8 0 0 -7 0 0 -6 0 0 -5 0 0 R e a l A x is -4 0 0 -3 0 0 -2 0 0 -1 0 0 0 Conhecidos os pólos e os zeros de um dado sistema.z.0 . Por exemplo.Z e r o M a p 1 0 . z=roots(np).0 . são obtidas imediatamente. zp = zpk (z.p. a resposta ao degrau: >> step(p) 10 . usadas para caracterizar o compostamento do sistema.8 0 . além de seu ganho estático (ganho em regime permanente. p=roots(dp).P o le . as repostas a entradas notáveis da teoria de sistemas lineares.6 0 .0 . ou seja.4 I m a g in a r y A x is 0 .k) Para um sistema definido em uma variável de uma certa estrutura (função de transferência ou espaço de estados) é possível calcular a freqüência natural e o fator de amortecimento associados a cada um dos pólos: >> damp(H) >> damp(sys_fisico) >> [wn.polos]=damp(H) Reposta a entradas padronizadas Uma vez com o sistema definido em uma variável. s = 0 na função de transferência). pode-se definir um outra forma de representação de sistemas lineares: >> >> >> >> k=dcgain(H).0 . >> [y. Rise Rime. O gráfico gerado pela função impulse também pode ser editado clicando-se o botão direito do mouse.t] = impulse(p). Para isso.t] = step(H). Steady State).t] = step(p). Uma das vantagens da utilização da função step é a possibilidade de avaliar diretamente no gráfico os parâmetros da resposta ao degrau (sobressinal. 11 . basta pressionar o botão direito do mouse. >> [y. Assim é possível armazernar os valores desejados para cálculos futuros ou para traçar gráficos de forma mais conveniente. tempo de estabilização. tempo de subida e valor de regime). Outro exemplo clásssico é a resposta ao impulso: >> impulse(p) >> impulse(s) >> [y. selecionar a opção characteristics e em seguida selecionar os parâmetros desejados (Peak Response. Settling Time. pode-se desejar obter os valores no tempo da resposta e não traçar o gráfico: >> [y. Ou ainda.>> step(H) Com esse comando é traçado o gráfico da resposta ao degrau do sistema.t] = impulse(s). 3 0 2 4 6 8 10 T im e ( s e c ) 12 14 16 18 20 0 S te p R e s p o n s e 30 S y s te m : H S e t t lin g T im e ( s e c ) : 1 3 .Im p u ls e R e s p o n s e 8 S y s te m : H P e a k a m p lit u d e : 7 . 0 3 7 3 7 6 5 A m p lit u d e 4 3 2 1 S y s te m : H S e t t lin g T im e ( s e c ) : 1 3 . 5 2 A t t im e ( s e c ) : 0 . 7 20 A m p lit u d e 15 10 5 0 0 2 4 6 8 10 T im e ( s e c ) 12 14 16 18 20 12 . 2 25 S y s te m : H R is e T im e ( s e c ) : 7 . 4 3 S y s te m : H F in a l V a lu e : 2 5 . são as mais importantes.1. subplot(2. É muito simples obter o diagrama de Bode no Matlab. % ajuste de dimensão phase_mod = zeros(1.:) = 20*log10(mag(1.:) = phase(1. O código em Matlab a seguir mostra duas formas de se obter graficamente o diagrama utilizando a função bode.1).Resposta em freqüência O termo resposta em freqüência significa a resposta em regime permanente de um sistema a uma entrada senoidal. >> figure. A expansão da faixa de baixas freqüências pelo uso da escala logarítmica de freqüência é muito vantajosa. semilogx(w.:). Dessa forma.:)).phase] = bode(H.phase_mod) 13 . >> figure. Esses métodos são dos mais poderosos na teoria de controle convencional. as curvas podem ser traçadas a partir de aproximações assintóticas simples. As respostas em regime permanente às entradas senoidais podem ser obtidas diretamente a partir da substituição de s por na jω função de transferência. Além disso.2). A principal vantagem de se utilizar o diagrama de Bode é que a multiplicação dos módulos pode ser convertida em soma. bode(H) >> >> >> >> >> >> w = 0:0. Ou seja. Bode.length(mag)). onde ω é a freqüência. Ambos são traçados em relação à freqüência em escala logarítmica. Nichols e muitos outros. a resposta em regime permanente é dada por: H j =Me j onde M é o módulo da função de transferência senoidal (ou relação de amplitude entre a entrada e a saída) e φ é a defasagem (ou diferença de fase entre a entrada e a saída).1.01:10e4. visto que as características dos sistemas em baixas freqüências. [mag.w).length(phase)). na prática. os gráficos são traçados a partir do cômputo dos valores do módulo e da fase para toda uma faixa de freqüências.magdb). Uma das vantagens dos métodos de resposta em freqüência é a possibilidade de se utilizar os dados obtidos diretamente a partir das medições em um certo sistema físico sem necessitar recorrer a modelos matemáticos.1. semilogx(w. Ressalta-se que qualquer número complexo pode ser escrito em função um módulo e uma fase. Os métodos de resposta em freqüência foram desenvolvidos no período entre 1930 e 1940 por Nyquist. % ajuste de dimensão magdb(1. o outro é o gráfico do ângulo de fase (em graus). Nos métodos de resposta em freqüência varia-se a freqüência do sinal de entrada dentro de um certo intervalo e estuda-se a resposta resultante. O diagrama de Bode é constituído de dois gráficos: um é o gráfico do módulo em dB (20 log |H(jω)|) de uma função de transferência senoidal.1. phase_mod(1. axis([0 10e4 -150 50]) >> subplot(2. magdb = zeros(1. B o d e D ia g r a m 50 0 M a g n it u d e ( d B ) P h a s e (d e g ) -5 0 -1 0 0 -1 5 0 0 -4 5 -9 0 -1 3 5 -1 8 0 10 -2 10 -1 10 0 10 1 10 2 10 3 10 4 10 5 F r e q u e n c y ( r a d /s e c ) 14 . Sem entrar em detalhes. nesse caso percebe-se que o sistema é estável porque o ponto -1+j0 não é envolvido pela curva fechada que representa o lugar geométrico de H(jω). Νo gráfico é possível perceber a marcação do ponto -1 no eixo real.50 0 -5 0 -1 0 0 -1 5 0 -2 10 0 -5 0 -1 0 0 -1 5 0 -2 0 0 -2 10 10 0 10 2 10 4 10 0 10 2 10 4 10 6 Para analisar a estabilidade de um sistema linear pode ser utilizado o diagrama de Nyquist. Esse ponto é fundamental para a análise da estabilidade do sistema. que é o lugar geométrico de H(jω) no plano complexo à medida que ω varia de -∞ a +∞. 15 . esse é apenas um gerenciador gráfico para as diversas abordagens de visualizar um sistema LIT. diagrama de bode em magnitude e diagrama de Nyquist. diagrama de lugar das raízes e outras como carta de Nichols e diagrama de valor singular. resposta ao impulso. 16 . como dagrama de Bode. resposta ao degrau. A configuração e as respostas obtidas são mostradas nas duas figuras abaixo.N y q u is t D ia g r a m 15 10 5 I m a g in a r y A x is 0 -5 -1 0 -1 5 -5 0 5 10 R e a l A x is 15 20 25 30 A ferramenta LTIview As funcionalidades de análise de sistemas LIT (lineares invariantes no tempo) são centralizadas na ferramenta LTIview. que permite acessar diversos tipos de gráficos já vistos. Nada pode ser alterado no sistema. É acessada por: >> ltiview Usando o menu Edit – Plot configurations escolhe-se quatro gráficos por janela e as opções de resposta seguintes na ordem: resposta ao degrau. de Nyquist. da forma mais próxima possível. a conexão lógica e física entre um sistema e o seu controlador mais recorrente. É comum denominar o sistema a ser controlado de planta e a configuração com planta e controlador de malha fechada. Já o controlador chamado rastreador tem a função de fazer a saída do sistema acompanhar a sua entrada. para qualquer entrada. porém.Controle linear básico Um dos objetivos de se obter um modelo de um sistema linear é projetar um controlador ou compensador para que se obtenham algumas características particulares na sua resposta. O caso mais comum de objetivo de controle é o regulador: um sistema que tem o objetivo de levar a resposta do sistema a zero em um tempo finito diante de qualquer entrada. pode-se dizer que a configuração de controle mais comum. ou tão próximo disso quanto possível. A teoria de controle de sistemas lineares é extensa e ainda em desenvolvimento. ou seja. é a seguinte: 17 . Para o sistema do motor de corrente contínua que usamos como exemplo. os pólos variam. a diferença entre a entrada e a saída da planta. Variando-se o ganho desse controlador. Para ajustar o sinal o comportamento do sistema controlado pelos pólos que ele possui podese usar o diagrama no lugar das raízes.Entrada Planta Saída Controlador Essa configuração corresponde ao controle em realimentação de saída. regula-se o controle como um múltiplo do sinal de erro. Esse diagrama traça a localização dos pólos do sistema quando há um controlador proporcional. por exemplo: Entrada Controlador Planta Saída em que o controlador recebe o sinal de erro. ou seja. Controle proporcional O primeiro controlador possível é o controlador proporcional.8. O controlador é um sistema linear que dispõe da informação da saída da planta. representado por uma constante multiplicativa na segunda configuração mostrada acima. Há uma infinidade de outras configurações possíveis. Ou seja. o ganha proporcional altera a localização dos pólos no plano complexo. Esse valor foi escolhido ao acaso apenas para ilustração. levando-se em conta obviamente que o ganho deve levar a pólos de malha fechada que mantenham o sistema estável (pólos no semiplano esquerdo do plano complexo). A entrada da planta com o controlador passa a ser a diferença entre a entrada original e o sinal de controle. o gráfico resultante é o citado diagrama. >> rlocus(p) 18 .9 levando a pólos de malha fechada complexos e de parte real -500 e imaginária 15. Isto é. o diagrama de lugar das raízes produzido pode ser usado para ajustar um ganho de 32. Para se obter a malha fechada como variável usa-se o comando: >> mf = feedback(p.32. a variável recém criada é um sistema linear que representa o motor original com o controlador proporcional. Podem ser traçados sua resposta ao impulso e mapa de pólos e zeros para verificar as características do novo sistema com a inclusão do controlador projetado.9) Nesse caso. >> step(mf) >> pzmap(mf) 19 . Nota-se que esse controlador está inserido no ramo da realimentação (conforme a primeira figura dos diagramas de controle). três pólos (um na origem e um par complexo conjugado com parte real -500 e imaginária 16. São visualizados para esse caso. Esse erro pode ser corrigido multiplicando a entrada do sistema por um valor de ajuste. que possui uma mudança abrupta nessa 20 .03.8.9) e um zero na origem. distante do valor do degrau (1). No mapa de pólos e zeros. pólos são representados por X e zeros por círculos. Isso surgiu devido à forma do diagrama.A posição atingida ao final das variações é próxima de 0. Verificou-se que há uma difenrença na parte imaginária. que foi definida anteriormente como sendo 15. 21 .região. O diagrama para esse caso. Uma outra abordagem seria utilizar o modelo com a saída em posição e não em velocidade.8 o sistema obtido possui o seguinte comportamento de resposta ao degrau. ou seja. é apenas uma erro devido à forma como é feita a interpolação dos pontos do gráfico. depois de aproximado por zoom: Usando o ganho de 11. O primeiro passo nesse sentido é supor um controlador que não é estático (um ganho) mas um sistema também dinâmico. Seus médotos de projeto podem ser executados em Matlab usando os comandos citados e testando a resposta. Os mais comuns são os controladores PID e avanço-atraso. Ou. já informando o sistema a ser analisado: >> sisotool(H) 22 . Ferramenta SISOtool (SISO – Single input single output) O projeto de sistemas de controle pode fazer uso da janela de funções acessada por: >> sisotool Acessa-se o menu File – Import para obter a variável com os dados do sistema. Outras configurações de controle Outros tipos de controlador e configurações são usadas. como o tempo de estabilização ou o valor de regime permanente.A figura mostra um sistema de elevada freqüência natural (com oscilações rápidas) comparativamente com o primeiro caso. Usando o clique direito pode-se marcar características padrão da resposta do sistema. sem atraso e sem ganho a saída e que a entrada não possuirá componentes em freqüência que não possam ser realmente impostas à planta e ao controlador. A função do sensor tem o objetivo de modelar a dinâmica do transdutor utilizado para medir a saída do sistema quando da modelagem de uma planta real. F = H = 1. Alí pode-se escolher a função de transferência desejada acrescentado ou retirando pólos e zeros.Na janela que se abre na parte superior direita há um diagrama de blocos indicando qual a estrutura de controle usada. Abaixo. um pré-filtro da entrada (F) e o controlador (C). O SISOtool se aplica apenas a sistemas com uma entrada e uma saída (como diz o nome em inglês). marca-se a opção delete. Nota-se que são considerados os seguintes tipos de bloco: a planta (G). O pré-filtro simula a característica de limitação em banda de freqüência do sinal que se pode impor à planta e ao controlador. Sua operação consiste em escolher uma forma no domínio de Laplace para o controlador e ajustar seus parâmetros variando características requeridas nos gráficos de resposta mostrados. Para excluir. Usando o modelo do motor com saída em velocidade e a configuração de controle fornecida pela janela inicial. No caso aqui apresentado supõe-se que o sensor mede perfeitamente. Clicando sobre o botão FS as posições dos blocos são alteradas. os três gráficos padrão são o diagrama do lugar das raízes e os dois gráficos do diagrama de Bode. Ou seja. À esquerda mostra-se a forma do controlador a ser ajustada (current compensator). Para adicionar pólos ou zeros reais ou imaginários basta clicar no botão correspondente e digitar o valor inicial desejado. o sensor (H – caso precise ser levado em conta no modelo). clica-se sobre a caixa de edição do controlador. 23 . s p Escolhida a estrutura do controlador (clicando em OK). Pólos do controlador por X e zeros do controlador por círculos.Sugere-se incluir um pólo e um zero reais e negativos. Um exemplo de teste assim com o sistema exemplo pode levar ao gráfico mostrado abaixo: 24 . A curva de resposta do diagrama de Bode à direita pode ser arrastada para cima ou para baixo. Essa configuração corresponde aos controladores em avanço ou em atraso. a ferramenta permite alterar qualquer desses três parâmetros dinamicamente. Pólos de malha fechada são representados por quadrados. um controlador com a seguinte função de transferência: C s=K s z . Todos esses elementos pode ser arrastados com o mouse e as alterações correspondentes serão efetuadas. mudando a banda de passagem e o ganho do controlador. Nos gráficos de resposta mostrados basta clicar e arrastar os elementos que se deseja alterar e observar ar mudanças correspondentes nos outros gráficos. Ou seja. Nota-se que os controladores devem ser previamente projetados porque o Simulink é uma ferramenta de simulação e de suporte à análise. Outros gráficos podem ser mostrados na janela do SISOtool usando o menu View e escolhendo o gráfico ou dado a ser mostrado. há duas diferentes maneiras de se posicionar o controlador: no ramo direto (amplificando o sinal de erro que entra na planta) ou no ramo inverso (amplificando o sinal de saída enviado para realimentação). No menu Analysis pode-se acessar a resposta do sistema em malha fechada invocando o LTIview. As 25 . por exemplo. Os casos de derivador (differentiator) ou integrador (integrator) presentes por exemplo em um controlador PID podem ser acrescentador diretamente. Simulação de sistemas de controle no Simulink Os sistemas de controle trabalhados anteriormente podem ser simulados através do Simulink. a resposta ao degrau é obtida em uma nova janela em Analysis – Rejection of step disturbance.Os pólos e zeros do controlador podem ser acrescntados ou retirados também usando o clique direito sobre um dos gráficos e add pole/zero ou delete pole/zero. Nesse caso. O primeiro caso de simulação a ser abordado é o controle proporcional da velocidade angular do mesmo motor de corrente contínua que vem sendo utilizado. Aqui o valor do degrau é mantido unitário. ou seja. Ao ser inserido na área de criação. um ganho de 32. Para tanto. mas caso fosse necessário poderia ser escolhido uma “amplitude” diferente de 1 e também poderia ser alterado o instante no qual o degrau é aplicado.duas hipóteses foram simuladas.9. A figura a seguir mostra os dois esquemas de controle proporcional utilizados para simulação. o bloco pode ser editado clicando-se duas vezes sobre o mesmo. 26 . é utilizada como entrada uma função do tipo degrau unitário. Esse tipo de entrada é gerada a partir do bloco Step disponível na opção Sources da biblioteca de blocos. Para a simulação. utilizou-se o mesmo ganho proporcional (Kp) projetado anteriormente. O sistema sob controle (motor CC) é definido a partir de seu modelo de estados (matrizes A. 27 . o que pode ser alterado clicando-se no segundo ícone no canto superior esquerdo (parameters) da janela gráfica. Salienta-se que é padrão do Matla mostrar apenas os últimos 5000 pontos calculados. Pode-se digitar as matrizes diretamente nos espaços disponíveis ou apenas digitar nos espaços adequados as variáveis já calculadas e disponíveis na área de comando do Matlab. B. A visualização da resposta é feita através do bloco Scope retirado da opção Sinks. conforme mostra a figura a seguir. Para alterar o ganho basta clicar no bloco e fazer a alteração. O ganho proporcional Kp é representado pelo bloco Gain encontrado na opção Commonly Used Blocks. conforme mostra a figura abaixo. Clicandose no bloco aparece uma janela com um gráfico bidimensional. É necessário duplo clique sobre a caixa inserida para que se defina as matrizes de estado desejadas. C e D) utilizando-se o bloco State-Space encontrado na opção Continuous. 28 .A simulação das duas configurações de controle proporcional. nas duas figuras a seguir. Observa-se que os resultados são os mesmos obtidos nas simulações anteriores. são mostradas. Kp no ramo direto e Kp no ramo inverso. respectivamente. quando não foi utilizado o Simulink. Novamente são utilizadas as configurações com Kp no ramo direto e Kp no ramo inverso. o que pode ser feito diretamente na área de trabalho ou no próprio bloco State-Space. basta alterar a matriz C do sistema no espaço de estados para [0 0 1]. Os diagramas são mostrados nas figuras a seguir. o procedimento é o mesmo adotado para o controle de velocidade. Para tanto. ou seja Kp = 11.8. Utiliza-se o mesmo ganho proporcional projetado anteriormente.Para realizar o controle de posição. 29 . A figura a seguir mostra a resposta ao degrau visualizada no bloco Scope. foi um controlador em avanço (ou em atraso) de fase. pode-se mudar de passo fixo para passo variável. Para inserir um controlador desse tipo. Uma consideração importante a se fazer: é possível alterar o método (solver) utilizado pelo Simulink para calcular as respostas temporais que são mostradas nos blocos Scope.A simulação dos dois sistemas de controle pode ser vista nas duas figuras a seguir. A figura a seguir mostra o esquema desse tipo de controlador. é necessário clicar na opção Simulation na barra de ferramentas superior e escolher a opção Configuration Parameters. os zeros e o ganho desejados para realizar o controle em avanço (ou atraso). 30 . A primeira figura é resultado da aplicação de Kp no ramo direto e a segunda da aplicação de Kp no ramo inverso. e então definir os pólos.. Por exemplo. Outro tipo de controlador projetado anteriormente. o que evita problemas quando há singularidades. basta escolher a estrutura Zero-Pole encontrada na opção Continuous. com o auxílio da ferramenta SISOtool. onde é possível fazer todas as alterações desejadas.. Para isso. e então aparecerá a janela mostrada a seguir. Nesse caso não são mostrados os valores dos ganhos.Também é possível definir o sistema a ser simulado diretamente a partir de sua função de transferência. os quais são tirados diretamente da função de transferência entre alimentação e velocidade (motor CC). 31 . conforme mostrado na figura abaixo. o qual pode ser facilmente construído no Simulink. Para isso basta definir seu diagrama de blocos. Esse bloco pode ser editado conforme os demais. será criado um subsistema conforme mostrado na figura a seguir. Selecionando todo o subsistema correspondente ao motor de corrente contínua. clicando-se o botão direito e selecionando a opção Create Subsystem. Sum.Nota-se novamente a existência de um bloco somador. o qual está disponível na opção Commonly Used Blocks. Há ainda blocos integradores. é possível alterar o número de entradas e os sinais das mesmas. Esses blocos estão disponíveis na opção Continuous com o nome Integrator. que são os responsaveis por integrar a derivada da posição para fornecer a posição. Assim. É possível criar subsistemas selecionando certos blocos. 32 . bastando para isso utlizar o subsistema gerado a partir do diagrama de blocos. Percebe-se que os 33 . os ganhos e o somador para a realimentação.9). A figura com o resultado da simulação pode ser observada abaixo. com o mesmo Kp já projetado ( Kp = 32. Um controlador proporcional (para a velocidade) inserido no ramo direto.Também é possível fazer um controle proporcional conforme os anteriores. Essa descrição é a de um problema de otimização irrestrita. x h x=0 O que quer dizer que a variável (chamada em teoria de otimização de variável de decisão) deve pertencer a um conjunto delimitado por funções na forma de igualdades e desigualdades (f e g são funções vetoriais. basta mutilplicá-las por -1. podendo haver várias igualdades e várias desigualdades. O conjunto de problemas mais complexo é o da otimização restrita. Isso pode ser escrito como: min f x ou max f x . seu valor mínimo (ou máximo) e o ponto ou intervalo em que ele ocorre. Esses dois problemas representam a primeira divisão na otimização. para uma dada função. x é potencialmente uma variável vetorial. ou seja. que podem ser estritas ou não). As funções da Matlab e outros programas e pacotes em geral são escritas de modo a contemplar apenas um dos dois problemas (geralmente o de minimização). Para o caso de valor mínimo tem-se um problema de minimização. Otimização O problema matemático da otimização é o de encontrar. A função f é chamada função objetivo. Isso porque eles são intercambiáveis: maximizar f(x) é o mesmo que minimizar -f(x). ou seja. dado por: min f x sujeito a g x 0 . maximização para o caso contrário. há métodos específicos para problemas irrestritos e para problemas restritos (muito mais complicados). Outros casos que representam divisores de águas na otimização são: 34 . pois g(x) < 0 é o mesmo que -g(x) > 0. Para o caso de desigualdades no sentido positivo. a variável x pode assumir qualquer valor. x x Determinar x para o qual f(x) é mínimo ou máximo. f pode depender de várias variáveis.resultados são os mesmos já obtidos quando o sistema foi definido com o bloco State-Space. definindo um função inline ou uma função anônima. métodos de ponto interior. sem restrições – método de Newton. as funções identificam a ordem de grandeza do problema e trocam de algoritmo ou modo de operação dependendo do tamanho do problema. podem-se definir duas funções no Matlab para representar a função objetivo e as restrições. • função objetivo não linear e restrições não lineares – programação quadrática seqüêncial. fminsearch linprog quadprog fmincon bintprog fzero fsolve As funções de otimização exigem que sejam passadas a função objetivo e as funções da restrições. algoritmo genéticos. • variável de decisão restrita a ser um número inteiro – programação inteira. A funções apropriadas para lidar com esses problemas são mostradas na tabela abaixo. definindo cada função na forma de um arquivo de Matlab (.m). no caso de a variável além de inteira ser binária tem-se a programação inteira binária. O Matlab possui implementações para todas essas classes de problemas. em alguns casos. lagrangiano aumentado. método da penalidade. resolvido usando o algoritmo simplex ou um método de ponto interior (para muitas variáveis. centenas). não esgotam o universo de funções de otimização do Matlab: • Classe de problema Função(ões) Minimização escalar (uma função e uma fminbnd variável) Minimização irrestrita Programação linear Progração quadrática Minimização restrita Programação inteira binária Solução de equação não linear Solução de sistema não linear fminunc. x1 x 2−10 Convertendo a segunda restrição para a forma menor do que zero.50 sujeito a . Por essa razão são incluídos no mesmo pacote de otimização no Matlab. encontrar x tal que h(x) = 0. Isso pode ser feito de duas formas. • função objetivo descontínua ou “caixa preta” (sem informação das derivadas nem aproximações) – método de Nelder-Mead (busca). • função objetivo quadrática e restrições lineares – algoritmo de programação quadrática. • função objetivo não linear. Problema exemplo Como exemplo propõe-se o seguinte problema de otimização restrita: x 2 2 min f x=e 4x 12x 24x 1 x 22x 21 x 1 x 2−x 1− x 21. Todavia. ou seja. 1 35 . Um problema historicamente anterior ao de otimização porém que pode ser tratado por algoritmos semelhantes é o de resolver um sistema de equações não lineares.função objetivo linear e restrições lineares – problema de programação linear. 'off'). Quase todas as funções do pacote de otimização admitem a estrutura com tais parâmetros.@confun. pelo padrão da método a ser usado (fmincon) deve fornecer também restrições de igualdade como matriz vazia caso não existam.1]. fmincon(@fobj. % Restrições de igualdade. function [c.[]. apenas um objetivo de otimização.[]. 1] é x0 = [-1. Neste caso.. que é inicializidado por padrão e pode inclusive ser trocado automaticamente caso isso seja decidido pela função de otimização chamada. Essa estrutura pode ser criada pela função optimset informando nome e valor dos parâmetros que se deseja fazer diferentes dos padrões. como pode ser verificado avaliando-as: >> [c.0236 A restrições foram quase exatamente satisfeitas (quase nulas). [x.x0.A função das restrições.[]. supondo um ponto inicial de busca da solução [-1. A abordagem mais 36 .x(2). ou seja. escolheu-se usar a forma padrão do algoritmo e desativar o modo de problemas de grande porte.[].[]. function z = fobj(x). Esse é um problema de duas variáveis.9032 0. ceq] = confun(x) % Restrições de desigualdade. Nesse ponto entra a otimização multiobjetivo. x= -9..9032 ceq = [] Otimização multiobjetivo Todos esses problemas envolvem uma função objetivo escalar. -x(1)*x(2) . fval] = .10]. Z = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1).0e-007 * -0. options = optimset('LargeScale'. Ceq = [].5474 1. O valor ótimo da função obtido é armazenado em fval e a variável de decisão ótima em x.0474 fval = 0. % Função objetivo. Uma chamada possível para a função fmincon.[].5 + x(1)*x(2) . c = [1.ceq] = confun(x) c= 1. Uma extensão da otimização está em imaginar que várias funções devem ser otimizadas simultaneamente.x(1) .options) A variável options é usada para determinar parâmetros que controlam a execução do algorimo. No entanto. Aqui entra o conceito de multiobjetivo. o critário adotador é o de minimizar a soma dos quadrados de todos eles. Kd e Ki. Coloca-se um controlador PID na entrada com parâmetros iniciais provisórios inicializados no espaço de trabalho e constrói-se o modelo no Simulink. O diagrama em Simulink será então usado para simular repetidamente e obter a resposta do sistema variando os valores dos parâmtros do controlador até atingir valores ótimos no sentido de minimizar a soma dos quadrados dos erros entre a entrada em degrau e a saída. Outra abordagem é a de obter computacionalmente o que se chama se superfície de Pareto: o conjunto dos pontos para os quais há pelo menos uma das funções objetivos otimizada sem que se possa melhorar outra função sem piorar alguma que já é ótimo. que é o tempo mínimo para uma rampa de 1 V. Coloca-se um degrau como entrada no sistema e o sinal de erro entre referência e saída é alimentado no controlador. métodos de otimização que produzem automaticamente superfícies de Pareto. Considere o sistema descrito pela função de transferência: H s= 1. pois a idéia é minimizar todos os erros simultaneamente.5 . isso precisaria ser programado pelo usuário. até a presente versão. a primeira maneira citada de lidar com o problema pode ser usada. 2 50s 43s 3s1 3 em cuja entrada existam duas não linearidades: um limite de saturação e um limite no slew rate.comum é a de definir uma função que combina de forma monotônica todas as funções envolvidas e minimizar essa função definida. Problema exemplo O problema exemplo de minimização multiobjetivo consiste de encontrar valores ótimos para um controlador PID para otimizar o erro na resposta no controle de um sistema afetado por não linearidades de atuação. O Matlab não implementa. Dentro do bloco do controlador colocam-se variáveis como valores dos parâmetros: Kp. Basta definir em Matlab uma função que invoca o diagrama e o simula dados os parâmetros 37 . por organização. % Erro entre saída e degrau F = yout-1. Kd = pid(3). % Simulação [tout.0.Kd] = otimizaPID % Otimização de parâmetros de um PID por mínimos quadrados.xout.'off'. Ki = pid(2). 'TolX'. definir a função que produz o sinal de erro a ser minimiado dentro da função geral..6300 >> Kd Kd = 1. [].'SrcWorkspace'. Kp = pid(1). % Parâmetros de simulação simopt = simset('solver'.do controlador.0. A sugestão aqui é a de usar uma função que produzirá os parâmetros ótimos pela seqüência: inicialização e chamada da função de minimização de quadrados. Sugere-se também.'TolFun'.simopt). end end O resultado obtido ao se invocar [Kp.Kd] = otimizaPID é >> Kp Kp = 0.9688].'iter'. function [Kp.'ode5'. pid0.001).0504 1.001.'Current'). Kd = pid(3).9688 >> Ki Ki = 0.Ki. pid0 = [0.63 0. function F = erro(pid) % Produz o sinal de erro entre a saída e o degrau unitário. % minimização do erro usando a funçõ definida abaixo pid = lsqnonlin(@erro.. Ki = pid(2).0504 38 .'Display'.[0 100]. Kp = pid(1). options = optimset('LargeScale'.yout] = sim('optsim'.. options). []. % valores iniciais % Opções do algoritmo de otimização.Ki. Teoricamente. No entanto a presença desse pacote atende a um requisito de completude do programa. entre outras na tabela abaixo: Operação Agrupar termos comuns Expansão de polinômios Fatorar Separar numerador e denominador Procurar forma mais curta de escrever Simplificação Reescrever em termo de subexpressões Função collect expand factor numden simple simplify subexpr Ainda. >> var = sym('x') Para definir uma variável simbólica representada por uma string lexicamente idêntica ao seu nome pode-se usar o atalho (variável x escrita como x) >> syms x A utilizada da primeira versão do comando consiste em usar representações simbólicas familiares mesmo quando as letras usadas coincidem com nomes de outras variáveis em um programa longo. expandir produtos notáveis. há funções para fatorar um termo. muitas funções numéricas são sobrecarregadas no pacote simbólico. outras são exclusivar do pacote. É bastante conhecido que esse é o ponto fraco do programa e há pacotes mais adaptados para manipulação simbólica no mercado. Define-se uma variável simbólica através de um nome de variável (como em outros casos) e uma string que é a representação escrita na tela desta variável. por exemplo. Para definir uma variável chamada var escrita na tela como x. É uma área da matemática ainda de desenvolvimento e cheia de problemas ainda não resolvidos. As funções são baseadas em analogias com operações realizadas quando se realiza manipulação de expressões manualmente. pode ser aplicadas com a mesma chamada sobre variáveis numéricas ou simbólicas. Isto é. O Matlab implementa algumas técnicas de manipulação simbólica através do Symbolic Toolbox. os programas de computação simbólica usam de estruturas de árvores para armazenam e manipular as expressões. não há algoritmo definitivo ou mesmo robusto para simplificação de expressões matemáticas que opere para um conjunto amplo de tipos de expressões. algumas mais comuns: 39 . como o Mathematica.Computação simbólica A manipulação matemática de símbolos representando variáveis é chamada computação simbólica. >> y = [r. s].Operação Derivada Integral Matriz jacobiana Limite Expressão para uma série Série de Taylor Determinante Autovalores e autovetores Matriz inversa Triângularização superior de matrizes Triângularização inferior de matrizes Valores singulares Exponencial matricial Composição de funções Solução de equações Função inversa Solução de equação diferencial Gráfico de função simbólica Função diff int jacobian limit symsum taylor det eig inv triu tril svd expm compose solve finverse dsolve ezplot Ainda. tais como /. Exemplo: sistemas lineares Definindo as variáveis simbólicas e o sistema: >> syms a b c d r s >> A = [a b. >> x = A\y x= -(b*s-r*d)/(a*d-c*b) (a*s-c*r)/(a*d-c*b) 40 . . \. *. c d]./.. todos os operadores do Matlab matém sua validade para variáveis simbólicas. .*. 41 . O que produziria respostas em função das constantes e com x como variável independente. e da variável t.y ans = 10/7+exp(-5/4*t)*(20/21*sin(1/4*3^(1/2)*t)*3^(1/2)-10/7*cos(1/4*3^(1/2)*t)) Argumentos opcionais são as condições iniciais e a variável independente. >> resp.'Dx+x+(1/2)*y=0'. porém. >> resp = dsolve('2*Dy+3*y-x=5'. Quando não informadas as respostas produzidas dependem de constantes padronizadas C1. O operador de derivada é denotado por uma letra D seguida de um número representando a ordem da derivada.'y(0)=0'. Ou seja. os argumentos são strings não havendo a necessidade de definir variáveis. Para esta função. outra maneira de chamar esta função seria: >> resp = dsolve('2*Dy+3*y-x=5'.x ans = -5/7+1/2*exp(-5/4*t)*(50/21*sin(1/4*3^(1/2)*t)*3^(1/2)+10/7*cos(1/4*3^(1/2)*t)) >> resp.'Dx+x+(1/2)*y=0'. etc.Exemplo: equações diferenciais Para esse caso há um comando particular no pacote simbólico: dsolve.'x(0)=0'). o resultado produzido é uma estrutura contento variáveis simbólicas.'x'). C2.