Autor Tópico: Controle_PID_PIC18F2480  (Lida 16813 vezes)

Description:

0 Membros e 1 Visitante estão vendo este tópico.

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re:Controle_PID_PIC18F2480
« Resposta #45 Online: 01 de Maio de 2011, 20:22 »
Vinícius,

Oi amigo,
descobrir um erro no algoritmo do controlador PD por realimentação de velocidade, pois

o sinal de controle do PD clássico é u(t) = Kp*erro+ Kd*de(t)/dt,
onde derivada = (erro-erro_anterior)/Ts

só que o sinal de controle do PD por realimentação de velocidade é u(t) = Kp*erro -  kd*dy(t)/dt
onde y(t) é a saída.
então o algoritmo certo seria:

erro = setPoint - actualPosition(lido do adc);
derivative = (actualPosition - previous_actualPosi tion)/Ts;
control = kp*error -  Kd*derivative + control;
previous_actualPosi tion = actualPosition;

correto?

Fiz o teste com o Proteus e com software supervisorio e pude verificar que o software não estar enviando corretamente. Vou tentar consertar.

grato

Inicialmente você mencionou que o seu controlador PID (mestre), usando um PIC18F2480, acionará um outro controlador (escravo), enviando o SP para esse controlador. Aos leitores, essa arquitetura de controle, do tipo cascata, ou mestre - escravo, é frequentemente usada na indústria, e tem suas vantagens, quando adequadamente implementada. Neste caso:

(1) Pela teoria de controle, um controlador de posição é um controle de primeira ordem e o de velocidade de segunda ordem (é a derivada do primeiro). Para obter-se maior estabilidade, num controle em cascata, o usual é a malha de maior ordem ser o controlador mestre. Nesse caso, o controle de velocidade deveria ser o mestre.
(2) Caso o seu controlador escravo seja de velocidade e o seu controlador mestre, de posição, o controlador escravo (a ação proporcional apenas desse controlador) vai "correr atrás" da derivada da posição. E o seu controlador escravo, a ação proporcional apenas, vai acrescentar um zero no controle de posição mestre. Podendo instabilizar a coisa toda!!
(3) É necessário saber se o seu controlador escravo atua (é realimentado) com a velocidade ou a posição do motor.
(4) O seu controlador mestre controlará a posição, correto?
(5) "Agir por partes", .... aconselho a usar SOMENTE a ação proporcional primeiramente, para verificar se tudo está correto. Somente após o controle proporcional se mostrar funcional, colocar as ações integral e derivativa para funcionar.  Isso vale para os controladores mestre e escravo, com isso, a ordem do sistema se reduz. E consequentemente, a análise e a sintonia dos controladores fica +fácil.
(6) Se a coisa ficar complicada, difícil fazer o controle estabilizar... Considere usar o controle de posição como escravo, ou o controlador único.
 

Offline vinigusto

  • Novato
  • *
  • Posts: 45
  • Sexo: Masculino
  • GUIA-CNC
Re:Controle_PID_PIC18F2480
« Resposta #46 Online: 01 de Maio de 2011, 21:09 »
O objetivo é controlar a posição do motor.
A função de transferencia (posição/tensao) é de segunda a ft (velocidade/tensao) é de primeira.
Fiz o projeto utilizando o matlab tbm. Para isso utilizei PD por realimentacao de velocidade (P&D). Não utilizei o PD clássico pois este acrescenta um zero, ou seja, instabilidade, no caso.

Então tem somente um controlador (P&D) e uma planta de segunda ordem. Pelo matlab deu certo, controlou.
Refaço a pergunta do post anterior.

Valeu pela ajuda.
Grato

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re:Controle_PID_PIC18F2480
« Resposta #47 Online: 01 de Maio de 2011, 23:03 »

Eu faria primeiro um teste apenas com ação proporcional, conforme o seu algoritmo.

Offline vinigusto

  • Novato
  • *
  • Posts: 45
  • Sexo: Masculino
  • GUIA-CNC
Re:Controle_PID_PIC18F2480
« Resposta #48 Online: 02 de Maio de 2011, 00:03 »
Uma outra dúvida ake,

O conversor A/D e PWM trabalha com 10 bits.
e minhas variaveis (control, derivative, actual_position( recebe do programa em Java, ou qq outro) são long int, inclusive a que recebe do A/D.

O melhor seria uniformizar tudo (10 bits), ou deixando como tá long int, o compilador já trata automaticamente. Lembrando que kp e kd são floats, pois seus valores são bem pequenos o,oo alguma coisa.

Grato

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re:Controle_PID_PIC18F2480
« Resposta #49 Online: 02 de Maio de 2011, 05:40 »
Vinícius,

O algoritmo PID é melhor fazer em Float, para facilitar os cálculos.

É melhor uniformizar as entradas e saídas com inteiro de 10 bits (0 a 1024), o que inclui o A/D e o PWM. Converta-os em 0 a 100% Float para compatibilizar com o algoritmo PID.

Por exemplo, se a saída do A/D for 512, o sinal de posição para o PID será de 50.000%.

O Set-Point do PID será também 0 a 100% Float, para compatibilizar com o sinal oriundo do sensor, já convertido. Você pode
até usar uma escala de unidades de engenharia (posição em mm, velocidade em mm/s) em sua IHM (Interface Homem Máquina), mas aí converta em 0 a 100% Float. Para isso, deverá ser estabelecida uma faixa de trabalho ("range") para cada variável.

Também devem ser Float os ganhos (kp, kd, ki). O sinal de saída do PID, sendo Float de 0 a 100%, será convertido para 0 a 1024, para ser carregado no PWM.

Offline vinigusto

  • Novato
  • *
  • Posts: 45
  • Sexo: Masculino
  • GUIA-CNC
Re:Controle_PID_PIC18F2480
« Resposta #50 Online: 02 de Maio de 2011, 11:18 »
Valeu pela dica, mas como converto todas as variaveis para float.
Tipo long int são 16 bits.
faria assim para ser 10 bits:
long int var;
var =  var & 0000001111111111;
?

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re:Controle_PID_PIC18F2480
« Resposta #51 Online: 02 de Maio de 2011, 11:41 »
Sim, para usar 10 bits tem que ser "int" mesmo. Como só vai usar a parte positiva do "int",  e apesar de não ser indispensável, eu usaria "unsigned int".

O "long int" possui 16 bits?

Offline vinigusto

  • Novato
  • *
  • Posts: 45
  • Sexo: Masculino
  • GUIA-CNC
Re:Controle_PID_PIC18F2480
« Resposta #52 Online: 02 de Maio de 2011, 13:19 »
Pelo compilador CCS

int , 8 bits ,  0 a 255

unsigned int , 8 bits, 0 a 255

long int , 16 , 0 a 65535

float , 32 bits, 3.4E-38 a 3.4E+38

A idéia é o seguinte: vou tomar transformar as variaveis para 10 bits e dá um casting para float? e depois terei que transformar em 10 bits de novo para o PWM.

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re:Controle_PID_PIC18F2480
« Resposta #53 Online: 02 de Maio de 2011, 14:10 »

Ao invés de casting, use funções de conversão específicas (int para float ou vice versa).

Offline vinigusto

  • Novato
  • *
  • Posts: 45
  • Sexo: Masculino
  • GUIA-CNC
Re:Controle_PID_PIC18F2480
« Resposta #54 Online: 02 de Maio de 2011, 15:52 »
Tem esse tipo de função no CCS? Vc conhece alguma função?
Eu estava pensando desta forma:

long int var;
float var2;

var2 = (float) var;


Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re:Controle_PID_PIC18F2480
« Resposta #55 Online: 02 de Maio de 2011, 16:58 »
Voce pode testar o uso do "casting", conforme sua mensagem anterior. Sugeri as funções de conversão, pois em algumas conversões o "cast" não funciona corretamente, inclusive quando há arredondamento (int <- float), mas pensando melhor, acho que não será o seu caso.

Offline vinigusto

  • Novato
  • *
  • Posts: 45
  • Sexo: Masculino
  • GUIA-CNC
Re:Controle_PID_PIC18F2480
« Resposta #56 Online: 02 de Maio de 2011, 19:28 »
Mais uma vez obrigado pela ajuda! Vai desculpando pelas perguntas bestas.
Vou ajetar o código ake, posso te mandar a versão "final"? Para verificar estas questões de compatibilidade.

Att

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re:Controle_PID_PIC18F2480
« Resposta #57 Online: 03 de Maio de 2011, 09:47 »
Ok.

Offline vinigusto

  • Novato
  • *
  • Posts: 45
  • Sexo: Masculino
  • GUIA-CNC
Re:Controle_PID_PIC18F2480
« Resposta #58 Online: 04 de Maio de 2011, 00:01 »
Posso enviar para vc o código fonte?

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re:Controle_PID_PIC18F2480
« Resposta #59 Online: 04 de Maio de 2011, 00:08 »
Sim, pode enviar.

 

/** * */