Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Proyecto Buftea PDF
Proyecto Buftea PDF
Mecatrónica (GIERM)
Trabajo
Control Por
Computador
Realizado por:
-Buftea, Alberto Gabriel
-Méndez López, Juan
Introducción
Partimos de un sistema univariable representado por un diagrama de bloques del cual trataremos de
obtener su comportamiento dinámico y diseñar un controlador PID que cumpla unas especificaciones de
funcionamiento.
El sistema es electrónico constituido por cuatro etapas basadas en amplificadores operacionales. Este
está representado en la “figura 1” y su comportamiento viene definido por la función de transferencia
G(s) dada en función de los parámetros (R11, R21, R12, R22, R13, R23, R14, R24, C1, C2 y C3) que vamos
a calcular mediante las fórmulas proporcionadas en la “figura 2” y “figura 3” donde k1, k2, k3 y k4 son
las ganancias de cada etapa y tau1, tau2 y tau3 las constantes de tiempo correspondientes.
Figure 1
Figure 2
Figure 3
Inicialmente el sistema está controlado proporcionalmente en base a una ganancia variable Kp sobre un
amplificador electrónico que actúa en base a la diferencia entre la tensión de referencia “Vr(t)” y la
tensión de la última etapa ”Vs(t)”, como podemos observar en la “figura 4”.
Figure 4
Por ultimo trataremos la representación en espacio de estado y el diseño del sistema de control por
realimentación del vector de estado.
Desarrollo
1. Ejecutar la aplicación parámetros.m a través del DNI del miembro de mayor edad del
grupo para calcular los parámetros del sistema electrónico
Descargamos el archivo del campus virtual, lo guardamos en un directorio que Matlab reconozca y
obtenemos los parámetros usando como DNI 5109644 el equivalente al miembro de mayor edad del
grupo.
K4 = 1.2857 ;
En las fórmulas proporcionadas imponemos como condición que (R11, R12 R13, R14) sean iguales a 1, así
podemos despejar en las fórmulas y obtener los valores necesarios de todas las resistencias:
𝝉𝟏
𝑹𝟐𝟏 = 𝐾1 = 1,5429; 𝑹𝟏𝟏 = 1; 𝑅11 + 𝑠𝑅21 𝑅11 𝐶1 = 𝑠𝜏1 + 1 -> 𝑅11 𝑅21 𝐶1 = 𝜏1 -> 𝑪𝟏 =
𝑹𝟐𝟏𝑹𝟏𝟏
𝝉𝟐
𝑹𝟐𝟐 = 𝐾2 = 1,0286; 𝑹𝟏𝟐 = 1; 𝑅12 + 𝑠𝑅12 𝑅22 𝐶2 = 𝑠𝜏2 + 1 -> 𝑅12 𝑅22 𝐶2 = 𝜏2 -> 𝑪𝟐 =
𝑹𝟏𝟐𝑹𝟐𝟐
𝝉𝟑
𝑹𝟐𝟑 = 𝐾3 = 2,0571; 𝑹𝟏𝟑 = 1; 𝑅13 + 𝑠𝑅13 𝑅23 𝐶3 = 𝑠𝜏3 + 1 -> 𝑅13 𝑅23 𝐶3 = 𝜏3 -> 𝑪𝟑 =
𝑹𝟏𝟑𝑹𝟐𝟑
Tras haber despejado las fórmulas, haciendo los cálculos para los condensadores nos sale estos valores:
1,5 1 2,2
𝐺1 (𝑆) = − ; 𝐺2 (𝑆) = − ; 𝐺3 (𝑆) = − ; 𝐺4 (𝑆) = −1,2;
1,5𝑠+1 0,47𝑠+1 0,5808𝑠+1,2
En este caso hemos especificado el método “zoh” para que se observe donde deberíamos de
especificar que se use otro método, en caso de necesidad.
x(k+3)-2.952x(k+2)+2.904x(k+1)-0.926x(k) = 1.592*10-6u(k+2)+6.293*10-6u(k+1)+1.554*10-6u(k)
En donde x(k) representa la salida y u(k) la entrada de nuestro sistema para k-ésimas
repeticiones.
[A,B,C,D] = ssdata(Gs)
Para obtener las matrices G,H,C,D del sistema discretizado usamos el mismo comando “ssdata()” pero
en vez de usar como función de transferencia G(s), usamos la función de transferencia en z, G(z), cual
hemos calculado en el apartado 3. El comando quedaría de la forma.
[G,H,C,D] = ssdata(Gz)
Las matrices anteriormente calculadas son para una T de 0.01s. Si querremos calcularla para una T de
0.1s tenemos que volver a discretizar la función de transferencia Gs usando T = 0.1 usando:
Por ultimo volvemos a aplicar el comando anterior a través de cual obtenemos las matrices buscadas,
pero esta vez para una T de 0.1s
[G,H,C,D] = ssdata(Gz)
5. Calcular el error en régimen permanente para el caso de usar controlador
proporcional con ganancia Kp, ante entrada escalón y rampa para los casos continuo y
discreto con T=0.01
Para ello primero definimos como variable simbólica una ganancia “k” y dos variables “s” y “z”
usando el comando “zpk”, lo cual nos permitirá escribir las fórmulas.
>> syms k; >>s=zpk(‘s’); >>z=zpk(‘z’)
Tiempo Continuo
Para calcular el error ante las dos entradas, escalón y rampa, usamos las fórmulas genéricas para
sistemas en tiempo continuo, calculando el límite cuando s tiende a 0.
En tiempo discreto definimos como variable simbólica “z” y establecemos el valor del tiempo de
discretización. Luego usamos las fórmulas del tema 4 para calcular los respectivos errores.
Error escalón:
Error rampa:
6. Diseñar un PID analógico utilizando alguno de los métodos experimentales
(Rivera, Rovira) y obtener su discretización aplicando el método Euler.
Para ello asumimos una respuesta con retardo, tal como muestra la ecuación
Para determinar el valor de las constantes d y tau usamos los apuntes del tema 6 diapositiva 37
Entonces, para sacar “d” debemos calcular cuanto tarda nuestro sistema en alcanzar el 0.632 y
el 0,283 de la amplitud total. Luego tan solo usamos la fórmula.
Primero representamos con el comando “ltiview” la salida de nuestro en tiempo continuo G(s).
Esto podemos observarlo en las capturas inferiores.
Sabemos que el valor de la amplitud para el cual se estabiliza es de 3.3, calculamos que 0.632*3.3 = 2.08
y 0.283*3.3 = 0.93
Tenemos los valores de amplitud, en las gráficas podemos ver el tiempo que tarda el sistema en
alcanzarlos, siendo t0.632=2.58s y t0.283=1.38s
𝑑
Comprobamos que < 1 así que podemos obtener un PID según los métodos de Lopez o Rovira al ser
𝑡𝑎𝑢
válidas las fórmulas de sintonía. En este caso vamos a hacerlo por el método de Lopez.
Este está basado en la minimización de la integral de una función del error para el caso de cambio en
perturbaciones. Podemos hacerlo según varios criterios cuales penalizan distintos errores, en este caso
lo haremos siguiendo el criterio IAE pues penaliza en un valor intermedio ambos errores, grandes y
prolongados.
El criterio IAE está basado en la definición de la integral del valor absoluto del error y lo implementamos
escogiendo los valores de las constantes de la tabla inferior y sustituyendo en las ecuaciones de sintonía.
Las fórmulas de sintonía están proporcionadas en los apuntes del tema 6, y en ellas despejamos
las ganancias Kp, Ki e Kd.
𝑡𝑎𝑢 𝑑 𝒕𝒂𝒖
= 𝑎∗( )𝑏 -> 𝑻𝒊 = 𝒅 𝒃
𝑇𝑖 𝑡𝑎𝑢 𝒂∗( )
𝒕𝒂𝒖
𝑇𝑑 𝑑 𝑏 𝒅 𝒃
=𝑎∗( ) -> 𝑻𝒅 = 𝒂 ∗ ( ) ∗ 𝒕𝒂𝒖
𝑡𝑎𝑢 𝑡𝑎𝑢 𝒕𝒂𝒖
𝑑 𝑏
𝐾𝑝 ∗ 𝑎 ∗ ( )
𝐾𝑖 = 𝑡𝑎𝑢
𝑡𝑎𝑢
𝑑 𝑏
𝐾𝑑 = 𝐾𝑝 ∗ 𝑡𝑎𝑢 ∗ 𝑎 ∗ ( )
𝑡𝑎𝑢
Así:
Kp = 0.783
Ki = 1.348
Kd = 4.369
𝐾𝑖
PID = 𝐾𝑝 + + 𝐾𝑑 ∗ 𝑠
𝑠
Así que nuestro PID proporcional desarollado por el método de Lopez es:
𝟏. 𝟑𝟒𝟖
𝑷𝑰𝑫 = 𝟎. 𝟕𝟖𝟑 + + 𝟒. 𝟑𝟔𝟗 ∗ 𝒔
𝒔
Ahora vamos a discretizar nuestro PID mediante el método de Euler. Este método aproxima la
integral bajo f(t) por la suma de rectángulos, lo cual se puede hacer en dos sentidos, hacía atrás
o hacía adelante. En este caso usaremos el método de Euler hacía atrás:
1−𝑧 −1
Este equivale al mapeo 𝑆 = , por lo que tan solo tenemos que sustituir en la expresión del
𝑇
PID que nos ha quedado arriba. Así la expresión del PID queda:
𝑇 ∗ 𝐾𝑖 𝐾𝑑
𝑃𝐼𝐷 = 𝐾𝑝 + −1
+ (1 − 𝑧 −1 )
1−𝑧 𝑇
𝑻 ∗ 𝟏. 𝟑𝟒𝟖 𝟒. 𝟑𝟔𝟗
𝑷𝑰𝑫 = 𝟎. 𝟕𝟖𝟑 + + (𝟏 − 𝒛−𝟏 )
𝟏 − 𝒛−𝟏 𝑻
Por lo tanto dos polos deben ir colocados en -10 y el polo que falta lo colocamos del orden de 4
o 5 veces más lejos para que no afecte al comportamiento de nuestro sistema, por lo que
elegimos ponerlo en -50.
S3-70s2+1100s-5000 = 0
Usando el resultado anterior y en virtud del teorema de Cayley-Hamilton ф(A) tiene por
ecuación:
ф(A) = A3-70A2+1100A-5000*I
En el apartado 4 hemos sacado las matrices A y B del espacio de estados de nuestra planta,
cuales necesitamos para calcular ф(A)
Y también necesitamos para obtener la matriz de controlabilidad (M) definida por:
M= [B AB …. An-1B]
Para aplicar la fórmula de Akermann debemos calcular la inversa de esta matriz, así, usando el
comando “inv()” de Matlab:
Para finalizar con este apartado, sustituimos las matrices obtenidas en la fórmula de Akkerman
que dice:
Donde E es un vector de la forma [0 0 1], por lo tanto, nuestro vector de ganancias es:
Si nos fijamos en los apuntes del tema 8, en formato digital (tiempo discreto) es el mismo
procedimiento que en formato analógico (tiempo contínuo), solo que usamos la función de
transferencia G(z), y trabajamos con las matrices G y H (cuales hemos obtenido en el apartado
4), quedando la fórmula de Ackermann de la forma:
Sin embargo, Matlab tiene una función predefinida denominada “acker(A,B,P)” que
automáticamente calcula el vector de ganancias K por el método de Ackermann. A y B serían las
respectivas matrices en espacio de estados (G y H en discreta) y P es un vector con los polos
calculados.
Así que procedemos a calcular los polos necesarios. Usando la conversión z=e^st, y sabiendo del
apartado anterior que S1,S2 = -10, calculamos que Z1, Z2 = 0.905. De nuevo, el tercer polo lo
colocamos del orden de 4 o 5 veces más alejado de los otros, para que no afecte al
comportamiento del sistema. Así elegimos Z3=0.181.
Para finalizar este apartado definimos el vector con los polos deseados:
Simulink es muy simple e intutivo de usar. Tan solo debemos montar el esquema de la planta
añadiendo bloques y modificando los valores de cada uno según las especificaciones. Empezemos:
Tiempo Contínuo
Montamos el esquema del circuito en tiempo contínuo añadiendo un controlador PID que solo lleva una
ganancia Kp = 1, tal como especifica el enunciado. A la entrada variamos entre rampa y escalón.
Entrada escalón:
Entrada rampa
Tiempo discreto
En este caso el procedimiento es el mismo, solo que debemos añadirle un bloque “zero-holder” entre el
controlador PID y la Gs que muestre según el periodo que le especifiquemos.
Para T=0.01
Entrada escalón:
Entrada rampa
Para T=0.1
Entrada escalón:
Entrada rampa:
Se observa que para el sistema discretizado dependiendo del periodo de muestro la salida de nuestro
sistema tarda más en estabilizarse, pues lo que estamos haciendo es muestrear la entrada. Esto se
aprecia menos con la entrada rampa, pues esta no varía, así que todas las sucesivas muestras serán
iguales.
10. Aplicar ltiview al sistema continuo en bucle cerrado con ganancia Kp = 1 y calcular las
especificaciones de respuesta transitoria (t_subida, t_pico, t_establecimiento,
Sobreoscilación) ante entrada escalón unitario y repetir el ejercicio con el sistema
discretizado con T=0.01 y T=0.1 y comparar los resultados obtenidos
Contínuo
“>> ltiview(sys)”
Discreta
En tiempo discreto el procedimiento es exactamente el mismo solo que en este caso usamos como
función de transferencia G(z) discretizada usando con dos periodos diferentes.
T = 0.01
T = 0.1
Entre la respuesta en tiempo continuo y discretizado con 0.01s no hay ninguna diferencia, la
información que cogemos de la entrada es tal que tenemos la información completa de la señal de
entrada para que nuestro sistema responda igual que si no muestreáramos.
Al discretizar con 0.1s, la diferencia no es mucha pero si notable. Aunque el tiempo de subida y
establecimiento sean iguales, la señal tarda unos 2s más en estabilizarse, en comparación con los otros
dos casos. Además, en la forma de la señal de salida se observan escalones.
11. Trazar el lugar de las raices continuo con rltool y situar los polos en bucle cerrado para
Kp = 0.5 Trazar asimismo el lugar de las raíces discreto para valores de T = 0.01 y T =
0.1 y comentar los resultados
Tiempo discreto
El procedimiento es el mismo que para tiempo contínuo solo que esta vez usamos la función de
transferencia Gz discretizada con dos periodos distintos.
T = 0.01
T = 0.1
Como se esperaba el lugar de las raíces discreto es totalmente distinto al contínuo. Lo interesante es
observar como la colocación de los polos varía levemente conforme cambiamos el periodo de muestreo.
Para una T mayor, los polos se encuentran algo más alejados entre ellos.
12. Calcular los valores de la ganancia critica para el caso de que el controlador PID
continuo sea una ganancia pura Kp y hallar la frecuencia crítica de oscilación
Pintamos el lugar de las raíces de nuestro sistema Gs con el comando “rlocus()”. Escogeremos un punto del lugar
de las raíces del cual nos devolverá como información la ganancia y valor de los polos con esa ganancia.
Sabemos que la ganancia crítica es aquella que provoca una oscilación mantenida en nuestro sistema,
también sabemos que esa ganancia es la que provoca que los polos de nuestro sistema se coloquen
justo encima del eje imainario. Usamos el comando “rlocfind” para que Matlab nos devuelva
información sobre un punto que escogemos del lugar de las raíces. Haciendo zoom en la gráfica,
pinchamos justo en el lugar en cual el LDR cruza el eje imaginario.
Matlab nos devuelve el valor de la ganancia que coloca uno de los polos en esa posición, y también nos
devuelve la posición de todos los polos.
La ganancia que nos devuelve matlab sería la ganancia crítica, marcada como Kc en la imagen superior.
Por lo tanto Kp crítica en un controlador sería de 3.3118
La frecuencia crítica la sacamos con Matlab sabiendo que sería la imagen del polo que hemos calculado
anteriormente.
Como d/tau =
Calculamos los valores para un PID por método Ziegler-Nichols sabiendo que:
𝑡𝑎𝑢
𝐾𝑝 = 1.2 ∗ ; Kp = 0.699
𝐾∗𝑑
Kd = 0.5 ∗ d ∗ Kp ; Kd =0.273
𝐾𝑝
Ki = ; Ki = 0.448
2∗𝑑
Así que:
𝟎.𝟐𝟕𝟑𝒔𝟐 +𝟎.𝟔𝟗𝟗𝒔+𝟎.𝟒𝟒𝟖
PID =
𝒔
Para discretizar el controlador usando los métodos especificados:
Método de Euler
Usaremos el método de Euler hacía atrás, que aproxima la integral bajo f(t) por la suma de rectángulos
hacía atrás.
𝐾𝑑
𝑇∗𝐾𝑖 𝑇
PID = 𝐾𝑝 + +
1−𝑍 −1 1−𝑍 −1
Para T = 0.1
3.4738 ∗ (𝑧 − 1) ∗ (𝑧 − 0.2012)
𝑃𝐼𝐷 =
(𝑧 − 1)2
Para T = 0.01
28.003 ∗ (𝑧 − 1) ∗ (𝑧 − 0.02496)
𝑃𝐼𝐷 =
(𝑧 − 1)2
Método Trapeizodal
Se hace la aproximación de la integral por el área del trapecio.
Pero en Matlab tenemos una forma más simple de implementarlo que sería discretizar el PID
analógico que hemos obtenido con el comando c2d usando el método “tustin” y obviamente,
cambiando el periodo de muestreo según especificado.
Para T = 0.1
Para T = 0.01
Pero de nuevo Matlab nos ofrece la posibilidad de implementarlo fácilmente discretizando el PID
analógico obtenido usando el método “matched”
Para T=0.1
Para T=0.01
Tras intentar realizar el control manual fijando una ganancia realizamos que no es posible cumplir con
todas las especificaciones a la vez. El tiempo de establecimiento no podemos reducirlo de 3.4s, y aunque
seamos capaces de cumplir con la sobreoscilasción menor a 5% no cumplimos con el tiempo de pico
menor a 0.8s.
Lo máximo que podemos reducir el tiempo de pico es a 1.38s, pero eso a una ganancia que está cerca de
la crítica, por lo que se nos dispara la sobreoscilasción al 85% y el tiempo de establecimiento a 183s.
Así que definitivamente, no se pueden cumplir las especificaciones requeridas con un controlador
proporcional.
15. En caso contrario diseñar un controlador PID analógico en el lugar de las raíces en s y
ver si es posible cumplir las especificaciones requeridas, expresando el controlador
obtenido, graficando el nuevo lugar de las raíces en s, y comprobando a través de
ltiview que se cumplen ciertamente las especificaciones requeridas (introducirle el
termino de filtro (N) adecuado
Sabemos que un controlador del tipo PID tiene como característica dos ceros y dos polos, de los cuales,
un polo está en el origen (se denomina integrador).
Dibujamos el lugar de las raíces con “rltool” y en la pestaña de “control and estimation tools” añadimos
estos tres componentes. Un integrador (polo en el origen), un polo y dos ceros. A continuación, abrimos
“response to step comand” y jugamos con la colocación de los 3 elementos añadidos. Colocamos el polo
alejado del origen, de manera que estabilice la respuesta del sistema pero que no afecte a los tiempos
de respuesta. Luego, vamos variando los ceros hasta que conseguimos el mejor comportamiento que se
adapte a las especificaciones requeridas.
Respuestas:
Si lo que deseamos es cumplir con el tiempo de pico, debemos sacrificar sobreoscilasción, que se dispara
a un 21%, para que se cumpla el otro criterio, quedando de la forma:
Finalmente concluir que cumplir con el tiempo de establecimiento no es posible, de ninguna manera.
16. Repetir el apartado 15) realizando un diseño de controlador PID digital directamente
en el lugar de las raíces en z con T=0.01, y ver si es posible cumplir las especificaciones
requeridas en 14) trasladadas al plano z, expresando el controlador digital obtenido,
graficando el nuevo lugar de las raíces en z, y comprobando a través de ltiview que se
cumplen ciertamente las especificaciones requeridas
En tiempo discreto el procedimiento es igual que en el apartado anterior pero esta vez
representamos el lugar de las raíces de la función Gz discretizada con T=0.01
El controlador PID sigue el mismo principio, peo esta vez el integrador no se encuentra en el
origen sino en la posición real 1. El otro polo debemos colocarlo cerca del origen para que no
afecte al funcionamiento del sistema.
En este caso tampoco se ha logrado cumplir con las especificaciones requeridas, lo que sí hemos
conseguido es tener unos tiempos de pico y de establecimiento menores a la vez que una
sobreoscilasción menor, comparado con el PID analógico, por lo tanto el sistema discretizado se
puede controlar mejor.
Con este conseguimos una sobreoscilación bastante menor que la requerida, pero los tiempos
de pico y de establecimiento siguen estando bastante por encima, aunque sean menores que en
el controlador analógico. Esto se puede observar en la captura inferior.
Una cosa interesante del sistema discretizado es que podemos conseguir cumplir la
especificación de sobreoscilación y tiempo de pico menores a los requeridos, pero debemos
sacrificar mucho el tiempo de establecimiento.
17. Simular en SIMULINK los sistemas de control PID continuo y discreto de los apartados
15) y 16) anteriores usando los parámetros correspondientes, y añadiendo asimismo
una limitación de salida del controlador a (-10,+10) añadiendo en su caso el sistema
corrector antiwindup y ver la respuesta
Observamos que ambas salidas son muy parecidas, lo que es normal pues hemos discretizado con
un periodo muy pequeño, así que la salida con un controlador que sea una ganancia pura debería de
ser exactamente igual, en este caso el controlador diseñado en discreto es diferente al diseñado en
tiempo continuo, siendo ese el motivo de la pequeña variación a la salida.
18. Resintonizar de nuevo los PID analógico y digital respectivamente en SIMULINK a
través de las herramientas de diseño automatico, obteniendo una mejor respuesta
posible ante el seguimiento escalón unitario (mejorar alguna de las especificaciones y
manteniendo el resto).
Con los mismos esquemas montados en Simulink que en el apartado 17, entramos en la opción “tune”
del PID para ver si podemos mejorarlo.
Siendo la línea azul la correspondiente al PID “nuevo”, se observa que ha sido disminuido bastante el
tiempo de establecimiento de nuestro sistema además de una gran disminución de la sobreoscilación.
Resultado que fue imposible de conseguir con el diseño en “rltool”.
Vayamos con el PID discreto
Esta vez hemos conseguido disminuir el tiempo de establecimiento mayor cantidad que en el apartado anterior
además de la sobreoscilasció
19. Implementar en SIMULINK los esquemas de control en espacio de estado de los
apartados 7) y 8) y comentar los resultados obtenidos partiendo de condiciones
iniciales no nulas.
Por último, vayamos con el apartado 8, el procedimiento es el mismo, solo que usando las matrices
(G,H,C,D) corespondientes al sistema discretizado con T= 0.01 y usando como ganancia el vector K
calculado en este apartado. Aparte, cambiamos el bloque “state-space” por el mismo pero en discreta
“discrete-state-space”
Veamos el esquema:
Y la salida de este es:
Comparando ambas respuestas ante una entrada escalón se observa como la respuesta del controlador
vector de ganancias diseñado manualmente produce un gran “overshoot” en la respuesta de nuestra
sistema, mientras que el controlador diseñado mediante el comando “acker” de Matlab para el sistema
discreto no produce sobreoscilasción alguna pero retrasa el tiempo de establecimiento.