Matlab - Controlador PID
Buenas, actualmente tengo un controlador proporcional para el control de una variable que llamo air, mi problema está en que necesito un control proporcional derivativo e integral, a continuación os paso la funcion de control
function aireacion = Actualiza_Air(So); RefSo=2; ganancia=7500; LimMax=200000; error=RefSo-So; if error<=0, air=0; else air=min(ganancia*error,LimMax); end aireacion=air; Si alguién me da una idea, basicamente lo que hay que hacer integrar y derivar la señal error, eso es lo que tengo que hacer, pero no se plasmarlo en MATLAB También te puede interesar...
Para implementar algoritmos digitales, solo tienes que ir a las bases de matemáticas, es decir mira las definiciones para la derivada, y para la integral, es decir, la pendiente y el área bajo la curva respectivamente.
Por tanto, para la derivada es la diferencia entre el dato actual y el anterior sobre el delta de tiempo. Para la integral cambia en como lo definas, lo normal es el área de un trapecio, donde las bases serán los datos y la altura el delta de tiempo. Lo mejor es cálcular cada efecto por separado y luego sumarlos, esto por que puedes poner condiciones, es decir como el integral facilmente se satura poner un antiwindup y para el derivativo, poder por ejm ponerlo antes de calcular el error que despues, el efecto sería igual, solo que poniendolo antes filtraria entradas de tipo escalón.
Para implementar algoritmos digitales, solo tienes que ir a las bases de matemáticas, es decir mira las definiciones para la derivada, y para la integral, es decir, la pendiente y el área bajo la curva respectivamente.
Por tanto, para la derivada es la diferencia entre el dato actual y el anterior sobre el delta de tiempo. Para la integral cambia en como lo definas, lo normal es el área de un trapecio, donde las bases serán los datos y la altura el delta de tiempo. Lo mejor es cálcular cada efecto por separado y luego sumarlos, esto por que puedes poner condiciones, es decir como el integral facilmente se satura poner un antiwindup y para el derivativo, poder por ejm ponerlo antes de calcular el error que despues, el efecto sería igual, solo que poniendolo antes filtraria entradas de tipo escalón.
Gracias por la respuesta, asi lo había pensado, con la definición, mi problema estaba en que no sabia como implementarlo en matlab, me podrías ayudar con un ejemplo?
Gracias
Esta sería una forma sencilla, pero pueden haber muchas otras maneras de hacerlo, recursivas, hacer diferente el antiwindup, etc. Esta es de la más sencillas, por tanto no tan robustaz, pero te puede dar ideas para que la cambies un poco.
error=ref-sal; P=Kp*error; D=Kd*(sal-salant)/DT; I=Iant+Ki*(error+errorant)*DT/2; if abs(I)>limite I=0 end C=P+D+I; if C>..... ..... errorant=error; Iant=I; ... .... ...
Muchas Gracais Raul, me sirve para empezar, si puedieras facilitarme alguna dirección con información de PID digitales y programcion en MATLAB me ayudarias mucho.
Gracias de nuevo
Para eso es mejor ir a los libros clásicos de control digital, para empezar el de Ogata está bien plot Todavia me salen los warning |