Memoria TFG
Memoria TFG
Memoria TFG
iii
Índice general
Resumen iii
Índice general v
1 Introducción 1
1.1 Espacio de estado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Rudolf E. Kalman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Tiempo discreto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4 Algoritmo anti-windup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4.1 Algoritmo Back calculation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4.2 Algoritmo Clamping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3 Resultados obtenidos 21
3.1 Modelo matemático por identificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2 Representación en el espacio de estados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.3 Diseño del controlador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.3.1 Observador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.3.2 Observador con filtro de la medida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.3.3 Filtro de Kalman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
v
Índice general
4 Conclusiones 43
5 Anexos 45
Bibliografía 47
vi
Índice de figuras
2.1. Diagrama de bloques del control digital por realimentación de la salida con acción
integral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2. Diagrama de bloques del observador . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3. Diagrama de bloques real, con filtro y ruido . . . . . . . . . . . . . . . . . . . . 12
2.4. Diagrama de bloques con filtro de Kalman . . . . . . . . . . . . . . . . . . . . . 15
2.5. Arduino due . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
vii
Capítulo 1
Introducción
El periodo clásico de la teoría de control, caracterizado por el análisis del dominio de la fre-
cuencia, se mantiene con fuerza actualmente, y ahora estamos en una fase “neo-clásica” – con
el desarrollo de varias técnicas sofisticadas para sistemas multivariables. Pero concurrente con
ello, está el periodo moderno, que empezó a finales de los años 50 y principios de los 60.
La teoría moderna de control fue introducida por los soviéticos con el lanzamiento del Sputnik
en 1957. Este logro de la tecnología soviética centró la atención de los científicos e ingenieros en
general, y a la comunidad del control automático en particular, sobretodo hacia la URSS. Por
consenso global, Moscú fue la localización apropiada para el primer congreso de la Federación
Internacional del Control Automático en 1960.
Los científicos e ingenieros de sistemas de control descubrieron un enfoque diferente a la teoría
de control que el enfoque con el que estaban familiarizados. Las ecuaciones diferenciales fueron
reemplazadas por funciones de transferencia para describir la dinámica de los procesos.
En pocos años de esfuerzo frenético, la teoría de control occidental había absorbido y dominado
este nuevo enfoque del “espacio de estado” para el análisis y diseño de los sistemas de control,
los cuales ahora se han convertido en la base de gran parte de la teoría de control moderna.
El concepto de espacio de estado ha ocasionado un impacto enorme en el pensamiento de
estos científicos e ingenieros de control, que trabajan en la frontera de la tecnología. Estos
conceptos han sido también utilizados con bastante éxito en un gran número de proyectos de
alta tecnología–el proyecto del US Apollo es un buen ejemplo de ello. Sin embargo, la mayoría
de los sistemas de control implementados en la actualidad son diseñados por métodos de una
época anterior.
Muchos ingenieros de control colegiados en antiguos métodos han sentido que el enfoque del
espacio de estado moderno es matemáticamente esotérico y más adecuado para la investigación
avanzada que para el diseño de sistemas de control prácticos.
Gran parte del diseño práctico de la ingeniería está realizado con la ayuda de los computadores.
Los sistemas de control no son una excepción. No sólo son equipos utilizados en línea, imple-
1
Capítulo 1. Introducción
No obstante a las ventajas que presenta, como ya se ha dicho la mayoría de sistemas de control
que se utilizan en la actualidad se basan en la teoría clásica. Esto se debe a la complejidad
matemática que presenta la teoría moderna.
Considerando la ecuación (1.1) y (1.2) podemos obtener la representación matricial del espacio
de estados:
2
1.2 Rudolf E. Kalman
Se puede ver que x(t) es el vector de estado y ẋ(t) es la derivada del vector de estado. A, B,
C y D son matrices donde A es la matriz de estado, B la matriz de entrada, C la matriz de
salida y D la matriz de transferencia directa. En sistemas donde sólo existe una entrada y una
salida, D es un escalar. Además, cabe considerar que en la mayoría de los sistemas utilizados
D = 0. En la figura 1.1 se puede ver el diagrama de bloques de la representación matricial de
la ecuación (1.3).
Hay infinitos conjuntos de variables de estado, por lo que puede haber infinitos conjuntos de
matrices para representar el mismo sistema.
Existen 3 métodos diferentes para el cálculo de las ecuaciones de estado de un sistema lineal.
Estos son:
Cuando se conocen las ecuaciones físicas del sistema.
Cuando se conoce el diagrama de bloques detallado del sistema lineal.
Cuando solo se dispone de la ecuación diferencial o la función de transferencia.
En esta memoria se analizará el tercer método ya que se ha hecho una simulación en LabVIEW y
en MATLAB para la obtención de la función de transferencia correspondiente a nuestro motor,
sección 3.1.
3
Capítulo 1. Introducción
A partir de 1958, y hasta 1964, Kalman trabajó en el RIAS (Research Institute for Advanced
Study), y fue allí donde hizo algunas de sus contribuciones más importantes para los sistemas de
control moderno. Sus publicaciones durante estos años muestran la creatividad y su búsqueda
por la unificación de la teoría de control. Entre ellas destacan los conceptos de observabilidad y
controlabilidad, que ayudaron a poner bases teóricas sólidas de algunos de los aspectos estruc-
turales más importantes de los sistemas de ingeniería. Estos aspectos son una forma de explicar
por qué un método de diseñar compensadores para sistemas inestables cancelando polos ines-
tables por ceros en el semiplano derecho está condenado a incluso fallar si la cancelación es
perfecta.
El concepto de controlabilidad se define como un sistema completamente controlable si existe un
control sin restricción u(t) que puede llevar cualquier estado inicial x(t0 ) a cualquier otro estado
deseado x(t) en un tiempo finito t0 ≤ t ≤ t1 . Por lo que respecta al concepto de observabilidad,
un sistema es completamente observable si y sólo si existe un tiempo finito T de forma que el
estado inicial x(0) se pueda determinar a partir de la observación de la historia y(t) dado el
control u(t).
El principal problema de la observabilidad es que tiene muchas aplicaciones importantes. Si un
sistema es observable, no hay sistemas dinámicos internos, por tanto, podemos entender todo
lo que está pasando a través de la observación de las entradas y salidas. El problema de la
observabilidad es de un interés significativo debido a que ésta determinará si un conjunto de
sensores es suficiente para controlar nuestro sistema.
Se considera el sistema de la ecuación (1.3) con D = 0 para simplificar el sistema:
ẋ = Ax + Bu
y = Cx
Por lo tanto, si queremos que un sistema sea flexible y nos permita colocar todos los polos
arbitrariamente, el sistema ha de ser controlable y observable.
También fue durante su estancia en el RIAS cuando Kalman desarrolló lo que quizás sea su más
conocida contribución, el llamado “Filtro de Kalman”. Obtuvo resultados en tiempo discreto
(datos muestreados) a finales de 1958 y principios de 1959. Combinó trabajos fundamentales
en el filtrado de Wiener, Bode y otros con el enfoque moderno del espacio de estados. La
solución del problema del tiempo discreto le permitió llegar al problema del tiempo continuo,
y en 1960-1961 desarrolló la versión de tiempo continuo del “Filtro de Kalman”.
El filtro de Kalman, y su posterior extensión a los problemas no-lineales, representa quizás la
aplicación más importante de la teoría de control moderna. Podemos ver esta aplicación en la
navegación y control de vehículos espaciales (Apollo), algoritmos para el seguimiento por radar,
control de procesos, y sistemas socioeconómicos. Su popular aplicación es debida al hecho de
que una computadora digital puede realizar la fase de diseño tan bien como la implementación
de la misma.
4
1.3 Tiempo discreto
f (t) +3 f (kT )
F (s) / F (z)
5
Capítulo 1. Introducción
Las dos primeras circunstancias se dan prácticamente siempre. La tercera es típica de sistemas
muy lentos y en los que los cambios de referencia pueden ser muy grandes.
La acción de control generada por un controlador no puede superar unos determinados límites.
Estos límites pueden ser restricciones del propio controlador o del actuador al que está conec-
tado. En la figura 1.2 se representa gráficamente el diagrama de bloques del controlador con
saturación sobre la señal v(k).
Figura 1.2: Diagrama de bloques del controlador con saturación de la acción de control
Observando la ecuación (1.4) se puede ver que la salida de control u(k) será exactamente igual
a la calculada por el controlador si v(k) está entre el valor máximo y el mínimo. Si el valor
calculado supera el valor máximo por encima, la salida se mantendrá en el máximo. Si supera
por abajo el valor mínimo, se mantendrá en el mínimo.
v,
si umin ≤ v ≤ umax
u = sat(v) = umax , si v > umax (1.4)
u , si v < u
min min
Es decir, el algoritmo del controlador da lugar a un valor cualquiera para la acción de control
v(k), el valor efectivo de la acción de control aplicada al sistema estará dentro de unos límites:
u(k) ∈ [umin , umax ].
Existen dos algoritmos anti − windup que nos ayudan a corregir este efecto:
Back calculation.
Clamping.
La acción de control integral que quedaría aplicando el método de Forward Euler a la aproxi-
mación de la derivada es:
Por lo que:
Cuando la acción de control u(k) no está saturada, es decir u(k) = v(k), el integrador
actúa normalmente:
6
1.5 Plan de trabajo
ui (k + 1) = ui (k) + Ki e(k)
En esta versión del algoritmo, el integrador dejará de acumular el error si la acción de control
u(t) se satura y esta tiene el mismo signo que el error e(t) es decir e(t) · u(t) > 0. Esta nueva
condición hace que el integrador ayude a sacar la acción de control de la saturación. Por ejemplo,
si la acción de control está saturada en su máximo u > 0, el integrador dejará de acumular el
error siempre que la salida controlada sea menor que la referencia y < r ⇒ e > 0; pero en el
momento en que la salida controlada sobrepase la referencia y > r ⇒ e < 0, lo que interesa es
que el integrador ayude a frenar el sistema sacando la acción de control de la saturación, que
es lo que ocurre: e(t) · u(t) < 0 y, por tanto, la acción integral acumulará errores negativos y
ayudará a la acción de control a salir de la saturación.
7
Capítulo 1. Introducción
3.1. Observador.
3.2. Observador con filtro de la medida.
3.3. Filtro de Kalman.
4. Arduino Due.
5. Monitorización del Arduino.
8
Capítulo 2
Controlador
r(k) + e(k) z ui (k)+ u(k) y(k)
ki P lanta
z−1
−
−
x̂(k) Estimador
K
del estado
y(k)
Figura 2.1: Diagrama de bloques del control digital por realimentación de la salida con acción integral
Se observa que el controlador engloba al estimador del estado, a la acción de control integral
ui (k) y al vector K por la estimación de la variable de estado x̂(k).
9
Capítulo 2. Implementación digital del controlador
donde ui (k) es la acción de control integral, que es el producto de la constante ki por la salida
del integrador discreto que acumula el error e(k) = r(k) − y(k). La ecuación en diferencias que
corresponde con ui (k) se define como sigue:
z ki
Ui (z) = ki E(z) = E(z)
z−1 1 − z −1
1 − z −1 Ui (z) = ki E(z)
ui (k) = ui (k − 1) + ki e(k)
Se puede apreciar claramente que cuando el valor del error es cero e(k) = 0, la acción de control
integral se mantiene constante ui (k) = ui (k − 1). En cambio si hay error, por pequeño que sea,
la acción de control integral irá variando su valor.
En la acción de control u(k) la estimación del vector de estado x̂(k) se multiplica por el vector
fila K, que corresponde con los parámetros de diseño del controlador.
A continuación se analizará qué ocurre en la realimentación de la salida con observador. Además,
también se analizará la realimentación de la salida con observador y filtro de la medida, y la
realimentación de la salida por filtro de Kalman.
10
2.3 Realimentación de la salida con observador y filtro de la medida
Debe considerarse que aunque el estado x(k) no sea medible, la salida y(k) si lo es, por lo que el
desempeño del modelo dinámico puede mejorar si se utiliza la diferencia entre la salida medida
y(k) y la salida estimada ŷ(k) = C x̂(k) para monitorizar el estado x̂(k).
En la figura 2.2 se representa gráficamente el algoritmo de estimación del estado, donde se
observan las dos entradas: la acción de control u(k) y la salida realimentada y(k), y la salida: el
vector de estado estimado x̂(k). También aparece en el diagrama de bloques la salida estimada
ŷ(k), se puede apreciar claramente que la ganancia del observador (L) estará multiplicada por
la diferencia de y(k) − ŷ(k).
x̂(k)
y(k)
+
u(k) + + 1 ŷ(k) −
B C
+ z
+
11
Capítulo 2. Implementación digital del controlador
Ruido
+
r(k) + e(k) z ui (k) + u(k) + y(k)
ki P lanta
z−1
−
−
x̂(k)
K Observador
F iltro
Como podemos ver en la figura 2.3 se incorpora en la realimentación un filtro de la medida que
tomará el valor de la salida más el ruido generado. Este ruido es generado por el propio motor.
La forma de evitar que este ruido sea muy perjudicial para nuestro sistema es incorporar un
filtro, de modo que reduzca las vibraciones que se produzcan en éste mediante un proceso
matemático sobre la señal de entrada.
Los filtros son redes que procesan las señales de una manera dependiente de la frecuencia. El
concepto básico de un filtro se puede explicar examinando la naturaleza de la frecuencia de
la impedancia de los condensadores e inductores. Tienen muchas aplicaciones prácticas. Un
simple filtro de paso bajo (integrador) a menudo se utiliza para estabilizar amplificadores por
la atenuación de la ganancia a altas frecuencias donde el desplazamiento de la fase puede causar
oscilaciones. Por otra parte, un simple filtro de paso alto puede ser usado para bloquear el offset
de cc en los amplificadores de alta ganancia o circuitos de alimentación individual. Los filtros
se pueden utilizar para separar señales, pasando las de interés, y atenuando las no deseadas.
Hay diferentes tipos de filtros de la medida. Se pueden destacar varios, como el filtro de Chebys-
hev, el filtro de Bessel y el filtro de Butterworth. Según Zverev y Blinchikoff (1976) cada uno
de ellos presenta un mejor funcionamiento para determinados diseños. Para conocerlos un poco
mejor, a continuación se puede ver una pequeña explicación de cada uno de los filtros que hemos
nombrado.
El filtro de Bessel está optimizado para obtener una respuesta transitoria debido a una fase
lineal (es decir, retardo constante) en la banda de paso. Esto significa que no habrá respuesta
de frecuencia relativamente más pobre (menos discriminación de amplitud). Por lo tanto, se
trata de un filtro con buena respuesta en el dominio del tiempo. Los polos del filtro de Bessel se
pueden determinar localizando todos los polos en un círculo y separando la parte imaginaria.
Por lo que respecta al filtro de Chebyshev da una mejor discriminación de amplitud respecto
a los otros dos, seguido del filtro de Butterworth y del de Bessel. Existen dos tipos diferentes
de filtros de Chebyshev: tipo 1 (la onda sólo está permitida en la banda de paso) y tipo 2
(presentan la onda sólo en la banda de detención). Los que más se usan son los de tipo 1. A
12
2.4 Realimentación de la salida con filtro de Kalman
ωc 2π fc
ωn = = 1 = 2π Ts fc
fs T s
Introducir un filtro de la medida en nuestro sistema permite que la acción de control se sua-
vice, y por lo tanto, que no aparezca ruido en ella. Sin embargo, dependiendo del orden del
filtro, estaremos introduciendo más polos y ceros al sistema, con lo que las especificaciones de
funcionamiento (tiempo de establecimiento y pico de sobrepasamiento) pueden variar.
13
Capítulo 2. Implementación digital del controlador
Como se ha comentado en la sección 2.2, la matriz L se utiliza para obtener los valores propios
deseados. Pero el problema que encontramos aquí es diferente: las propiedades del ruido se
tienen en cuenta y el criterio es minimizar la varianza del error de estimación, que se define por
P (k):
h i
P (k) = E (e(k) − E [e(k)]) (e(k) − E [e(k)])T (2.5)
Se puede observar que si E [x̂(0)] = E [x(0)], entonces el valor medio del error de estimación es
cero para todos los tiempos independientes de L(k). Teniendo en cuenta esto, la ecuación (2.5)
que expresa la varianza del error de estimación puede escribirse como sigue:
Siempre que e(k), ω(k) y ν(k) sean independientes, la dinámica del error de estimación (ecuación
2.4) se puede utilizar en la expresión (2.6) para derivar en:
La reconstrucción definida por las ecuaciones (2.3), (2.7) y (2.8) se denomina Filtro de Kalman:
14
2.5 Implementación en un computador
Controlador
r(k) + e(k) z ui (k)+ u(k) y(k)
ki P lanta
z−1
−
−
x̂(k) Filtro
K y(k)
de Kalman
15
Capítulo 2. Implementación digital del controlador
Los parámetros que el algoritmo debe conocer son la constante ki y los vectores K y Ke .
También se suponen conocidos los valores de la señal de referencia r(k) y la salida controlada
y(k) procedente del muestreo.
En la primera línea de programa se observa que el error e(k) viene definido por la referencia
r(k) menos la realimentación de la salida y(k). Por lo que el valor de la referencia en el instante
actual de muestreo debe coincidir en escala y unidad con el valor de la salida.
En la segunda línea del algoritmo del controlador se calcula la acción de control integral ui (k)
que depende de la acción de control integral en el anterior muestreo y del error e(k) por la
constante integral ki . En caso de querer aplicar herramientas anti − windup sería en esta línea
de programa donde se tendría que aplicar. Si se aplicará el método Back calculation la línea
de programa 2 quedaría como sigue:
donde kb es una variable que utiliza el anti − windup mode Back calculation, v(k − 1) es la
acción de control no saturada en el instante anterior, y u(k − 1) es la acción de control saturada
también en el instante anterior. En caso de aplicar el método Clamping la línea de programa
sería:
La diferencia de utilizar el método Clamping es que en este caso se compara la acción de control
no saturada v(k − 1) con la acción de control saturada u(k − 1).
El objetivo del algoritmo es calcular y ofrecer como resultado el valor de la acción de control
u(k) –línea de programa 3–. Pero como las variables se van actualizando para la siguiente
ejecución, también es solución del algoritmo x̂(k + 1), que se trata de la estimación del vector
de estado en la próxima ejecución.
Cabe destacar que en la línea 4 de programa se realiza una diferencia interna en el propio
observador entre la salida y(k) y la estimación de la salida ŷ(k) = C x̂(k), que se multiplica
por la constante Ke , que corresponde con la ganancia del observador de estado.
16
2.5 Implementación en un computador
1: yf (k) = − aa10 yf (k − 1) − a2
a0 yf (k − 2) + 1
a0 y(k);
Como se puede observar, este algoritmo es muy similar al algoritmo del controlador con ob-
servador. No obstante, la diferencia respecto al anterior es que se ha de tener en cuenta una
nueva ecuación en diferencias correspondiente al filtro de la medida que se ha introducido en
la realimentación para reducir y eliminar el ruido.
Por lo tanto el algoritmo del controlador con observador más filtro de la medida comienza con
la línea de programa correspondiente al cálculo de yf (k), que es la salida filtrada que llegará al
observador.
Se observa que para el cálculo de la salida filtrada yf (k) son necesarios los valores de la salida
filtrada en las dos anteriores ejecuciones, yf (k − 1) y yf (k − 2), además, de la salida del sistema
en el instante actual y(k).
Hay que tener en cuenta los parámetros a0 , a1 y a2 , que dependen de la frecuencia normalizada
de corte del filtro wnorm y del orden que tendrá el filtro de la medida nf , por lo tanto serán
valores conocidos. Escoger una configuración distinta para el filtro de la medida, provocará un
cambio en yf (k).
Por lo que respecta al resto de líneas de programa tendrán la misma función que se ha explicado
en la subsección 2.5.1, no obstante, habrá que tener en cuenta que y(k) en este algoritmo pasa
a ser yf (k).
17
Capítulo 2. Implementación digital del controlador
−1
L(k) = A P (k) C T R2 + C P (k) C T
4: ;
5: P (k + 1) = A P (k) AT + R1 − L(k) C P (k) AT ;
6: x̂(k + 1) = A x̂(k) + B u(k) + L(k) [y(k) − C x̂(k)] ;
fFiltro Kalman
Las tres primeras líneas del programa que se presentan son iguales que en el algoritmo del
controlador con observador, ya que, al igual que cuando se utiliza observador, se ha de tener
un error e(k) (que es el resultado de la diferencia entre la referencia r(k) y la salida del sistema
y(k)) a partir del cual se obtiene la acción de control integral.
En la línea de programa 2 se observa que para el cálculo de la acción de control integral ui (k)
se necesita esa misma variable. No obstante no corresponde a la misma ui (k), sino que se trata
de la acción de control integral en el anterior instante de muestreo. Se nombran de la misma
forma para no tener que realizar una actualización de variables posteriormente. Igual que se ha
dicho en la subsección 2.5.1, si el e(k) = 0 la acción de control integral en este instante será
igual al estado anterior.
La siguiente línea de programa (3) es la acción de control de nuestro sistema, es decir, la salida
del controlador, y tiene en cuenta la acción de control integral en este instante de tiempo,
además de la multiplicación del vector K (parámetros de diseño del controlador) y el vector del
estado estimado en este instante también x̂(k). Al presentar el controlador una realimentación,
estos dos últimos términos se restan a la acción de control integral.
Las líneas de programa 4, 5 son diferentes al controlador con observador, ya que aparecen
conceptos que se necesitan al implementar un filtro de Kalman y que no son necesarios con un
observador. Estos conceptos son: L(k) y P (k + 1). L(k) es una matriz de ponderación que irá
cambiando de valor según pase el tiempo. Por lo que respecta a P (k + 1) se trata de la varianza
del error de estimación en el siguiente instante de muestreo. También aparecen dos valores (R1
y R2 ) que corresponden a dos escalares independientes.
Cabe considerar que ambas líneas utilizan la matriz P (k), varianza del error de estimación
calculada en el anterior muestreo, y que en la línea 5 de programa, P (k + 1) utiliza la actual
matriz de ponderación L(k).
Por último, en la línea de programa 6 se define la ecuación del próximo estado estimado x̂(k+1).
Para ello es necesario calcular en las líneas anteriores la acción de control u(k) y la matriz L(k).
Se puede ver que se utiliza el actual estado estimado x̂(k) calculado en la anterior ejecución del
programa, y la salida estimada ŷ(k) = C x̂(k).
18
2.6 Arduino due
El modelo Arduino Due que utilizaremos para nuestro proyecto, es una placa electrónica basada
en el Atmel SAM3X8E ARM Cortex-M3 CPU. Es la primera placa Arduino basada en un
microcontrolador con núcleo ARM de 32 bits.
Algunas de las características que debemos tener en cuenta del Arduino Due son:
Advertencia: A diferencia de otras placas Arduino, esta placa funciona a 3,3 V. Por tanto,
el voltaje máximo que los pines de E/S pueden tolerar es de 3,3 V. Proporcionar voltajes más
altos, como 5 V a un pin de I/O podría dañar la placa.
La placa contiene todo lo necesario para dar soporte al microcontrolador. El Arduino Due es
compatible con todos los escudos de Arduino que trabajen a 3,3 V y cumplan con 1, 0 Arduino
pinout.
Para más información de las características de éste se puede ver en la siguiente página web:
http://arduino.cc/en/Main/arduinoBoardDue
Al utilizar el Arduino como controlador de nuestro proceso de control nos encontramos delante
de conceptos que debemos conocer para un buen uso del mismo.
⇒ Programa con Arduino:
Todos los programas con Arduino tienen que contener dos funciones de forma necesaria: setup()
y loop().
Setup(): esta función tan solo se ejecuta una vez, después de cada encendido o con el
reinicio de la placa de Arduino. En esta sección se suele encontrar la inicialización de
variables, configuración de pines, inicialización de librerías, etc.
19
Capítulo 2. Implementación digital del controlador
20
Capítulo 3
Resultados obtenidos
de Arduino. 0.5
21
Capítulo 3. Resultados obtenidos
5
4
4
3
Tensión (V)
Tensión (V)
3
2
2
1
1
0
0
-1 -1
0 20 40 60 80 100 120 0 10 20 30 40 50 60
Tiempo (s) Tiempo (s)
3 3
2.5 2.5
2 2
Tensión (V)
Tensión (V)
1.5 1.5
1 1
0.5 0.5
0 0
-0.5 -0.5
0 20 40 60 80 100 120 0 10 20 30 40 50
Tiempo (s) Tiempo (s)
22
3.1 Modelo matemático por identificación
En la figura 3.3 se puede destacar que el motor (línea roja) supera el valor máximo del escalón,
pero esto no es un problema ya que la placa de Arduino Due que utilizamos para los ensayos
tiene un rango de tensión de 0 a 3,3 V.
Siguiendo con la identificación del modelo del motor obtenemos la función de transferencia
aproximada al motor DC a partir de los datos generados con LabVIEW. También se ha añadido
un valor llamado T que corresponde al tiempo de muestreo, es decir, cada cuanto tiempo se
tomará un valor.
Listado 1: Proceso de identificación de la F.d.T. del motor
% % Identificacio
49,159
G(s) = (3.1)
(s + 0,9404)(s + 48,97)
En la figura 3.4 podemos observar la entrada medida, la salida medida y la salida del modelo
que deseamos. También se ha añadido a la figura el ajuste del controlador, donde se observa
que en la identificación tiene un valor del 97,5 %, ya que al ser una referencia establecida el
controlador reacciona mucho mejor que con una referencia aleatoria. Por lo tanto, el ajuste de
la validación será peor, y como se puede ver tiene un valor del 92,5 %.
El calculo del ajuste se realiza con la función compare como se puede ver en el siguiente código
de MATLAB (se ha puesto el caso de la identificación, si se quiere calcular el de la validación
se cambiaría “dades_id” por “dades_valida”):
Este ajuste se calcula en porcentaje, utilizando la desviación del error cuadrático medio nor-
malizado (N RM SE), por tanto si el error cuadrático medio (RM SE) es:
qX
RM SE = (y − ŷ)2
(y − ŷ)2
P
RM SE
N RM SE = =P
var(y) (y − ȳ)2
23
Capítulo 3. Resultados obtenidos
2.5 2.5
2 2
Tensión (V)
Tensión (V)
1.5 1.5
1 1
0.5 0.5
0 0
f it = (1 − N RM SE) × 100 ( %)
Como podemos observar, cuanto más grande sea el valor de “f it” mejor será el ajuste.
model_motor = ss (A ,B ,C , D )
24
3.2 Representación en el espacio de estados
Con esto obtenemos las matrices A, B, C y D que corresponden a la matriz de estado (donde
se encuentran los valores propios de nuestro sistema), la matriz de entrada, la matriz de salida
y la matriz de transferencia directa, respectivamente. Los cálculos realizados en el listado 2 dan
como resultado las siguiente matrices:
model_motor =
−49,91 −46,05 1
A= , B= , C = 0 49,16 , D=0
1 0 0
Para comprobar si se trata de un cálculo correcto del espacio de estados se pueden comparar
ambas respuestas ante un escalón, la de la función de transferencia y la del espacio de estados
del motor. Esto se puede realizar definiendo una constante t como una variable de muestreo
para comparar las respuestas. Al representar un step (escalón) de la función de transferencia
en un tiempo t y del espacio de estados se obtienen dos respuestas prácticamente similares.
La comprobación de la exactitud de la representación en el espacio de estados es calculando el
error tal como sigue:
e = y − yss
1
F.d.T.
0.5
1.5
0
0 2 4 6 8 10
1
1.5
Espacio de estados
0.5
1
RMSE = 1.78e-15
0
0.5
0 -0.5
0 2 4 6 8 10 0 2 4 6 8 10
Se observa que se trata de un error muy pequeño, de orden −15, por lo que se puede decir que
se trata de una buena respuesta, tanto el espacio de estados como la función de transferencia
obtenida por identificación.
Por otra parte, cabe considerar que trabajamos con un sistema discreto y hasta ahora hemos
actuado considerando que nuestro sistema es continuo y que presenta una salida analógica. No
obstante, los sistemas continuos se pueden representar matemáticamente con las ecuaciones en
diferencias. Los sistemas discretos no utilizan la transformada de Laplace, en su caso se utiliza
la transformada z. Esta representación resulta más cómoda a la hora de operar y, por tanto,
25
Capítulo 3. Resultados obtenidos
debemos pasar a modo discreto la anterior representación, con MATLAB el código a programar
sería:
Listado 3: Representación en el espacio de estados en tiempo discreto
Al pasar a modo discreto como se ve en el listado 3 obtenemos unas nuevas matrices de estado,
en este caso en tiempo discreto, por lo que pasan a tener los siguientes valores:
model_motor_z =
0,6054 −0,3623 0,00944
Az = , Bz = , Cz = 0 49,16 , Dz = 0
0,0079 0,9980 0,000051
Se observa que la matriz de salida C no sufre cambios al pasar de tiempo continuo a tiempo
discreto. Además, la matriz D sigue siendo cero debido a que el diseño del diagrama de bloques
no cambia.
La diferencia entre la transformada de Laplace y la transformada z viene dada por el tipo de
ecuaciones que utiliza cada una. Con Laplace utilizamos ecuaciones diferenciales que trabajan
en tiempo continuo, en cambio con la transformada z trabajamos con ecuaciones en diferencias.
A continuación vamos a ver un ejemplo de ecuación en diferencias correspondiente a la función
de transferencia discreta que hemos estimado de nuestro motor:
26
3.3 Diseño del controlador
Por último, despejando y(k) obtenemos la ecuación en diferencias que modela el comporta-
miento de nuestro sistema:
y(k) = 0,9177 y(k − 1) − 0,0068 y(k − 2) + 0,0769 u(k − 1) + 0,0182 u(k − 2) (3.3)
Observador.
Observador más filtro de la medida.
Filtro de Kalman
ts = 0.85;
Mp = 0.01;
% % Cálculo de polos
sigma = 4/ ts ;
wd = ( - pi * sigma )/( log ( Mp ));
P = [ p1 ; p2 ]; % Vector de polos
Pci = [ P ; p_i ]; % Añadimos el polo del integrador a P
Pz = exp ( T * Pci ); % Polos en el plano z
Una vez definido el cálculo de los polos del sistema, se precisa conocer si estamos ante un
sistema controlable o no. Para ello, se debe estudiar la controlabilidad del sistema. Esto se
puede realizar de forma sencilla con MATLAB según se puede ver en el listado 5.
27
Capítulo 3. Resultados obtenidos
Co = crtb ( model_motor_z );
n = length ( Az ); % Orden del sistema
if rank ( Co ) < n
fprintf ( ’\ nSistema no controlable \ n ’ );
break ;
end
AA = [ Az , Bz ; 0* Cz , 0];
BB = [0* Bz ; 1];
m = 1; % Número de entradas
K = KK (1: m ,1: n )
ki = KK (1: m , n +1: n + m )
Los valores de los parámetros de diseño del controlador para las especificaciones indicadas en
el listado 4 son:
K = 5,6653 344,7841 ;
ki = 0,2504;
Con esto quedan definidos los parámetros de diseño del controlador del sistema. Sin embargo,
como ya se ha dicho al principio de la sección, se utilizarán tres tipos de controlador: con
observador, con observador más filtro de la medida y con filtro de Kalman.
28
3.3 Diseño del controlador
3.3.1 Observador
En muchos casos prácticos, no se dispone de mediciones directas de todas las variables de estado,
es decir, sólo son medibles unas cuantas variables de estado de un sistema dado, mientras que
las demás no lo son. Puede darse el caso que sólo las variables de salida son medibles. En
caso de que esto ocurra, será necesario estimar las variables de estado que no se puedan medir
directamente a partir de las variables de salida y las de control.
Para ello es necesario el uso de un observador que estime estas variables, por lo que el listado
7 proporciona el valor del vector Ke que será la ganancia del observador que utilizaremos, y se
trata de un valor interno del observador (en la figura 2.2 se puede ver el diagrama de bloques
correspondiente al observador de Luenberger).
Listado 7: Diseño del observador
Los polos del observador se han multiplicado por 10 ya que estos polos son más rápidos que
los utilizados para calcular el controlador. La función place da lugar a un vector fila, pero la
ganancia del observador Ke debe ser un vector columna por lo que se realiza la traspuesta del
resultado. Por tanto, el valor de Ke será:
0,0935
Ke = ;
0,0085
Controlador
r(k) + e(k) z ui (k)+ u(k) y(k)
ki P lanta
z−1
−
−
x̂(k)
K Observador +
+
Ruido
donde K y ki tienen los valores anteriormente calculados y la P lanta del sistema es la función
de transferencia G.
También se observa que tenemos un ruido en la realimentación, por lo que la señal de control
tendrá muchas oscilaciones y no será una respuesta clara. Este problema se soluciona añadiendo
un filtro de la medida como se verá en la subsección 3.3.2.
29
Capítulo 3. Resultados obtenidos
Para que las simulaciones tengan una respuesta parecida a los ensayos que realizaremos más
adelante, se ha calculado el valor máximo y mínimo que tendrá el ruido, y se ha considerado
en todas las simulaciones que se realizarán:
max_ruido = 0.1012;
min_ruido = -0.0968;
Estos dos valores serán utilizados en el bloque Ruido que se puede ver en los diagramas de
bloques tanto del controlador con observador, como del controlador con observador más filtro
de la medida, como del controlador con filtro de Kalman.
A continuación se puede ver una figura donde se ha simulado la respuesta que presenta el
modelo del motor ante una entrada escalonada en la referencia.
30
3.3 Diseño del controlador
Ruido
Controlador
+
r(k) + e(k) z ui (k) + u(k) + y(k)
ki P lanta
z−1
−
−
x̂(k)
K Observador
F iltro
Como podemos ver en la figura 3.8 se incorpora en la realimentación un filtro de la medida que
tomará el valor de la salida más el ruido generado.
La forma de evitar que el ruido sea muy perjudicial para las simulaciones es incorporar un filtro
a nuestro sistema, de modo que reduzca las vibraciones que se produzcan en éste.
No obstante, debemos tener en cuenta que al utilizar un filtro de la medida estamos introdu-
ciendo dos polos al sistema y dos ceros en el lazo de realimentación. Esto puede provocar que
aparezcan picos de sobrepasamiento y oscilaciones en nuestra respuesta. A pesar de ello, la
respuesta de la acción de control es mejor que la conseguida al utilizar solamente el observador.
El filtro de la medida que se va a implementar en el sistema es un filtro de Butterworth. En la
sección 2.3 hemos diferenciado varios tipos de filtros (Butterworth, Bessel y Chebyshev), y se
ha decidido utilizar el de Butterworth ya que se encuentra en un punto intermedio como ya se
ha explicado. Las características que presenta este filtro de la medida vienen definidas por el
orden del filtro (nf) y por la frecuencia normalizada de corte (wnorm) como podemos ver en el
siguiente código, donde la orden principal es butter, que genera una función de transferencia
correspondiente al filtro de la medida:
Listado 8: Filtro de la medida
La frecuencia normalizada de corte puede variar a nuestra elección, no obstante estas variaciones
provocarán que la salida presente más o menos sobrepasamiento y un tiempo de establecimiento
menor o mayor. De hecho, si el valor de wnorm es muy pequeño aparecen oscilaciones. Teniendo
31
Capítulo 3. Resultados obtenidos
y(k) = 1,8006 y(k−1) − 0,8188 y(k−2) + 0,00454 ym (k) + 0,00907 ym (k−1) + 0,00454 ym (k−2)
Figura 3.9: Simulación del controlador con observador y del controlador con observador más filtro de la medida
Las condiciones que se han utilizado para realizar las simulaciones son:
ts = 1,75
ts = 1,75 Observador
Mp = 0,01
Observador = ; = ;
Mp = 0,01 más filtro
wnorm = 0,045
nf = 2
32
3.3 Diseño del controlador
Figura 3.10: Simulación del controlador con filtro de Kalman y del controlador con observador más filtro
33
Capítulo 3. Resultados obtenidos
Figura 3.11: Simulación del filtro de Kalman, aplicando Back calculation y sin anti-windup mode
En la figura 3.11 se puede ver que a pesar de ser exigentes con el sistema pidiéndole un
ts = 0,85 s es capaz de obtener una acción de control muy buena, sin apenas ruido, y en la
que no aparece saturación ya que el método Back calculation actúa sobre el sistema (línea
azul).
34
3.4 Arduino Due
ym (t)
Sensor
A la hora de realizar el programa para el Arduino hay que tener en cuenta los siguientes factores:
– Las entradas y las salidas del motor: debemos tener muy claro que entradas y salidas
tenemos que utilizar para hacer el control de la velocidad de nuestro motor. En nuestro
caso, necesitaremos 2:
ENT_TACOMETRO = A0
ENT_REFERENCIA = A1
– Cambios de escala: se ha de tener en cuenta las zonas muertas del motor, como también
el cambio de giro de éste, para que Arduino sea capaz de representar los datos leídos desde
el motor y al contrario.
– Como actuar sobre el sistema: debemos tener claro como se pasarán los datos de
nuestro controlador calculado al motor. Para ello se ha realizado este pequeño código:
– Periodo de tiempo a ejecutar el controlador: se quiere implementar nuestra función
del controlador cada x milisegundos, de modo que el programa principal interrumpa el
proceso para recalcular la función del controlador, de esta manera el programa principal
podría realizar otras funciones.
– Cambio de referencia: para poder compara el control ideal (dado por MATLAB y
Simulink ) con el real (dado por el motor), debemos programar la misma referencia interna
a Arduino que la establecida con MATLAB.
35
Capítulo 3. Resultados obtenidos
36
3.5 Monitorización del Arduino
Figura 3.15: Monitorización del controlador con observador más filtro de la medida
37
Capítulo 3. Resultados obtenidos
En la figura 3.15 podemos ver la monitorización con Arduino del controlador con observador
más filtro de la medida y la simulación del mismo con MATLAB. Se puede observar que la
acción de control de ambas respuestas presenta mucho menos ruido que la monitorización de
la figura 3.14. Con esto se destaca el trabajo que realiza el filtro de Butterworth, eliminando
parte del ruido introducido. A pesar de ello, el ruido sigue estando muy presente en la acción
de control y sigue presentando oscilaciones, por lo que no es una respuesta del todo aceptable.
Esto implica que tendremos que buscar una solución para poder filtrar de forma más efectiva
el ruido generado por el motor.
Cabe destacar que el observador con filtro de la medida introduce 2 polos en el sistema de
lazo cerrado y por tanto, es más difícil de controlar. Además, vuelve a existir una discrepancia
entre las dos señales de control teniendo en cuenta que la configuración es la misma (ts = 1,75,
Mp = 0,01, nf = 2 y wnorm = 0,075).
En este ensayo (figura 3.16) se puede ver la monitorización del controlador con filtro de Kalman
con Arduino, y su simulación con MATLAB.
Como se ha visto, el filtro de Kalman es capaz de trabajar con tiempos de establecimiento
bajos, por lo tanto, se ha considerado un ts = 0,85 s para esta monitorización.
38
3.5 Monitorización del Arduino
Existe una clara diferencia entre ambas acciones de control, sobretodo por la banda muerta que
aparece en la monitorización con Arduino. Esto provoca que los tiempos de establecimiento
sean diferentes.
Cabe destacar que ambas acciones de control presentan poco ruido debido a que el filtro de
Kalman está realizando su trabajo, es decir, a parte de realizar la estimación del estado corres-
pondiente filtra el ruido que produce nuestro motor y evita que hallan oscilaciones en nuestra
acción de control.
Las condiciones del filtro de Kalman se definen mediante los parámetros R1 y R2 , varianza del
ruido del proceso y varianza del ruido de la medida, respectivamente. Cambiar estos valores
puede afectar al filtrado del ruido, ya sea para tener mayor o menor filtrado en la acción de
control.
Otro factor a destacar es la saturación de las acciones de control. El último escalón produce que
éstas se saturen, por lo que en la señal de salida (t = 15s) el tiempo de establecimiento aumenta
considerablemente, y además aparece un pico de sobrepasamiento que se debe corregir. Para
evitar que esto ocurra y sea perjudicial para el control digital, se utilizan métodos anti−windup,
ver sección 1.4.
Tener saturación en la acción de control hace que no tengamos una buena solución del problema,
ya que el objetivo es que obtengamos una respuesta sin ruido, sin picos de sobrepasamiento y
rápida. El ruido se ha conseguido filtrar al utilizar el propio filtro de Kalman. Sin embargo, para
que la respuesta no presente picos y sea rápida se tiene que aplicar algún método anti−windup,
como se ha visto en la subsección 3.3.3. Para ello, en Arduino se ha escrito el siguiente código
en el que se escogerá que método se va a utilizar:
switch ( awm ){
case 0:
ui_k = ui_k + ki * e_k ; // Sin anti - windup
break ;
case 1:
ui_k = ui_k + ki * e_k - kb *( v_k - u_k ); // Back calculation
break ;
case 2:
ui_k = ui_k + ki * e_k *(( u_k == v_k )||( e_k * u_k <0)); // Clamping
break ;
}
donde kb es una variable perteneciente al método Back calculation y awm es el método anti −
windup que se escogerá con anterioridad en el programa Arduino: 0 → Sin anti-windup, 1 →
Back calculation, 2 → Clamping.
En el ensayo que se ha realizado para ver como actúa el anti − windup se ha escogido awm =
1, por lo tanto se habrá elegido el método Back calculation. De este modo, la representación
gráfica del ensayo mediante Arduino y de la simulación del modelo del motor quedaría como
sigue:
39
Capítulo 3. Resultados obtenidos
Figura 3.17: Monitorización del controlador con filtro de Kalman aplicando anti − windup
Las condiciones con las que se ha realizado el anterior ensayo del filtro de Kalman con anti −
windup son:
ts = 1.75;
Mp
Especificaciones = = 0.01;
de funcionamiento R1 = 0.00;
R2 = 1.50;
40
3.5 Monitorización del Arduino
Figura 3.18: Monitorización del controlador con filtro de Kalman más rápido con awm Back Calculation
En la figura 3.18 se puede ver la representación gráfica del filtro de Kalman teniendo en cuenta
las anteriores especificaciones de funcionamiento.
El método anti − windup que se ha utilizado es Back calculation (siendo kb = 2 ki) ya que a la
hora de trabajar ante la saturación de la acción de control realiza operaciones menos agresivas.
Este método no bloquea la integración, sino que la frena y la suaviza para evitar que aparezca
saturación.
Se puede ver, a diferencia de la anterior representación (figura 3.17), que el pico de sobrepa-
samiento aumenta un poco más aun así el sistema se mantiene con una saturación pequeña y
cumpliendo con el tiempo de establecimiento. Por otra parte, ambas acciones de control siguen
siendo muy limpias, por lo tanto se puede decir que estamos ante un sistema rápido y sin ruido
en la acción de control.
Se han realizado varios ensayos con distintos valores, tanto para el tiempo de establecimiento
ts como para el pico de sobrepasamiento Mp , y finalmente se ha decidido optar por los valores
utilizados, y nombrados, con anterioridad. No obstante, se podría realizar un cálculo de polos
óptimo para nuestro sistema, el cual colocaría los polos en el punto donde mejor trabaje el
control del sistema.
41
Capítulo 4
Conclusiones
En este capítulo se pueden ver las conclusiones que se obtienen tras realizar las
simulaciones y los ensayos en tiempo real sobre el prototipo real de cada controlador
analizado.
Como se ha podido ver el controlador con observador presenta una respuesta del sistema muy
mala debido a que el ruido no es filtrado por nada, es decir, el ruido se realimenta y la acción de
control no es capaz de reducir el error que se genera. En cambio, el controlador con observador es
capaz de cumplir con las especificaciones de funcionamiento, aunque para ello, la señal de control
esté llena de perturbaciones como se ha demostrado tanto en la simulación correspondiente como
en el ensayo de tiempo real, ver subsección 2.5.1.
Por lo que respecta al controlador con observador más filtro de la medida, cabe destacar que
presenta una buena respuesta en la señal de control, cosa que no se puede decir si el filtro
de la medida no estuviera implementado en nuestro sistema. A pesar de ello, la solución ob-
tenida sigue presentando oscilaciones, además de la aparición de saturación que genera picos
de sobrepasamiento y más lentitud al sistema. Aún aplicando las herramientas anti − windup
pertinentes, sigue sin tener una respuesta del todo limpia, y no consigue eliminar del todo el
ruido generado por el motor.
Para conseguir una buena acción de control es necesario reducir mucho el valor de la frecuencia
normalizada de corte (lo que puede traer problemas de inestabilidad al sistema), o bien aumen-
tar el tiempo de establecimiento para que el sistema no sufra tanto. Aumentar la frecuencia
normalizada de corte implicaría mayores perturbaciones en la acción de control, por lo que
también sería un inconveniente.
Por otra parte, el filtro de Kalman depende de los parámetros de diseño del controlador, además
de los valores de la varianza (R1 y R2 ). Con las especificaciones de funcionamiento escogidas
y los parámetros de diseño definidos para el controlador se ha obtenido una acción de control
bastante buena, tanto en el ensayo de tiempo real mediante LabVIEW como en la simulación
realizada con MATLAB, ver figura 3.16. A pesar de que el filtrado que realiza el filtro de Kalman
en el ensayo mediante LabVIEW en la señal de control es muy bueno, aparece el problema de
la saturación, de ahí que se hayan añadido herramientas anti − windup de modo que se pueda
reducir el pico de sobrepasamiento que aparece y el tiempo de establecimiento se cumpla.
Además, si la configuración del mismo tiene en cuenta los métodos anti − windup que eviten
que llegue a saturar el sistema, se tendría una respuesta filtrada, rápida y sin prácticamente
saturación, ver figura 3.17.
43
Capítulo 4. Conclusiones
Por último, cabe decir que una de la mejores configuraciones por las que se puede optar para
tener un sistema capaz de soportar grandes cambios en la referencia y oscilaciones internas como
el ruido o perturbaciones es el filtro de Kalman, ya que no es necesaria la implementación de un
observador y de un filtro de la medida que filtre dichos problemas (el propio filtro de Kalman
realiza ambas funciones). Además, la acción de control que se obtiene al realizar ensayos con
el controlador con filtro de Kalman es muy limpia, cosa que no se consigue con el resto de
controladores.
44
Capítulo 5
Anexos
A continuación se verá que pasos se han seguido de los diferentes programas utilizados (MATLAB,
LabVIEW y Arduino) para obtener las conclusiones pertinentes al Trabajo Fin de Grado que
se ha tratado.
Hay dos carpetas a partir de las cuales se ha ido ejecutando el trabajo:
Motor_DC_Javi_Ferrandiz
Dentro de esta carpeta podemos encontrar archivos de MATLAB y de LabVIEW. Además
de otras carpetas donde se han guardado datos, figuras y funciones.
• dades
• figures
• matlab
Arduino
En la primer se encuentran los archivos, a partir de los que se han ido realizando el trabajo.
Los pasos siguen el siguiente proceso:
1. pas_01_entrades_identificacio_motor.m
Se prepara un escalón en la referencia para identificar el modelo del motor.
2. pas_02_assaig_llac_obert.vi
Monitorizamos el escalón obtenido en el paso anterior.
3. pas_03_identifica_valida_motor.m
A partir de los datos obtenido en el paso 2 que se encuentran en la carpeta dades obtenemos
la f.d.t. del motor.
4. pas_04_disseny.m
Se realizan los cálculos del controlador y observador, y se lanzan las simulaciones.
5. pas_05_representa_assaig_controlat.m
Se obtienen los datos para realizar los ensayos con el motor.
45
Capítulo 5. Anexos
a) controlador_Observador.ino
b) controlador_Observador_filtre.ino
c) controlador_Kalman.ino
Cada uno de estos archivos se utiliza para la monitorización de cada proceso, se obtienen
datos que se guardan en la carpeta dades.
7. pas_07_representa_assaig_controlat_observador.m
A partir de los datos generados por el paso 6a se representa el controlador con observador.
8. pas_07_representa_assaig_controlat_filtre_mesura.m
A partir de los datos generados por el paso 6b se representa el controlador con observador
más filtro de la medida.
9. pas_07_representa_assaig_controlat_Kalman.m
A partir de los datos generados por el paso 6c se representa el controlador con filtro de
Kalman.
46
Bibliografía
Åström, Karl J y Björn Wittenmark (2013). Computer-controlled systems: theory and design.
Courier Corporation (vid. págs. 13, 14, 17).
Friedland, Bernard (1995). Advanced control system design. Prentice-Hall, Inc. (vid. pág. 13).
Ogata, K. (1996). Sistemas de control tiempo discreto. Segunda Edición. Prentice-Hall Interna-
cional (vid. pág. 28).
Visioli, Antonio (2006). Practical PID control. Springer (vid. pág. 7).
Zverev, AI y HJ Blinchikoff (1976). Filtering in the Time and Frequency Domain (vid. pág. 12).
47