Controle PID

O conceito de controle tem uma abrangência muito grande. Mas quando estamos falando de automação industrial podemos limitar bastante esta abrangência.

Vamos começar separando os dois tipos mais básicos de controle segundo a configuração de malha: malha aberta ou malha fechada.

No controle em malha aberta temos o set point que é o valor de ajuste para o controle. O set point pode ser dado por um potenciômetro de ajuste por exemplo.

Quando o controle estiver sendo realizado por uma CPU, o set point é apenas um número que pode ser ajustado por teclas ou até mesmo ser um valor fixo.

Segundo o diagrama abaixo, o set point entra no bloco de ganho do sistema de controle. O ganho é uma função matemática que transforma o valor de set point em uma outra variável chamada de variável de controle.

malha

Esta variável é aplicada ao atuador que é em última instância o fenômeno que estamos controlando. Se estivermos controlando o posicionamento de um eixo, o atuador é o motor elétrico. Se estivermos controlando a temperatura em um processo, o atuador pode ser uma resistência de aquecimento. Se estivermos controlando o nível de um líquido em um tanque, o atuador pode ser uma válvula proporcional que despeja o líquido no tanque.

O importante aqui é observar que este controle em malha aberta só funciona bem em situações onde todas as variáveis são estáveis e bem conhecidas. E mesmo assim podemos esperar que haja um certo nível de erro entre o resultado desejado e o resultado obtido.

Porém é um controle muito simples e útil em algumas aplicações onde não há necessidade de precisão do resultado obtido.

Vamos imaginar uma aplicação onde tenhamos uma esteira de transporte para caixas. Se o objetivo é somente levar as caixas de um ponto A para um ponto B não precisamos de um resultado preciso no controle da velocidade da esteira.

Esta aplicação pode ser resolvida simplesmente com um potenciômetro que ajusta um valor de tensão de controle para um inversor de frequência que por sua vez controla a velocidade do motor da esteira.

Este é um controle em malha aberta. O operador que ajusta o potenciômetro pode usar um tacômetro para medir a velocidade da esteira e conseguir um resultado preciso. Porém, quando estiver em operação as condições inicias vão se alterar já que o número de caixas sobre a esteira não é constante. Neste caso o esforço que o motor tem que realizar vai variar e consequentemente sua velocidade.

Já no controle em malha fechada o sistema fica constantemente medindo o resultado obtido e corrigindo o valor da variável de controle para minimizar o erro entre o resultado esperado e o resultado obtido.

malhaFechada

Em um controle de velocidade e posicionamento normalmente o dispositivo que fica fazendo as medições do resultado obtido é o encoder. O encoder é um dispositivo que fica acoplado ao motor e transforma o movimento de giro em pulsos que podem ser lidos pelo sistema de controle.

No caso da esteira de transporte citada acima, o controle em malha fechada poderia usar um encoder para medir a velocidade da esteira através dos pulsos do encoder. A diferença entre a velocidade ajustada pelo set point e a velocidade real é usada para corrigir a variável de controle e, por conseguinte a velocidade real.

 

Teoria

Na minha época de faculdade o principal livro que tratava do assunto era o livro de DiStefano/Stubberud/Williams (Sistemas de retroação e controle).

IMG_20180619_085049974_LL

É um livro completo para quem quer se aprofundar no assunto. Mas eu recomendo a leitura do primeiro capítulo para dar uma boa base matemática sobre o assunto.

O restante do livro é muito interessante, mas desnecessário para a maioria dos técnicos e engenheiros de automação. Hoje em dia os algoritmos de controle presentes nos CLPs executam toda a parte matemática com grande eficiência, aliviando o trabalho do projetista de automação, que pode se concentrar na lógica da máquina, o que já é bastante desafiador.

Controle PID

O controle PID é um algoritmo de controle presente em quase todos os CLPs e inclusive no Arduino. Por essa razão é importante conhecermos como ele funciona.

No controle PID temos 3 parcelas que são somadas e atuam na variável de controle.

PID

A parcela proporcional (P) atua de forma direta e proporcional ao erro entre o valor de set point e o valor de realimentação. Das 3 parcelas é a mais utilizada. Na verdade não existe controle sem a parcela proporcional.

Na maioria das aplicações de controle a parcela proporcional sozinha é capaz de fazer um bom controle.

A parcela integral será importante principalmente quando nosso controle tem dificuldade de fazer a variável de controle atingir o valor desejado após algum tempo em regime estável. O erro entre o valor desejado e o valor real ao longo do tempo vai sendo somado e vai aumentando o valor da parcela integral. De forma que sempre o valor desejado é atingido após algum tempo.

A parcela derivativa é usada quando temos um processo com mudanças bruscas na dinâmica do sistema e as parcelas P e I não conseguem fazer as correções para manter o resultado esperado na variável de controle.

É relativamente raro utilizarmos a parcela derivativa. O grande problema com esta parcela é que é difícil lidar com ruídos que aparecem no sinal de realimentação. Pois estes ruídos tem um comportamento bem parecido com o sinal quando ocorre uma interferência brusca externa. Neste caso o controle derivativo pode provocar mais oscilação na variável de controle do que torná-la mais estável.

Os ajustes de um controle PID são feitos através das constantes Kp, Ki e Kd. Estas constantes definem o ganho de cada parcela no controle PID. Quanto maior o valor do ganho maior a interferência da parcela equivalente.

 

Arduino

A biblioteca de PID do Arduino é bastante eficiente. Existe até uma função de auto-tuning que é usada para fazer um ajuste automático dos parâmetros do PID (Kp, Ki, Kd).

Caso você não tenha ainda usado a biblioteca de PID na sua IDE do Arduino, provavelmente você terá que incluir a biblioteca antes de usá-la. Mas após isso é muito fácil usá-la.

Uma aplicação bem simples inclui uma variável analógica que representa o sinal de realimentação na entrada analógica A0. O sinal de controle é o PWM no pino 3 do Arduino.

O programa para fazer este controle está transcrito abaixo:

codigo10

A criação do controle PID é feita na linha 14. Nesta função primeiramente definimos a variável onde ficará armazenado o valor de realimentação ( Input). Em seguida definimos a variável onde ficará armazenado o valor de retorno do calculo PID (Output). Este valor é o que deverá ser usado para controlar a variável de controle.

Ainda na função que cria o controle PID (linha 14), definimos a variável que define o set point (Setpoint), os valores para os ganhos, Kp=2, Ki=5 e Kd=1, e finalmente a polaridade de atuação do sinal de saída, DIRECT.

A definição de polaridade de saída diz ao controle PID que ao aumentar o valor da saída, o valor da realimentação também aumenta. Outro tipo de polaridade é REVERSE.

Dentro da rotina setup ( ) temos mais 2 funções do controle PID . Na linha 23 temos a função SetMode. O modo AUTOMATIC é o padrão. O outro modo é MANUAL, mas no modo manual o controle PID não é executado. Serve para desligarmos momentaneamente o controle para que outro sistema faça a função do controle.

Na linha 24 definimos o tempo de execução do controle usando a função setSampleTime(10). O parâmetro desta função é dado em unidades de milissegundos e define de quanto em quanto tempo o controle é executado. No caso 10 milissegundos.

Dentro da rotina loop ( ) realizamos o controle por meio de 3 linhas do programa. Primeiro fazemos a leitura do valor de realimentação na entrada A0 (linha 29). Em seguida temos que chamar a função compute ( ) para o cálculo do controle. E finalmente atualizamos o valor da saída PWM 3 com o valor de Output.

Esta é uma pequena introdução ao tema de controle PID. Mas é suficiente para que você tente fazer seu próprio controle e aprender mais.

3 comentários sobre “Controle PID

  1. Ex….
    Inversor de frequência cfw500 com resistor de frenagem trabalho com encoder incremental
    1 como eliminar ruído do cfw500 apenas na programação? ( eu fiz)!
    Como SetPont inicial e o resto em malha fechada, ainda, pww, varia com a partida até a velocidade de trabalho e diminui ao chegar perto do final junto com o pwm dois motores de passo mena32 de 100kfg cm2, motores este apenas por economia os próximos serão servos, ainda, continuando existe um SetPont e 90 pontos por camada e 59 camadas e quando acionado o motor o motor principal o ruído…..?
    Isto para cada um dos produtos no total de 6.
    Sou iniciante e procuro um curso, porém, UM CURSO q realmente em ensine, q n me faça desistir por perca de tempo
    Caso citado acima!
    PID…
    Tudo q vem da rede em se tratando de programação nunca me atendeu com as minhas necessidades dentro de um projeto
    Hj eu prefiro ignorar e criar eu mesmo
    Só consegui trabalhar o PID após eliminar o ruído, claro foi bem difícil e chato programar e entender o funcionamento e criar um PID q fosse relevante perante aos erros q foram aparecendo!
    Voltando ao curso… Me apresenta uma grande realmente boa e eu faço, pq eu n fico copiando projetos de Internet eu sou autônomo e trabalho com projetos mecânicos elétricos pneumático
    E agora entrado com programação
    Se puderem me ajudar!

    Curtir

    1. Puxa vida, quanta informação! Mas vamos lá.
      Primeiramente meus parabéns. Você já está em uma condição de experiência a frente de outros que ainda nem tiveram a chance de encontrar dificuldades como as que você enfrentou e conseguiu avançar.
      Para otimizar o controle de velocidade e posicionamento de eixos em uma máquina real, muitas vezes temos que pesquisar muito e experimentar algoritmos mais avançados de controle.
      O que encontramos à disposição na internet dificilmente vai se aprofundar suficientemente para resolver qualquer problema. É o caso deste blog. A ideia aqui é apresentar uma pequena introdução teórica e incentivar o leitor a fazer experiências usando o Arduino.
      É normal que em algum tempo este leitor se encontre em uma encruzilhada onde ele já está em outro patamar de conhecimento. Neste novo patamar, os avanços podem ser menores e mais difíceis de serem atingidos. Talvez seja este seu caso.
      O que eu posso dizer é que mesmo com toda a experiência que tenho, ainda hoje aparecem desafios que me fazem buscar soluções em livros e até mesmo na internet. Sim, existem coisas boas na internet. Mas realmente dá mais trabalho encontrar informações valiosas.
      Abraços,
      Jorge Cândido

      Curtir

Deixe uma resposta para Natan Miklas Cancelar resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s