Controlador PID digital: Uma modelagem prática para microcontroladores - Parte 1

controlador PID digital
Este post faz parte da série Controlador PID digital. Leia também os outros posts da série:

Nesta  série de artigos iremos demonstrar, de forma prática e o mais intuitiva possível, como modelar um controlador PID (Proporcional - Integral - Derivativo) digital de forma que sua equação resultante possa ser facilmente implementada em um microcontrolador de uso geral (entenda-se aqui como uso geral, processadores que possuam pelo menos instrução de multiplicação por hardware, ou seja, nativa).

 

 

Introdução

 

Quando fala-se em controle de sistemas, é difícil um compensador do tipo PID não ser citado. Esse tipo de controlador possui características interessantes para manter sob controle a saída de um determinado sistema que pode ser mecânico ou eletrônico, por exemplo. Utilizado em sistemas de malha fechada (ou seja, o novo valor de saída depende da computação do valor de entrada desejado e do valor corrente de saída) um controle desse tipo pode ser ajustado para oferecer a resposta desejada e manter a saída do sistema em um valor estável com um mínimo de erro possível apenas com o ajuste de três parâmetros. Observando a figura 1, podemos perceber o aspecto geral de um sistema de malha fechada.

 

PID digital
Figura 1 : Exemplo de sistema de malha fechada (NATIONAL INSTRUMENTS)

 

O sinal Desired State é o valor desejado para qual a saída do sistema deverá permanecer até que esse seja alterado novamente. Na saída do sistema (sinal do exemplo Actual Robot State) temos o sinal do estado corrente do sistema que pode ser igual ou não ao desejado. Para isso, seu valor corrente é enviado à entrada e computa-se a diferença entre o estado desejado e o estado atual, formando um terceiro chamado comumente de variável de erro, ou seja a diferença entre o estado desejado e o atual. Já o bloco Robot Kinematics representa a característica do sistema estimulado, geralmente descrito por equações diferenciais, ou seja, o sistema a ser controlado (um motor elétrico tendo sua velocidade controlada, por exemplo). Por último temos o bloco Controller, que como o próprio nome sugere é um bloco para compensar as características (muitas vezes indesejáveis) da resposta do sistema a ser controlado. É aqui que o controlador PID é “encaixado”. Agora que relembramos (ou conhecemos) o aspecto de um sistema malha fechada, vamos entender melhor o que é esse compensador PID.

 

 

O Compensador PID

 

Sabendo que um sistema malha fechada geralmente é acrescido de um bloco compensador para obter a resposta e controle sobre uma variável, o leitor deve - se perguntar quais são esses compensadores. De fato existem diversas implementações de compensadores que variam desde um simples filtro de primeira ordem, até complexos arranjos com equações de ordem maior ou igual a 3. Dentre eles destacamos o controlador PID, esse possui até três formas de atuação (até três pois as outras ações podem ser desativadas apenas zerando um dos coeficientes) cada uma com um efeito diferente ao sistema, podemos generalizar esses efeitos da seguinte forma:

 

- A ação proporcional (P) irá prover uma resposta mais rápida do sistema sob uma variação no sinal de entrada (estado desejado);

- A ação integral (I) tem por objetivo cancelar um fenômento conhecido por erro de estado estacionário, de forma que ao atingir um estado estável esse valor seja o desejado no sinal de entrada;

- A ação derivativa (D) possui um efeito de antecipação da correção do valor de saída do sistema de forma que ela também melhora a rapidez de resposta do sistema e reduz o valor de sobresinal (valor que refere - se à quantidade em que o sinal de saída está acima do desejado).

 

A combinação da quantidade de cada uma dessas três ações irá fazer com que o controlador em conjunto com a planta (forma comum de se referir ao sistema em controle) forneçam uma resposta adequada a uma determinada variação na entrada. Dessa forma podemos escrever o estado de saída do controlador PID em função de sua entrada pela equação:

 

PID digital
Eq(1)

 

 

Onde:

 

- Kp : Coeficiente da ação proporcional;

-Ki : Coeficiente da ação integral;

-Kd :  Coeficiente da ação derivativa

- t : Instante do estado a ser processado;

- u(t) : Sinal de saída do sistema no instante t;

- e(t) : Sinal de erro na entrada do controlador no instante t.

 

 

O grande problema para implementação de um compensador desses está no fato deste consistir em uma equação envolvendo uma integral e uma diferenciação de uma função desconhecida, sendo difícil estimar seu comportamento e muito menos os melhores valores para os coeficientes que forneçam uma resposta adequada para isso. Então talvez seja melhor analisar seu comportamento em outro domínio certo? Por que não o domínio da frequência? Vamos recorrer a um recurso matemático bem conhecido por engenheiros de controle, a transformada de Laplace. Com ela podemos modificar essa equação para uma forma mais simples e resolver utilizando álgebra no lugar de cálculo. Devido ao objetivo prático desse artigo não entraremos em detalhes da matemática envolvida para esse recurso, assim, buscaremos as respectivas transformadas dessa equação utilizando a tabela básica de transformadas, que pode ser encontrada em referências como OGATA(2010) e NISE(2010).

 

Recobremos a equação 1:

 

eq1

 

“L” transformando a equação acima obtém-se:

 pid1

 

Onde: pid2, uma variável complexa.

 

No domínio da frequência (chamado para esse caso de domínio de Laplace) é interessante analisar a função de transferência, ou seja o quociente entre o sinal de saída pelo sinal de entrada, então tem-se:

 

pid3

 

PID digital
Eq(1.1)

 

E está feito, com a equação 1.1 temos o necessário para integrar nas equações do sistema a ser controlado (previamente também “L” - transformados) bastando avaliar  as características da planta e determinar Kp, Ki e Kd. Após esse processo um circuito desenvolvido à base de amplificadores operacionais poderá prover um simples, mas eficiente, controlador PID analógico conforme mostrado na figura 2:

 

PID digital
Figura 2 : PID analógico (adaptado de MEYRATH, 2005)

 

 

Se tomarmos o caminho inverso e obtivermos a função de transferência do circuito da figura 2, chegaremos a uma expressão se não igual, muito similar e de mesma ordem que a equação obtida em 1.1. Assim, temos o sistema analógico pronto para resolver o problema (ou completar) do sistema de controle.

 

Ok, mas como implementa-se isso em um microcontrolador? Aliás, em um microcontrolador de uso geral é possível implementar? A resposta é parcialmente sim. Parcialmente pois um algoritmo PID para ter um desempenho aceitável o processador necessita pelo menos da instrução de multiplicação por hardware no mais, nas próximas sessões iremos derivar da equação 1.1 uma aproximação de ótima qualidade de um controlador PID. Para mais informações sobre esse tipo de controlador e sua utilidade, sugiro a leitura do artigo sobre controle PID escrito pelo Carlos Márcio.

 

 

Implementando um PID numérico

 

Sabemos agora o que é um sistema de malha fechada e como realizar um controlador PID na forma de um circuito eletrônico baseado em amplificadores operacionais. Agora vamos entender como transformar toda essa teoria em números para que o nosso processador possa executar uma sequencia de comandos compatível com o mesmo funcionamento do circuito eletrônico demonstrado na figura 2.

 

Vamos observar a figura 3, que ilustra um sistema de controle onde um processador (ou microcontrolador) toma a forma do bloco de controle responsável por realizar a compensação e atuar sobre a planta a ser controlada:

 

PID digital
Figura 3 : Sistema de controle digital (STARR, 2006)

 

 

Desprezando os demais sinais que apareceram em comparação com a figura 1, e direcionando o olhar para o controlador, vimos que ele toma a forma de um processador de uso geral, onde o sinal de erro chega a ele através de uma conversão A/D. O valor numérico é então processado gerando outro que é passado a um D/A (pode ser um método de modulação como PWM) onde retoma sua forma analógica e controla a planta. Assim sabemos que para modelar um PID digital precisaremos trabalhar com processamento numérico.

 

Vamos começar essa sessão derivando um algoritmo PID muito popular e utilizando inclusive em microcontroladores de 8 bits como demonstrado em ATMEL (2006). A ideia básica por mais absurda que possa parecer é tomar a transformada inversa de Laplace e retomar a equação 1 :

 

eq1

 

Sim, para essa primeira demonstração trabalhar no domínio do tempo e com equações diferenciais facilitará bem as contas, observando a equação temos uma integral e uma operação de derivada, relembrando (ou apresentando) algumas aulas de cálculo numérico sabe-se que é possível aproximar tanto uma operação quanto a outra usando operações algébricas que se comportem de maneira similar.

 

ATENÇÂO! A partir dessa sessão utilizaremos um pouco mais de matemática e relembraremos alguns conceitos de cálculo diferencial e integral. Então pedimos um pouquinho de paciência do leitor (principalmente do mais iniciante) até chegarmos ao primeiro algoritmo. Vale o esforço pois de brinde virão uma grande compreensão do que são derivadas e integrais na prática.

 

Começando pelo termo proporcional, este sem dúvida é o mais intuitivo. Veja que esse pode ser computado apenas tomando a multiplicação da constante proporcional pela variável de erro que chega a um instante t:

 

pid5

Eq(1.2)

 

Onde n denota o instante da amostragem da variável de erro recebida pelo conversor A/D. Perceba que ainda estamos no domínio do tempo, mas agora estamos em um domínio discreto onde as amostras que chegam estão igualmente espaçadas por uma diferença de 1 novo valor. Ou seja, já temos a dica de onde partir para encontrar os demais termos da equação. Passemos agora ao termo derivativo.

 

Para aproximar uma derivada a um computador digital precisamos relembrar o conceito de diferenciação aprendido nas primeiras áulas de cálculo, assim a derivada de uma função em respeito a t é definida como:

 

PID digital
Eq(1.3)

 

 

Esquecendo um pouco as aulas de cálculo agora, vamos observar melhor que essa expressão diz, ou seja uma derivada nada mais é do que a subtração de um valor de uma função para um dado t e um valor prévio deste mesmo t, onde a diferença entre eles é muito próxima de zero ou mesmo zero. Matematicamente isso não é possível, porém se fizermos esse t suficientemente pequeno, podemos obter uma aproximação muito similar à derivada pela definição, então se queremos um espaçamento pequeno, por que não escolher o valor da taxa de amostragem do conversor A/D?  então:

 

pid7

 

Assim, agora temos um valor númerico aceitável o que nos permite desenvolver o limite apresentado em 1.3:

 

pid11

 

Podemos agora passar para o domínio de tempo discreto, pois sabemos que a cada resultado da conversão A/D já estará espaçada de uma amostra em relação à outra. Assim tem-se :

 

PID digital
Eq(1.4)

 

 

Adicionando o ganho Kd à equação, finalmente chegamos a:

 

PID digital
Eq (1.5)

 

 

E assim acabamos de desvendar o grande significado de uma derivada, no domínio do tempo contínuo ou discreto, essa operação se resume a uma subtração do valor atual da função pelo anterior. O que a diferencia entre uma e outra é que essa subtração é feita quando o espaçamento entre instantes é simbolicamente zero, e no caso do tempo discreto é um valor próximo a zero mas conhecido, em tempo, o termo t contido no denominador foi suprimido, pois além das amostras já estarem devidamente espaçadas com essa base de tempo, esse valor é computado no momento em que ajustamos o parâmetro Kd do nosso controlador.

 

A Equação 1.5 é facilmente implementada em qualquer microcontrolador, e realmente calcula o termo derivativo ou qualquer outra derivada. Agora temos o termo integral, esse segue o mesmo princípio numérico, porém de forma inversa, se antes tínhamos uma subtração, no caso do integrador teremos uma somatória. Vamos agora partir para a definição de uma integral, como feito para o derivativo comecemos pelo domínio de tempo continuo, vale lembrar que para essa demonstração, a integral só de interesse se a mesma for definida, ou seja houverem intervalos cujo os valores sejam finitos:

 

PID digital
Eq(1.6)

 

 

 

Apesar de parecer mais assustadora a uma primeira vista, podemos desmembrar o somatório para apenas duas amostras, visto que para um sistema de controle interessam os estados atuais e o de uma amostra anterior, isso leva a :

 

pid12

 

Da mesma forma como fizemos para o termo derivativo, utilizemos o tempo de amostragem do conversor A/D como valor suficientemente pequeno para t, isso transforma agora a integral num somatório completamente calculável, o que nos leva direto ao domínio de tempo discreto:

 

pid13

 

Novamente com o termo sendo suprimido pois está contido em Ki, assim temos o termo integral da equação como sendo:

 

PID digital
Eq(1.7)

 

 

E assim temos o termo integral da equação PID, bastando agora juntar as equações 1.2 , 1.5 e 1.7 para obtermos o valor do estado que será enviado ao conversor D/A em função da entrada e(t):

 

PID digital
Eq.(1.8)

 

 

Comparando essa equação obtida com a equação 1, agora chegamos à conclusão que é possível computar um compensador PID de forma digital, certo? Um simples programa em C ou mesmo em assembly caso deseje um melhor desempenho poderia ser facilmente implementado em um microcontrolador.

 

Lembrando que:

 

pid16; e pid17; e ainda que :

ti = tempo de integração, td = Tempo de diferenciação.

 

Já poderíamos implementar esse código em C que é usado inclusive em algumas bibliotecas PID usadas no Arduino, e assim temos uma simples e eficiente implementação de um PID digital capaz de atender a controle de sistemas simples. Podemos chamar essa aproximação do PID digital como aproximação retangular dado o método de aproximação usado para cálculo do termo integral.

 

Nessa primeira parte vamos parar por aqui. No Github foi colocado um exemplo simples de PID usando a aproximação retangular, porém na próxima parte discutiremos mais sobre as limitações dessa técnica, bem como abordaremos o projeto de um novo PID digital usando a temida (até agora!) transformada Z, bem como dicas de como aproximar outros compensadores analógicos para implementação computacional.

 

Confira a sequência desse artigo neste link.

 

 

Referências

 

ATMEL - AVR221: Discrete PID Controller-2006, disponível em: <http://www.atmel.com/images/doc2558.pdf>.

CRENSHAW, Jack W. - Math Toolkit for Real - Time Programming - 2000.

MEYRATH, Todd - Multipurpose Analog PID Controller - 2005.

NATIONAL INSTRUMENTS - Leis de Controle, disponível em:

<http://www.ni.com/white-paper/8156/pt/>.

STARR, Gregory P. - Introduction to Applied Digital Control - 2006.

 

Outros artigos da série

Controlador PID digital, uma modelagem prática para microcontroladores - Parte 2 >>
Este post faz da série Controlador PID digital. Leia também os outros posts da série:
NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Felipe Neves
Desenvolvedor de sistemas embarcados apaixonado pelo que faz, divide seu tempo entre trabalhar no Venturus desenvolvendo firmware de tudo quanto é coisa, na Aeolus Robotics se envolvendo com o que há de mais legal em robótica e na Overlay Tech desenvolvendo algumas coisas bem legais para o campo de motion control. Possui mestrado em engenharia elétrica pela Poli-USP e possui interesse em tópicos como: Software embarcado, sistemas de tempo real, controle, robótica móvel e manipuladores, Linux embedded e quase qualquer coisa por onde passe um elétron.

13
Deixe um comentário

avatar
 
11 Comment threads
2 Thread replies
1 Followers
 
Most reacted comment
Hottest comment thread
8 Comment authors
Leandro FujimotoGeraldo GomesgutoSaulo FurtadoFelipe Neves Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Leandro Fujimoto
Membro
Leandro Fujimoto

Excelente post. \o/

Só uma observação, no caso das equações 1.7 e 1.8, o correto não seria e[n] + e[n-1] ao invés de f[n] + f[n-1]? É um pequeno detalhe só =D
Ah isso vale para a equação 1.1 da segunda parte desse artigo. Abraços!

Geraldo Gomes
Visitante
Geraldo Gomes

Ki e Kd foram mostradas em função de Kp, mas Ki e Kd deveriam não depender de Kd. Isto esta correto?

Jose Luis De Rosa Santos
Visitante
Jose Luis

Como eu obtenho os tempos ti = tempo de integração, td = Tempo de diferenciação para calculo dos respectivos Ks

guto
Visitante
guto

Olá, vamos supor que estou implementando minha lei PID em verilog, onde o clock do meu conversor A/D é o mesmo clock do meu circuito compensador. Neste caso meu Ti = Td = T_amostragem? Aí pelas relações dadas, Kp = Ki = Kd? Me parece um pouco estranho. Agradeço se puder esclarecer!

Saulo Furtado
Visitante
Saulo Furtado

Muito bom Felipe Neves, excelente artigo! Ainda estou no sexto período de Engenharia Mecatrônica pela UNIFRAN, mas já me é bastante gratificante ver e entender todas as fórmulas e conceitos do cálculo diferencial e integral sendo usados de forma tão elegante, concorda? Não vale a pena usar o Método do Lugar Geométrico das Raízes para sintonizar o PID? Não sei se é sua área, mas poderia fazer um artigo "PID vs. Fuzzy", falando sobre prós e contras, exemplos de implementação e principalmente aplicações e diferenças de desempenho nessas aplicações? Eu conheço um pouco do assunto por base em livros mas… Leia mais »

trackback

[…] Controlador PID digital: Uma modelagem prática para microcontroladores – Parte 1, de minha autoria; […]

trackback

[…] em microcontroladores e de baixo custo e com recursos de hardware limitados. No artigo técnico Controlador PID digital: Uma modelagem prática para microcontroladores – Parte 1, de Felipe Neves,  publicado originalmente no site Embarcados, é  apresentado com detalhes o […]

trackback

[…] […]

trackback

[…] artigo técnico Controlador PID digital: Uma modelagem prática para microcontroladores – Parte 1, é  apresentado com detalhes o controlador PID, sua arquitetura típica, o desenvolvimento das […]

Bruno Albrecht
Visitante
Bruno L. Albrecht

um artigo interessante para essa série é o levantamento da curva de sistemas simples para facilitar a escolha dos parâmetros Kp, Ki e Kd. métodos como curva de reação, oscilação mantida, etc.

Felipe Neves
Visitante
Felipe Neves

Bruno, interessante sugestão, isso pode virar uma série complementar para essa.

Abs.

Felipe