Sessão Prática: Simulação e Controle com LabVIEW 1
Visão geral Este tutorial mostra as características dos controles proporcional (P), integral (I) e derivativo (D), e como utilizálos para obter a resposta desejada. Este tutorial usa o LabVIEW e o módulo Control Design and Simulation. Esses artigos são baseados nos tutoriais de controle desenvolvidos pelo Professor Dawn Tilbury do Departamento de Engenharia Mecânica da Universidade de Michigan e pelo Professor Bill Messner do Departamento de Engenharia Mecânica da Universidade Carnegie Mellon e foram desenvolvidos com a devida permissão dos autores. Problema de exemplo Suponha que nós temos um problema simples de massa, mola e amortecedor. A equação de modelagem desse sistema é: Figura 3: Massa, mola e amortecedor Tirando a transformada de Laplace da equação do modelo, nós obtemos: A função de transferência entre o deslocamento X(s) e a entrada F(s) então se torna: Sendo,, e F. Se usarmos esses valores na função de transferência acima, o resultado é: O objetivo desse problema é mostrar a você como, e contribuem para obter um rápido tempo de subida, overshoot mínimo e nenhum erro de regime estacionário. Resposta ao degrau em malha aberta 2
Primeiro vamos ver a resposta ao degrau em malha aberta. Abordagem gráfica com LabVIEW Crie um novo VI em branco e insira o VI CD Construct Transfer Function Model e o VI CD Draw Transfer Function Equation, da sessão Model Construction da paleta Control Design. Crie controles para os terminais Numerator e Denominator do VI Construct Transfer Function Model. Conecte a saída Transfer Function Model deste VI ao terminal de entrada do VI CD Draw Transfer Function Equation. Finalmente, crie um indicador do terminal Equation do VI Draw Transfer Function. Crie um loop While ao redor deste código, e crie um controle para o terminal condicional do loop. A seguir, adicione o VI CD Step Response ao diagrama de blocos. Conecte a saída Transfer Function Model do VI CD Construct Transfer Function Model à entrada Transfer Function Model do VI CD Step Response. Crie um indicador da saída Step Response Graph do VI CD Step Response. ao degrau Figura 4: Resposta Abordagem híbrida gráfica/mathscript Alternativamente, nós podemos usar um MathScript Node com um VI CD Step Response para traçar a resposta ao degrau em malha aberta, usando o seguinte código: plant = tf(num,den); Tenha certeza de que você alterou o tipo de dados da variável de saída do MathScript Node para TF object. 3
ao degrau usando MathScript Node Figura 5: Resposta Resultado A execução do VI da figura 4 ou da figura 5 deve retornar o gráfico mostrado abaixo na figura 6. Figura 6: Gráfico de resposta ao degrau O ganho DC da função de transferência da planta é 1/20, então o valor final da saída a uma entrada de degrau unitário é 0,05. Isso corresponde ao erro de regime estacionário de 0,95, bastante grande na verdade. Além disso, o tempo de subida é cerca de 1 segundo e o tempo de estabelecimento é cerca de 1,5 segundos. Vamos projetar um controlador que irá reduzir o tempo de subida, reduzir o tempo de estabelecimento e eliminar o erro regime estacionário. 4
Controle proporcional Da tabela na figura 2, nós vemos que o controlador proporcional (Kp) reduz o tempo de subida, aumenta o overshoot e reduz o erro de regime estacionário. A função de transferência de malha fechada do sistema acima com um controlador proporcional é: Abordagem gráfica com LabVIEW Altere o VI CD Construct Transfer Function Model para SISO (Symbolic) para que seja possível o uso de variáveis. O diagrama de blocos resultante está mostrado na Figura 7. de malha fechada usando o LabVIEW Figura 7: Sistema Agora insira um controlador proporcional na função de transferência de malha fechada do sistema. Coloque o valor de 300 para o ganho proporcional ( ). Abordagem híbrida gráfica/mathscript Alternativamente, para alcançar este resultado usando um MathScript Node, use o código a seguir: num=1; den=[1 10 20]; plant=tf(num,den); Kp=300; contr=kp; sys_cl=feedback(contr*plant,1); 5
de malha fechada usando o LabVIEW MathScript Figura 8: Sistema Nota: A função de arquivo.m chamada feedback foi usada para obter uma função de transferência de malha fechada diretamente da função de transferência de malha aberta (em vez de calcular a função de transferência de malha fechada manualmente). Resultado Tanto a abordagem com o LabVIEW quanto a abordagem híbrida devem produzir o gráfico mostrado abaixo na Figura 9. Figura 9: Controle proporcional O gráfico mostra que o controlador proporcional reduziu o tempo de subida e o erro de regime estacionário, aumentou o overshoot e diminuiu o tempo de estabelecimento em uma pequena quantidade. 6
Controle proporcional derivativo Agora, vamos dar uma olhada em um controle PD. Na tabela na figura 2, nós vemos que o controlador derivativo ( ) reduz tanto o overshoot quanto o tempo de estabelecimento. A função de transferência de malha fechada do dado sistema com um controlador PD é: Estabeleça o igual a 300 como antes e o igual a 10. Abordagem gráfica com LabVIEW Usando o VI da figura 7, modifique os termos de entrada no painel frontal para adicionar o elemento derivativo ao sistema. Abordagem híbrida gráfica/mathscript seguir: Alternativamente, para alcançar este resultado usando um MathScript Node, use o VI da Figura 8 com o código a num=1; den=[1 10 20]; plant=tf(num,den); Kp=300; Kd=10; contr=tf([kd Kp],1); sys_cl=feedback(contr*plant,1); Resultado Tanto a abordagem com LabVIEW quanto a abordagem híbrida devem produzir o gráfico mostrado abaixo na figura 10. 7
Figura 10: Controle proporcional-derivativo Compare o gráfico na figura 10 ao gráfico na figura 9. O gráfico da resposta ao degrau mostra que o controlador derivativo reduziu tanto o overshoot quanto o tempo de estabelecimento, e teve um pequeno efeito no tempo de subida e no erro de regime estacionário. Controle proporcional-integral Antes de entrar em um controle PID, vamos ver o controle PI. Da tabela, nós vemos que um controlador integral ( ) diminui o tempo de subida, aumenta tanto o overshoot quanto o tempo de estabelecimento e elimina o erro de regime estacionário. Para o sistema dado, a função de transferência de malha fechada com um controle PI é: Vamos reduzir o para 30 e deixar o igual a 70. Abordagem gráfica com LabVIEW Usando o VI da figura 7, modifique os termos de entrada no painel frontal para adicionar o elemento integral ao sistema. Abordagem híbrida gráfica/mathscript seguir: Alternativamente, para chegar nesse resultado usando um MathScript Node, use o VI da figura 8 com o código a num=1; den=[1 10 20]; plant=tf(num,den); Kp=30; Ki=70; contr=tf([kp Ki],[1 0]); sys_cl=feedback(contr*plant,1); 8
Resultado Tanto a abordagem com LabVIEW quanto a abordagem híbrida devem produzir o gráfico mostrado abaixo na figura 11. Figura 11: Controle proporcional-integral Nós reduzimos o ganho proporcional ( ) por conta do controlador integral também reduzir o tempo de subida e aumentar o overshoot da mesma forma que o controlador proporcional (efeito duplo). A resposta acima na figura 11 mostra que o controlador integral eliminou o erro de regime estacionário. Controle proporcional-integral-derivativo Agora, vamos observar um controlador PID. A função de transferência de malha fechada do sistema com um controlador PID é: Depois de várias execuções de tentativa e erro, os ganhos,, e forneceram a resposta desejada. 9
Abordagem gráfica com LabVIEW Para confirmar, teste esses termos no seu VI, usando o VI da figura 7. Abordagem híbrida gráfica/mathscript Alternativamente, esse resultado pode ser alcançado com um MathScript Node, usando o VI da figura 8 com o código a seguir: num=1; den=[1 10 20]; plant=tf(num,den); Kp=350; Ki=300; Kd=50; contr=tf([kd Kp Ki],[1 0]); sys_cl=feedback(contr*plant,1); Resultado Tanto a abordagem com o LabVIEW quanto a abordagem híbrida devem produzir o gráfico a mostrado abaixo na Figura 12. Figura 12: Controle proporcional-integral-derivativo Agora, nós obtivemos um sistema de malha fechada sem overshoot, rápido tempo de subida e nenhum erro de regime estacionário. Dicas gerais para projetar um controlador PID Ao projetar um controlador PID para um dado sistema, siga os passos abaixo para obter uma resposta desejada. 1. Obtenha uma resposta em malha aberta e determine o que precisa ser melhorado 2. Adicione um controle proporcional para melhorar o tempo de subida 10
3. Adicione um controle derivativo para melhorar o overshoot 4. Adicione um controle integral para eliminar o erro de regime estacionário 5. Ajuste o, e até você obter uma resposta geral desejada. Você pode sempre utilizar à tabela mostrada neste artigo para encontrar qual controlador controla quais características. Tenha em mente que você não precisa implementar todos os três controladores (proporcional, derivativo e integral) em um único sistema, se não for necessário. Por exemplo, se um controlador PI fornecer uma resposta boa o suficiente (como no exemplo acima), então você não precisa implementar um controlador derivativo no sistema. Mantenha o controlador o mais simples possível. DESAFIO! Se você chegou até aqui e ainda há tempo aproveite e explore outros recursos do módulo Control Design and Simulation do LabVIEW. Abaixo falaremos sobre Lugar das Raízes e Resposta em Malha Fechada! Polos de malha fechada O lugar das raízes de uma função de transferência de malha aberta é um mapeamento das localizações (lugares geométricos) de todos os polos de malha fechada possíveis com ganho proporcional e realimentação unitária: A função de transferência de malha fechada é: Figura 1: Sistema de malha fechada Assim, os polos do sistema de malha fechada são valores de s para os quais. Se nós utilizarmos a relação, então a equação anterior tem a forma: 11
nele]. Sendo ordem de a(s) e ordem de [a ordem de um polinômio é a maior potência de que aparece Nós vamos considerar todos os valores positivos de. No limite em que tende a 0, os polos do sistema de malha fechada são ou os polos de. No limite em que tende ao infinito, os polos do sistema de malha fechada são ou os zeros de. Não importando o valor de que escolhermos, o sistema de malha fechada deve sempre ter n polos, onde n é o número de polo de. O lugar das raízes deve ter n ramos, cada traço começa em um polo de e vai até um zero de Se tiver mais polo do que zeros (que geralmente é o caso), e nós dizemos que possui zeros no infinito. Neste caso, o limite de com é zero. O número de zeros no infinito é, o número de polos menos o número de zeros, e é o número de traços que vão para o infinito (assíntotas). Uma vez que o lugar das raízes é realmente a localização de todos os possíveis polos de malha fechada, a partir dele nós podemos selecionar um ganho de forma que o nosso sistema de malha fechada realizará a tarefa da maneira que nós queremos. Se qualquer um dos polos selecionados estiver no plano da metade direita, o sistema de malha fechada será instável. Os polos que estão mais próximos do eixo imaginário possuem a maior influência na resposta em malha fechada, então embora o sistema possua três ou quatro polos, ele ainda age como um sistema de segunda ou mesmo primeira ordem dependendo da(s) localização(ões) do(s) polo(s) dominante(s). Traçando o lugar das raízes de uma função de transferência Considere um sistema de malha aberta que possui uma função de transferência de: Como nós projetamos um controlador com realimentação para o sistema usando o método do lugar das raízes? Digamos que os nossos critérios são 5% de overshoot e tempo de subida de 1 segundo. Abordagem gráfica com LabVIEW Nós podemos criar um VI para traçar o lugar das raízes, usando o VI CD Root Locus da sessão Model Construction da paleta Control Design. 12
Figura 2: Traçando o lugar das raízes Abordagem híbrida gráfica/mathscript Alternativamente, você pode usar um MathScript Node para traçar o lugar das raízes, usando o código a seguir: num=[1 7]; den=conv(conv([1 0],[1 5]),conv([1 15],[1 20])); sys=tf(num,den); o lugar das raízes usando MathScript Node Figura 3: Traçando Abordagem com LabVIEW MathScript Ainda outra abordagem para este problema é usar a janela MathScript. Selecione Tools» MathScript Window, e insira o código a seguir em Command Window: num=[1 7]; den=conv(conv([1 0],[1 5]),conv([1 15],[1 20])); sys=tf(num,den); rlocus(sys) axis([-22 3-15 15]) 13
Resultado Usando a abordagem gráfica com LabVIEW, a abordagem com LabVIEW MathScript ou a abordagem híbrida gráfica/mathscript, o resultado deve ser um gráfico similar ao mostrado abaixo na Figura 4. Escolhendo o valor para K do lugar das raízes Figure 4: Gráfico do lugar das raízes O gráfico na Figura 4 acima mostra todas as localizações possíveis do polo de malha fechada para um controlador puramente proporcional. Obviamente nem todos os polos de malha fechada vão satisfazer os critérios do nosso projeto. Para determinar qual parte do lugar é aceitável, nós podemos utilizar o comando sgrid on para traçar linhas de taxa de amortecimento e frequência natural constantes. No nosso problema, nós precisamos de um overshoot de menos que 5% (que significa uma taxa de amortecimento Zeta maior que 0,7) e um tempo de subida de 1 segundo (que significa uma frequência natural maior que 1,8). Insira o comando sgrid on na janela de comando do MathScript e pressione Enter. A figura a seguir mostra o gráfico que você deve ver. As linhas verde e vermelha foram sobrepostas no gráfico. 14
Figura 6: Gráfico do lugar das raízes com linhas de grade No gráfico acima, as linhas diagonais indicam taxas de amortecimento (Zeta) constante e os semicírculos indicam linhas de frequência natural ( ) constante. As linhas vermelhas sobrepostas no gráfico indicam as localizações de polo com uma taxa de amortecimento de 0,7. Entre essas linhas, os polos terão Zeta > 0,7 e fora das linhas Zeta > 0,7. O semicírculo verde indica localizações de polos com uma frequência natural = 1,8; dentro do círculo, < 1,8 e fora do círculo > 1,8. Voltando ao nosso problema, para fazer com que o overshoot seja menos que 5%, os polos devem estar entre as duas linhas vermelhas, e para tornar o tempo de subida menor que 1 segundo, os polos devem estar fora do semicírculo verde. Então agora nós sabemos que somente a parte de fora do semicírculo e entre as duas linhas é aceitável. Todos os polos nessa localização estão no plano da esquerda, então o sistema de malha fechada será estável. A partir do gráfico acima nós vemos que há uma parte do lugar das raízes dentro da região desejada. Então neste caso nós somente precisamos de um controlador proporcional para mover os polos para a região desejada. Você pode usar o comando rlocfind na janela MathScript para escolher os polos desejados no lugar: [k,poles] = rlocfind(sys) Clique e arraste os polos de malha fechada no gráfico para designar onde você quer que o polo de malha fechada esteja. Você pode selecionar os pontos indicados no gráfico abaixo para satisfazer os critérios do projeto. 15
Figura 7: Lugar das raízes interativo na janela MathScript Note que uma vez que o lugar das raízes pode ter mais que um traço, quando você seleciona um polo, você pode querer descobrir onde estão os outros polos. Lembre-se de que eles afetarão a reposta também. Do gráfico acima nós vemos que todos os polos selecionados estão em posições razoáveis. Nós podemos seguir em frente e usar o selecionado como o nosso controlador proporcional. Clique em OK para selecionar esses polos. Resposta em malha-fechada Com o objetivo de encontrar a resposta ao degrau, você precisa conhecer a função de transferência de malha fechada. Você pode calculá-la, ou deixar o LabVIEW fazê-lo para você na janela MathScript. sys_cl= feedback(k*sys,1) Os dois argumentos para a função feedback são o numerador e denominador do sistema de malha aberta. Você precisa incluir o ganho proporcional que você escolheu. Assume-se que a realimentação é unitária. step(sys_cl) Finalmente, confira a resposta ao degrau do seu sistema de malha fechada. 16
Figura 8: Resposta de malha fechada Como nós esperávamos, essa resposta possui um overshoot menor que 5% e um tempo de subida menor que 1 segundo. 17