Moderadores: andre_luis, 51, guest2003, Renie
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...
//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;
}
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};
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 ?
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 ?
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 ?
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 ?
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.
albertorcneto escreveu:Falha minha. Pensei que era estufa de recem-nascido.
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.....
fabim escreveu:Friends. ....
Como retornar um valor daqueles calculos que se ajustam ao valor binario no range que me interessa ?
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante