Hola a todos, estoy intentando implementar un algoritmo PID que tengo en un libro pero no me funciona bien, veo que tiene mucho sobreimpulso y la verdad es que no sé como corregirlo, en el libro dice que cambiando el tiempo de muestreo de 100ms a 1 ms pero ni así.
El algoritmo es este:
void main(void){
int16 valor;
int16 control;
float a,b,c;
float temp_limit;
float rT,eT,iT,dT,yT,uT,iT0,eT0,iT_1,eT_1;
float max,min;
//-------------------------------------------------------
min=0.0;
max=1000.0;
iT_1=0.0;
eT_1=0.0;
a=0.1243;
b=0.0042;
c=0.6215;
temp_limit=100.0;
//----------------------------------------------------------
valor=read_adc();
yT=valor*5000.0/1024.0;
rT=temp_limit;
eT=rT-yT;
iT=b*eT+iT0;
dT=c*(eT-eT0);
uT=iT+a*eT+dT;
if(uT>max){
uT=max;
}
else{
if(uT<min){
uT=min;
}
control=uT;
set_pwm1_duty(control);
iT0=iT;
eT0=eT;
delay_ms(1);
}
}
Hay una cosa que n o entiendo, en el programa hay dos variables que están a 0 pero que nunca se utilizan y no sé en realidad para que sirven, se trata de
iT_1=0.0;
eT_1=0.0;
Y si me pueden recomendar lectura sobre PID que sea en un lenguaje comprensible para novatos lo agradecería, gracias a todos