Página 1 de 1

PID, jogo de toalha.

MensagemEnviado: 20 Jul 2011 10:19
por fabim
Friends.

Realmente, implementar o PID, apenas entendendo e não compreendendo o todo é extremamente complexo.

Eu sempre fiz os meus "pseudo pid", fazendo um tipo de analize em tempo de execução e vendo o quanto eu ganho ou quanto eu perco em determinado espaço de tempo. etc etc...

Acontece que dessa vez eu gostaria de fazer tudo via software, para aprender o processo de cálculo como um todo,digo via software PIDmente dizendo, e infelizmente não consegui chegar a concepção de algo funcional.

Á, kp,ki,kd, ganho disso, ganho daquilo, mais ninguem realmente conseguiu me ajudar com algo paupavel.

VEM, que.
PID without PHD.
Li o arquivo, entendi o calculo, mais tipo.

Como retornar um valor daqueles calculos que se ajustam ao valor binario no range que me interessa ?

Eu entendi por exemplo, que para algo que responde muito lento, o ganho da derivada deve ser tal que, ele prevê a tendencia de valor para um dado tempo. Tipo, por causa da derivada ele entende 36.5°C, mais na verdade tem 36.1°C, etc.... etc.....

Alguém ai ja fez algo prático, e simples, e poderia me dar um help em OFF ou porraqui mesmo ?

MensagemEnviado: 20 Jul 2011 15:11
por marcelo_asm
se voce está implementando o PID em um micro com aritmética inteira, voce deve projetar os valores máximos com os quais voce quer trabalhar sem causar estouro nos cálculos.

Eu normalmente escolho o valor máximo admissível do erro e a partir dele escolho a faixa de ajuste do Kp para que a saída do controlador fique num valor razoável e compatível com o atuador.

Por exemplo, se voce escolher a saída do PID como sendo um número de 16 bits e o erro máximo como 5000 (equivalendo, por exemplo, a 0.5% de erro), eu poderia escolher um Kp entre 0 e 13.1. Essa seria a etapa de projeto do termo proporcional.

Agora vem o termo integral, que é um pouco mais complicado. Voce deve estipular um valor máximo do termo integral (a soma total acumulada) que seja compatível com seu processo. Quero dizer que mesmo que acontecesse de seu processo ficar maluco e com erro grande por muito tempo voce não deve deixar o termo integral ficar acumulando para sempre, é o que chamam de mecanismo anti windup. Uma vez que voce saiba qual o erro máximo e o valor máximo do termo integral, voce consegue determinar o Ti (ou Ki). Esse processo é iterativo, uma vez que voce deve chegar a um valor de Ti que seja correto do ponto de vista de windup e que seja razoável em relação ao seu processo.

O termo derivativo segue pelo mesmo caminho, mas é uma parcela mais chata por causa do problema inerente de se calcular derivadas numericamente.

Se estiver implementando num micro com processamento de ponto flutuante por HW a coisa facilita, uma vez que voce não precisa se preocupar com estouro dos números por causa do tamanho do tipo. Mas o caso do windup e do projeto do erro máximo admitido tem que ser considerado sempre.

O artigo ao qual voce se referiu é legal para os primeiros contatos, quando voce quiser se aprofundar mais sugiro os livros:

http://www.amazon.com/PID-Controllers-T ... 118&sr=8-1

http://www.amazon.com/Advanced-PID-Cont ... 118&sr=8-3

http://www.amazon.com/Practical-PID-Con ... 118&sr=8-5

esse último é muito interessante para aplicações práticas.

http://www.amazon.com/Windup-Control-Pr ... 231&sr=1-1

esse trata quase que exclusivamente de windup, tem diversas soluções para o problema. Usei muito num projeto há uns 2 anos quando eu estava decidindo qual implementação de anti windup eu iria usar.

Marcelo

MensagemEnviado: 20 Jul 2011 15:39
por luisf.rossi
Sem entrar no ponto de como você vai implementar a matemática, você tem controle sobre a saída do seu processo? Se sim você pode fazer um tuning usando o bom e velho método Ziegler-Nichols. É o método meio tedioso de implementar pois ele é completamente manual, porém MUITO adotado na industria...

MensagemEnviado: 20 Jul 2011 16:44
por fabim
luisf.rossi escreveu:Sem entrar no ponto de como você vai implementar a matemática, você tem controle sobre a saída do seu processo? Se sim você pode fazer um tuning usando o bom e velho método Ziegler-Nichols. É o método meio tedioso de implementar pois ele é completamente manual, porém MUITO adotado na industria...


então, imagina assim.

Eu tenho controle total em PWM por exemplo, ou XON/XOFF...

Eu fiz um pwm de 10 segundos de largura via hW, e valor de entrada de 10000.

Fiz assim ó.

Código: Selecionar todos
                      //estrutura de dados   //Leitura atual     //Set Point
unsigned short UpdatePID(SPid *pid,             float leitura     , float position) {


   static float pTerm, dTerm, iTerm, erro, retorno;
   signed short pre_res;
   
        //set-point - valor atual
   erro = position-leitura; //SE leitura menor qeu posição, erro negativo
                              //Se leitura maior que posição, erro positivo
   
   pTerm = pid->pGain * erro; // calculate the proportional term
   //aplica amplitude de realimentação ao erro para uma maior velocidade de correção
   //este valor deverá ser encontrado pela histerese da resistencia

  //-0.2
  // calculate the integral state with appropriate limiting
  pid->iState += erro;
  //somatoria de erros de entrada. valor finito


  if (pid->iState > pid->iMax)//se o erro for maior que o maximo permitido
    pid->iState = pid->iMax; //valor é igual ao maximo conforme estrutura
 
  else if (pid->iState < pid->iMin)//se valor for menor que o minimo permitido,
    pid->iState = pid->iMin;//valor é igual ao minimo permitido

 
 
  iTerm = pid->iGain * pid->iState; //calculate the integral term
 
 
  dTerm = pid->dGain * (leitura - pid->dState);
 
     
  pid->dState = leitura;                              
                                     
  retorno = ((pTerm + iTerm - dTerm)/2.00)+5000.0;
  if(retorno>10000.00)retorno = 10000.00;
   if(retorno<00.00)retorno = 00.00;
       
  return (unsigned short)retorno;
}


Código: Selecionar todos
typedef struct {

  float dState; // beckup de leitura anterior, antes da entrada

  float iState; //soma sucessiva de erros, podendo ser positivo ou negativo

  float iMax, iMin; // Maximum and minimum allowable integrator state  !!!  eim ?
 
  float pGain, // proportional gain
        iGain, // integral gain
        dGain; // derivative gain

} SPid;


 SPid pid_control = {0.0,0.0,+10000.00,-10000.00,1.0,1.0,1.0};


Veja que eu peguei o algotihmo, dei uma adaptada pois ainda não consegui pegar a concepção do negocio.

Tipo, eu entendi a matematica empregada, mais não entendi a lógica do negocio.

Eu fiz um supervisorio para entender Ziegler-Nichols.

OBS>:

Aquele gráfico de T0 - T1 - T2.....

Eu estou prostitutamente perdido.
Se eu entendi.
Eu tuxo o purrete, até que a maxima temperatura seja atingida até não haver mais variação ?
Nem pensar nisso. rsrsrs
Eu entendi que ele pega a angular etc.

Só não entendi aquele grafico que sobe e depois estabiliza.

Abraços

Re: PID, jogo de toalha.

MensagemEnviado: 21 Jul 2011 04:01
por albertorcneto
PID nao eh muito bom. Bom eh espaco de estados com observador.

PID tem que fazer o ajuste de parametros, como voce mencionou. Existem varios metodos para isso. Posso ate te passar um tutorial simples como ajustar "na munheca" os parametros. E fica bom. Mas basta que o seu sistema mude por algum motivo, voce tem que ajustar tudo de novo.

Espaco de estados com observador, se o seu sistema mudar, o proprio sistema de controle se adapta para isso. A nao ser que a mudanca seja na ordem do sistema e nao so nos parametros.

Um sistema bom para voce aprender eh o Kalman Filter. Ele eh simplesmente um filtro digital, um espaco de estados com observador, usado em aparelhos de gps, para quando o sinal do satelite eh perdido.

fabim escreveu:Friends.

Realmente, implementar o PID, apenas entendendo e não compreendendo o todo é extremamente complexo.

Eu sempre fiz os meus "pseudo pid", fazendo um tipo de analize em tempo de execução e vendo o quanto eu ganho ou quanto eu perco em determinado espaço de tempo. etc etc...

Acontece que dessa vez eu gostaria de fazer tudo via software, para aprender o processo de cálculo como um todo,digo via software PIDmente dizendo, e infelizmente não consegui chegar a concepção de algo funcional.

Á, kp,ki,kd, ganho disso, ganho daquilo, mais ninguem realmente conseguiu me ajudar com algo paupavel.

VEM, que.
PID without PHD.
Li o arquivo, entendi o calculo, mais tipo.

Como retornar um valor daqueles calculos que se ajustam ao valor binario no range que me interessa ?

Eu entendi por exemplo, que para algo que responde muito lento, o ganho da derivada deve ser tal que, ele prevê a tendencia de valor para um dado tempo. Tipo, por causa da derivada ele entende 36.5°C, mais na verdade tem 36.1°C, etc.... etc.....

Alguém ai ja fez algo prático, e simples, e poderia me dar um help em OFF ou porraqui mesmo ?

Re: PID, jogo de toalha.

MensagemEnviado: 21 Jul 2011 08:05
por fabim
albertorcneto escreveu:PID nao eh muito bom. Bom eh espaco de estados com observador.

PID tem que fazer o ajuste de parametros, como voce mencionou. Existem varios metodos para isso. Posso ate te passar um tutorial simples como ajustar "na munheca" os parametros. E fica bom. Mas basta que o seu sistema mude por algum motivo, voce tem que ajustar tudo de novo.

Espaco de estados com observador, se o seu sistema mudar, o proprio sistema de controle se adapta para isso. A nao ser que a mudanca seja na ordem do sistema e nao so nos parametros.

Um sistema bom para voce aprender eh o Kalman Filter. Ele eh simplesmente um filtro digital, um espaco de estados com observador, usado em aparelhos de gps, para quando o sinal do satelite eh perdido.

fabim escreveu:Friends.

Realmente, implementar o PID, apenas entendendo e não compreendendo o todo é extremamente complexo.

Eu sempre fiz os meus "pseudo pid", fazendo um tipo de analize em tempo de execução e vendo o quanto eu ganho ou quanto eu perco em determinado espaço de tempo. etc etc...

Acontece que dessa vez eu gostaria de fazer tudo via software, para aprender o processo de cálculo como um todo,digo via software PIDmente dizendo, e infelizmente não consegui chegar a concepção de algo funcional.

Á, kp,ki,kd, ganho disso, ganho daquilo, mais ninguem realmente conseguiu me ajudar com algo paupavel.

VEM, que.
PID without PHD.
Li o arquivo, entendi o calculo, mais tipo.

Como retornar um valor daqueles calculos que se ajustam ao valor binario no range que me interessa ?

Eu entendi por exemplo, que para algo que responde muito lento, o ganho da derivada deve ser tal que, ele prevê a tendencia de valor para um dado tempo. Tipo, por causa da derivada ele entende 36.5°C, mais na verdade tem 36.1°C, etc.... etc.....

Alguém ai ja fez algo prático, e simples, e poderia me dar um help em OFF ou porraqui mesmo ?


Se puder enviar o tutorial, fico grato.
fableach@hotmail.com

Abraços

Re: PID, jogo de toalha.

MensagemEnviado: 21 Jul 2011 08:18
por fabim
albertorcneto escreveu:PID nao eh muito bom. Bom eh espaco de estados com observador.

PID tem que fazer o ajuste de parametros, como voce mencionou. Existem varios metodos para isso. Posso ate te passar um tutorial simples como ajustar "na munheca" os parametros. E fica bom. Mas basta que o seu sistema mude por algum motivo, voce tem que ajustar tudo de novo.

Espaco de estados com observador, se o seu sistema mudar, o proprio sistema de controle se adapta para isso. A nao ser que a mudanca seja na ordem do sistema e nao so nos parametros.

Um sistema bom para voce aprender eh o Kalman Filter. Ele eh simplesmente um filtro digital, um espaco de estados com observador, usado em aparelhos de gps, para quando o sinal do satelite eh perdido.

fabim escreveu:Friends.

Realmente, implementar o PID, apenas entendendo e não compreendendo o todo é extremamente complexo.

Eu sempre fiz os meus "pseudo pid", fazendo um tipo de analize em tempo de execução e vendo o quanto eu ganho ou quanto eu perco em determinado espaço de tempo. etc etc...

Acontece que dessa vez eu gostaria de fazer tudo via software, para aprender o processo de cálculo como um todo,digo via software PIDmente dizendo, e infelizmente não consegui chegar a concepção de algo funcional.

Á, kp,ki,kd, ganho disso, ganho daquilo, mais ninguem realmente conseguiu me ajudar com algo paupavel.

VEM, que.
PID without PHD.
Li o arquivo, entendi o calculo, mais tipo.

Como retornar um valor daqueles calculos que se ajustam ao valor binario no range que me interessa ?

Eu entendi por exemplo, que para algo que responde muito lento, o ganho da derivada deve ser tal que, ele prevê a tendencia de valor para um dado tempo. Tipo, por causa da derivada ele entende 36.5°C, mais na verdade tem 36.1°C, etc.... etc.....

Alguém ai ja fez algo prático, e simples, e poderia me dar um help em OFF ou porraqui mesmo ?


Se puder enviar o tutorial, fico grato.
fableach@hotmail.com

Abraços

Re: PID, jogo de toalha.

MensagemEnviado: 21 Jul 2011 08:18
por fabim
albertorcneto escreveu:PID nao eh muito bom. Bom eh espaco de estados com observador.

PID tem que fazer o ajuste de parametros, como voce mencionou. Existem varios metodos para isso. Posso ate te passar um tutorial simples como ajustar "na munheca" os parametros. E fica bom. Mas basta que o seu sistema mude por algum motivo, voce tem que ajustar tudo de novo.

Espaco de estados com observador, se o seu sistema mudar, o proprio sistema de controle se adapta para isso. A nao ser que a mudanca seja na ordem do sistema e nao so nos parametros.

Um sistema bom para voce aprender eh o Kalman Filter. Ele eh simplesmente um filtro digital, um espaco de estados com observador, usado em aparelhos de gps, para quando o sinal do satelite eh perdido.

fabim escreveu:Friends.

Realmente, implementar o PID, apenas entendendo e não compreendendo o todo é extremamente complexo.

Eu sempre fiz os meus "pseudo pid", fazendo um tipo de analize em tempo de execução e vendo o quanto eu ganho ou quanto eu perco em determinado espaço de tempo. etc etc...

Acontece que dessa vez eu gostaria de fazer tudo via software, para aprender o processo de cálculo como um todo,digo via software PIDmente dizendo, e infelizmente não consegui chegar a concepção de algo funcional.

Á, kp,ki,kd, ganho disso, ganho daquilo, mais ninguem realmente conseguiu me ajudar com algo paupavel.

VEM, que.
PID without PHD.
Li o arquivo, entendi o calculo, mais tipo.

Como retornar um valor daqueles calculos que se ajustam ao valor binario no range que me interessa ?

Eu entendi por exemplo, que para algo que responde muito lento, o ganho da derivada deve ser tal que, ele prevê a tendencia de valor para um dado tempo. Tipo, por causa da derivada ele entende 36.5°C, mais na verdade tem 36.1°C, etc.... etc.....

Alguém ai ja fez algo prático, e simples, e poderia me dar um help em OFF ou porraqui mesmo ?


Se puder enviar o tutorial, fico grato.
fableach@hotmail.com

Abraços

MensagemEnviado: 22 Jul 2011 04:33
por albertorcneto
Vou deixar os passos aqui para todos que quiserem ter acesso possam ver. Tambem fiz uma traducao livre, porque o troco ta em ingles.

1) Desligue os controladores integrativo e derivativo. Deixe somente o controlador proporcional. Fique mudando a temperatura desejada (ou outra grandeza que tenha que ser controlada) em degraus e observe como a temperatura se estabiliza.

2) Aumente a constante proporcional gradualmente ate que o sistema se estabilize depois de 2 ou 3 ultrapassagens (overshoots). Se o valor for alto demais, o sistema oscila. Se o valor for pequeno demais, o sistema nao oscila mas demora para atingir a temperatura desejada.

3) Ligue o controlador derivativo e va aumentando gradualmente a constante derivativa ate que a temperatura atinga a temperatura desejada depois de um minimo de ultrapassagens. A medida que a constante aumenta, a amplitude das ultrapassagens diminui.

4) Ligue o controlador integrativo e aumente a constante integrativa ate que o sistema atinga a temperatura desejada no tempo mais rapido possible sem ultrapassagens. Ao aumentar essa constante, a temperatura desejada eh atingida mais rapidamente.

Ta ai. Eh relativamente simples.

Mas eu ainda acho melhor espaco de estados, que tem uma matematica um pouco mais complicada mas eh bem mais facil de implementar computacionalmente e mais "estavel" porque nao depende de um sistema que pode mudar. Pensa, fabim, que voce testa e calibra a estufa vazia. Quando tiver um recem nascido ali dentro, alem de ele mesmo ser uma fonte (pequena) de calor, ele eh composto basicamente de agua, que tem uma capacidade termica maior que a do ar (mais ou menos 4 vezes maior!). Teste pelo menos o seu sistema vazio e com um balde de agua dentro.

MensagemEnviado: 22 Jul 2011 08:26
por fabim
albertorcneto escreveu:Vou deixar os passos aqui para todos que quiserem ter acesso possam ver. Tambem fiz uma traducao livre, porque o troco ta em ingles.

1) Desligue os controladores integrativo e derivativo. Deixe somente o controlador proporcional. Fique mudando a temperatura desejada (ou outra grandeza que tenha que ser controlada) em degraus e observe como a temperatura se estabiliza.

2) Aumente a constante proporcional gradualmente ate que o sistema se estabilize depois de 2 ou 3 ultrapassagens (overshoots). Se o valor for alto demais, o sistema oscila. Se o valor for pequeno demais, o sistema nao oscila mas demora para atingir a temperatura desejada.

3) Ligue o controlador derivativo e va aumentando gradualmente a constante derivativa ate que a temperatura atinga a temperatura desejada depois de um minimo de ultrapassagens. A medida que a constante aumenta, a amplitude das ultrapassagens diminui.

4) Ligue o controlador integrativo e aumente a constante integrativa ate que o sistema atinga a temperatura desejada no tempo mais rapido possible sem ultrapassagens. Ao aumentar essa constante, a temperatura desejada eh atingida mais rapidamente.

Ta ai. Eh relativamente simples.

Mas eu ainda acho melhor espaco de estados, que tem uma matematica um pouco mais complicada mas eh bem mais facil de implementar computacionalmente e mais "estavel" porque nao depende de um sistema que pode mudar. Pensa, fabim, que voce testa e calibra a estufa vazia. Quando tiver um recem nascido ali dentro, alem de ele mesmo ser uma fonte (pequena) de calor, ele eh composto basicamente de agua, que tem uma capacidade termica maior que a do ar (mais ou menos 4 vezes maior!). Teste pelo menos o seu sistema vazio e com um balde de agua dentro.


Cara, bate na boca!!
Colocar um RN dentro de uma estufa !! Ta me achando algum tipo de psicopata ? kkkkk

Estufa->Estufa->mesmo !!!! De AMB até 100°C..............
Só que o negocio tem que tem um controle muito bom!!

A Incubadora, é por estado analitico!!!
Entra temperatura ambiente, Umidade, quando for injetar oxigenio, etc!!
Eu vou usar sim, PID, mais vão ser KP,KI,KD, dividido em faixas, para espaço de temperaturas de 5°C, humidade de 5% a 95% espaçado de 5 em 5%, e oxygenio de 21 a 50%..

Vai ser ao todo, 68 casas de constantes de ganho.

Fabim

MensagemEnviado: 22 Jul 2011 09:23
por albertorcneto
Falha minha. Pensei que era estufa de recem-nascido.

MensagemEnviado: 22 Jul 2011 09:27
por fabim
albertorcneto escreveu:Falha minha. Pensei que era estufa de recem-nascido.


INCUBADORA !!! Estufa é de salgado !!! hehehehe

Re: PID, jogo de toalha.

MensagemEnviado: 22 Jul 2011 13:49
por Djalma Toledo Rodrigues
fabim escreveu:Friends.

Realmente, implementar o PID, apenas entendendo e não compreendendo o todo é extremamente complexo.

...

Eu entendi por exemplo, que para algo que responde muito lento, o ganho da derivada deve ser tal que, ele prevê a tendencia de valor para um dado tempo. Tipo, por causa da derivada ele entende 36.5°C, mais na verdade tem 36.1°C, etc.... etc.....

O que a Derivada 'entende' é que a Derivada do Seno é o Coseno - rs


Ela entende que para mudar a Temperatura de um corpo instantâneamente
seria necessário uma quantidade de Calor Infinita.

No Controlador PID isso significa que o Estagio Derivativo tem uma Saída Infinita ao
se deparar com um Degrau
( degrau é como se analiza e ajusta o Sistema)

Isso na Teoria. Na pratica fica limitado ao Teto ou a Saturação deste estágio.

Para que o Sistema se estabilize o mais rapidamente possível a Saida do Estágio Derivativo
decai exponencialmente em um tempo igual , em um tempo semelhante melhor dito,
ao tempo de correção, ou a inércia do Sistema.



Bom, depois de tudo isso uma conclusão:

Para que o Derivativo no seu caso ?

Proporcional e Integrador não bastariam ?

DJ

MensagemEnviado: 24 Jul 2011 13:35
por fabim
BATATA !!!!!!
DJ, nunca tinha pensado nisso !!! PUTZ!!!!
Se o tempo de resposta esta assim.

32 minutos para subir 11°C.
Os sensores de ar e de contato, tem uma resposta de 5 minutos.

Bom, o derivativo nao vai conseguir responder rapido jamé, pois a resposta e longa bagarai.

PI, acho que seria mais simples pra acertar.

De umas dicas!!!

Brigado

Re: PID, jogo de toalha.

MensagemEnviado: 25 Jul 2011 15:14
por Djalma Toledo Rodrigues
fabim escreveu:Friends. ....

Como retornar um valor daqueles calculos que se ajustam ao valor binario no range que me interessa ?

Isso é realmente complicado.

Se usa PWM no comando da Potência de Aquecimento, o Range será a faixa de atuação
do PWM , Duty Cycle de Zero a 100% ou o correspondente valor numérico.

Então o PID irá atuar sobre o PWM em função de: Erro . kP + Integral do Erro.

onde Erro = Set Point - Temperatura atual.

DJ