¿El sintonizador PID de MATLAB produce la salida incorrecta?

1

Estoy tratando de aplicar un controlador PID a mi función de transferencia en MATLAB para obtener la respuesta al paso, el código, el polo cero, etc. Este es el código que estoy usando para crear la función de transferencia y abrir el Aplicación PID Tuner :

s = tf('s');

R = 10;         % Load resistor
Rc = 130*10e-3; % Output cap ESR
C = 1410e-6;    % Output capacitance
Rl = 100e-3;    % Inductor resistance
L = 500e-6;     % Inductor value
Vi = 30;        % Input voltage

% Buck converter transfer function
G = Vi * ( (R + (s*R*Rc*C))/((s^2) * (L*C*(R+Rc)) + s*(R*Rc*C + Rl*C*(R+Rc) + L) + R + Rl) )

% PID Tuner
pidTuner(G, 'PID')

La respuesta que obtengo es la siguiente después de algunos ajustes (haga clic para verla más grande):

ElvalorKpesrealmentebajoencomparaciónconelparámetroKi,loquemehacepensarquehayalgomal.Perolarespuestaalpasoparececorrecta,asíqueseguiradelante.AhorausoesteprogramaparasimularmicontroladorPIDyhaceralgunosgráficos:

%PIDParametersfromPIDTunerKp=0.175Ki=371.22Kd=0%PIDControllerH=pid(Kp,Ki,Kd)%ClosetheloopT_pid=feedback(G,H)%Plotthestepresponsefigure(1);step(T_pid)gridontitle('Respuestatransitoriaenlazocerrado(planocontinuo)')xlabel('Tiempo')ylabel('Amplitud')

Yestaeslarespuestaalpasoqueestoyrecibiendo:

QueeswaaaaaaaydiferentedeloquePIDTunermedioantes.Deacuerdoconlosdocumentosdelafunciónfeedback(),creoqueloestoyusandocorrectamente:

Pero en algún lugar de Internet lo encontré usado así:

T_pid = feedback(H*G, 1)

¡Y esto me da exactamente la misma respuesta al paso que PID Tuner pero no entiendo por qué! ¿Cuál es la forma correcta de usarlo?

    
pregunta Andres

1 respuesta

0

Consideremos un ciclo de retroalimentación como:

Comopuedever,susbloques'Control'y'Proceso'estánencascada.Suponiendoqueestáutilizandolarespuestaunitaria,elbloquedesu'Respuesta'delbloquees1.

Ahora,lafuncióndecomentariosenmatlabsedefinecomolatieneensupublicación:

T=feedback(sys1,sys2)

Dondesys1ysys2seconfigurandelasiguientemanera(comotambiénlotieneensupublicación):

Para utilizar la función correctamente, debe definir qué 'sys1' y 'sys2' se basan en su modelo. Está utilizando un bloque PID y, por supuesto, tiene el modelo de planta.

Si su bloque PID es \ $ \ text {C (s)} \ $, su bloque de plantas es \ $ \ text {P (s)} \ $, y su bloque de comentarios es \ $ \ text {H ( s)} \ $, ¿cómo puede hacer coincidir su sistema con el que usa matlab?

Todo ahora es el dominio s, por lo que si puedes simplemente multiplicar los bloques en cascada para que

$$ sys1 = \ text {C (s) P (s)} $$

Y simplemente observando cómo matlab define su modelo de bucle de control,

$$ sys2 = \ text {H (s)} $$

Ya que está usando retroalimentación de ganancia unitaria, \ $ \ text {H (s)} = 1 \ $ y tenga en cuenta que la función de realimentación asume un bucle de retroalimentación negativa, por lo que no necesita usar un -1 dentro la función.

Es por eso que la forma correcta de hacerlo es:

T = feedback(C*P,1)

donde C y P son la definición de su controlador PID y la Planta en el dominio s. Y el 1 viene del uso de retroalimentación negativa, que es el supuesto cuando se usa esta función.

Como resumen, la ruta hacia adelante después de la señal de error en la primera imagen de esta publicación, representa qué matlab define como ' sys1 ' en su función de retroalimentación y la ruta de retroalimentación, que proviene de la salida De vuelta al bloque de suma, es lo que matlab conoce como ' sys2 ' en lo que respecta a la función de retroalimentación. Y la ruta de acceso tiene dos bloques, de modo que los combinas multiplicando.

Espero que ayude!

    
respondido por el Big6

Lea otras preguntas en las etiquetas