Controles: obtener la función de transferencia de retroalimentación de una planta y un controlador

1

Estoy diseñando una función en Python similar al comando 'feedback (T)' de MATLAB. Sé que los módulos ya existen, pero es algo que quiero hacer por mí mismo para divertirme. Sin embargo, estoy teniendo problemas. Digamos que tengo la función de transferencia de alguna planta arbitraria. $$ T (s) = {s + 5 \ sobre s ^ 2 + 4s + 7} $$ Digamos también que tengo un controlador PID / PI / PD arbitrario (no significa que este controlador sea realmente bueno, es más que demostrar el concepto, ¡así que tenlo en cuenta!)

$$ C (s) = {2.3802s + 7.7309 \ over s} $$

Sabemos que la función de transferencia de retroalimentación de bucle cerrado tiene la forma de $$ CLTF = {T (s) C (s) \ sobre 1 + T (s) C (s)} $$

Cuando CLTF se calcula arriba en Matlab, obtenemos ... $$ CLTF = {2.38 s ^ 5 + 29.15 s ^ 4 + 133.8 s ^ 3 + 292 s ^ 2 + 270.6 s \ sobre s ^ 6 + 10.38 s ^ 5 + 59.15 s ^ 4 + 189.8 s ^ 3 + 341 s ^ 2 + 270.6 s} $$

Sin embargo, utilizando MATLAB y comentarios (T * C, 1), obtenemos el resultado de ... $$ 2.38 s ^ 2 + 19.63 s + 38.65 \ sobre s ^ 3 + 6.38 s ^ 2 + 26.63 s + 38.65 $$

Ya me doy cuenta de que puedo tomar mi CLTF en MATLAB, ponerlo en pole / zero (zpk) y las cosas se cancelarán para obtener el mismo resultado que el comando de comentarios de MATLAB. Sin embargo, ningún programa simbólico parece ser capaz de factorizar estos polinomios. MATLAB está claramente haciendo algo que no sé entonces. ¿Alguien tiene una pista de cómo funciona el algoritmo de matlab? ¿O cómo podría codificar esta misma función?

    
pregunta Collaptic

1 respuesta

0

Depende de cómo se haga el cálculo. Tome como ejemplo \ $ \ small G = \ large \ frac {1} {s + a} \ $, y \ $ \ small K = 1 \ $. Podemos escribir el CLTF como:

$$ \ small \ frac {G} {1 + GK} = G. \ frac {1} {1 + GK} = \ frac {1} {s + a}. \ frac {1} {\ left (1+ \ frac {1} {s + a} \ derecha)} = \ frac {1} {s + a}. \ Frac {s + a} {(s + a + 1)} $$

Esto se expande a:

\ $ \ large \ frac {G} {1 + GK} = \ frac {s + a} {s ^ 2 + (2a + 1) s + (a ^ 2 + a)} \ $

que es correcto pero inconveniente, y que se reduce a:

\ $ \ large \ frac {G} {1 + GK} = \ frac {1} {s + (a + 1)} \ $ cuando se cancele el factor \ $ (s + a) \ $.

Para forzar la forma reducida, puede intentar escribir \ $ \ small G \ $ y \ $ \ small K \ $ en forma de numerador / denominador: \ $ \ small G = \ large \ frac {N_g} {D_g} ; \: \: \: \: \ small K = \ large \ frac {N_k} {D_k} \ $, luego escriba el CLTF como:

$$ \ small \ frac {G} {1 + GK} = \ frac {N_g \: D_k} {D_g \: D_k + N_g \: N_k} $$

Tenga en cuenta que Mathworks recomienda usar el comando FEEDBACK para derivar los TF de bucle cerrado, ya que esto da la forma reducida.

    
respondido por el Chu

Lea otras preguntas en las etiquetas