Professional Documents
Culture Documents
PROFESOR GUÍA:
JORGE OSVALDO ROMO LÓPEZ
MIEMBROS DE LA COMISIÓN:
HÉCTOR MILER AGUSTO ALEGRÍA
JORGE MARCO ANTONIO LÓPEZ HIDALGO
SANTIAGO DE CHILE
JUNIO 2007
RESUMEN DE LA MEMORIA
PARA OPTAR AL TÍTULO DE
INGENIERO CIVIL ELECTRICISTA
POR: RODRIGO BADÍNEZ LARA
FECHA: 02/08/ 2007
PROF. GUÍA: Sr. JORGE ROMO LÓPEZ
El objetivo general del presente trabajo de título, fue diseñar y simular un instrumento para
la estimación de torque de un motor paso-a-paso, utilizando sólo mediciones de corrientes y
voltajes, con el fin de proveer una herramienta que permita realizar mantenimiento predictivo, a
partir de los síntomas que la señal de torque pueda indicar.
Para la realización de esta investigación, fue necesario en primer lugar efectuar un análisis
respecto a las características de diseño y operación de los motores paso-a-paso, también
conocidos como stepper motors. A partir de esto, se obtuvo un modelo que permite simular
computacionalmente el comportamiento de este motor. Con el fin de estimar la posición del
rotor, necesaria para el cálculo del torque, se realizó una implementación del algoritmo Filtro de
Kalman Extendido.
Se concluye que se diseñó con éxito un estimador para el torque desarrollado por un motor
paso-a-paso de imán permanente, con una precisión aceptable, el cual únicamente utiliza
mediciones de voltajes y corrientes de fase. Cabe señalar que el programa realizado sólo
permite efectuar estimaciones para motores bifásicos, pero que las ecuaciones encontradas
hacen posible el desarrollo nuevos subprogramas para motores con más fases, dejando esto
como un desafío para futuras investigaciones.
Finalmente, se propone que el estimador diseñado en este trabajo sea llevado a la práctica,
desarrollando físicamente un instrumento electrónico que lo implemente.
Dedicado a los Pioneros
Agradecimientos
Este trabajo no podría haberlo concretado sin el apoyo de personas que han sido
fundamentales para mí en este proceso. En primer lugar debo agradecer a los profesores que me
han formado como ingeniero, en especial al Sr. Jorge Romo, mi profesor guía, quien me apoyó
incluso en los momentos cuando no obtenía resultados satisfactorios. También debo mencionar a
los profesores Sr. Héctor Agusto y Sr. Jorge López, quienes me ayudaron con las correcciones
del presente informe. No puedo dejar de nombrar al Sr. Pedro Mardones, quien amablemente me
orientó y ayudó a elegir el tema de memoria, mostrándome la necesidad desarrollar un
instrumento como el diseñado.
Por supuesto debo agradecer también a mis amigos, quienes me ayudaron a “sobrevivir” en la
universidad al brindarme su impagable amistad y una cantidad innumerable de momentos
divertidos, entretenidos y chistosos. Imposible no nombrar a Rodolfo (Loli), Roberto (Ñoño),
Nikolai (Choko) y David (Chen), como tampoco es posible omitir a los que me han acompañado
desde la época del colegio: Juan José y Conrado.
Índice de tablas v
Capítulo 1 Introducción 1
1.1. Objetivos Específicos........................................................................................... 2
1.2. Estado del arte...................................................................................................... 2
1.3. Hipótesis de trabajo y metodología...................................................................... 3
1.4. Alcances ............................................................................................................... 3
1.5. Estructura de la memoria ..................................................................................... 4
Capítulo 6 Conclusiones 45
6.1. Recapitulación del trabajo realizado .................................................................. 45
6.2. Aspectos positivos y negativos del trabajo ........................................................ 45
6.3. Eventuales aplicaciones del trabajo desarrollado............................................... 45
6.4. Sugerencias para futuras investigaciones sobre el tema .................................... 46
6.5. Comentarios finales............................................................................................ 46
Referencias 47
ii
Índice de figuras
Figura 2.1 - Sistema de motor paso-a-paso [14] .....................................................................6
Figura 2.2 - Esquema del motor VR de 3 fases y de sus devanados [20, 21].........................7
Figura 2.3 – Avance de un paso en el motor paso-a-paso VR [20, 21] ..................................7
Figura 2.4 – Movimientos obtenidos al conmutar las 3 fases en el motor VR [20, 21] .........8
Figura 2.5 - Esquema de motor PM con rotor de 2 polos y 2 fases [20, 22] .........................8
Figura 2.6 - Esquema de motor PM con rotor ........................................................................8
Figura 2.7 - Estructura del rotor de un motor híbrido [20, 21] ...............................................9
Figura 2.8 - Estructura de un motor híbrido simple de 12 pasos por revolución [24] ..........10
Figura 2.9 - Recorrido en modo Full-Step [24] ....................................................................11
Figura 2.10 - Paso intermedio en modo Half-Step (entre d y c) [24]....................................11
Figura 2.11 – Esquema de un motor híbrido de 2 fases (4 polos por fase)...........................12
Figura 2.12 – Un motor PM Can-Stack ................................................................................13
Figura 2.13 – Partes principales del motor Can-Stack [24] ..................................................13
Figura 2.14 - Motor PM de 24 polos, construcción real Can-Stack [27]..............................14
Figura 2.15 - Visualización de la interacción dientes del estator con rotor [24] ..................14
Figura 2.16 – Detalle del estator del motor PM Can-stack [27]...........................................15
Figura 3.1 – Motor paso a paso genérico (con P=3 y N=4) [15] ..........................................18
Figura 4.1 – Esquema de un observador...............................................................................25
Figura 4.2 – Diagrama del algoritmo del filtro de Kalman en su versión discreta ...............27
Figura 5.1 - Modelo del motor paso-a-paso de 2 fases en Simulink (anexo B.1) .................37
Figura 5.2 – Respuesta del motor a una secuencia de pulsos ..............................................37
Figura 5.3 – Respuesta del motor a una secuencia de pulsos 2 ...........................................38
Figura 5.4 – Respuesta del motor a entradas sinusoidales (microstepping) .........................38
Figura 5.5 – Respuesta del motor a entradas sinusoidales (microstepping) 2 ......................39
iii
Figura 5.6 – Simulación Filtro de Kalman Extendido con carga conocida ..........................40
Figura 5.7 – Corriente de fase medida, estimada y real........................................................41
Figura 5.8 – Simulación asumiendo una carga nominal constante.......................................42
Figura 5.9 – Simulación utilizando la carga como parámetro a estimar...............................43
iv
Índice de tablas
Tabla 3.1 – Ecuaciones del motor paso-a-paso PM genérico ................................................. 22
Tabla 3.2 – Ecuaciones simplificadas para el motor paso-a-paso PM de 2 fases y 10 polos . 23
Tabla 4.1 – Ecuaciones de predicción del filtro de Kalman discreto...................................... 26
Tabla 4.2 – Ecuaciones de corrección del filtro de Kalman discreto...................................... 26
Tabla 4.3 – Sistema lineal obtenido al aproximar el sistema no-lineal .................................. 30
Tabla 4.4 – Parámetros del sistema discretizado .................................................................... 31
Tabla 4.5 – Parámetros aproximados del sistema discretizado............................................... 31
Tabla 4.6 – Aproximación lineal discretizada de un sistema no-lineal .................................. 32
Tabla 4.7 – Ecuaciones de predicción del filtro de Kalman discreto...................................... 32
Tabla 4.8 – Ecuaciones de corrección del filtro de Kalman discreto...................................... 32
Tabla 4.9 – Formulación en variables de estado del modelo del motor paso-a-paso ............. 33
Tabla 5.1 – Parámetros del motor simulado ........................................................................... 36
Tabla 5.2 – Parámetros simulación filtro de Kalman Extendido ............................................ 39
Tabla 5.3 – Parámetros simulación filtro de Kalman Extendido para carga desconocida...... 42
v
Capítulo 1
Introducción
En general, un motor cumple con la tarea de efectuar algún movimiento o trabajo mecánico,
ya sea de empuje o tracción. Un motor eléctrico es un dispositivo que transforma energía
eléctrica en energía mecánica; son altamente eficientes y por ello ampliamente utilizados en
instalaciones y procesos industriales. Los motores eléctricos pueden ser de baja o alta potencia y,
según sea el caso, cumplir el rol de actuador de potencia (como por ejemplo en compresores,
ventiladores, correas transportadoras, prensas, etc.) o bien de actuador de control (control de
válvulas, posicionadores de instrumentación, rotación controlada a baja velocidad, etc.) [25].
Los motores, como toda maquinaria, sufren desgaste y deterioro progresivo debido al uso y al
paso del tiempo. Más allá de que el deterioro puede ser más rápido o más lento, según como sean
las características propias de cada motor y las condiciones de uso, es indispensable aplicar las
tareas de mantenimiento para extender así su vida útil. El mantenimiento se puede clasificar
como correctivo, preventivo o bien predictivo.
1
contexto del mantenimiento predictivo, lo ideal sería detectar la aparición de estos torques de
roce en sus inicios, para programar adecuadamente su salida de servicio y reparación.
En general, para cualquier motor eléctrico, y en especial si son del tipo paso-a-paso, la única
forma de realizar un análisis del torque del motor es extrayéndolo físicamente del equipo al que
pertenece para enfrentarlo a pruebas directas usando un torquímetro. No existe manera de hacerlo
mientras el motor esté en operación, lo cual conlleva a que el tipo de mantenimiento practicable
sea preventivo y no predictivo.
Este trabajo tuvo su origen en el Observatorio Europeo Austral, cuyos sistemas requieren de
una herramienta como la planteada.
2
de posición y/o velocidad por retroalimentación, los cuales mejoran sustancialmente el
desempeño del motor paso-a-paso comparándolo con el esquema clásico de lazo abierto, y
algunos utilizan estimaciones del estado para la retroalimentación, como por ejemplo en [8-9].
Las publicaciones [10-11] tratan sobre como maximizar la eficiencia del motor usando
información estimada del torque, y sobre la identificación de parámetros de un motor paso-a-
paso, respectivamente.
La metodología de trabajo fue la siguiente: primero se realizó una investigación teórica sobre
los motores paso-a-paso, para conocer sus características y comprender su funcionamiento. Una
vez concluida esa etapa, se desarrolló un modelo del motor paso-a-paso, adecuado para las
siguientes etapas. Luego se efectuaron simulaciones computacionales del modelo, para un motor
de las características deseadas. Posteriormente se realizó una nueva investigación teórica, para
encontrar un observador adecuado que permitiera estimar el torque buscado. Finalmente, se
simuló el desempeño del observador, para analizar su desempeño.
En resumen, se dividió el trabajo en 2 etapas consecutivas: una orientada hacia el motor paso-
a-paso y la otra hacia el observador. En ambas se cubrieron los siguientes aspectos:
• Investigación teórica
• Desarrollo de un modelo del sistema
• Validación del diseño utilizando simulaciones computacionales
1.4. Alcances
Este trabajo de titulación se centró principalmente en el desarrollo teórico del instrumento. Se
limitó el diseño específicamente a un motor paso-a-paso de imán permanente, de 2 fases. Para
una implementación más precisa del diseño, se requeriría realizar un adecuado proceso de
identificación de los parámetros del motor, tarea que se consideró fuera del alcance del trabajo.
3
1.5. Estructura de la memoria
La presente Memoria se ha estructurado dividiéndola en 6 capítulos, que se describen a
continuación:
4
Capítulo 2
Motores Paso-a-Paso
Los motores paso-a-paso, conocidos también como motores stepping/stepper, son
dispositivos electromecánicos que convierten una entrada de pulsos digitales a movimientos
discretos e incrementales. Fueron creados a partir de la necesidad de disponer de un dispositivo
capaz de producir un desplazamiento angular definido y de mantener su posición frente a un
torque aplicado al eje. Se caracterizan por tener la capacidad de proveer posicionamiento preciso,
con excelente repetibilidad, sin necesidad de emplear retroalimentación [15, 20].
5
Un sistema de motor paso-a-paso consiste de tres elementos básicos, algunas veces
combinados con una interfaz al usuario (como un computador o PLC), como se muestra en la
Figura 2.1 [14]. El primer elemento, el controlador, es un microprocesador capaz de generar
pulsos y señales de dirección al driver. El driver o amplificador, convierte las señales de pulsos
generados por el controlador en el voltaje necesario para energizar los devanados del motor. El
último elemento es el motor paso-a-paso en sí.
En general los motores paso-a-paso son comparativamente de bajo costo, robustos, de rápida
aceleración y respuesta. No contienen escobillas, lo que los hace más duraderos en el tiempo y
con menor necesidad de mantenimiento con respecto a los motores DC. Su error de posición no
es acumulativo si son controlados de manera correcta, esto es sin producir saltos de pasos.
Pueden lograr un amplio rango de velocidades modificando la frecuencia de los pulsos. Permiten
un control digital de la posición y velocidad [15].
Una de las ventajas más significativas de los motores paso-a-paso con respecto a otros
motores eléctricos es su capacidad de poder ser controlado con precisión con un esquema de
control de lazo abierto. Un control de lazo abierto implica que no es necesario retroalimentar al
controlador con información de la posición, eliminando la necesidad de utilizar sensores de
posición [16].
Los problemas típicos que presentan estos motores son resonancia a altas velocidades [17],
torque decreciente al aumentar la velocidad, y la existencia de sobreoscilación con un tiempo
relativamente lento de asentamiento para los pasos [18]. Muchos de estos problemas se resuelven
o reducen al utilizar un esquema de control de lazo cerrado por retroalimentación de la posición,
lo cual aumenta considerablemente el rendimiento del motor [5,7] con la desventaja de aumentar
bastante el costo del sistema.
6
Figura 2.2 - Esquema del motor VR de 3 fases y de sus devanados [20, 21]
Este tipo de motor se caracteriza por no poseer imán permanente, en vez de ello su rotor es
un bloque dentado de acero o hierro dulce laminado, con salientes y ranuras como se observa en
la Figura 2.2. Cuando los devanados del estator son excitados por corrientes, los polos del mismo
se magnetizan y atraen al material magnéticamente permeable del rotor. A la vez, esto mismo se
puede entender aplicando el principio de minimizar la reluctancia a través de la trayectoria del
campo magnético aplicado. El rotor gira hasta encontrar el punto de menor reluctancia, lo que
ocurre al alinearse los polos energizados del estator con los más cercanos del rotor. Al alternarse
las bobinas energizadas del estator, el campo magnético inducido va girando, produciendo el
desplazamiento del rotor como se ilustra en las figuras 2.3 y 2.4 para un motor VR de 3 fases.
[14, 26]
En este tipo de motor, cuando no hay excitación no existe ningún flujo magnético, por lo cual
el rotor gira libremente (no existe el llamado torque de detención). Cabe mencionar que en estos
motores el número de polos del rotor siempre es menor al del estator, para de esta manera
asegurar que sólo un conjunto de polos del estator y rotor se puedan alinear en cualquier instante
[19].
Estos motores permiten velocidades de giro mayores que los motores de imanes permanentes,
y presentan inercias menores ya que el peso del rotor es menor. Pero tienen un menor
rendimiento (salvo para altas velocidades), por lo que son aptos para el movimiento de cargas
pequeñas. Además son indiferentes a la polaridad de la corriente, por lo que requieren de una
configuración distinta de drivers que el resto de los motores paso-a-paso.
7
Figura 2.4 – Movimientos obtenidos al conmutar las 3 fases en el motor VR [20, 21]
Existe una versión del motor de reluctancia variable llamada multistack, en la cual el motor
es dividido -según su largo axial- en secciones aisladas magnéticamente, lo que permite obtener
ángulos de paso menores que en la versión tradicional. En este tipo de motor, cada stack
corresponde a una fase, y se tiene el mismo número de dientes tanto en el estator como en el
rotor. Por cada fase, las bobinas de polos contiguos producen magnetizaciones opuestas debido al
sentido de las espiras. En el rotor cada stack o sección está desfasada de la siguiente en un ángulo
correspondiente al del ancho de un polo dividido por el número de stacks [20].
Los motores paso-a-paso de este tipo funcionan según la interacción que se produce entre el
rotor, permanentemente magnetizado, y el campo electromagnético creado por las bobinas del
estator. A diferencia del motor de reluctancia variable, el rotor acá no presenta dientes salientes,
sino que está magnetizado radialmente con un número variable de polos, de polaridades Norte y
Sur alternadas a lo largo de la circunferencia del rotor [14-16]. Las Figuras 2.5 y 2.6 muestran
esquemas motores de magnetización permanente de 2 y 4 polos respectivamente, ambas de dos
fases.
Figura 2.5 - Esquema de motor PM Figura 2.6 - Esquema de motor PM con rotor
con rotor de 2 polos y 2 fases [20, 22] de 6 polos y 2 fases [16]
El flujo magnético inducido por el estator interactúa con el flujo magnético proveniente del
imán permanente del rotor. Cuando ambos flujos están alineados en el mismo sentido, el motor
está en un punto de equilibrio estable y no hay torque producido. Cuando los flujos están
alineados pero con sentidos opuestos, el rotor está en un punto de equilibrio inestable sin torque
8
[19]. Cualquier otra posición angular produce torque en el rotor que tiende a llevarlo al punto de
equilibrio estable; el máximo torque se produce al estar los flujos magnéticos perpendiculares
entre sí.
9
Los dientes del rotor se utilizan para dirigir al flujo magnético, aumentando la eficiencia del
motor. Para ilustrar de mejor manera el principio de operación de este tipo de motores, a
continuación se detalla el funcionamiento de un motor híbrido simple[24].
Figura 2.8 - Estructura de un motor híbrido simple de 12 pasos por revolución [24]
• En este caso el rotor tiene 3 salientes por cada sección, y el estator posee 4 polos a lo
largo de la extensión del rotor completo (Figura 2.8).
• Al energizar una de las bobinas, se producen dos polos Norte y Sur los cuales atraen a
los salientes del rotor de polaridad opuesta (Figura 2.9.a).
• Notar que como las secciones del rotor están desfasadas por la mitad del ángulo de
separación entre dientes, el resultado neto es análogo a tener un rotor magnetizado
radialmente con polos Norte y Sur intercalados.
• En esta situación sólo hay 3 posiciones estables para el motor, igual a la cantidad de
dientes del rotor.
• Si se cambia la excitación a la otra fase, ahora el campo generado por el estator esta
girado en 90º con respecto el anterior. Como resultado de esto se tiene que el rotor
gira 30º (Figura 2.9.b).
• Alternando de ésta manera la excitación de las bobinas (invirtiendo ahora la polaridad
de las corrientes por las bobinas), se vuelve a una situación análoga a la original,
avanzando 90º (Figuras 2.9.c y d).
10
Figura 2.9 - Recorrido en modo Full-Step [24]
• Si entre los pasos anteriores, se energizan las dos bobinas al mismo tiempo, se obtiene
el modo Half-step en el cual el motor avanza en medios pasos angulares como se
observa en la Figura 2.10. Este modo de operación es aplicable en todos los motores
paso-a-paso
Los motores híbridos reales tienen un número mucho mayor de dientes en el rotor,
típicamente 50 por sección, y pueden ser de 2 a 5 fases, lo cual permite alcanzar resoluciones
angulares en el esquema normal, de 1.8º hasta 0.72º por paso respectivamente. El estator de estos
motores tiene una construcción de polos salientes dentados, como se muestra en la Figura 2.11.
Sus fases generalmente agrupan varios polos, y utilizan ambas polaridades de corriente. Por esto
último utilizan los mismos drivers que los motores de magnetización permanente.
11
Figura 2.11 – Esquema de un motor híbrido de 2 fases (4 polos por fase)
Estas características, junto a su gran resolución (típicamente desde 3.6º a 0.72º), hacen que
sea el motor paso-a-paso más usado en aplicaciones comerciales. Sin embargo, son por mucho
los que tienen mayor costo, debido a su compleja construcción.
12
Figura 2.12 – Un motor PM Can-Stack
Las bobinas de cada fase están envueltas por una cáscara de acero con forma de rosquilla,
con “dientes” o “dedos” salientes apuntando hacia su centro, como se observa en la Figura 2.14.
Cuando una bobina es energizada, magnetiza los extremos superior e inferior con polaridades
opuestas. Los dientes de cada extremo están dispuestos de manera intercalada. Si el rotor tuviera,
por ejemplo 24 polos magnéticos, cada extremo de la “rosquilla” tendría 12 dientes para así tener
la misma cantidad de polos por fases que el rotor. La Figura 2.15 muestra como estos dientes
magnetizados interactúan con el rotor permanentemente magnetizado [27].
13
Figura 2.14 - Motor PM de 24 polos, construcción real Can-Stack [27]
Figura 2.15 - Visualización de la interacción dientes del estator con rotor [24]
14
Figura 2.16 – Detalle del estator del motor PM Can-stack [27]
Cabe mencionar que los motores empleados en los instrumentos astronómicos del
Observatorio Europeo Austral (ESO), que motivaron la presente memoria, son del mismo tipo
que los recién especificados. Debido a la imposibilidad de contar con los datos de diseño de los
motores de ésta organización, se decidió trabajar con los motores de las disqueteras antes
señaladas ya que comparten el mismo principio de funcionamiento.
15
2.5. Comentarios
Los motores paso-a-paso son actuadores digitales, capaces de proveer posicionamiento y
movimiento preciso en cantidades discretas. Requieren de un driver para su utilización, y existen
3 tipos básicos: El motor paso-a-paso de reluctancia variable, el de imán permanente y el híbrido.
Los más utilizados son estos dos 2 últimos, y el híbrido es el que presenta las mejores
prestaciones en cuanto a resolución y torque. Sin embargo el motor de imán permanente se
destaca por su bajo costo, debido a su esquema de construcción llamado Can-Stack, y esto hace
que sea el más empleado en aplicaciones no industriales. Los motores paso-a-paso utilizados para
el presente trabajo corresponden a este tipo.
El próximo capítulo ahonda más en la teoría de este tipo de motores, para encontrar la
relación entre corriente de fase y torque del motor, en la que se basó el instrumento desarrollado.
16
Capítulo 3
Relación corriente-torque en motores
stepper de imán permanente
Los motores eléctricos son máquinas electromagnéticas y electromecánicas, en el sentido de
que utilizan relaciones electromagnéticas para transformar energía eléctrica a energía mecánica.
1
Salvo para los motores de corriente continua (C.C.), donde el torque es producido por la interacción entre un
campo magnético fijo generado por el estator, y otro rotatorio inducido producido por el rotor.
17
En este capítulo se analiza el modelo físico del motor paso-a-paso, en particular del tipo imán
permanente bifásico, para con él encontrar la relación adecuada entre torque, corriente y posición
que se utilizará como base para el diseño el instrumento.
Figura 3.1 – Motor paso a paso genérico (con P=3 y N=4) [15]
Denominando P al número de pares de polos del rotor, y N al número de fases del estator.
Designando por θ al ángulo de referencia tomado a partir de la alineación del polo de la fase I con
el polo A del rotor, y con sentido creciente según la convención “regla de la mano derecha”.
Las ecuaciones que rigen el comportamiento mecánico del sistema son las siguientes:
dω
J⋅ = Tm − (TC + TV + TF ) (3.1)
dt
dθ
ω= (3.2)
dt
18
La ecuación (3.1) es el balance de torque: J es el momento de inercia del sistema (motor más
su carga); la velocidad angular es ω; el par de giro o torque desarrollado por el motor es Tm; el
torque producido por la carga en el eje del motor es Tc, y los torques de fricción viscosa y estática
son Tv y Tf. La ecuación (3.2) es la definición de velocidad angular. Usualmente el roce viscoso
se modela proporcional a la velocidad, como lo muestra la ecuación (3.3).
TV = B ⋅ ω (3.3)
dφ j
V j (t ) = i j (t ) ⋅ R j + (i1 , K , i N , θ ) j = 1, K , N (3.4)
dt
dφ j N ∂φ j ∂ik ∂φ j
=∑ ⋅ + ⋅ω (3.5)
dt k =1 ∂ik ∂t ∂θ
En las ecuaciones anteriores j denota a la fase: Vj son los voltajes, Ij las corrientes, Rj las
resistencias de cada fase. El flujo magnético enlazado por las bobinas de la fase j se denota por
φj. La ecuación (3.4) corresponde a los circuitos de cada fase. La ecuación (3.5) es el desarrollo
de la derivada total.
En estos motores es común despreciar las inductancias mutuas entre las bobinas del estator,
ya que por consecuencia del diseño su efecto es despreciable si se compara con el de las auto-
inductancias[7][21]. De esta manera al reemplazar en (3.5) la definición de auto-inductancia y
considerando (3.6), se obtiene la ecuación (3.7).
∂φ j
M ik = =0 para j ≠ k (3.6)
∂ik
dφ j ∂i j ∂φ j
= Lj ⋅ + ⋅ω (3.7)
dt ∂t ∂θ
El torque desarrollado por el motor se puede obtener a partir de la expresión (3.8), en la cual
W’ es la llamada co-energía magnética almacenada por el sistema [7].
∂W ′
Tm = (3.8)
∂θ
19
La definición de co-energía magnética es la expresión (3.9) [7]. Sin embargo, como los
motores paso a paso están diseñados para trabajar en la zona lineal de la relación corriente–flujo
magnético enlazado, es posible despreciar los efectos de saturación magnética. En esta situación,
es posible demostrar que la co-energía magnética y la energía magnética almacenada resultan
tener el mismo valor. Las ecuaciones (3.10), (3.11) y (3.12) son distintas expresiones para la
energía magnética almacenada[28], designada por W.
N ij
W′= ∑ ∫φ
j =1 0
j ( i1 ' , K , i N ' , θ ) ⋅ di j ' (3.9)
N φj
W = ∑ ∫ i j (φ1 ' ,K, φ N ' ,θ ) ⋅ dφ j ' (3.10)
0
j =1
1 N 1 N N
W= ∑ i i 2 ∑∑
2 i=1
L ⋅ i 2
+
i =1 j >i
M ij2 ⋅ ii ⋅ i j (3.11)
v r
W = i T ⋅ [L]⋅ i
1 (3.12)
2
Así, al igualar (3.9) con (3.12) y reemplazarlo en (3.8) se obtiene la expresión (3.13) la cual
relaciona las corrientes de fase, con la posición y las componentes de la matriz de inductancia L
del motor[3].
1 v ∂[L ] r
Tm (i1 , K , i N , θ ) = i T ⋅ ⋅i (3.13)
2 ∂θ
En estos motores, es usual asumir la dependencia del flujo magnético enlazado con respecto a
la posición como una función sinusoidal más una constante. Así se obtienen mínimos de
reluctancia cuando los polos salientes del rotor se alinean con los polos del estator de alguna de
las fases, y valores mayores para el resto de las posiciones. La ecuación (3.14) expresa lo
anterior, para el flujo magnético φj enlazado por las bobinas de la fase j, con L0 y L1 constantes
del motor.
( j − 1) ⋅ 2π
φ j = {L0 − L1 ⋅ cos 2 P ⋅ θ − } ⋅ i j (3.14)
N
Lo anterior, al usarse junto con las ecuaciones (3.8) y (3.9), permite obtener la siguiente
expresión para el torque en función de las corrientes de fase y la posición[7]:
N
( j − 1) ⋅ 2π
Tm = ( P ⋅ L1 ) ⋅ ∑ i 2j ⋅ sin 2 P ⋅ θ − (3.15)
j =1 N
En estos motores se tiene que, por la simetría del rotor, las auto-inductancias de todas las
fases tienen el mismo valor, independiente de la posición del rotor [3][21].
20
∂φ j
= Lj = L (3.16)
∂i j
di j 1 ∂φ
= ⋅ V j (t ) − i j (t ) ⋅ R j − ω ⋅ j j = 1, K , N (3.17)
dt L ∂θ
Por otra parte, el imán permanente del rotor se puede modelar utilizando una corriente ficticia
if del rotor, de magnitud constante [3][7]. Se asume una dependencia sinusoidal flujo enlazado
por las bobinas producido por el rotor, con respecto a la posición, como se muestra en la ecuación
(3.18) donde Lm0 y Lm1 son parámetros constantes del modelo.
( j − 1) ⋅ π
φ j = L ⋅ i j + {Lm 0 + Lm1 ⋅ cos P ⋅ θ − } ⋅ i f j = 1, K , N (3.18)
N
Con lo anterior, se puede calcular la derivada del flujo magnético con respecto a la posición,
la cual al reemplazar en la ecuación (3.17) se obtiene la ecuación diferencial (3.19) para el
comportamiento eléctrico, donde km es un parámetro del motor dado por (3.20):
di j 1 ( j − 1) ⋅ π
= ⋅ V j (t ) − i j (t ) ⋅ R j + ω ⋅ K m ⋅ sin P ⋅ θ − j = 1, K , N (3.19)
dt L N
K m = i f ⋅ Lm1 ⋅ P (3.20)
La ecuación (3.18) muestra que pese a que las inductancias mutuas entre las fases son nulas,
la inductancia mutua entre una fase y la bobina ficticia del rotor no lo es[3]. Al incluir el
concepto de corriente y bobina ficticia en el sistema para modelar el imán permanente, es
deseable también considerar el efecto de la auto-inductancia de la bobina ficticia. Para hacerlo, se
puede utilizar la ecuación (3.21) como expresión para la auto-inductancia ficticia Lff, donde Lf0 y
Lf4 son constantes[3].
L ff = L f 0 + L f 4 ⋅ cos(4 ⋅ P ⋅ θ ) (3.21)
( j − 1) ⋅ π
L jf = Lm 0 + Lm1 ⋅ cos P ⋅ θ − j = 1, K , N (3.22)
N
21
L 0 0 L1 f
0 O 0 M
[ L] = (3.23)
0 0 L LNf
L1 f L LNf L ff
Finalmente para encontrar la expresión del torque desarrollado, se reemplaza las ecuaciones
(3.21) y (3.22) en (3.23), y ésta a su vez en (3.13). Se obtiene así la ecuación (3.24)[7], la cual es
una expresión para el torque en función de las corrientes de fase y de la posición angular, donde
kd es un parámetro definido por (3.25), que representa al torque de detención debido a la
interacción entre el rotor de imán permanente y el material ferromagnético de los polos del
estator[9]:
N
( j − 1) ⋅ π
Tm = − K m ⋅ ∑ i j ⋅ sin P ⋅ θ − − K d ⋅ sin(4 ⋅ P ⋅ θ ) (3.24)
j =1 N
K d = 2 ⋅ L f 4 ⋅ P ⋅ i 2f (3.25)
dω
J⋅ = Tm − (TC + TV + TF ) (3.1)
dt
dθ
ω= (3.2)
dt
di j 1 ( j − 1) ⋅ π
= ⋅ V j (t ) − i j (t ) ⋅ R j + ω ⋅ K m ⋅ sin( P ⋅ θ − ) j = 1, K , N (3.19)
dt L N
N
( j − 1) ⋅ π
Tm = − K m ⋅ ∑ i j ⋅ sin P ⋅ θ − − K d ⋅ sin( 4 ⋅ P ⋅ θ ) (3.24)
j =1 N
22
Tabla 3.2 – Ecuaciones simplificadas para el motor paso-a-paso PM de 2 fases y 10 polos
dω
J⋅ = Tm − (TC + TV + TF ) (3.1)
dt
dθ
ω= (3.2)
dt
= ⋅ (V1 (t ) − i1 (t ) ⋅ R + ω ⋅ K m ⋅ sin(5θ ) )
di1 1 (3.26)
dt L
= ⋅ (V2 (t ) − i2 (t ) ⋅ R − ω ⋅ K m ⋅ cos(5θ ) )
di2 1 (3.27)
dt L
Tm = − K m ⋅ i1 ⋅ sin(5θ ) + K m ⋅ i2 ⋅ cos(5θ ) − K d ⋅ sin( 20θ ) (3.28)
3.4. Comentarios
Según se observa de las ecuación (3.28) del modelo obtenido, la relación corriente-torque
resulta dependiente de la posición del rotor. Esto contraviene la hipótesis fundamental asumida
para el trabajo, que sostenía que utilizando sólo mediciones de corriente se podía realizar una
buena estimación del torque. Sin embargo, como el propósito original del trabajo era proveer un
método de estimación de torque, que no necesitara un acceso directo al motor, o la extracción del
mismo de su lugar de operación, resulta conveniente relajar esta hipótesis. Resultaría tentador
utilizar directamente un sensor de posición, pero esto necesariamente implicaría un acceso al eje
del motor, situación que se desea evitar. La solución adecuada entonces, consiste en medir otras
variables de acceso externo al motor, que permitan junto con las mediciones de corriente
“observar” la posición del rotor, para con ella poder finalmente estimar el torque. Las únicas
variables disponibles con estas características resultan ser los voltajes de fase, y por ello el
siguiente capítulo trata sobre como usarlos para estimar la posición del rotor.
23
Capítulo 4
Observadores y Filtro de Kalman
Un observador se refiere a un algoritmo capaz de producir una estimación (observar) de una
variable de estado no-medible de un sistema. Un estado no-medible o no-disponible es una
variable de sistema que resulta engorrosa, económicamente costosa, o físicamente inaccesible de
medir.
Este capítulo entrega una pequeña introducción sobre los observadores, para luego
profundizar en el filtro de Kalman como el observador idóneo para estimar la posición y el torque
desarrollado del motor paso-a-paso.
4.1. Observadores
Como se menciona en la introducción anterior, los observadores utilizan las mediciones de la
salida de la planta más un modelo del sistema, para producir sus estimaciones. Comparan la
salida real de la planta con la salida estimada con el modelo, y retroalimentan el error en la
estimación para corregir su desviación. La Figura 4.1 muestra esto en un esquema del sistema
real con observador.
24
Figura 4.1 – Esquema de un observador
Nos centraremos en el estudio del filtro de Kalman, pues tiene una serie de ventajas para su
implementación experimental.
El filtro de Kalman permite realizar estimaciones del estado, incluso cuando la naturaleza
exacta del sistema modelado no es conocida a cabalidad[30]. Es un procedimiento
extremadamente flexible y versátil que permite emplear salidas ruidosas de sensores para realizar
estimaciones del estado de sistemas con dinámicas inciertas, con parámetros no completamente
determinados[14]. Sin embargo tiene la gran limitación de que, en su formulación tradicional,
sólo es aplicable para sistemas dinámicos lineales.
A continuación se detallará la versión en tiempo discreto del filtro, pues es la más adecuada
para una ulterior implementación del algoritmo en un PIC o DSP, para el desarrollo físico del
instrumento.
25
proceso, y vk el ruido de las mediciones[30]. Los parámetros del modelo son Ak, Bk, Ck, y k es la
variable temporal discreta.
x k = Ak −1 x k −1 + Bk −1uk −1 + w k −1 (4.1)
yk = C k xk + v k (4.2)
w k : N (0 ,Qk ) (4.3)
v k : N (0 , Rk ) (4.4)
Aunque los parámetros Ak, Bk, Ck, Qk, y Rk podrían ser funciones del tiempo, por simplicidad
muchas veces se les considera constantes en la implementación del filtro.
Consiste básicamente en dos etapas: en la primera se realiza una predicción del estado
utilizando la estimación anterior al tiempo actual, y otra en que se corrige la estimación
utilizando las mediciones actuales para la salida de la planta[30]. Las tablas 4.1 y 4.2 muestran
las ecuaciones de cada fase del algoritmo[29] y la Figura 4.2 resume el algoritmo completo en un
diagrama ilustrativo.
xˆ ′k = Ak −1 xˆ k −1 + Bk −1uk −1 (4.5)
S k = C k Pk′C kT + Rk (4.7)
K k = Pk′CTk S −k 1 (4.8)
xˆ k = xˆ ′k + K k ( yk − C k xˆ ′k ) (4.9)
Pk = Pk′ − K k S k K kT (4.10)
26
En las ecuaciones anteriores, es la estimación a priori de las variables de estado para el
instante k, y es la estimación final. Se denota Pk a matriz de covarianza del error en la
estimación, que es una medida estimada de la precisión en la estimación del estado para el
instante k; P'k es la estimación a priori de la misma matriz. Sk es la covarianza de innovación,
que se utiliza para calcular la ganancia de Kalman Kk.
Figura 4.2 – Diagrama del algoritmo del filtro de Kalman en su versión discreta
El filtro de Kalman posee 5 parámetros en total, y estos son Ak, Bk, Ck, Q y R. Los tres
primeros generalmente se derivan directamente de la modelación clásica determinística del
sistema. Pero esto no es posible para los parámetros Q y R, que son de obtención más engorrosa.
La matriz de covarianza R indica cuán confiables son las mediciones. Si hay demasiado ruido
en las mediciones, R es grande e indica que el filtro no debería basar la actualización del estado
demasiado en las mediciones, sino basarse más en la estimación del estado anterior. En el caso
opuesto R es pequeño, lo cual significa mediciones precisas, por lo cual pueden ser utilizadas
para actualizar el estado[29]. Más que depender del sistema a estudiar, la matriz R depende del
sensor con el cual se mide la salida del sistema. Por ello, la matriz de covarianza R suele
obtenerse tomando un conjunto de muestras reales, con el sistema en cierto estado detenido, con
las cuales se calcula la varianza del ruido en las mediciones[30]. Como las mediciones de
27
distintas variables en general no están correlacionadas, esta matriz de covarianza resulta casi
siempre diagonal.
La otra variable que es necesario inicializar es P , que es la matriz de covarianza del error en
la estimación para la iteración k=0. La matriz de covarianza del error en la estimación es una
medida de la precisión de la estimación, que se define según la siguiente ecuación[30]:
[
Pk = E ( xk − xˆ k )( x k − xˆ k )
T
] (4.11)
Los elementos de esta matriz corresponden a la covarianza entre distintas componentes del
vector de error en la estimación. Es una matriz simétrica, que contiene en la diagonal las “auto-
varianzas” de los errores de las estimaciones de cada variable de estado. Usualmente se asume
para su inicialización que los errores de las distintas variables no están correlacionados entre sí,
lo cual determina que la matriz P inicial sea diagonal. Es común completar la matriz con las cotas
superiores que se conozcan para las varianzas del error de cada estado. Esto se muestra en (4.12),
donde σi es el error máximo esperado para la estimación inicial de la variable estado i-ésima xi.
28
σ 12 0 K 0
0 σ 22 O M
Po = (4.12)
M O O 0
0 K 0 σ2
N
Otro inconveniente que presenta el filtro de Kalman es que asume que las propiedades de las
fuentes de ruido son conocidas, lo cual no siempre ocurre. Las matrices de covarianza Q y R son
las que contienen esta información, y determinan fuertemente el comportamiento del filtro. Una
inadecuada elección de estos parámetros puede resultar en una convergencia lenta, o un rango de
convergencia muy amplio, o incluso hacerlo divergir del estado real.
Un sistema no-lineal que esté sujeto a mediciones lineales, como se puede asumir para el
presente estudio, puede describirse con las ecuaciones (4.13) y (4.14), donde x es el estado, y
f(x,u) es una función no-lineal conocida con variable de entrada u.
x& = f ( x , u) (4.13)
y = Cx (4.14)
En algunos sistemas no-lineales es posible separar la función no lineal en dos partes, una
dependiente del estado del sistema y la otra de la entrada, como se muestra en (4.15). El modelo
del motor paso-a-paso permite realizar esta separación.
f ( x , u) = g ( x ) + Bu (4.15)
29
Es necesario aplicar dos pasos para poder aplicar el filtro de Kalman al sistema en (4.15),
linealización y discretización.
4.3.1. Linealización
Las series de Taylor se calculan en torno a un punto de operación previamente determinado.
Sea este punto x̂ . Si se denota por Dg al jabobiano de la función g, el aplicar serie de Taylor a la
función no-lineal de (4.15) da la siguiente expresión:
(
g ( x ) = g ( xˆ ) + Dg ( xˆ ) ⋅ ( x − xˆ ) + O ( x − xˆ ) 2 ) (4.16)
Si se desprecian los términos de orden superior, el sistema descrito por (4.13) puede re-
escribirse como:
x& = g ( xˆ ) + Dg ( xˆ ) ⋅ ( x − xˆ ) + Bu = Dg ( xˆ ) ⋅ ( x − xˆ ) + f ( xˆ , u) (4.17)
y = Cx (4.18)
Finalmente, es necesario realizar el siguiente cambio de variables para que el sistema resulte
en la descripción lineal en variables de estados:
u* = f ( xˆ , u) − Dg ( xˆ ) ⋅ xˆ (4.19)
x& = Dg ( xˆ ) ⋅ x + u* (4.20)
y = Cx (4.21)
4.3.2. Discretización
Como deseamos utilizar la versión discreta del filtro de Kalman, es necesario discretizar la
ecuación (4.20) del sistema en tiempo continuo. Para ello, se mostrará la discretización del
sistema en variables de estado genérico con parámetros constantes, mostrado en (4.22).
x& = Ax + Bu (4.22)
y = Cx (4.23)
30
Sea el T tiempo de muestreo escogido para el sistema discreto. Se asume que la entrada al
sistema pasa por un Retenedor de Orden Cero, es decir que la entrada es constante en cada
intervalo de tiempo k. Teniendo esto en consideración, se puede demostrar[31] que el sistema
continuo (4.22) corresponde exactamente al sistema discreto (4.24), con la transformación de
parámetros mostrada en la Tabla 4.4.
xk = Ad x k −1 + Bd uk −1 (4.24)
yk = C d xk (4.25)
Ad = e AT (4.26)
T
Bd = ∫e dt ⋅ B
At
(4.27)
t =0
Cd = C (4.28)
e AT
= I + AT +
( AT )
2
+ K ≈ I + AT (4.29)
2!
Con esta aproximación, se obtienen los parámetros aproximados del sistema discretizado
presentados en la Tabla 4.5.
Ad ≈ I + AT (4.30)
T2
Bd ≈ BT + AB ≈ BT (4.31)
2
Cd = C (4.32)
31
Tabla 4.6 – Aproximación lineal discretizada de un sistema no-lineal
yk = Cx k (4.34)
Este sistema sí tiene las características que permiten la aplicación del filtro de Kalman como
observador.
4.3.3. Algoritmo
El algoritmo del filtro de Kalman Extendido es simplemente el del filtro de Kalman original
aplicado al sistema linealizado y discretizado. Para ello hay que calcular en cada iteración las
matrices A y B, correspondientes al sistema linealizado en torno al estado estimado de la iteración
anterior. Como B resulta una constante, puede ser precalculada fuera de la iteración. También es
necesario adicionar el cálculo (4.36) en cada iteración de la entrada redefinida u*. Ambos
cálculos, el de A y de u*, requieren la previa evaluación del jacobiano Dg en el último estado
estimado.
Ak −1 = (I + Dg ( xˆ k −1 )T ) (4.35)
u*k −1 = f ( xˆ k −1 , uk −1 ) − Dg ( xˆ k −1 ) ⋅ xˆ k −1 (4.36)
S k = CPk′C T + Rk (4.39)
xˆ k = xˆ ′k + K k ( yk − Cxˆ ′k ) (4.41)
Pk = Pk′ − K k S k K kT (4.42)
32
esto el vector de estado aumenta su dimensión en una unidad, y consecuentemente las matrices
también aumentan de tamaño. Esto tiene el inconveniente que aumenta considerablemente la
carga computacional del filtro. Las ecuaciones sobre como realizar este procedimiento pueden
consultarse en [29].
4.3.5. Comentarios
La complejidad en el algoritmo del filtro de Kalman Extendido es bastante mayor que la del
filtro de Kalman tradicional, pues debe realizar una linealización del sistema en cada iteración.
Por ello, utiliza una mayor cantidad de trabajo matricial, lo cual conlleva un aumento
considerable en la carga computacional.
La discretización del sistema utiliza que los parámetros del sistema linealizado son
constantes. Esto es válido pese a que en cada iteración se use un sistema de parámetros distintos,
ya que el resultado de cada linealización es un sistema de parámetros constantes, cuya
aproximación es válida sólo para esa iteración.
En cuanto a la eficiencia del filtro, no se puede demostrar que este filtro sea estadísticamente
óptimo como el filtro de Kalman tradicional. Su estabilidad y rendimiento depende de las
características del sistema no-lineal donde se aplique, y para el caso específico del sistema del
motor paso-a-paso esto será analizado mediante simulaciones computacionales.
θ
ω
x= (4.43)
i
1
i
2
Tabla 4.9 – Formulación en variables de estado del modelo del motor paso-a-paso
x& = f ( x , u) = g ( x ) + Bu (4.44)
33
ω
1
((− K m ⋅ i1 ⋅ sin(5θ ) + K m ⋅ i2 ⋅ cos(5θ ) − K d ⋅ sin(20θ ) ) − B ⋅ ω − TRL )
J
g( x) = 1
(− i1 (t ) ⋅ R + ω ⋅ K m ⋅ sin(5θ ) ) (4.45)
L
1
(− i2 (t ) ⋅ R − ω ⋅ K m ⋅ cos(5θ ) )
L
0 0
0 0 V1 (t )
B= u (t ) = (4.46)
1L 0 V2 (t )
0 1 L
0 0 1 0
y = Cx C = (4.47)
0 0 0 1
0 1 0 0
Km Km
D g 2 ,1 −B J − sin(5θ ) cos(5θ )
J J
Dg ( x ) = 5ω ⋅ K m Km (4.48)
cos(5θ ) sin(5θ ) −R L 0
L L
5ω ⋅ K m K
sin(5θ ) − m cos(5θ ) 0 −R L
L L
Dg2 ,1 =
− 5K m
(i1 cos(5θ ) + i2 sin(5θ ) ) − 20 K d ⋅ cos(20θ ) (4.49)
J J
En la ecuación (4.45) el término TRL se refiere la suma del torque de carga más el resistivo
por fricción.
Las ecuaciones de la Tabla 4.9, junto con las ecuaciones (4.48) y (4.49) y el algoritmo del
EKF resumido en las Tablas 4.7 y 4.8, reúnen toda la información necesaria para la
implementación del filtro de Kalman Extendido como observador de estados para el motor paso-
a-paso de 2 fases, salvo la determinación de las matrices de covarianza Q y R.
La matriz R depende fundamentalmente del sensor con que hagan las mediciones, y por ello
para las simulaciones se asumen valores para la varianzas en las mediciones de cada sensor. Para
la matriz Q en cambio, por simplicidad se puede hacer un ajuste manual basado en la información
que sabemos del sistema. Por ejemplo, como se sabe que las corrientes de fase cambian mucho
más rápido que la posición del rotor, debiera hacerse mayor la covarianza para la corriente que
para la posición, según lo establecido en la sección 4.2.3 del presente capítulo.
Los matrices de covarianza Q y R serán ajustadas según los resultados de las simulaciones, y
se usarán los siguientes valores como referencia inicial:
34
15 0 0 0
0 15 0 0 0 .1 0
Q = R = (4.50)
0 0 1 0 0 0 .1
0 0 0 1
4.5. Comentarios
En el capítulo previo se estableció que era necesario observar la posición del rotor en el
motor paso-a-paso, para poder calcular la estimación del torque del motor. En el presente capítulo
nos abocamos a ver la posibilidad de emplear un filtro de Kalman para realizar las estimaciones,
y como el sistema a analizar era no-lineal, se tuvo que aplicar la versión extendida del filtro.
Posteriormente se desarrollaron todas las expresiones para poder aplicar el filtro de Kalman
Extendido, para finalmente analizar su implementación para el motor paso-a-paso.
35
Capítulo 5
Simulaciones y Resultados
En el presente capítulo se resumen los resultados de las simulaciones del motor paso-a-paso y
del filtro de Kalman extendido. Todas ellas fueron realizadas en Matlab versión 7.1.
36
w*km*sin()
5
ángulo
Pares de polos
Sin sin
Cos cos
1
Torque Carga [NM] -C-
Voltaje A 0.05 Km [N*m/A]
1
velocidad -> angulo
s
-K-
A Nº de vueltas
v elocidad Km*cos() Km*sin() -K-
-K-
1/J[N*m*s^2/rad]
Ra [ohms] 1 Salida (posición) -> Aceleración
1
Torque Motor
s
Ia*Km*sin()
dIa/dt -> Corriente A
-C-
1/L[H] 3
Salida (corrientes)
1
s
Ib*Km*cos()
dIb/dt -> Corriente B 2
Salida (velocidad)
A RPMs -K-
-K-
Rb [ohms]
-K-
B [N*m*s/rad]
w*Km*cos() -> friccion viscosa
2 Voltaje B
1
aceleracion -> velocidad
s
Figura 5.1 - Modelo del motor paso-a-paso de 2 fases en Simulink (anexo B.1)
Figura 5.2 – A la izquierda: Respuesta de la posición del rotor a una secuencia de pulsos
A la derecha: Respuesta de la velocidad del rotor a una secuencia de pulsos
37
Figura 5.3 – A la izquierda: Respuesta de las corrientes de fase del motor a una secuencia de pulsos
A la derecha: Respuesta del torque desarrollado, a un cambio en el torque de carga
A partir de los gráficos es posible observar que el motor sufre de sobre-oscilaciones al
efectuar cada paso, lo cual es una característica de este modo de operación. Además, soporta el
incremento de carga sin perder sincronismo (pasos), pese a que el incremento a 0.015 [N·m]
corresponde al 83% del torque máximo de contención (holding torque) observado para el
modelo.
Figura 5.4 – A la izquierda: Respuesta de la posición del rotor a entradas sinusoidales (microstepping).
A la derecha: Respuesta de la velocidad del rotor a entradas sinusoidales (microstepping)
38
Figura 5.5 – A la izquierda: Respuesta de las corrientes de fase del entradas sinusoidales (microstepping)
A la derecha: Respuesta del torque desarrollado, a un cambio en el torque de carga en modo
microstepping
Al comparar la respuesta del modo microstepping con la del modo normal, que logra el
mismo desplazamiento angular en el mismo tiempo, se observa que todas las variaciones en las
distintas componentes del estado se producen más suavemente. En este caso no existe sobre-
oscilación en la posición, las presentes en la velocidad y en el torque son mucho más moderadas.
Mediante distintas pruebas de las simulaciones, se llegaron a los valores de las matrices de
covarianza Q, R y Po mostrados en la Tabla 5.2. Los otros parámetros la simulación, que son la
frecuencia de muestreo, el estado inicial, la estimación del estado inicial, y la desviación estándar
del ruido blanco agregado a las mediciones de corriente, también se muestran en la tabla.
39
Matriz de covarianza de ruido en 0 .1 0
R R =
la medición 0 0 .1
x o = (0 0 0 0 )
T
xo Estado inicial
xˆ o = (0 0 0 0 )
T
x̂ o Estimación del estado inicial
0.01 0 0 0
Matriz de covarianza del error de 0 0.01 0 0
Po Po =
la estimación inicial 0 0 0.625 0
0
0 0 0 . 625
Se simuló el filtro de Kalman simultáneamente con el modelo del motor paso-a-paso, este
último con los mismos parámetros y entradas empleadas en la sección 5.11, incluyendo al
incremento del torque. Los resultados de las estimaciones se muestran en los gráficos de la Figura
5.6, que incluyen el rango de encontrar el estado con un 95% de probabilidad (según la variable P
del filtro de Kalman).
Figura 5.6 – Arriba a la izquierda: Posiciones reales y estimadas. Arriba a la derecha: Error en la
estimación de la posición. Abajo a la izquierda: Error en la estimación de la velocidad.
Abajo a la derecha: Error en la estimación de la corriente en la fase A
En la Figura 5.7 se muestra la estimación de la corriente de fase b, junto con las mediciones
simuladas.
40
Figura 5.7 – Corriente de fase medida, estimada y real
De los resultados se puede apreciar que el filtro logra estimar correctamente todos los
estados del motor paso-a-paso. En particular la posición estimada tiene un error máximo del 20%
del tamaño del paso fundamental del motor.
41
10 5 0 0 0
0 10 5 0 0
Q=
0
(5.1)
0 0 1
0 1
0 0
A partir de la Figura 5.8 se puede observar que la posición estimada sigue convergiendo,
incluso cuando se considera a la carga como nula. De la Figura 5.8b se desprende que aunque el
observador de esta forma es incapaz de estimar el valor medio del torque producido, si detecta los
cambios abruptas transitorios.
Tabla 5.3 – Parámetros simulación filtro de Kalman Extendido para carga desconocida
Parámetro Descripción Valor
f Frecuencia de muestreo [Hz] 250
Desviación de ruido de
σcorriente 1.8
medición corrientes [mA]
10 −3 0 0 0 0
0 10 −3 0 0 0
Q Matriz de covarianza de ruido Q= 0 0 1 0 0
en el proceso 0 0 0 1 0
0 0 0 0 10
42
x o = (0 0 0 0 0 )
T
xo Estado inicial
xˆ o = (0 0 0.25 0 0 )
T
x̂ o Estimación del estado inicial
1 0 0 0 0
0 1 0 0 0
Po Matriz de covarianza del error Po = 0 0 1 0 0
de la estimación inicial
0 0 0 1 0
0 10
0 0 0
En las Figura 2.1 se muestran los resultados de las simulaciones, obtenidas utilizando el
modo microstepping del motor paso-a-paso. Se observa que, pese a que la estimación del torque
de carga realizada por el filtro de Kalman no converge, sí lo hacen el resto de las variables de
estado; lo que es más importante, el torque calculado a partir de la ecuación (3.28) sí converge al
torque real desarrollado por el motor.
Figura 5.9 – Arriba a la izquierda: Posiciones reales y estimadas. Arriba a la derecha: Torque
desarrollado real y estimado utilizando ecuación de torque.
Abajo a la izquierda: Error en la estimación de la posición.
Abajo a la derecha: Torque desarrollado real y carga estimada
43
5.4. Comentarios
Como se ha podido observar en este capítulo, es posible estimar el torque desarrollado por
motor paso-a-paso utilizando el filtro de Kalman Extendido. Aunque se empleó el filtro para
estimar el torque de carga directamente, éste no convergió al valor esperado. Sin embargo, la
inclusión de esta variable en el filtro permitió la correcta estimación del torque desarrollado,
utilizando la ecuación de torque aplicada a las estimaciones de posición y corrientes obtenidas.
44
Capítulo 6
Conclusiones
6.1. Recapitulación del trabajo realizado
Para iniciar el desarrollo del instrumento estimador de torque en tiempo real, primero se
efectuó un estudio teórico sobre los motores paso-a-paso, el cual derivó a un modelo no-lineal del
comportamiento electromecánico del mismo. Con este modelo se encontró que la relación
corriente-torque, piedra angular para el desarrollo del instrumento deseado, era dependiente
además de la posición angular del rotor. Como no se deseaba depender de mediciones de
posición, se buscó un observador que fuera capaz de estimar ese estado del sistema, incluso bajo
condiciones de ruido de las mediciones. La versión para sistemas no-lineales del Filtro de
Kalman, llamada Filtro de Kalman Extendido, fue elegida como el observador adecuado. Tanto el
modelo del motor, como el filtro, fueron implementados con funciones de bajo nivel, y simulados
en Matlab, con el fin de analizar su comportamiento y permitir una posterior implementación del
código en un PIC o DSP, para el desarrollo del instrumento.
El utilizar el filtro de Kalman como observador resulta favorable, pues está diseñado para
manejar sistemas con señales ruido aleatorio en el proceso y en la medición. Por otra parte, el
hecho de tener que realizar linealizaciones constantemente en cada iteración, hace del Filtro de
Kalman Extendido un algoritmo lento, con mucha carga de procesamiento.
45
predictivo del motor. Se podrían detectar fallas incipientes antes de que se extiendan y detengan
el proceso productivo. Además, el conocer los puntos de operación de alto torque podría ayudar a
determinar si en algún momento el motor se “salta” algún paso, perdiendo sincronización.
Por otra parte, como la aplicación desarrollada utiliza un filtro de Kalman que produce
estimaciones de todos los estados, podría adaptarse para proporcionar información online sobre la
posición y velocidad del motor, sin necesidad usar sensores de posición.
Otro proyecto interesante sería utilizar retroalimentación de los estados estimados del sistema
para mejorar las características dinámicas del motor, con respecto a las que se tienen bajo el
esquema de control por lazo abierto.
A su vez, el filtro de Kalman es una herramienta eficaz para estimar estados no accesibles de
sistemas sometidos a contaminación por ruido que sigan distribuciones normales con valor medio
nulo, tanto sean ruidos del proceso como de medición.
En este contexto, en esta memoria se encontró que la versión extendida del filtro de Kalman
se puede emplear en los motores paso-a-paso para estimar los estados posición y velocidad del
rotor, a partir de mediciones de corrientes y voltajes de fases.
Finalmente, creo que es importante que estas técnicas o tecnologías formen parte de los
programas de asignaturas de la carrera de Ingeniería Civil Electricista de nuestra universidad,
tales como “Control de Sistemas” u otros, puesto que son herramientas sumamente útiles, que
todo ingeniero debiera conocer, y que a la fecha no están incluidas en dichos programas.
46
Referencias
[8] BEHAL, A., “et al.” (2000): Sensorless rotor velocity tracking control of the
permanent magnet stepper motor. En: Proceedings of the 2000 IEEE International
Conference on Control Applications, pp. 150-155.
47
[10] WALE, J. y POLLOCK, C. (1999): A Low-Cost Sensorless Technique for Load
Torque Estimation in a Hybrid Stepping Motor. En: IEEE Transactions on
Industrial Electronics. Vol. 46, pp. 833-841.
[12] DE CARVALHO, “et al.” (2003): A DSP based torque meter for induction
motors. En: The 29th Annual Conference of the IEEE Industrial Electronics
Society 2003. IECON '03. Vol. 1, pp. 414- 418.
[13] KLIMAN, “et al.” (1996); A demonstration of a sensorless torque meter for AC
motors. En: Industry Applications Conference, Thirty-First IAS Annual Meeting,
IAS '96, Conference Record of the 1996 IEEE. Vol. 1, pp. 633-637.
[14] SHAH, Chirayu (2004): Sensorless Control of Stepper Motor using Kalman Filter.
Tésis (Master of Science in Electrical Engineering). Cleveland State University,
Department of Electrical and Computer Engineering. [en línea]
<http://academic.csuohio.edu/embedded/publications.html> [consulta: 20
diciembre 2006]
[17] JONES W., Douglas (1998): “Control of Stepping Motors, A Tutorial", The
University of Iowa, Department of Computer Science, [en línea]
<http://www.cs.uiowa.edu/~jones/step> [consulta: 20 diciembre 2006]
[19] GUMMA, Saikiran. (2004): A Radial Basis Function Neuro Controller for
Permanent Magnet Stepper Motor. Tésis (Master of Science in Electrical
Engineering). Cleveland State University, Department of Electrical and Computer
Engineering. [en línea]
<http://academic.csuohio.edu/embedded/publications.html> [consulta: 19 enero
2007]
[21] KENJO, Takashi (1984): Stepping motors and their microprocessor controls. 2da
Edición. Oxford University Press. ISBN 019-8-59385-6
48
[22] ACARNLEY, Paul (1982): Stepping motors: a guide to modern theory and
practice. Peter Peregrinus Ltd. ISBN 0-86341-027-8
[25] ROMO L., Jorge (2002): Motores Eléctricos en Aplicaciones de Control, En:
Apuntes de curso de perfeccionamiento para UnderFire.
[26] SANZ F., Javier (2002): Máquinas Eléctricas. Cap.9. Prentice Hall. ISBN 8-
42053-391-2
[27] KUPHALDT, T. (2006): Lessons In Electric Circuits. Vol. II – AC. [en línea]
<http://www.ibiblio.org/obp/electricCircuits/AC/index.html> [consulta: 7 enero
2007]
[28] JACKSON, J. D. (1999): Classical Electrodynamics. New York. John Wiley &
Sons. 3era Edición. ISBN 047-1-30932-X
[29] PERSSON, Jan (2005): Innovative standstill position detection combined with
sensorless control of synchronous motors. Tésis (Grade de Docteur Ès Sciences).
École Polytechnique Fédérale de Lausanne (EPFL), Institut de production et
robotique (IPR), Suiza. [en línea] <http://library.epfl.ch/en/theses> [consulta: 6
mayo 2007]
49
Anexo A - Códigos Matlab
A.1 stepper_rbl.m
Es una función que a partir del estado x, y los parámetros del motor, genera el estado x´.
Llama a la función genera_voltajes.m para generar la entrada para el motor, elegible entre los
modos full-step y microstepping.
%Definicion de estado:
%x=[theta; w ; ia ; ib]
%x=[ x(1); x(2); x(3); x(4)]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%CÁLCULO DE LA DERIVADA DEL ESTADO %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%theta punto es omega
xdot(1)=x(2);
% omega punto es alfa: (acá se puede incluir o no el término con Kd)
xdot(2)=(-Km*x(3)*sin(x(1)*N/2) +Km*x(4)*cos(x(1)*N/2) -Kd*sin(x(1)*4*N/2)
-B_roce*x(2) -(torque_carga(t)))/J;
%ia punto:
xdot(3)=(Va-R*x(3)+Km*x(2)*sin((N/2)*x(1)))/L;
%ib punto:
xdot(4)=(Vb-R*x(4)-Km*x(2)*cos((N/2)*x(1)))/L;
A.2 run_stepper.m
Es una función que simula un motor paso-a-paso, utilizando para ello el código
stepper_rbl.m. Define los parámetros del motor, y utiliza el función de Matlab ode23 para
resolver la ecuación diferencial. Posteriormente grafica los estados del motor: la posición, la
velocidad y las corrientes de fase. También calcula y grafica el torque desarrollado.
%-------------------------SISTEMA REAL------------------------------------%
%Parámetros del Motor paso-a-paso:
%declarar las variables globales (los parametros constantes del motor)
50
global Km Kd R L N B_roce J Vnom f TcargaRef tf modo_stepper
disp('Simulación motor paso-a-paso:'); disp(' ');
echo on; %Define parámetros motor(en MKS)
Km=0.1; %N*m/A (Constante de torque)
Kd=Km/20;
R=20; %Ohms
L=0.03; %Henrys
N=10; %Polos del rotor (N=2*P). P es el número de pares
de polos
B_roce=1e-4; %N*m*s/rad
J=5e-5; %N*m*s^2/rad
Vnom=5; %Volts
f=1/4; %Hz (Frecuencia pulsos: es el periodo del tren de
pulsos, cada pulso individual es de f'=1 (o f'=2 en halfstep))
%obs: f=1/4*20; es la frec máxima para
TcargaRef=0.01;
TcargaRef=0.01; %N*m (Torque de carga de referencia, ver
torque_carga.m)
modo_stepper=0; %Modo del motor para entrada de trenes de pulso (1
o 1/2), o para entrada sinusoidal "microstepping" (0 o -1)
%modo 2 para V=cte, y 3 para V=0 (para ver holding
torque y detent)
%Parámetros de la simulación:
to=0; tf=(1/f)*N/2; %Tiempos inicial y final (antes tf=20 para f=1/4)
muestras=10000; %Nº de muestras a tomar
delta_t=tf/muestras; %Intervalo del tiempo discreto (delta_t=0.002 <=>
fs=500Hz frecuencia de muestreo)
echo;
tspan=[0:delta_t:tf]; % Lapso temporal (time span)
%tspan=[to tf]; % Lapso temporal (time span)
%{
% Grafica las variables de estado
figure(1);
51
plot(t,x(:,1)/(2*pi));
xlabel('Tiempo (s)');
ylabel('Estado posicion Theta (en Vueltas)');
title('Respuesta del Motor paso-a-paso');
grid on;
figure(2);
plot(t,x(:,2)*(60/(2*pi)));
xlabel('Tiempo (s)');
ylabel('Estado velocidad w (RPMs)');
title('Respuesta del Motor paso-a-paso');
grid on;
figure(3);
plot(t,x(:,3),'k',t,x(:,4),'k:');
xlabel('Tiempo (s)');
ylabel('Estado ia e ib(A)');
title('Respuesta del Motor paso-a-paso');
legend('Corriente Ia','Corriente Ib',0);
grid off;
%figure;
%plot(t,x(:,4))
%xlabel('Tiempo (s)')
%ylabel('Estado ib (A)')
%title('Respuesta del Motor paso-a-paso')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Grafica la estimación del torque desarrollado%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(4);
plot(t,Tm,'b--');
hold on;
plot(t,Tcarga,'g');
grid off;
title('Torque desarrollado v/s tiempo');
legend('Torque motor','Torque carga',0);
xlabel(['Tiempo (s)']);
ylabel('Torque Tm [N*m]');
hold off;
disp('Analisis de Posicion:');
disp(['Posicion Mínima (en fraccion de vueltas): '
num2str(min(x(:,1)*(1/(2*pi))))]);
disp(['Posicion Máximo (en fraccion de vueltas): '
num2str(max(x(:,1)*(1/(2*pi))))]);
disp(' ');
disp('Analisis de Velocidad:');
disp(['Velocidad esperada dada la frecuencia: ' num2str(60*4*f/(2*N)) '
RPMs']);
disp(['Velocidad Mínima: ' num2str(min(x(:,2)*(60/(2*pi)))) ' RPMs']);
disp(['Velocidad Máximo: ' num2str(max(x(:,2)*(60/(2*pi)))) ' RPMs']);
disp(['Velocidad Media : ' num2str(mean (x(:,2))*(60/(2*pi))) ' RPMs']);
disp(' ');
disp('Analisis de Torque:');
disp(['Torque Mínimo: ' num2str(min(Tm)) ' N*m']);
disp(['Torque Máximo: ' num2str(max(Tm)) ' N*m']);
disp(['Torque Medio : ' num2str(mean (Tm)) ' N*m']);
disp(' ');
%}
52
disp('Fin de simulación del motor paso-a-paso.');disp(' ');
A.3 torque_carga.m
Esta función define el torque de carga en el tiempo, para usarla con stepper_rbl.m.
%Nulo
%tcarga=0;
%Constante
%tcarga=t-t+ TcargaRef;
%tcarga=TcargaRef;
%Torque In-crecendo
%tcarga=6*TcargaRef*t/(2/f);
%%{
%Carga + Torque Brusco (*2)
tcarga=TcargaRef;
if(10<t && t<11)
%(4<t && t<10)
tcarga=1.5*TcargaRef; %aguanta hasta 1.7
end
%}
%{
%Torque Brusco
tcarga=0;
if(4<t && t<10)
tcarga=TcargaRef;
end
%}
tcarga=20*Tl*t/(2/f);
A.4 genera_voltajes.m
Esta función genera las señales de voltajes de entrada para el motor. Según el modo de
operación, genera las señales del tipo Full-Step, Half-Step y Microstepping. Se utiliza en
run_stepper_rbl.m.
53
function V=genera_voltajes(t)
global Vnom f modo_stepper
V=[];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Definición de las entradas:%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%Entrada constante%%%%
%(con modo_stepper=2):
%%%%Trenes de pulsos%%%%%
%MODO ONE-STEP (con modo_stepper=1):
%Aca la "vuelta" se divide en 4 zonas, y se usa el siguiente esquema:
%(10,01,-10,0-1,...)
%MODO HALF-STEP (con modo_stepper=1/2):
%Aca la "vuelta" se divide en 8 zonas, y se usa el siguiente esquema:
%(10,11,01,-11,-10,-1-1,0-1,1-1,...)
%%%%Entrada sinusoidal%%%
%(con modo_stepper=0):
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Va=0; Vb=0;
if(modo_stepper==1)
if ((abs(angulo)<= (pi/4)) ||(abs(angulo-2*pi)<= (pi/4)) )
Va=Vnom;
end
54
end
if(modo_stepper==1/2)
if ((abs(angulo)-pi/8)<= (3*pi/8)) ||(abs(angulo-2*pi-pi/8)<= (3*pi/8))
Va=Vnom;
end
if(modo_stepper==0)
Va=Vnom*cos(angulo);
Vb=Vnom*sin(angulo);
end
if(modo_stepper==(-1))
if(3<t && t<5)
t=3;
end
if(t>=5)
t=t-2;
end
angulo=rem(2*pi*f*t,2*pi);
Va=Vnom*cos(angulo);
Vb=Vnom*sin(angulo);
end
if(modo_stepper==2)
Va=Vnom;
Vb=0;
end
if(modo_stepper==3)
Va=0;
Vb=0;
end
V=[Va, Vb];
55
A.5 kalman_iteracion_v2.m
Implementa un filtro de Kalman lineal discreto. Recibe los parámetros del sistema lineal, más
el vector estimación del estado xest(k-1), y la matriz de covarianza del error en la estimación P(k-
1), y retorna los valores actualizados de xest(k) y P(k).
A.6 ejecucion_kalman_codigo.m
Genera un sistema lineal discreto, contaminado por una señal de ruido gaussiana en la
entrada y en la salida, para ejecutar y probar un filtro de Kalman usando la función
kalman_iteracion_v2.m. Simula el sistema el tiempo determinado el parámetro
tiempo_simulación (en segundos), y luego de cada tiempo de muestreo T calcula los nuevos
estados, y estados estimados por el filtro de Kalman. Posteriormente grafica los estados reales y
estimados, el error en las estimaciones, y también el rango donde debería encontrarse el estado
real, en torno al estimado, con una probabilidad del 95%.
clear all;
%Prueba del Filtro de Kalman Discreto (Versión 2)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Sistema Distreto Simple (2x2): %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%x(k+1)=A*x(k)+B*u(k) %
%y(k)=C*x(k) %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Parametros simulación:
tiempo_simulacion=30 %tiempo de simulacion [s]
T=0.01 %T=Tiempo de muestreo[s]
muestras=tiempo_simulacion/T
56
P0=diag([12*12;15*15]) %Covarianza del error del estado inicial ([m];[m/s])
sigmaplanta=10 %desviacion de la aceleración (ruido) (m/(s)^2) (para
covarianza de ruido del proceso)
sigmamedicion=10 %desviacion estandar de las mediciones (m) (para
covarianza de ruido de medición)
%----------------------------------SISTEMA---------------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%EJEMPLO: Partícula en 1D %
%sometida a acel. cte %
%con Masa unitaria. %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Partícula acelerando a 1[m/(s^2)]
%Partiendo en el origen x=0, con Vx=10[m/s]
%posición: x(k+1)=x(k)+dt*v(k)+(dt^2)/2*a(k)
%velocidad: v(k+1)=v(k) +dt*a(k)
%Estado Inicial:
%x0=[10;-10]
%Parámetros sistema:
A=[1 T;0 1]
B=[T^2, 0; T, 0]
Btest=[0, 0; T, 0]; %%%[prueba1] parametro del sistema real con aprox en la
discretización (T^2=0)
C=[1,0] %[1,0]:la posición es observable, no la velocidad (asi el sistema es
observabe) <--seguro?
%------------------------------SISTEMA RUIDOSO-----------------------------
%sigmaplanta=0.1;
%sigmamedicion=0.1;
%------------------------------FILTRO DE KALMAN----------------------------
%Parámetros del Filtro
%Q=eye(2) %matriz de covarianza del ruido del sistema (=R1)
Q=diag([sigmaplanta^2 sigmaplanta^2])
%R=eye(1) %matriz de covarianza del ruido de la medición (=R2)
R=diag([sigmamedicion^2])
G=B(:,1); %Transforma el ruido de acel a ruido de sistema.
%Variables del filtro
xest=[]; %estimación
57
S=[]; % covarianza de innovación
P=[]; % covarianza del sistema
%Estimación Inicial
xest=[0;0]
%---------------------------------EXTRAS-----------------------------------
xestmatriz=[];
xestmatriz(:,1)=xest;
Pmatriz=[];
Pmatriz(:,1)=diag(P);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Grafica la posición real y la estimada%%%%%%%%%%%%%%%%%%
figure(5);
plot(x(1,:),'b');
hold on;
plot(salidareal,'r+');
plot(xestmatriz(1,:),'g');
58
plot(xestmatriz(1,:)-2*sqrt(Pmatriz(1,:)),'-y'); %Grafica rango donde
debiera estar el estado real
plot(xestmatriz(1,:)+2*sqrt(Pmatriz(1,:)),'-y'); %Grafica rango donde
debiera estar el estado real
grid on;
59
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
A.7 ejecucion_EKF_codigo.m
Este código implementa el filtro de Kalman Extendido, considerando al torque de carga
como una entrada al modelo. Utiliza la función kalman_iteracion_v2.m.
%----------------------------------SISTEMA---------------------------------
%El estado fue calculado previamente y existe en el workplace
%Necesito los parámetros del sistema estimado, pero son calculados en cada
%iteración salvo por B y C
B=[0 0; 0 0; 1/L 0; 0 1/L]
C=[0 0 1 0; 0 0 0 1]
%--------------------------------------------------------------------------
%Parametros simulación:
%tiempo_simulacion=t(length(t)) %tiempo de simulacion [s]
%delta_t %Tiempo de muestreo[s]
muestras=length(t);
%---------------------------FILTRO DE KALMAN-------------------------------
%-----------------Parámetros del Filtro------------------------------------
P0=diag([0.01, 0.01, 0.25*0.25, 0.25*0.25]) %Covarianza del error del
estado inicial ([m];[m/s])
%sigmaplanta=10 %desviacion del modelo (ruido) (en
distintas unidades) para covarianza de ruido del proceso Q
%Q=eye(4) %matriz de covarianza del ruido del
sistema
%Q=diag([sigmaplanta^2, sigmaplanta^2, sigmaplanta^2, sigmaplanta^2])
%Q=diag([1, 10, 1, 1]) (feo se sale)
%Q=diag([1, 1, 1, 1])
%Q=diag([10, 1, 1, 1])
Q=diag([1e5, 1e5, 1, 1])
%Q=diag([1e3, 1, 1, 1])
60
Rcov=diag([0.1 0.1])
%--------------------------------------------------------------------------
%---------------------------------EXTRAS-----------------------------------
xestmatriz=[];
xestmatriz(1,:)=xest;
P_diagonal=[]; %para grabar los valores en la diagonal de P
(autovarianzas)
P_diagonal(1,:)=diag(P);
61
Dg=[Dg ; Dg21, -B_roce/J, -(Km/J)*sin((N/2)*pos_est),
(Km/J)*cos((N/2)*pos_est) ];
Dg=[Dg ; ((N/2)*w_est*Km/L)*cos((N/2)*pos_est),
(Km/L)*sin((N/2)*pos_est), -R/L, 0 ];
Dg=[Dg ; ((N/2)*w_est*Km/L)*sin((N/2)*pos_est), -
(Km/L)*cos((N/2)*pos_est), 0 ,-R/L];
%%%%%%%%%%%%%%%%
func_f(2)=(-Km*xest(3)*sin(xest(1)*N/2)+Km*xest(4)*cos(xest(1)*N/2)-
B_roce*xest(2) -Kd*sin(xest(1)*4*N/2) -(TcargaRef*0))/J;
%ia punto:
func_f(3)=(Va-R*xest(3)+Km*xest(2)*sin((N/2)*xest(1)))/L;
%ib punto:
func_f(4)=(Vb-R*xest(4)-Km*xest(2)*cos((N/2)*xest(1)))/L;
%%%%%%%%%%%%%%%%
%%%u_asterisco%%
u_asterisco=(func_f)' - Dg*(xest') ;
%vector (columna) de entrada u*
%%%%%%%%%%%%%%%%
%%%%%%%%extras al sistema%%%%%%%%%%%%%%%%%%%%%
(para grabar valores)
xestmatriz(k,:)=xest;
%guarda los valores de estimaciones para graficar xest
P_diagonal(k,:)=diag(P);
%guarda la diagonal para graficar P
if(k==(round(muestras*0.25)))
62
disp('Kalman:25%')
end
if(k==(round(muestras*0.5)))
disp('Kalman:50%')
end
if(k==(round(muestras*0.75)))
disp('Kalman:75%')
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Estimación del torque desarrollado por el motor%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Tm_est=Km*(-xestmatriz(:,3).*sin((N/2)*xestmatriz(:,1)) +
xestmatriz(:,4).*cos((N/2)*xestmatriz(:,1))) -
Kd*sin((4*N/2)*xestmatriz(:,1));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Grafica la posición real y la estimada%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(5);
plot(t,x(:,1)/(2*pi),'k');
hold on;
%plot(salidareal,'r+');
plot(t,xestmatriz(:,1)/(2*pi),':k');
plot(t,xestmatriz(:,1)/(2*pi)-2*sqrt(P_diagonal(:,1))/(2*pi),'--k');
%Grafica rango donde debiera estar el estado real
plot(t,xestmatriz(:,1)/(2*pi)+2*sqrt(P_diagonal(:,1))/(2*pi),'--k');
%Grafica rango donde debiera estar el estado real
grid off;
63
plot(t,+2*sqrt(P_diagonal(:,1))/(2*pi),'-y'); %Grafica rango
donde debiera estar el estado real con 95% de probabilidad
hold off;
grid off;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Grafica las corrientes Ia reales y las estimadas%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(9);
plot(t,x(:,3),'b'); %'.'
hold on;
plot(t,salidareal(:,1),'r+');
plot(t,xestmatriz(:,3),'g');
plot(t,xestmatriz(:,3)-2*sqrt(P_diagonal(:,3)),'-y'); %Grafica rango donde
debiera estar el estado real
plot(t,xestmatriz(:,3)+2*sqrt(P_diagonal(:,3)),'-y'); %Grafica rango donde
debiera estar el estado real
64
grid on;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Grafica las corrientes Ib reales y las estimadas%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(10);
plot(t,x(:,4),'b'); %'.'
hold on;
plot(t,salidareal(:,2),'r+');
plot(t,xestmatriz(:,4),'g');
plot(t,xestmatriz(:,4)-2*sqrt(P_diagonal(:,4)),'-y'); %Grafica rango donde
debiera estar el estado real
plot(t,xestmatriz(:,4)+2*sqrt(P_diagonal(:,4)),'-y'); %Grafica rango donde
debiera estar el estado real
grid on;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Grafica el error en la coriente Ia%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(11);
plot(t,x(:,3)-xestmatriz(:,3),'r');
hold on;
plot(t,-2*sqrt(P_diagonal(:,3)),'-y'); %Grafica rango donde debiera estar
el estado real
plot(t,2*sqrt(P_diagonal(:,3)),'-y'); %Grafica rango donde debiera estar el
estado real
grid on;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Grafica el error en la coriente Ib%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(12);
plot(t,x(:,4)-xestmatriz(:,4),'r');
hold on;
plot(t,-2*sqrt(P_diagonal(:,4)),'-y'); %Grafica rango donde debiera estar
el estado real
65
plot(t,2*sqrt(P_diagonal(:,4)),'-y'); %Grafica rango donde debiera estar el
estado real
grid on;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Grafica la estimación del torque desarrollado%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(13);
plot(t,Tm,'k',t,Tm_est,'-m',t,Tcarga,'.c');
grid on;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Grafica el error en la estimación del torque%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(14);
plot(t,Tm-Tm_est,'b');
hold on;
grid on;
A.8 ejecucion_EKF2_codigo.m
Este código implementa el filtro de Kalman Extendido, considerando al torque de carga
como un parámetro a estimar. Utiliza la función kalman_iteracion_v2.m.
%----------------------------------SISTEMA---------------------------------
66
%El estado fue calculado previamente y existe en el workplace
%Necesito los parámetros del sistema estimado, pero son calculados en cada
%iteración salvo por B y C
B=[0 0; 0 0; 1/L 0; 0 1/L];
C=[0 0 1 0; 0 0 0 1];
%(Definicion del estado: x=[theta, w, ia, ib] )
%%%%Extención matrices para estado extendido con torque%%%%
%%%La matriz B del sistema linealizado extendido%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
B=[B; 0 0] %no se ocupa
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%La matriz C del sistema linealizado extendido%%%%%%%%
C=[C, [0;0]]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%--------------------------------------------------------------------------
%Parametros simulación:
%tiempo_simulacion=t(length(t)) %tiempo de simulacion [s]
%delta_t %Tiempo de muestreo[s]
muestras=length(t);
%---------------------------FILTRO DE KALMAN-------------------------------
%-----------------Parámetros del Filtro------------------------------------
P0=diag([1, 1, 1*1, 1*1, 10]) %Covarianza del error del estado inicial
%sigmaplanta=10 %desviacion del modelo (ruido) (en
distintas unidades) para covarianza de ruido del proceso Q
%Q=eye(4) %matriz de covarianza del ruido del
sistema
%Q=diag([sigmaplanta^2, sigmaplanta^2, sigmaplanta^2, sigmaplanta^2])
Q=diag([1e-3, 1e-3, 1, 1, 1e-3])
%Q=diag([1e-3, 1e-3, 1, 1, 1e-3]) (funca para torque directo)
67
%---------------------------------EXTRAS-----------------------------------
xestmatriz=[];
xestmatriz(1,:)=xest;
P_diagonal=[]; %para grabar los valores en la diagonal de P
(autovarianzas)
P_diagonal(1,:)=diag(P);
68
func_f=[];
%theta punto es omega
func_f(1)=xest(2);
% omega punto es alfa: (acá se puede incluir o no el término con Kd)
%func_f(2)=(-Km*xest(3)*sin(xest(1)*N/2)+Km*xest(4)*cos(xest(1)*N/2)-
B_roce*xest(2)-(torque_carga(t(k-1))))/J;
%OJOOOO con lo anterior!!!!! no deberia conocer el valor de la carga!!!
func_f(2)=(-Km*xest(3)*sin(xest(1)*N/2)+Km*xest(4)*cos(xest(1)*N/2) -
Kd*sin(4*(N/2)*xest(1)) -B_roce*xest(2) - TcargaRef)/J;
%ia punto:
func_f(3)=(Va-R*xest(3)+Km*xest(2)*sin((N/2)*xest(1)))/L;
%ib punto:
func_f(4)=(Vb-R*xest(4)-Km*xest(2)*cos((N/2)*xest(1)))/L;
%Torque punto:
%func_f(5)=0;
%equivale a extender el B
%%%%%%%%%%%%%%%%
%%%u_asterisco%%
u_asterisco=(func_f)' - Dg*(xest(1:4)') ;
%vector (columna) de entrada u*
u_asterisco=[u_asterisco;0];
%%%%%%%%%%%%%%%
%%%%%%%%extras al sistema%%%%%%%%%%%%%%%%%%%%%
(para grabar valores)
xestmatriz(k,:)=xest;
%guarda los valores de estimaciones para graficar xest
P_diagonal(k,:)=diag(P);
%guarda la diagonal para graficar P
if(k==(round(muestras*0.25)))
disp('Kalman:25%')
end
if(k==(round(muestras*0.5)))
disp('Kalman:50%')
end
if(k==(round(muestras*0.75)))
69
disp('Kalman:75%')
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Estimación del torque desarrollado por el motor%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Tm_est=Km*(-xestmatriz(:,3).*sin((N/2)*xestmatriz(:,1)) +
xestmatriz(:,4).*cos((N/2)*xestmatriz(:,1))) -
Kd*sin((4*N/2)*xestmatriz(:,1));
%El torque real:
Tm=Km*(-x(:,3).*sin((N/2)*x(:,1)) + x(:,4).*cos((N/2)*x(:,1))) -
Kd*sin((4*N/2)*x(:,1));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Grafica la posición real y la estimada%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(5);
plot(t,x(:,1)/(2*pi),'b');
hold on;
%plot(salidareal,'r+');
plot(t,xestmatriz(:,1)/(2*pi),'--g');
%plot(t,xestmatriz(:,1)/(2*pi)-2*sqrt(P_diagonal(:,1))/(2*pi),'-y');
%Grafica rango donde debiera estar el estado real
%plot(t,xestmatriz(:,1)/(2*pi)+2*sqrt(P_diagonal(:,1))/(2*pi),'-y');
%Grafica rango donde debiera estar el estado real
grid off;
70
%%{
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Grafica la velocidad real y la estimada%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(7);
plot(t,x(:,2)*60/(2*pi),'b');
hold on;
plot(t,xestmatriz(:,2)*60/(2*pi),'g');
%plot(t,xestmatriz(:,2)*60/(2*pi)-2*sqrt(P_diagonal(:,2))*60/(2*pi),'-y');
%Grafica rango donde debiera estar el estado real
%plot(t,xestmatriz(:,2)*60/(2*pi)+2*sqrt(P_diagonal(:,2))*60/(2*pi),'-y');
%Grafica rango donde debiera estar el estado real
grid off;
71
%{
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Grafica las corrientes Ib reales y las estimadas%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(10);
plot(t,x(:,4),'b'); %'.'
hold on;
plot(t,salidareal(:,2),'r+');
plot(t,xestmatriz(:,4),'g');
plot(t,xestmatriz(:,4)-2*sqrt(P_diagonal(:,4)),'-y'); %Grafica rango donde
debiera estar el estado real
plot(t,xestmatriz(:,4)+2*sqrt(P_diagonal(:,4)),'-y'); %Grafica rango donde
debiera estar el estado real
grid off;
%{
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Grafica el error en la coriente Ib%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(12);
plot(t,x(:,4)-xestmatriz(:,4),'r');
hold on;
plot(t,-2*sqrt(P_diagonal(:,4)),'-y'); %Grafica rango donde debiera estar
el estado real
plot(t,2*sqrt(P_diagonal(:,4)),'-y'); %Grafica rango donde debiera estar el
estado real
grid off;
72
hold off;
%}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Grafica la estimación del torque desarrollado%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(13);
plot(t,Tm_est,'g',t,Tm,'b',t,Tcarga,'c');
hold on;
grid off;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Grafica el error en la estimación del torque%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(14);
plot(t,Tm-Tm_est,'b');
hold on;
grid off;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Grafica el torque carga, real y el estimado por kalman%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(15);
plot(t,Tm ,'b', t, Tcarga, 'c');
hold on;
%plot(t,xestmatriz(:,5) +TcargaRef,'g');
plot(t,xestmatriz(:,5) ,'g');
%plot(t,xestmatriz(:,5) +TcargaRef -2*sqrt(P_diagonal(:,5)),'-y'); %Grafica
rango donde debiera estar el estado real
%plot(t,xestmatriz(:,5) +TcargaRef +2*sqrt(P_diagonal(:,5)),'-y'); %Grafica
rango donde debiera estar el estado real
grid off;
73
%plot(t,+2*sqrt(P_diagonal(:,5)),'-y'); %Grafica rango donde
debiera estar el estado real con 95% de probabilidad
hold off;
grid off;
74
implementado en Simulink:
B.1 sistema_stepper_rbl.mdl
5
ángulo
Pares de polos
Sin sin
Cos cos
1 -C-
Torque Carga [NM]
Voltaje A 0.05 Km [N*m/A]
1
velocidad -> angulo
s
-K-
A Nº de vueltas
v elocidad Km*cos() Km*sin() -K-
-K-
1/J[N*m*s^2/rad]
Ra [ohms] 1 Salida (posición) -> Aceleración
1
Torque Motor
s
Ia*Km*sin()
dIa/dt -> Corriente A
-C-
3
75
1/L[H]
Salida (corrientes)
1
s
Ib*Km*cos()
dIb/dt -> Corriente B Salida (velocidad) 2
A RPMs
-K- -K-
Rb [ohms]
-K-
B [N*m*s/rad]
w*Km*cos() -> friccion viscosa
2 Voltaje B
1
aceleracion -> velocidad
s