ESCUELA SUPERIOR DE INGENIERÍA …sepi.esimez.ipn.mx/electronica/archivos/1300.pdfIV Resumen En...
Transcript of ESCUELA SUPERIOR DE INGENIERÍA …sepi.esimez.ipn.mx/electronica/archivos/1300.pdfIV Resumen En...
INSTITUTO POLITÉCNICO NACIONAL
SECCIÓN DE ESTUDIOS DE POSGRADO E INVESTIGACIÓN
ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA
UNIDAD ZACATENCO
SISTEMA DE CONTROL DE POSICIÓN CON
ACELERACIÓN PARA MOTORES DE PASOS CON UN
MICROCONTROLADOR MCF51QE128
TESIS PARA OBTENER EL GRADO DE
MAESTRÍA EN CIENCIAS EN INGENIERÍA ELECTRÓNICA
PRESENTA
ING. ROCÍO GABRIELA VARGAS VÁZQUEZ
DIRECTORES DE TESIS
DR. JOSÉ HIRAM ESPINA HERNÁNDEZ
DR. JOSÉ ALBERTO PÉREZ BENÍTEZ
MÉXICO, D. F., JUNIO 2014
I
II
III
A Dios,
a mi esposo,
a mi mamá y hermanos,
a mis abuelitos, tios y primos
a mis suegros y mi nueva familia.
IV
Resumen
En este trabajo se reporta el desarrollo de un sistema de control a lazo abierto para motores
de pasos basado en el microcontrolador MCF51QE128. El sistema de control está formado
por una tarjeta de control y tres tarjetas de accionamiento de motores de pasos que se
interconectan entre sí mediante una quinta tarjeta que establece el bus de comunicación. Estas
cinco tarjetas se ensamblaron en un chasis en forma de rack para contar con un módulo de
control portable con la finalidad de ser utilizado en cualquier sistema mecánico accionado
por motores de pasos. El algoritmo desarrollado en el microcontrolador permite generar un
perfil de velocidad de tipo trapezoidal en base a las características del motor de pasos - carga.
El sistema de control a lazo abierto permite el control de hasta tres motores de pasos de forma
simultánea gracias a la utilización de los tres temporizadores independientes con que cuenta
el microcontrolador. Se establecieron en el sistema implementado dieciocho comandos
divididos en dos grupos, uno para la caracterización del mecanismo y el otro para la
caracterización de la trayectoria. Estos comandos se introducen a través de una interfaz RS-
232. Los perfiles de velocidad generados por cada temporizador del microcontrolador fueron
analizados mediante un programa desarrollado en Matlab que permitió validar los perfiles de
velocidad. El sistema de control desarrollado se acopló a un sistema mecánico comercial de
tipo cartesiano. Los resultados obtenidos con el sistema cartesiano avalan que el sistema de
control propuesto permite un correcto posicionamiento del cabezal del sistema cartesiano en
un tiempo relativamente pequeño. Este trabajo permitirá que los sistemas experimentales
desarrollados en el Laboratorio de Evaluación No Destructiva Electromagnética reduzcan el
tiempo total de medición y además permitirá la generación de trayectorias diferentes.
V
Abstract
This work presents the development of an open loop control system for stepper motors based
on the microcontroller MCF51QE128. The control system is composed of a control card and
three drive cards which are interconnected by the communication bus using a fifth card.
These five cards are assembled in a rack to have a portable control module that can be
attached to in any mechanical system driven by stepper motors. The algorithm implemented
in the microcontroller generates a trapezoidal velocity profile according to the characteristics
of the stepper motor load combination. The control system allows controlling three stepper
motors simultaneously, by using the three independent timers of the microcontroller.
Eighteen commands were established and divided in two groups, one for the characterization
of the mechanism and the second one for the characterization of trajectories. The commands
are introduced through the RS-232 serial interface. The velocity profiles generated by each
timer of the microcontroller were analyzed using a program developed in Matlab, which
helped validate the trapezoidal velocity profile. The designed control system was connected
to a commercial XYZ table. The results using the designed control system with the XYZ
table allowed a good performance positioning along the three axes. This work will help to
optimize the experimental systems developed at the Laboratory of Electromagnetic
Nondestructive Evaluation.
VI
Acronimos y Abreviatura
A Ampere
BKGD Depuración en segundo plano (Background Debug)
BDC Control de depuración en segundo plano (Background Debug Controller)
CI Circuito Integrado
DSP Procesador Digital de Señales (Digital Signal Processor)
f.e.m Fuerza Electromotriz
f.m.m Fuerza Magnetomotriz
FPGA Dispositivo basado en una matriz de bloques lógicos configurable
(Field Programmable Gate Array)
ICS Fuente de Reloj Interno (Internal Clock Source)
IDE Entorno Integrado de Desarrollo (Integrated Development Enviroment)
IRQ Solicitud de Interrupción (Interrupt Request)
Kbps Kilo bits por segundo
MB Mega Bytes
MIPS Millones de Instrucciones Por Segundo
NRZ Sin retorno a cero
PC Computadora Personal (Personal Computer)
PPG Generador de Pulsos Programable (Programmable Pulse Generator)
PWM Modurlación por ancho de pulso (pulse width modulation)
RAM Memoria de Acceso Aleatorio (Random Acces Memory)
RGPIO Puertos Generales de Entrada Salida (Rapid General Purpose Input Output)
RS232 Estandar Recomendado 232 (Recommended Standard 232)
SCI Interfaz de Comunicación Serial (Serial Communication Interface)
SCARA Brazo robótico articulado seleccionador
(Selective Compliant Articulated Robot Arm)
TMP Temporizador
USB Bus Universal Serie (Universal Serie Bus)
V Voltaje
VII
�⃗⃗� Fuerza electromagnética
𝑞 Carga eléctrica
�⃗⃗� Velocidad de una carga eléctrica
�⃗⃗� Campo magnético
J Densidad de corriente
𝑣𝑑 velocidad de deriva
I Corriente eléctrica
𝜏 Par de torsión
𝐹𝑛 Componente normal del vector Fuerza electromagnética
𝐹𝑡 Componente tangencial del vector Fuerza electromagnética
N Numero de vueltas del inducido
A Área del inducido
J Inercia
VIII
Índice General
Justificación ............................................................................................................................ 1
Introducción ............................................................................................................................ 2
Objetivo General................................................................................................................. 3
Objetivos Particulares ......................................................................................................... 3
Organización del trabajo de tesis ........................................................................................ 3
Capítulo 1. Revisión bibliográfica y estado del arte ............................................................... 5
1.1 Introducción ............................................................................................................. 5
1.2 Motores eléctricos .................................................................................................... 5
1.3 Funcionamiento de los motores de paso .................................................................. 8
1.3.1 El motor de pasos de reluctancia variable ............................................................ 9
1.3.2 Motor de pasos de Imán Permanente ................................................................. 11
1.3.3 Motor de pasos Híbrido ...................................................................................... 11
1.4 Características de los motores de pasos ................................................................. 14
1.4.1 Perfiles de velocidad .......................................................................................... 17
1.5 Sistemas de Control de motores de pasos .............................................................. 18
1.5.1 Sistema de control a lazo abierto........................................................................ 19
1.5.2 Sistema de control a lazo cerrado ....................................................................... 20
1.6 Sistemas mecánicos ............................................................................................... 21
IX
1.6.1 Sistema mecánico cartesiano .............................................................................. 21
1.6.2 Sistema mecánico Cilíndrico .............................................................................. 22
1.6.3 Sistema mecánico esférico ................................................................................. 23
1.6.4 Sistema mecánico articulado .............................................................................. 23
1.6.5 Sistema mecánico SCARA................................................................................. 24
1.7 Estado del arte de los sistemas de control de motores de pasos ............................ 24
Capítulo 2. Descripción e implementación del hardware para el sistema de control ........... 29
2.1 Introducción ........................................................................................................... 29
2.2 Características del sistema ..................................................................................... 29
2.3 Sistema de control .................................................................................................. 30
2.3.1 Tarjeta de Control............................................................................................... 31
2.3.1.1 Microcontrolador MCF51QE128 ................................................................... 32
2.3.1.2 El circuito integrado MAX232 ....................................................................... 35
2.3.2 Tarjetas de Accionamiento ................................................................................. 38
2.3.2.1 El CI L297 ...................................................................................................... 38
2.3.2.2 El CI L298 ...................................................................................................... 40
2.3.3 Tarjeta del Bus de Comunicación ...................................................................... 44
2.3.4 Rack y conectores............................................................................................... 47
2.4 Resultados del Capítulo ......................................................................................... 48
X
Capítulo 3. Diseño e implementación del algoritmo para el sistema de control .................. 49
3.1 Introducción ........................................................................................................... 49
3.2 Los comandos de control implementados .............................................................. 49
3.3 Algoritmo de control .............................................................................................. 52
3.3.1 Perfil de velocidad de tipo trapezoidal alterno ................................................... 56
3.4 Funciones Específicas del MCF51QE12 ............................................................... 58
3.4.1 Comunicación serie ............................................................................................ 59
3.4.2 Generador de Pulso Programable (GPP) ............................................................ 60
3.4.3 Excepciones, interrupciones y prioridades ......................................................... 61
3.5 Resultados del Capítulo ......................................................................................... 63
Capítulo 4. Mediciones y evaluación del sistema de control ............................................... 65
4.1 Introducción ........................................................................................................... 65
4.2 Evaluación de la tarjeta de control del sistema de control propuesto .................... 65
4.3 Evaluación del sistema de control con un sistema mecánico de tipo cartesiano ... 69
4.3.1 Caracterización experimental del sistema mecánico .......................................... 71
4.4 Resultados del Capítulo ......................................................................................... 73
Conclusiones ......................................................................................................................... 74
Trabajo a Futuro ................................................................................................................... 76
Apéndice A ........................................................................................................................... 78
XI
Apéndice B ........................................................................................................................... 99
Bibliografía ......................................................................................................................... 101
Agradecimientos ................................................................................................................. 103
XII
Índice de Figuras
Figura 1.1 Fuerza sobre una carga móvil en un conductor que transporta corriente. ............. 5
Figura 1.2 Espira rectangular por la que circula una corriente y está inmersa en un campo
magnético uniforme. ............................................................................................................... 7
Figura 1.3 Elementos de un motor de corriente continua. ...................................................... 8
Figura 1.4 Componentes de las fuerzas entre los dientes del estator y del rotor de un motor
de pasos. ................................................................................................................................. 9
Figura 1.5 Diagrama y principio de operación de un motor de pasos de reluctancia variable
de 30° por paso. .................................................................................................................... 10
Figura 1.6 Motor de pasos de imán permanente. .................................................................. 11
Figura 1.7 Motor de pasos Híbrido de 200 pasos por vuelta. El detalle muestra la alineación
de los polos del rotor y el estator indicando el ángulo de 1.8° por paso. ............................. 12
Figura 1.8 Comparación del devanado convencional vs bifilar. .......................................... 13
Figura 1.9 Circuito para conexión (a) unipolar y (b) bipolar .............................................. 13
Figura 1.10 Curva de Par de torsión vs Posición angular del rotor de un motor de pasos ideal.
.............................................................................................................................................. 14
Figura 1.11 Formas de onda típicas de la corriente que circula a velocidad a) Baja b) Media
c) Alta ................................................................................................................................... 16
Figura 1.12 Curvas típicas de arranque y máximas mostrando los efectos del momento de
inercia de la carga para el par de arranque (JL=Inercia del motor; JM=Inercia de la carga) . 17
Figura 1.13 Perfil de velocidad de tipo trapezoidal. ............................................................. 18
Figura 1.14 Perfil de velocidad de tipo parabólico. .............................................................. 18
XIII
Figura 1.15 Diagrama de bloques de un sistema de control automático. ............................. 19
Figura 1.16 Diagrama en bloques de un sistema de control de posición a lazo abierto. ...... 20
Figura 1.17 Diagrama de bloques de un sistema de control de posición a lazo cerrado. ..... 21
Figura 1.18 Espacio de trabajo de un sistema mecánico de tipo cartesiano. ........................ 22
Figura 1.19 Espacio de trabajo de un sistema mecánico tipo cilíndrico............................... 22
Figura 1.20 Área de trabajo de un sistema mecánico tipo esférico. ..................................... 23
Figura 1.21 Espacio de trabajo de un sistema mecánico tipo articulado. ............................. 23
Figura 1.22 Espacio de trabajo de un sistema mecánico tipo SCARA................................. 24
Figura 1.23 Circuito propuesto en [10]. ............................................................................... 25
Figura 2.1 Sistema de medición experimental con el sistema de control actual. ................. 29
Figura 2.2 Diagrama de bloques del sistema de medición experimental con el sistema de
control propuesto. ................................................................................................................. 30
Figura 2.3 Diagrama en bloques del sistema de control propuesto. ..................................... 31
Figura 2.4 Diagrama de bloques del microcontrolador MCF51QE128. .............................. 32
Figura 2.5 Sistema básico de conexión del MCF51QE128. ................................................. 35
Figura 2.6 Diagrama esquemático de la tarjeta de control. .................................................. 37
Figura 2.7 Diagrama de bloques del CI L297. ..................................................................... 38
Figura 2.8 Secuencia a medio paso basada en el código Gray. ............................................ 39
Figura 2.9 Secuencia a paso completo a) una fase activa b) dos fases activas ..................... 39
XIV
Figura 2.10 Diagrama de bloques del CI L298. ................................................................... 41
Figura 2.11 Diagrama de bloques de la interconexión de los circuitos L297 y L298. ........ 42
Figura 2.12 Esquema de conexión para el conector DB9 hembra........................................ 42
Figura 2.13 Diagrama esquemático de la tarjeta de accionamiento. .................................... 43
Figura 2.14 Diagrama esquemático de la tarjeta del bus de comunicación. ......................... 46
Figura 2.15 Rack del sistema de control............................................................................... 47
Figura 2.16 Carátula de la tarjeta de accionamiento con indicadores LED. ........................ 47
Figura 3.1 Interfaz gráfica del puerto serie CuteCom para Opensuse de Linux. ................. 52
Figura 3.2 Diagrama de flujo del programa principal. ......................................................... 53
Figura 3.3 Diagrama de flujo de la interrupción por comunicación serial. .......................... 54
Figura 3.4 Diagrama de flujo de la función que calcula la generación de perfil de velocidad.
.............................................................................................................................................. 55
Figura 3.5 Análisis de la gráfica del perfil de velocidad. ..................................................... 55
Figura 3.6 Perfil de velocidad de tipo trapezoidal alterno debido al criterio de xa. ............. 57
Figura 3.7 Diagrama de flujo del generador de pulsos programable 1................................. 57
Figura 3.8 Asignación de interrupciones por niveles y prioridades en el controlador de
interrupciones del MCF51QE128. ........................................................................................ 62
Figura 4.1 Tren de pulsos par un desplazamiento de 24 pasos a una frecuencia de 100 Hz.65
Figura 4.2 Tren de pulsos con variación de frecuencia en función de un perfil de velocidad
de tipo trapezoidal. ............................................................................................................... 66
XV
Figura 4.3 Tren de 100 pulsos con frecuencia inicial de 100 Hz con incremento lineal de
10Hz hasta una frecuencia máxima de 500 Hz..................................................................... 67
Figura 4.4 Diagrama de flujo para la gráfica de las frecuencias del tren de pulsos en Matlab.
.............................................................................................................................................. 68
Figura 4.5 Perfil de velocidad obtenido a partir del programa implementado en Matlab para
un tren de 100 pulsos con una frecuencia inicial de 100 Hz y una frecuencia máxima de 500
Hz. ........................................................................................................................................ 69
Figura 4.6 Husillo SFU1610-C7 con sistema Anti-backlash. .............................................. 70
Figura 4.7 Asignación de ejes al CNC KL4350. .................................................................. 70
XVI
Indice de Tablas
Tabla 2.1 Relación de conexiones de la tarjeta del bus de comunicación. ........................... 45
Tabla 3.1. Comandos de control del mecanismo. ................................................................. 50
Tabla 3.2 Comandos para sistema mecánico con sensores de fin de curso. ......................... 50
Tabla 3.3 Comandos de control de trayectoria. .................................................................... 51
Tabla 3.4 Configuración para la comunicación serial PC - µC. ........................................... 51
Tabla 4.1 Valores obtenidos de caracterización experimental. ............................................ 71
Tabla 4.2 Valores del contador absoluto de cada eje. .......................................................... 71
Tabla 4.3 Comparativa de los tiempos de posicionamiento. ................................................ 72
Tabla 4.4 Resolución obtenida mediante la relación del número de pasos con la distancia de
la trayectoria para el eje x, y, z. ............................................................................................. 72
1
Justificación
En el Laboratorio de Evaluación No Destructiva Electromagnética se desarrollan sistemas
para la detección y caracterización de defectos en placas metálicas por pérdidas de flujo
magnético o por corrientes de remolino. Los módulos de medición de estos sistemas son
desplazados a lo largo de las placas metálicas mediante sistemas mecánicos accionados por
motores de pasos, que debido a su principio de funcionamiento, permite contar con un
sistema de control en lazo abierto. Sin embargo el sistema de control no permite la variación
de la velocidad lo que evita la optimización del tiempo de posicionamiento. Además los
sistemas mecánicos son adaptaciones de escáneres o plotters y sólo cuentan con un eje de
desplazamiento, lo que no permite la variación de las trayectorias
En este trabajo se desarrolla un sistema de control a lazo abierto basado en el
microcontrolador MCF51QE128 para el posicionamiento del módulo de medición ubicado
en el último enlace de un sistema mecánico de tipo cartesiano con los tres ejes accionados
por motores de pasos. Para optimizar el tiempo de posicionamiento se hace uso de un perfil
de velocidad de tipo trapezoidal. Con la aplicación del sistema de control implementado en
este trabajo se podrá incrementar el número de mediciones obtenidas en el mismo lapso de
tiempo y mejorar la resolución espacial de los sistemas de medición antes mencionados.
2
Introducción
Los sistemas de control se caracterizan por contar con una serie de elementos o entradas que
permiten influir en el funcionamiento de un sistema dinámico con la finalidad de tener un
dominio sobre las variables de salida de modo que alcancen valores prestablecidos o de
consigna. El uso de motores de pasos en sistemas dinámicos para el posicionamiento de una
carga constante permite establecer la estrategia de control en lazo abierto debido a que son
máquinas electromecánicas que convierten una señal digital en incrementos mecánicos
precisos y bien definidos de la posición del rotor. Los sistemas de control en lazo abierto para
motores de pasos están basados en un controlador digital que genera una señal de reloj la cual
determina la velocidad de giro del rotor. Sin embargo el incremento de la frecuencia de la
señal de reloj reduce la corriente que circula en cada fase, con lo que el campo generado es
menor y por consiguiente el par del motor se reduce. La reducción del par puede ser tal que
no sea capaz de contrarrestar el par generado por la carga acoplada, lo que produciría perdida
de pasos. Para evitar este efecto en sistemas de control en lazo abierto se evita la variación
de la frecuencia estableciendo una velocidad constante que asegure el par de acuerdo a la
carga acoplada. Esta técnica si bien permite la utilización de un sistema de control en lazo
abierto, ya que evita la pérdida de pasos, establece un tiempo de posicionamiento mayor al
que se podría obtener al alcanzar la velocidad máxima posible con la carga correspondiente.
Por ello se hace usos de perfiles de velocidad que establecen la variación de la velocidad en
las tres etapas del desplazamiento: aceleración, velocidad constante y desaceleración.
Además al permanecer dentro del rango de valores de frecuencia de la señal de reloj es
posible evitar la pérdida de pasos, lo que permite el uso de sistemas de control en lazo abierto.
Y así es posible contar con las ventajas del uso de un sistema de control a lazo abierto con la
optimización del tiempo de posicionamiento.
Se han presentado propuestas de sistemas de control basados en FPGA´s, DSP´s y
microcontroladores ya sea en lazo abierto o en lazo cerrado. Dichas propuestas dependen de
la estructura del sistema de mecánico, lo recursos de software o hardware que se quieran
manejar e incluso de los recursos económicos ya que un sensor de retroalimentación
3
incrementa sustancialmente el costo de implementación además de incrementar la
complejidad de diseño.
Objetivo General
Desarrollar un sistema de control de posición con perfil de velocidad tipo trapezoidal para
motores de pasos con un microcontrolador MCF51QE128.
Objetivos Particulares
Diseñar la tarjeta de control que permita la comunicación serie PC - Microcontrolador
Diseñar la tarjeta de accionamiento que permita el manejo de motores de pasos
bipolares y unipolares
Diseñar un algoritmo de control que genere los perfiles de velocidad para cada motor
de pasos
Validar el funcionamiento del sistema con un programa de diseñado en Matlab y el
control de un sistema mecánico de tipo cartesiano
Organización del trabajo de tesis
Este trabajo de tesis se divide en cuatro capítulos, a continuación se presenta una descripción
de cada uno.
El Capítulo 1 presenta las características y funcionamiento de los motores eléctricos
particularizando en los motores de pasos. Además se presenta una breve descripción de los
sistemas mecánicos que comúnmente son accionados con motores de pasos. Se presenta el
estado del arte de los sistemas de control para motores de pasos, tanto en lazo abierto como
en lazo cerrado.
El Capítulo 2 presenta la implementación del hardware del sistema de control así como la
descripción detallada de los elementos que lo componen.
El Capítulo 3 se presenta los comandos, su implementación y el algoritmo de control utilizado
para la generación de perfiles de velocidad de tipo trapezoidal así como el control de hasta
tres motores de pasos mediante temporizadores independientes del microcontrolador
MCF51QE128.
4
En el Capítulo 4 se muestra la validación del algoritmo de control mediante el programa
diseñado en Matlab y la evaluación del sistema control a lazo abierto con un sistema de
control de tipo cartesiano, y el análisis de la precisión y la resolución obtenida con el sistema
propuesto.
Por último se presentan las conclusiones obtenidas y las recomendaciones para la
continuación de este trabajo.
5
Capítulo 1. Revisión bibliográfica y estado del arte
1.1 Introducción
En este capítulo se presenta el funcionamiento de los motores de pasos y sus características
así como su empleo en sistemas mecánicos. Además se presenta el estado del arte de los
sistemas mecánicos accionados por motores de pasos con sus respectivos sistemas de control.
1.2 Motores eléctricos
Los motores eléctricos utilizan los principios de electromagnetismo para su funcionamiento.
Considerando que las fuerzas magnéticas sobre cargas en movimiento en el interior de un
conductor se transmiten al material, el cual en conjunto experimenta una fuerza distribuida
en toda su longitud [1]. La fuerza sobre un conductor que transporta corriente se puede
obtener considerando la fuerza magnética sobre una sola carga en movimiento con la
ecuación 1.1
�⃗⃗� = 𝑞�⃗⃗� × �⃗⃗� (1.1)
La figura 1.1 muestra un segmento rectilíneo de un alambre conductor, con longitud l y área
de sección transversal A; la corriente fluye de abajo hacia arriba. El conductor está en un
campo magnético uniforme �⃗⃗� perpendicular al plano de la figura y dirigido hacia el plano.
Figura 1.1 Fuerza sobre una carga móvil en un conductor que transporta corriente.
Tomado de [1].
6 Capítulo 1.
La velocidad de deriva �⃗⃗� 𝑑 es perpendicular a �⃗⃗� por lo que la magnitud de la fuerza es
F=qvdB.
Es posible deducir una expresión para la fuerza total que actúa sobre el conductor
considerando que el número de cargas por unidad de volumen es n; un segmento de conductor
con longitud l tiene un volumen Al por lo que contiene un numero de cargas igual a nAl. La
fuerza total en este segmento tiene una magnitud igual a
𝐹 = (𝑛𝐴𝑙)(𝑞𝑣𝑑𝐵) = (𝑛𝑞𝑣𝑑𝐴)(𝑙𝐵) (1.2)
La densidad de corriente es J=nqvd y el producto de JA es la corriente total, por lo que la
ecuación 1.2 se reescribe como
𝐹 = 𝐼𝑙𝐵 (1.3)
Si el campo �⃗⃗� no es perpendicular al alambre sino que forma un ángulo θ con él, sólo la
componente de �⃗⃗� perpendicular al alambre ejerce una fuerza, tal componente es 𝐵⊥ =
𝐵𝑠𝑒𝑛 𝜃. Entonces, la fuerza magnética sobre el segmento de alambre es
𝐹 = 𝐼𝑙𝐵⊥ = 𝐼𝑙𝐵𝑠𝑒𝑛𝜃 (1.4)
El análisis de una espira rectangular de corriente en un campo magnético uniforme se puede
representar como una serie de segmentos rectilíneos de alambre conductor. La fuerza total
que actúa sobre la espira es igual a cero, pero puede presentarse un par de torsión que actúe
sobre la espira [2]. En la figura 1.2 se muestra una espira rectangular con su eje perpendicular
a un campo uniforme �⃗⃗� . La corriente I que circula por el conductor de longitud l produce un
par en la espira, que tiende a girarla en el sentido horario para el sentido del campo �⃗⃗�
indicado.
Revisión bibliográfica y estado del arte 7
Figura 1.2 Espira rectangular por la que circula una corriente y está inmersa en un campo magnético uniforme.
Tomado de [2].
El par de torsión se define como la fuerza por la distancia con respecto al centro de masas a
la que actúa esa fuerza (a ésta distancia también se le llama brazo), donde el brazo del par es
d/2 y la fuerza es Fn=Fsen ϕ, por lo tanto la magnitud del par de torsión es:
𝜏 = 2𝐹𝑛 (𝑑
2) = 𝐼𝐵𝑙𝑑𝑠𝑒𝑛 𝜙 (1.5)
Si el área de la espira es A=ld podemos escribir la ecuación 1.5 como:
𝜏 = 𝐼𝐵𝐴𝑠𝑒𝑛 𝜙 (1.6)
El par de torsión es máximo cuando la normal al plano de la espira es perpendicular a la
dirección del campo magnético �⃗⃗� (𝜙 = 90°). El par de torsión es cero cuando la normal de
la espira es paralela a la dirección del campo magnético �⃗⃗� (cuando ϕ es 0° o 180°).
En la figura 1.3 se muestran los elementos de un motor de corriente continua [2] que consta
de una espira, generalmente de varias vueltas de alambre conductor, llamada inducido,
situada en el campo magnético uniforme de un imán. En la práctica los motores pequeños
usan un imán permanente, mientras que en los grandes se usa un electroimán para establecer
el campo magnético constante �⃗⃗� . El inducido está conectado a un conmutador que es un
anillo deslizante dividido. El propósito del conmutador es invertir la corriente para que el par
de torsión en el inducido actúe en el mismo sentido. La corriente es suministrada por una
fuente de voltaje de corriente continua a través de un par de muelles o escobillas que reposan
contra el conmutador.
8 Capítulo 1.
Figura 1.3 Elementos de un motor de corriente continua.
Tomado de [2].
El par de torsión del motor de corriente directa, usando la ecuación 1.6, es:
𝜏 = 𝑁𝐼𝐵𝐴𝑠𝑒𝑛 𝜙 (1.6)
Donde N y A son las vueltas y el área de inducido respectivamente. Cuando 𝜙 = 0 no circula
corriente por el inducido, ya que el conmutador está a punto de invertir la corriente. Sin
embargo la inercia de rotación permite el giro continuo.
1.3 Funcionamiento de los motores de paso
El funcionamiento de los motores de pasos es muy similar al de los motores de corriente
directa, la diferencia radica en que el par de torsión está basado en la tendencia que tienen
las piezas ferromagnéticas a alinearse con la dirección del campo magnético [1]. Por
consiguiente, el rotor y estator de los motores de pasos están construidos de materiales
ferromagnéticos y cuentan con polos que se alinean debido al campo magnético producido
por los devanados del estator.
En la Figura 1.4 se muestra como ejemplo la acción de la fuerza entre los polos del estator y
el rotor en un motor de pasos [3]. La componente normal de la fuerza (Fn) tiende a reducir el
espacio de separación entre los polos del rotor y del estator, mientras que la componente
tangencial de la fuerza (Ft) permite la rotación del rotor para alinearlo con los dientes del
estator.
Revisión bibliográfica y estado del arte 9
Figura 1.4 Componentes de las fuerzas entre los dientes del estator y del rotor de un motor de pasos.
Los motores de pasos se clasifican en base a la forma en que los rotores se alineen con el
campo magnético generado, como:
de Reluctancia Variable,
con Imán Permanente, o
Híbridos
1.3.1 El motor de pasos de reluctancia variable
Utilizando la analogía entre el circuito eléctrico y el circuito magnético podemos observar
que la corriente es proporcional a la fuerza electromotriz (f. e. m.) tal como el flujo magnético
es proporcional a la fuerza magnetomotriz (f. m.m.). La f. m. m. cuantifica la capacidad de
una bobina para producir el flujo necesario para la generación del par de torsión y se obtiene
del número de vueltas por la cantidad de corriente circundante, por lo que esta expresada en
A·vuelta. La f.e.m. (V) y la corriente (A) se encuentran relacionados por la Ley de Ohm, la
cual nos muestra que dependen de la resistencia del circuito, entonces para obtener más
corriente es necesario reducir la resistencia. En el caso magnético el análogo a ésta resistencia
se denomina reluctancia la cual es la medida que cuantifica la dificultad que presenta el flujo
magnético para completar su circuito. Entonces para poder incrementar la f.m.m. es necesario
reducir la reluctancia del circuito magnético. Esto significa reducir el espacio ocupado por
aire entre los polos del rotor y del estator, el cual tiene un alto valor en reluctancia, y
sustituirlo por material magnético como el hierro que cuenta con una reluctancia muy baja
[4].
10 Capítulo 1.
El motor de pasos de reluctancia variable se basa en esta sencilla analogía por lo que se
considera como el tipo más básico entre los diferentes tipos de motores de pasos. La figura
1.5 muestra un diagrama simplificado de un motor de pasos de reluctancia variable con una
resolución de 30° por paso. El estator cuenta con seis polos, igualmente espaciados entre sí.
Cada polo del estator cuenta con una bobina enrollada en él, y las bobinas de los polos
opuestos conectadas en serie. El rotor del motor mostrado en la figura 1.5 tiene cuatro polos
del mismo ancho que los polos del estator. Entre los polos del estator y el rotor existe un
espacio de aire, típicamente entre 0.02 y 0.2 mm. El rotor puede girar libremente cuando no
circula corriente por las bobinas del estator. En el motor mostrado en la figura 1.5 hay tres
circuitos electromagnéticos o fases independientes en el estator y cada uno de ellos puede ser
alimentado con corriente continua desde un circuito de accionamiento.
Figura 1.5 Diagrama y principio de operación de un motor de pasos de reluctancia variable de 30° por paso.
Tomado de [4].
Cuando la fase A se activa (bobinas en negro en la figura 1.5(a)) se genera un campo
magnético y con esto se ejerce un par de torsión que logra que el par de polos del rotor más
cercano a los polos del estator de la fase A se alineen entre sí. De esta manera el rotor se
posiciona de forma tal que un par de polos, distinguidos por una flecha apuntando hacia
arriba, se alinean con los polos del estator. En esta posición la reluctancia magnética se reduce
al mínimo y el flujo magnético es máximo, por lo que se considera que el motor se encuentra
en estado de equilibrio. Una vez que la excitación pasa de la fase A a la fase B la otra pareja
de polos del rotor es atraída y alineada con los polos del estator de esta fase, con lo que se
ejecuta un giro del rotor de 30°. Se logrará un paso más de 30° si la excitación cambia de la
Revisión bibliográfica y estado del arte 11
fase B a la C. Al cambiar repetidamente la excitación en las fases del estator en la secuencia
A-B-C-A el rotor girará en sentido horario, mientras que si la secuencia es A-C-B-A el rotor
girará en sentido antihorario. Este modo de operación se conoce como de “una fase activa”
y es la forma más simple de obtener un giro continuo del rotor [4]. Hay que tomar en cuenta
que el sentido en que circula la corriente de excitación no es relevante ya que el rotor se
alineará de igual forma independientemente de la dirección de la corriente y a este tipo
accionamiento se le conoce como unipolar.
1.3.2 Motor de pasos de Imán Permanente
El motor de pasos de imán permanente tiene un estator de construcción similar al motor de
reluctancia variable. Sin embargo, como su nombre lo sugiere, un imán permanente de forma
cilíndrica es empleado como rotor. Este rotor se alinea con los dientes del estator de acuerdo
a los polos que genera la excitación de sus fases como se muestra en la figura 1.6.
Figura 1.6 Motor de pasos de imán permanente.
Tomado de [3].
1.3.3 Motor de pasos Híbrido
El motor de pasos híbrido como su nombre lo indica es una combinación de las estructuras
de los motores de pasos anteriores. En la figura 1.7 se muestra la sección transversal de un
motor de pasos híbrido típico con resolución de 1.8° por paso. El estator tiene ocho polos con
cinco dientes en cada uno, el cual tiene enrollado una bobina. El rotor está formado por un
imán permanente cilíndrico que está magnetizado axialmente y en él se encuentra montada
una estructura de acero que contiene 50 polos en cada extremo.
12 Capítulo 1.
Figura 1.7 Motor de pasos Híbrido de 200 pasos por vuelta. El detalle muestra la alineación de los polos del rotor y
el estator indicando el ángulo de 1.8° por paso.
Cuando no circula corriente por los devanados, la única fuente de flujo magnético en el motor
es el imán permanente. El flujo magnético cruza el espacio de aire desde el polo N, fluye
axialmente a lo largo del cuerpo del estator y vuelve al imán cruzando por el otro espacio de
aire del espaciamiento con el polo S. En este motor existe un pequeño torque de retención
cuando la bobina no está excitada debido a que los polos se mantienen polarizados por el
imán permanente.
Las ocho bobinas están conectadas de manera tal que se tienen solo 2 fases. Las bobinas en
los polos 1, 3, 5, 7 forman la fase A mientras que las de los polos 2, 4, 6, 8 forman la fase B.
Cuando la fase A conduce una corriente en un sentido los polos del estator 1 y 5 se
magnetizan como un polo magnético y los polos 3 y 7 se magnetizan como el polo magnético
opuesto. Para que el rotor gire un paso es necesario desactivar la fase A y activar la fase B
con una corriente en un sentido u otro, según el sentido de giro requerido.
Si las fases del motor son excitadas continuamente con la secuencia +A, -B, -A, +B, +A se
obtendrá un giro del rotor en sentido horario, o si la secuencia se invierte tal que +A, +B, -
A, -B el sentido de giro será antihorario. Cuando el motor opera de esta forma es conocido
como “excitación de dos fases” con accionamiento bipolar [4].
Revisión bibliográfica y estado del arte 13
Los fabricantes también introdujeron los motores híbridos con enrollamiento bifilar lo que
permite activar el motor de forma unipolar. Con los devanados bifilares se puede lograr que
se generen flujos magnéticos en diferente sentido aunque la corriente solo circule en un solo
sentido en el circuito de accionamiento ya que se tienen dos devanados enrollados en sentidos
opuestos sobre un mismo polo, como se muestra en la Figura 1.8.
Figura 1.8 Comparación del devanado convencional vs bifilar.
Tomado de [3].
Los circuitos para la excitación de las fases en conexión bipolar y unipolar se muestran en la
figura 1.9. En la figura 1.9(a) la fase es excitada cuando el transistor funciona como un
interruptor ON/OFF pasando de región de saturación a corte. Para la conexión bipolar es
necesario recurrir a una configuración de transistores denominada puente H, figura 1.9 (b),
en la cual los transistores son conmutados en pares de acuerdo con la polaridad requerida.
Figura 1.9 Circuito para conexión (a) unipolar y (b) bipolar
14 Capítulo 1.
1.4 Características de los motores de pasos
Las características de funcionamiento de los motores de pasos dependen del diseño
electromagnético interno del motor. La estructura tanto del rotor como del estator y la
distribución de las bobinas del estator deben ser optimizadas para obtener el par de torsión
máximo [4]. En los motores de pasos el par de torsión se genera cuando los polos del rotor y
del estator se desalinean. Por ello se establece la curva de Par de torsión vs Posición angular
del rotor, la cual relaciona el desplazamiento angular del rotor con el par de torsión que se le
aplica al eje del rotor cuando la fase del motor de pasos es activada con el voltaje y corriente
nominal. La curva de Par de torsión vs Posición angular del rotor de un motor de pasos ideal
es de forma sinusoidal como la mostrada en la figura 1.10
Figura 1.10 Curva de Par de torsión vs Posición angular del rotor de un motor de pasos ideal.
En la figura 1.10 se puede observar que hay dos posiciones de equilibrio estables en 0° y
90°, ya que cualquier intento de mover el rotor a otra posición generará un par torsión en
dirección opuesta llamado par de restauración. Estos puntos corresponden a la posición de
los polos del rotor completamente alineados con los polos del estator. Así mismo hay una
posición de equilibrio inestable en 45°, donde el par también es cero. Estos corresponden a
posiciones del rotor donde los polos del estator están a medio camino entre dos polos del
estator y se consideran inestables porque si el rotor se desvía ligeramente en cualquier
dirección se acelerará hasta la siguiente posición estable [4].
Revisión bibliográfica y estado del arte 15
El par de torsión máximo obtenido con el voltaje y corriente nominal en el rotor en estado
estacionario se conoce como par estático máximo (PH). Con el par estático máximo los polos
del rotor se alinean de forma exacta con los polos del estator. Sin embargo al existir una carga
acoplada el rotor no se alinea completamente, lo que significa un desplazamiento por paso
(θa) diferente a lo esperado. A este desplazamiento se le conoce como error de posición
estático [1] pero es independiente del número de pasos ejecutados previamente, es decir, el
error de posición no es acumulativo [4]. Un método para reducir este error es excitar varias
fases simultáneamente para incrementar el par de torsión que produce el motor, a lo que
previamente se mencionó como “excitación de dos fases”. El desarrollo en el diseño de
engranes y husillos ha permitido que sea otra forma para minimizar este error de posición. [3]
El par de torsión necesario para mantener la posición de equilibrio con la carga acoplada se
le conoce como par de retención (Pa). Si el par de retención llega a ser igual o mayor al par
estático máximo el motor se encontrara en la región inestable y el rotor pasará al siguiente
punto estable.
Por otra parte, el circuito de excitación es el que activa las fases proporcionando la corriente
necesaria para generar el campo magnético con el cual se alineará el rotor. El par de torsión
máximo dependerá de la cantidad de campo magnético generado por las fases ubicadas en
los polos del estator. Por ello suponiendo que el circuito de excitación es ideal, es decir, que
en cada pulso la energía almacenada se descargue instantáneamente del circuito bobina -
resistencia que forma la fase, que la corriente mantenga su valor nominal durante todo el
estado de encendido el rotor girará a una velocidad constante que corresponderá exactamente
al número de pulsos y la frecuencia a la que se generen los pulsos.
Sin embargo debido a que no existe un circuito de excitación ideal se puede proporcionar una
aproximación razonable a la onda de corriente rectangular ideal si la frecuencia a la que se
genera el tren de pulsos de las secuencia de pasos es baja, como se muestra en la figura 1.11
(a). A una alta frecuencia, o sea donde el periodo es corto en comparación con la constante
de tiempo del sistema bobina-resistencia, la forma de onda de la corriente de excitación se
deforma como se muestra en la figura 1.11 (c). Por ello la corriente no llega a su valor
nominal lo que reduce el campo magnético generado y por consiguiente el par de torsión
máximo. Si el rotor se encuentra en una de sus posiciones inestables controlado a una
16 Capítulo 1.
frecuencia alta, la fuerza del campo no será suficiente para llegar a la siguiente posición
estable.
Figura 1.11 Formas de onda típicas de la corriente que circula a velocidad a) Baja b) Media c) Alta
Tomado de [3].
Cuando el motor tiene que desplazar una carga desde el reposo la frecuencia a la que se
genera el tren de pulsos de control debe ser tal que permita producir un par de torsión que
venza el momento de inercia de la carga. Al par de torsión se le conoce como par de arranque/
parada (pull in) y al valor de frecuencia máximo para iniciar o detener el desplazamiento de
una carga si pérdida de pasos se le conoce como frecuencia de arranque/parada (pull in). Una
vez que la carga se encuentra en movimiento el par generado se incrementa tal que es posible
incrementar la frecuencia hasta una frecuencia máxima (pull out) la cual permite generar la
velocidad máxima del motor.
Los valores de frecuencia y de par de torsión dependen de la estructura del motor y de la
inercia de la carga, por lo que los fabricantes proporcionan esta información en forma de
gráficas como la mostrada en la figura 1.12. En la gráfica se muestran las curvas del par de
arranque/parada (pull in) vs velocidad para varios valores de momento de inercias de la carga,
ya que la velocidad inicial se reduce en función del incremento del momento de inercia de la
carga. Se puede observar que solo se muestra una curva para el par máximo (pull out) y para
varios valores de momento de inercia.
Revisión bibliográfica y estado del arte 17
Figura 1.12 Curvas típicas de arranque y máximas mostrando los efectos del momento de inercia de la carga para
el par de arranque (JL=Inercia del motor; JM=Inercia de la carga)
Tomado de [4].
1.4.1 Perfiles de velocidad
En muchas aplicaciones se requieren motores de pasos que generen el máximo par posible
en un amplio rango de frecuencias del tren de pulsos de control, esto con el propósito de
reducir el tiempo de posicionamiento de la carga. Los perfiles de velocidad definen la
velocidad en función del tiempo y surgen de la necesidad de asegurar que las aceleraciones
impuestas al conjunto motor-carga exijan un par de carga menor que el par máximo del
motor.
Las etapas de un perfil de velocidad son: aceleración, velocidad constante y desaceleración,
sabiendo que la velocidad de arranque es menor a la velocidad máxima del rotor. Por ello el
tiempo de posicionamiento puede ser reducido sustancialmente con una aceleración continua
del motor, desde la velocidad de arranque, a lo largo de varios pasos hasta llegar a la
velocidad máxima. En cuanto se vaya aproximando a la posición de destino la velocidad de
paso se debe reducir hasta que sea igual a la de arranque nuevamente, esto con el propósito
de evitar detener el motor abruptamente y que la carga no se desplace más de lo considerado.
Existen dos tipos de perfiles de velocidad básicos: lineales y curvilíneos. Los perfiles lineales
no requieren de un cálculo complejo. Sin embargo, las discontinuidades en la aceleración
pueden causar una reducción en la vida útil del sistema mecánico [7] [8] [9]. En la figura 1.13
se muestra la gráfica del perfil de velocidad de tipo trapezoidal y en la parte inferior de la
gráfica se muestra como debe variar la frecuencia del tren de pulsos para poder generarlo [8].
18 Capítulo 1.
Figura 1.13 Perfil de velocidad de tipo trapezoidal.
Para evitar el desgaste mecánico y las vibraciones en el sistema se puede recurrir a la
implementación de los perfiles con curvas suaves como el tipo curva S o el tipo parabólico,
mostrado en la figura 1.14. Este tipo de perfil tiene como desventajas que se requiere de una
mayor cantidad de recursos computacionales debido a los cálculos matemáticos asociados
con ellos, lo que hace más difícil su implementación [7] [8] [9] [15].
Figura 1.14 Perfil de velocidad de tipo parabólico.
1.5 Sistemas de Control de motores de pasos
Los sistemas de control se diseñan para realizar tareas específicas como lo es el control de
posición con aceleración. Este requiere de un controlador automático, un actuador, una planta
y un sensor, como se muestra en la figura 1.15.
Revisión bibliográfica y estado del arte 19
Figura 1.15 Diagrama de bloques de un sistema de control automático.
El controlador automático compara el valor real de la salida de la planta con la entrada de
referencia o el valor deseado, determina la desviación y produce una señal de control que
reduce la desviación teóricamente a cero o a un valor pequeño. La manera en la cual el
controlador automático produce la señal de control se denomina acción de control y su salida
es amplificada para poder alimentar al actuador. El actuador produce la entrada para la planta
de acuerdo a la señal de control para que la señal de salida se aproxime a la señal de entrada
de referencia. El sensor convierte la variable de salida en otra variable que pueda usarse para
comparar la salida con la señal de entrada de referencia. Este elemento está en la trayectoria
de retroalimentación del sistema a lazo cerrado. El punto de ajuste del controlador debe
convertirse en una entrada de referencia con las mismas unidades que la señal de
retroalimentación del sensor o del elemento de medición [6].
1.5.1 Sistema de control a lazo abierto
En la sección anterior se observó que los motores de pasos son máquinas electromecánicas
que convierten una señal digital eléctrica en movimiento mecánicos discretos y precisos. Esta
característica aunada al bajo consumo, la alta confiabilidad, un error de posición pequeño y
el par de retención después de desenergizado es lo que ha motivado que estos motores se
hayan popularizado y su aplicación en equipos industriales siga en aumento. La precisión y
repetitividad en la posición del rotor de estos motores hace posible controlar a lazo abierto
un sistema de posicionamiento, con la reducción de costos asociada a ello.
En la figura 1.16 se muestra un sistema básico de control de posición a lazo abierto para
motores de pasos, en el cual la salida es la posición angular del eje del motor mientras que la
entrada consiste en dos señales digitales de baja potencia. Para el acondicionamiento de las
20 Capítulo 1.
señales se cuenta con un sistema de accionamiento que además contiene los circuitos
electrónicos para la conmutación de las fases del motor.
Figura 1.16 Diagrama en bloques de un sistema de control de posición a lazo abierto.
Cada vez que se genera un pulso, en la línea de entrada de la señal de pulsos, el rotor gira el
ángulo correspondiente a un paso y el eje permanece en su nueva posición hasta que se
produce el siguiente pulso. Esta correspondencia uno a uno entre los pulsos y los pasos es lo
que proporciona una baja certidumbre de la posición angular del eje del motor es por lo que
generalmente este tipo de motores forman parte de sistemas de control a lazo abierto.
La señal de pulsos puede provenir de un controlador digital o un microprocesador, el cual
genera los pulsos en base a un temporizador y cuando es necesario realizar un desplazamiento
correspondiente a una cantidad de pasos conocido es capaz de contabilizar el número de
pulsos enviados para detener el envío de pulsos una vez que sea igual al número de pasos
solicitados. Por ello la velocidad a la que gire el rotor depende de la frecuencia del tren de
pulsos generados por el temporizador.
1.5.2 Sistema de control a lazo cerrado
Cuando se requiere minimizar el tiempo de posicionamiento es necesario conocer los valores
de frecuencia de arranque y máxima de las curvas par – velocidad de los motores de pasos.
Si el valor de la carga es constante a lo largo del desplazamiento la implementación de un
sistema de control a lazo abierto es factible. Por el contrario, si la carga varía a lo largo del
desplazamiento es esencial un sistema de control a lazo cerrado el cual requiere de un
transductor montado sobre el eje del motor, como el que se muestra en la figura 1.17, el
Revisión bibliográfica y estado del arte 21
transductor asegura que no haya perdida de pasos en la trayectoria debido a la utilización de
un circuito complejo de control.
Figura 1.17 Diagrama de bloques de un sistema de control de posición a lazo cerrado.
1.6 Sistemas mecánicos
Los sistemas mecánicos son aquellos que están constituidos fundamentalmente por
elementos que tienen como función específica transmitir el movimiento desde las fuentes que
lo generan a los elementos actuadores mediante la transformación de distintos tipos de
energía. La mayoría de los sistemas mecánicos usan motores que cuentan con un eje que
genera movimiento de rotación, por lo que los elementos mecánicos generalmente lo
transforman en movimiento de translación. Las principales aplicaciones de los sistemas
mecánicos se pueden encontrar en la robótica, las impresoras, los escáneres, y en la
manipulación y posicionamiento de herramientas y piezas en general.
Los sistemas mecánicos pueden clasificarse como:
Cartesiano
Cilíndrico
Esférico
Articulado
1.6.1 Sistema mecánico cartesiano
En la figura 1.18 se muestra como el sistema mecánico cartesiano desarrolla el
posicionamiento a través de tres ejes lineales perpendiculares entre sí que corresponden a los
22 Capítulo 1.
ejes cartesianos x,y,z, por lo que el espacio de trabajo tiene forma de cubo. La ventaja de esta
estructura es que posee una alta rigidez por lo que es capaz manejar cargas pesadas. En
términos de repetitividad de movimiento, el sistema de tipo cartesiano puede desplazarse a
un punto determinado del espacio de trabajo con la posibilidad de obtener un error pequeño
en la posición deseada. La desventaja de este sistema es que no es conveniente su utilización
para aplicaciones donde existen limitaciones del espacio de operación.
Figura 1.18 Espacio de trabajo de un sistema mecánico de tipo cartesiano.
1.6.2 Sistema mecánico Cilíndrico
Los sistemas mecánicos de tipo cilíndrico, como el mostrado en la figura 1.19, cuentan con
dos ejes lineales y uno rotacional. Es posible montarlos sobre una plataforma móvil para
cubrir más espacio de trabajo el cual es la región rectangular formada por los ejes y la rotación
alrededor del tercer eje de manera tal que se obtiene un espacio de trabajo en forma de
cilindro. La ventaja de esta estructura es que tiene un eje de libertad de 360 ° lo que le permite
posicionar la carga en cualquier lugar alrededor del eje lineal de la base. La desventaja es que
necesita mayor número de cálculos para el cálculo de coordenadas, además de que la
capacidad de carga depende de la distancia máxima de la articulación telescópica.
Figura 1.19 Espacio de trabajo de un sistema mecánico tipo cilíndrico.
Revisión bibliográfica y estado del arte 23
1.6.3 Sistema mecánico esférico
El sistema mecánico de tipo esférico también se le conoce como configuración polar, ya que
utiliza un eje con desplazamiento lineal y dos ejes rotacionales de manera tal que el espacio
de trabajo describe una semiesfera, como el mostrado en la figura 1.20. La ventaja que
presenta es el rango de alcance para el posicionamiento. La desventaja es que la inercia es
variable debido al extremo final del eje lineal.
Figura 1.20 Área de trabajo de un sistema mecánico tipo esférico.
1.6.4 Sistema mecánico articulado
El sistema mecánico articulado cuenta con tres ejes rotacionales y su configuración, mostrada
en la figura 1.21, es similar a la del brazo humano. Este sistema está constituido por dos
componentes rectos que corresponden al brazo y al antebrazo humano, montados sobre un
pedestal vertical. Dos componentes están conectados por una articulación giratoria que
corresponde al codo y el componente que corresponde al antebrazo tiene en su otro extremo
una articulación similar que corresponde al hombro. Las ventajas son gran versatilidad en el
espacio de trabajo y las tareas que puede desarrollar. La desventaja es la complejidad en el
control de los movimientos lineales.
Figura 1.21 Espacio de trabajo de un sistema mecánico tipo articulado.
24 Capítulo 1.
1.6.5 Sistema mecánico SCARA
EL sistema mecánico SCARA, mostrado en la figura1.22, es una versión alterna del sistema
articulado donde las articulaciones correspondientes al hombro y al codo humano giran
alrededor de dos ejes verticales, lo que proporciona al sistema rigidez en el plano vertical
pero elasticidad en el plano horizontal. Esta combinación convierte al sistema SCARA en el
más utilizado para tareas de montaje.
Figura 1.22 Espacio de trabajo de un sistema mecánico tipo SCARA.
1.7 Estado del arte de los sistemas de control de motores de pasos
La utilización de motores de pasos en sistemas de control de posición presenta diversos
problemas tecnológicos a resolver. Las principales problemáticas son:
Los sistemas de accionamiento para la activación de las fases
La pérdida de pasos
El cálculo en tiempo real de los perfiles de velocidad
Algunas de las propuestas más recientes para resolver alguno o todos los problemas antes
mencionados se presentan a continuación.
Li y Chen [10] diseñaron el circuito de accionamiento para motores de pasos de tipo unipolar,
mostrado en la figura 1.23. El circuito propuesto presenta una nueva topología del circuito
convencional, mostrado en la figura 1.9 a), además de un par de inductores que aceleran el
establecimiento de la corriente de las fases lo que proporciona suficiente par de torsión
dinámico en un amplio rango de frecuencias
Revisión bibliográfica y estado del arte 25
Figura 1.23 Circuito propuesto en [10].
Zhihuang, Lin y Donghui [11] implementaron un sistema de accionamiento para un sistema
automático de posicionamiento de un microscopio, accionado por un motor de pasos de tipo
híbrido. El sistema de accionamiento original era susceptible al ruido lo que generaba una
variación del par de torsión y de la velocidad. El nuevo diseño está basado en un circuito
integrado denominado L6506 que en base a dos choppers PWM controla la corriente en cada
fase, y que en conjunto con el circuito integrado L298 mejora la precisión en el
posicionamiento, eliminando el rizado a velocidades bajas lo que permite un movimiento
más suave del sistema.
Weiwei y Jianjing [12] diseñaron un sistema de control de alta precisión para un sistema
mecánico accionado por motores de pasos que permite el muestro de líquidos. Este sistema
está basado en el microcontrolador S3C44B0 y un sistema de accionamiento formado por los
circuitos integrados L297 y L298. Además de una interfaz diseñada en LabVIEW que envía
al microcontrolador la acción de inicio de la rutina mediante comunicación serial. La rutina
consiste en accionar un motor que posiciona un plato giratorio con 16 tubos de ensayo para
luego activar un segundo motor que los levanta uno a uno para el muestreo de su contenido.
Este sistema utiliza dispositivos fotoeléctricos como sensores para la retroalimentación que
corrigen la posición si se genera pérdida de pasos.
Sung-Wook, Young-Jin, Yoon-Taek y Dong Hwan [13] proponen un detector de pérdida de
pasos sin el uso de un encoder al medir la corriente de retroalimentación utilizada para la
generación de micropasos. Esta implementación tiene como principal ventaja que reduce los
costos del sistema al eliminar el encoder. Para ello las corrientes de las fases deben tener un
26 Capítulo 1.
comportamiento sinusoidal, y esto se logra midiendo el voltaje de unos resistores conectados
en serie con las fases del motor. Estos voltajes se inyectan a un amplificador diferencial con
lo que se obtiene la corriente de la fase. En este artículo se demostró que si ocurre la pérdida
de un paso, la corriente se incrementa instantáneamente dando como resultado picos de
corriente. Con este sistema se puede contabilizar los pasos perdidos y corregir el contador de
pasos.
Huan, Jianxun y Wenqin [14] proponen el diseño de un controlador para un sistema robótico
asistente en microcirugía (RAMS). Este sistema utiliza el DSP TMS320LF2407A como
núcleo del controlador donde se generan las secuencias para micropasos. Este sistema es
capaz de controlar los tres motores simultáneamente. Se utiliza el circuito integrado L298
como módulo de amplificación, y el sistema usa las corrientes de fase como
retroalimentación. Se demostró que el controlador es efectivo y que permite que el robot
despliegue una velocidad de desplazamiento de 1µm/s con una precisión lineal en la posición
de ±2µm.
Wei y Zhongwei [15] diseñaron un algoritmo para la aceleración lineal mediante un perfil de
velocidad de tipo trapezoidal que asegura la estabilidad y la precisión del posicionamiento
además de prevenir la perdida de pasos de una maquina ensambladora de bolsas accionada
por motores de pasos. El perfil es generado variando la frecuencia de pulso de un
temporizador de un microcontrolador. La frecuencia de los pulsos se varía en función de la
frecuencia de la interrupción del temporizador. Se considera que se previene la perdida de
sincronía porque el algoritmo permite modificar la frecuencia máxima del pulso del
temporizador para que sea menor que la frecuencia pull out del motor que se esté utilizando.
Martínez y Vera [12] construyeron un sistema mecánico de tres ejes de tipo cartesiano
accionado por motores de pasos para analizar efectos ultrasónicos sobre tejidos biológicos y
mimetizados. El sistema de control está basado en el microcontrolador PIC18F4550 que
acciona tres motores simultáneamente mediante una interfaz en LabVIEW para establecer
una velocidad constante de desplazamiento. El resultado reportado es un sistema mecánico
que tiene una resolución de 0.1 mm tanto para el eje x como para el eje y. Sin embargo el
Revisión bibliográfica y estado del arte 27
porcentaje de error del eje x y del eje y son del 10% y 20% respectivamente. El eje z no
aparece reportado debido a que requiere modificaciones para realizar las mediciones
correspondientes.
Espina-Hernández [13] automatizó las mediciones de figuras de polos en materiales
policristalinos mediante el uso de un goniómetro de textura comercial TZ6, diseñando una
tarjeta de control y las tarjetas de accionamiento para sus tres motores de pasos, además de
una interfaz de usuario en lenguaje C. La precisión y exactitud en el posicionamiento con el
sistema de control propuesto en este trabajo de tesis se logró conforme a lo especificado por
el fabricante del goniómetro TZ6.
Espina-Hernández [14] presentó posteriormente un trabajo en el que se diseñó un sistema de
control basado en el microcontrolador 8051 el cual genera un perfil de velocidad de tipo
trapezoidal para motores de pasos. Los valores de frecuencia del temporizador se establecen
mediante una tabla de consulta (lookup table). Los valores como la aceleración, la velocidad
inicial y la velocidad máxima son introducidos mediante comandos enviados por
comunicación serial desde un PC. Para evaluar el sistema de control se midió la variación en
la posición al ejecutar 20 veces el desplazamiento de 1mm en ambos sentidos, obteniendo un
error de ±0.1µm. Las mismas mediciones se realizaron para 5 mm y 10 mm obteniendo el
mismo resultado.
28 Capítulo 1.
Esta página se dejó en blanco intencionalmente.
29
Capítulo 2. Descripción e implementación del hardware para el
sistema de control
2.1 Introducción
En este capítulo se presenta y describe los componentes diseñados para la implementación
del sistema de control a lazo abierto. El sistema de control está basado en el microcontrolador
MCF51QE128 con comunicación serial lo que permite la generación de perfiles de velocidad
de tipo trapezoidal para hasta tres motores de pasos de forma simultánea.
2.2 Características del sistema
En la figura 2.1 se muestra el diagrama de bloques del sistema de medición experimental con
el que se cuenta actualmente en el Laboratorio de Evaluación No Destructiva
Electromagnética (LENDE). El sistema mecánico cuenta con un eje de desplazamiento
accionado por un motor de pasos, por lo que el sistema de control a lazo abierto solo requiere
de un temporizador para activarlo. Debido a que el motor de pasos no está caracterizado, la
frecuencia del tren de pulsos generado por el temporizador se mantiene constante sin alcanzar
velocidades que permitan reducir el tiempo de posicionamiento del módulo de medición.
Además el sistema de control se debe activar y desactivar de forma manual ya que no se
encuentra vinculado con la PC que es utilizada para la adquisición de datos de los equipos de
medición.
Figura 2.1 Sistema de medición experimental con el sistema de control actual.
30 Capítulo 2.
En la figura 2.2 se muestra el diagrama de bloques del sistema de medición experimental con
el sistema de control propuesto basado en el microcontrolador MCF51QE128. La PC
mediante la cual se adquieren los datos de los equipo de medición es utilizada para poder
activar y desactivar el sistema de control mediante comandos enviados por comunicación
serie. El sistema de control debe ser capaz de activar hasta tres motores de forma simultánea,
tanto bipolares como unipolares. El sistema mecánico debe contar con sensores de fin de
curso para la localización del cero mecánico y los límites de desplazamiento de cada eje del
sistema.
Figura 2.2 Diagrama de bloques del sistema de medición experimental con el sistema de control propuesto.
2.3 Sistema de control
El sistema de control que se propone en este trabajo está basado en el microcontrolador
MCF51QE128 que calcula el perfil de velocidad de tipo trapezoidal para cada eje de acuerdo
con los valores de frecuencia de arranque y frecuencia máxima obtenidos mediante la
caracterización previa de cada motor. Los valores de frecuencia de cada eje así como las
características de desplazamiento son introducidos al algoritmo del microcontrolador
mediante comandos enviados desde cualquier PC por comunicación serial. El perfil de
velocidad se genera con la variación de la frecuencia del tren de pulsos de control, por lo que
para la generación de tres perfiles de velocidad para el accionamiento de tres motores de
pasos de forma simultánea es necesario que el microcontrolador cuente con tres
temporizadores independientes. La parte de accionamiento del sistema de control está basada
Descripción e implementación del hardware para el sistema de control 31
en los circuitos integrados L297 y L298 que contribuyen a la reducción de la carga
computacional del microcontrolador generando las secuencias de excitación para el sentido
de giro (horario o antihorario) así como el tipo de paso (completo o medio paso) y
acondicionándolas para motores tanto de tipo bipolar como unipolar con tan solo 4 señales
(CLK, H/F, CW/CWW, EN) por motor.
En la Figura 2.3 se muestra el diagrama de bloques del sistema de control propuesto.
Figura 2.3 Diagrama en bloques del sistema de control propuesto.
La implementación del hardware del sistema de control requirió del diseño de tres tarjetas de
circuito impreso:
Una Tarjeta de control
Tres Tarjetas de Accionamiento
Una Tarjeta para la Comunicación Control - Accionamiento
2.3.1 Tarjeta de Control
La tarjeta de control se encarga de la comunicación serie con la PC además del cálculo y
generación de los perfiles de velocidad de tipo trapezoidal para cada motor activo. Los
elementos principales para desarrollar estas tareas son:
El microcontrolador MCF51QE128
El circuito integrado MAX232
32 Capítulo 2.
2.3.1.1 Microcontrolador MCF51QE128
El microcontrolador MCF51QE128 es de 32 bits y pertenece a la familia Freescale y
proporciona herramientas de desarrollo potentes pero fáciles de usar y avanzadas facilidades
para el depurado del programa. En la Figura 2.4 se muestra el diagrama de bloques del
microcontrolador MCF51QE128, donde se puede distinguir el núcleo, la memoria (Flash y
RAM), los módulos de entrada/salida y el control del sistema.
Figura 2.4 Diagrama de bloques del microcontrolador MCF51QE128.
Descripción e implementación del hardware para el sistema de control 33
El núcleo del MCF51QE128 está compuesto por un procesador denominado ColdFire V1, la
frecuencia de trabajo es configurable hasta 50.33 MHz con lo que se puede contar con 2.1
MIPS (Millones de Instrucciones Por Segundo) por cada MHz que se incremente la
frecuencia de trabajo. Además cuenta con un pin para la interfaz de depuración (BKGD/MS),
control para la depuración (BDC, Background Debugger Control) y un controlador para el
bus.
El pin para la interfaz del depurado permite el acceso al emulador externo y la programación
de la memoria Flash del microcontrolador, mientras que el controlador del depurado permite
analizar las operaciones programadas por el usuario en segundo plano (modo background) o
en tiempo real; para esto último dispone de un conjunto de registros y de puntos de ruptura
con respuestas de disparo programables [15].
El microcontrolador tiene una memoria flash de 128 KB y una memoria RAM de 8 KB tanto
para código, datos y registros (control, estado y E/S).
Los módulos de entrada/salida cuentan con un controlador de bus que está formado por dos
buses, uno de alta velocidad para las memorias (Flash y RAM) y puertos especiales de
entrada/salida (RGPIO, Rapid General Purpose Input Output), y otro de baja velocidad para
los módulos de entrada/salida restantes.
El control del sistema del MCF51QE128 tiene las siguientes funciones:
Selector de modos de operación: El microcontrolador cuenta con varios modos de
ejecución, espera y parada para el ahorro de energía. Así como de un modo de
depuración para el desarrollo del software.
Protección: Incluye un temporizador Watchdog, un detector de bajo voltaje y
detectores de código o direcciones ilegales.
Controlador de Interrupciones: Soporta hasta 30 solicitudes de interrupción de
periféricos y 7 interrupciones por software.
El MCF51QE128 cuenta con un módulo de reloj interno (ICS, Internal Clock Source) que
tiene entradas de relojes internos y externos e integra divisores y multiplicadores de
frecuencia para diferentes propósitos. Todas estas opciones permiten definir hasta 6 modos
de trabajo de los relojes. Además el microcontrolador cuenta con tres módulos
temporizadores independientes, de los cuales dos de ellos (TPM1 y TPM2) tienen tres canales
34 Capítulo 2.
y el tercero (TPM3) tiene seis. Esto permite la generación simultánea de trenes de pulsos de
control a diferentes frecuencias en función del cálculo del perfil de velocidad para tres
motores de pasos.
En la figura 2.5 se muestra la conexión recomendada en la hoja de especificaciones de
componentes pasivos a los pines del microcontrolador, donde VSS y VDD corresponde a los
pines para la alimentación primaria del microcontrolador que debe ser de 3 V. Los
componentes pasivos como el capacitor CBLK es utilizado para almacenar energía para el
sistema mientras que el resto de los capacitores deben ser colocados lo más cercano a los
pines correspondientes para una mejor supresión del ruido. Tambien se muestran conexiones
opcionales para un reset manual, un filtro RC recomendado para ambientes ruidosos,
oscilador externo y el conector para programación y depuración del software.
El MCF51QE128 también cuenta con dos módulos denominados SCI (Serial Communication
Interface) que facilitan la implementación de interfaces de comunicaciones series asíncronas
y ofrecen soporte para los protocolos y modos de operación. Ambos módulos SCI son iguales
y pueden ser utilizados de manera independiente uno de otro, disponiendo cada uno de ellos
de un conjunto separado de registros operacionales para su control y configuración. Las
principales características de los módulos SCI son las siguientes:
Soporte de comunicaciones asíncronas full-duplex en formato NRZ estándar.
Transmisor y receptor con doble buffer y con habilitación independiente.
Velocidad de transmisión de datos programable.
Generación de interrupciones asociadas al transmisor, al receptor o a errores.
Longitud de dato programable.
Polaridad del transmisor programable.
Descripción e implementación del hardware para el sistema de control 35
Figura 2.5 Sistema básico de conexión del MCF51QE128.
2.3.1.2 El circuito integrado MAX232
El circuito integrado MAX232 convierte las señales de un puerto serie RS-232 a señales
compatibles con los niveles de voltaje lógicos. El protocolo RS-232 especifica la manera de
establecer una comunicación entre un equipo terminal de datos, como una PC, y un equipo
de comunicación de datos, como un modem. Los niveles de tensión del RS-232 son distintos
a los utilizados en los sistemas digitales; un 0 lógico es una señal comprendida entre los +3
36 Capítulo 2.
V y +15 V, mientras que un 1 lógico es una señal comprendida entre -3 V y -15 V. Por ello
se requiere de un conversor de nivel, en el caso de microcontroladores se suele utilizar el
circuito integrado MAX232, que mediante una serie de condensadores externos consiguen
suministrar niveles compatibles con RS-232 y solo requiere un voltaje de alimentación de
5V.
El MAX232 proporciona a la tarjeta de control un transmisor, un receptor, generadores de
reloj, formato del paquete de datos, velocidad de transmisión y recepción que permite
establecer una comunicación serial con la PC mediante un puerto serial RS-232. Sin embargo
debido a la versatilidad del puerto de comunicación USB se ha sustituido el puerto RS-232
en los equipos. No obstante la comunicación serie sigue siendo una forma eficiente de
interconectar dos equipos cuando los requisitos de ancho de banda no son superiores a los
110 Kbps, contando con la ventaja de no requerir una gran complejidad en el software para
la gestión de la comunicación en ninguno de los dos extremos. Por ello existen soluciones
comerciales que permiten utilizar un puerto USB como RS232. Por ello el Conector DB9
hembra con el que cuenta la tarjeta de control es utilizado para la interconexión con la PC
mediante un cable comercial USB-Serial.
En la figura 2.6 se muestra el diagrama esquemático de la tarjeta de control donde se observa
el CI MAX232 con los componentes pasivos (capacitores y resistores) para su correcto
funcionamiento. La fuente de alimentación general se conecta mediante el Power jack y debe
ser de +5V de corriente directa. En caso de contar con un eliminador como fuente de
alimentación que proporcione un voltaje mayor a los +5V se implementó un jumper que
habilita al regulador de voltaje LM7805, ya que este voltaje se distribuirá a las demás tarjetas
del sistema de control para la alimentación de sus circuitos lógicos. El regulador de voltaje
LF33CV proporciona un voltaje de +3.3V a su salida, este voltaje alimenta exclusivamente
al MCF51QE128, el cual también requiérelos de componentes pasivos para la conexión
recomendada de la figura 2.5.
Descripción e implementación del hardware para el sistema de control 37
Figura 2.6 Diagrama esquemático de la tarjeta de control.
38 Capítulo 2.
2.3.2 Tarjetas de Accionamiento
La tarjeta de accionamiento está basada en el uso de dos circuitos integrados, L297 y L298,
diseñados por STMicroelectronics para trabajar en conjunto para el control de motores de
pasos. Esto con el objetivo de equilibrar el uso de recursos de software y hardware en el
sistema de control, ya que el CI L297 genera la secuencia de excitación para el tipo de paso
y sentido de giro de los motores de pasos tanto de tipo bipolar como unipolar. Las ventajas
de utilizar esta combinación son que requiere de pocos componentes básicos para su
funcionamiento y que con el uso de estos dos CI el desarrollo de software para el control de
motores de pasos se simplifica.
2.3.2.1 El CI L297
En la figura 2.7 se muestra el diagrama de bloques del CI L297 que integra la lógica para la
generación de señales, que se acondicionarán en la etapa de potencia, para el control de
motores de tipo bipolar y unipolar. Además de contar con dos circuitos chopper basados en
PWM para regular la corriente que circula por las fases del motor.
Figura 2.7 Diagrama de bloques del CI L297.
Descripción e implementación del hardware para el sistema de control 39
La parte fundamental del L297 es el bloque llamado TRANSLATOR el cual genera la
secuencia de excitación de las fases y está controlado por señales provenientes del
microcontrolador. Estas señales se identifican como HALF/𝐹𝑈𝐿𝐿̅̅ ̅̅ ̅̅ ̅ STEP y DIRECTION
CW/𝐶𝐶𝑊̅̅ ̅̅ ̅̅ ̅ , con lo que se selecciona el tipo de giro (medio paso o paso completo) y la
dirección del giro (horario o anti horario) respectivamente. El bloque TRANSLATOR requiere
además de una señal de reloj 𝐶𝐿𝑂𝐶𝐾̅̅ ̅̅ ̅̅ ̅̅ ̅̅ para que la secuencia avance de un estado al siguiente.
La señal es generada por el temporizador correspondiente del microcontrolador.
Internamente el TRANSLATOR consiste en un contador de 3 bits que genera una combinación
lógica basada en el Código Gray con la cual se obtiene una secuencia de 8 estados que
corresponden a los 8 pasos necesarios para la obtención de la secuencia de medio paso, como
la que se muestra en la Figura 2.8.
Figura 2.8 Secuencia a medio paso basada en el código Gray.
Con esta misma secuencia es posible obtener la secuencia de paso completo con una fase
activa seleccionando los estados pares de la secuencia, como se muestra en la Figura 2.9 (a),
o de paso completo con dos fases activas si se selecciona los estados impares de la secuencia,
como se muestra en la Figura 2.9 (b).
Figura 2.9 Secuencia a paso completo a) una fase activa b) dos fases activas
40 Capítulo 2.
La señal de entrada RESET reestablece de forma asíncrona la salida del TRANSLATOR al
valor de la posición 1 de la secuencia.
La señal de salida HOME se establece el valor que será considerado como la posición 1 de
la secuencia.
La señal de entrada ENABLE requiere de un estado lógico para la habilitar o deshabilitar las
señales a la salida del bloque OUTPUT LOGIC. Esta señal se establece a partir de un pin del
microcontrolador y de esta forma se evita la disipación de energía en forma de calor debido
a la excitación de fases de motores inactivos.
La señal de entrada CONTROL inhibe la función de chopper deshabilitando las señales 𝐼𝑁𝐻1̅̅ ̅̅ ̅̅ ̅
y 𝐼𝑁𝐻2̅̅ ̅̅ ̅̅ ̅ mediante un nivel lógico alto para permitir el control de motores unipolares, por el
contrario un nivel lógico bajo corresponderá al control de un motor de tipo bipolar.
La señal SYNC se utiliza si se requiere sincronizar el desplazamiento de varios motores de
pasos controlados por el CI L297.
La señal de un oscilador externo se conecta a la entrada OSC y se utiliza para ajustar los flip
flops para habilitar la salida del bloque OUTPUT LOGIC con lo que se comienza a detectar
el incremento de la corriente en carga. Cuando se incrementa la corriente en la carga, el
voltaje en las resistencias conectadas a SENS1 y SENS2 se incrementa. Si este voltaje es igual
al voltaje de referencia establecido en la entrada Vref, el flip flop recibe una señal de reset con
lo cual se deshabilita hasta el siguiente pulso del oscilador. Hay que tomar en cuenta que
entonces el voltaje de referencia determinará la corriente pico que puede circular por la carga.
Las señales A, B, C y D a la salida del bloque OUTPUT LOGIC son acondicionadas mediante
el CI L298 para la excitación de las fases del motor correspondiente.
2.3.2.2 El CI L298
El CI L298 permite controlar cargas inductivas como relevadores, solenoides y motores tanto
de corriente directa como de pasos ya que está compuesto por dos circuitos puente H
Descripción e implementación del hardware para el sistema de control 41
completos. Cada puente H es una configuración de cuatro transistores que son conmutados
en pares para que la corriente pueda fluir en ambos sentidos de acuerdo a las señales lógicas
a la entrada. Los emisores de cada puente son conectados y corresponden a una terminal
externa como se muestra en el diagrama de boques de la figura 2.10.
Figura 2.10 Diagrama de bloques del CI L298.
Por lo tanto el CI L298 permite acondicionar las señales digitales provenientes del CI L297
hasta 46 V y hasta 2 A por fase mediante la fuente conectada a través de +Vs de acuerdo con
las especificaciones del motor. El CI L298 también cuenta con dos entradas (EnA y EnB)
para habilitar o deshabilitar de forma independiente las señales de entrada de cada puente y
que corresponden a las salidas 𝐼𝑁𝐻1̅̅ ̅̅ ̅̅ ̅ y 𝐼𝑁𝐻2̅̅ ̅̅ ̅̅ ̅ del L297. La corriente que fluye a través de la
carga puede ser medida utilizando las salidas de sensado SENSE A y SENSE B, en las cuales
se conectan una resistencia por cada puente (RSA y RSB) que se comparten con el L297 para
detectar la intensidad de esta corriente.
En la figura 2.11 se muestra el diagrama de bloques de la interconexión de los circuitos L297
y L298, además de un puente de diodos a la salida del L298 que permite la rápida
recuperación de la corriente que circula por cargas inductivas como son las fases de los
motores de pasos
42 Capítulo 2.
Figura 2.11 Diagrama de bloques de la interconexión de los circuitos L297 y L298.
La tarjeta de accionamiento además de contar con los elementos para la interconexión
mostrada en la figura 2.11 se le implementaron indicadores LED para que el usuario pueda
conocer de forma rápida el sentido de giro y el tipo de paso configurado en cada motor activo.
También se cuenta con el puerto PS2 que envía señales al microcontrolador para la
generación de pulsos si se requiere el posicionamiento de la carga de forma manual. La fuente
de voltaje para el motor se conecta al jack Vmotor que cuenta con un fusible de 2 A como
protección adicional. El conector DB9 hembra es utilizado para la conexión de las fases del
motor y de los sensores de curso correspondientes. El esquema de conexión es el mostrado
en la figura 2.12
Figura 2.12 Esquema de conexión para el conector DB9 hembra.
El diagrama esquemático de la tarjeta que se utilizó para el accionamiento de los motores de
pasos es el que se muestra en la Figura 2.13.
Descripción e implementación del hardware para el sistema de control 43
Figura 2.13 Diagrama esquemático de la tarjeta de accionamiento.
44 Capítulo 2.
2.3.3 Tarjeta del Bus de Comunicación
Se diseñó un tarjeta que permitiera la interconexión entre las tarjetas de accionamiento con
la tarjeta de control, la comunicación entre estas tarjetas es de tipo paralelo. El uso de la
comunicación en forma paralela se estableció debido a que la información para la activación
o desactivación de los motores se debe realizar de forma simultánea, por lo que cada línea de
conexión tiene una función fija. La relación de las conexiones entre los puertos del
microcontrolador de la tarjeta de control y las señales de las tarjetas de accionamiento, así
como su función es la que se muestra en la tabla 2.1.
Otra de las funciones de esta tarjeta es distribuir la alimentación de +5 V a todas las tarjetas,
regulada desde la tarjeta de control, para el funcionamiento de los circuitos integrados
lógicos. Así mismo cuenta con un jumper que habilita el voltaje máximo (+5V) como el
voltaje de referencia (Vref) que necesita cada tarjeta de accionamiento para el control de la
corriente o la variación del mismo mediante un potenciómetro.
El diseño de la tarjeta permite una disposición física tal que las tarjetas se pueden alinear en
un módulo portable en forma de rack. La figura 2.14 muestra el diagrama esquemático de la
tarjeta del bus de comunicación.
Descripción e implementación del hardware para el sistema de control 45
Tarjeta de Control Tarjeta de Función
Accionamiento 1
TMP1 CLK Señal de reloj del Temporizador 1
PTD1 H/F Selección del tipo de paso del motor 1
PTD0 CW/CWW Selección de sentido de giro de motor 1
PTH7 ENABLE Habilitar el motor 1
PTH6 FDCA Detección de sensor de fin de cuso A1
PTE7 FDCB Detección de sensor de fin de cuso B1
PTH1 PaP Selección de generación de pulsos manuales
PTH0 CWm Pulsos manuales en sentido horario
PTE6 CWWm Pulsos manuales en sentido antihorario
Accionamiento 2
TMP2 CLK Señal de reloj del Temporizador 2
PTE5 H/F Selección del tipo de paso del motor 2
PTB5 CW/CWW Selección de sentido de giro de motor 2
PTB4 ENABLE Habilitar el motor 2
PTC3 FDCA Detección de sensor de fin de cuso A2
PTC2 FDCB Detección de sensor de fin de cuso B2
PTD7 PaP Selección de generación de pulsos manuales
PTD6 CWm Pulsos manuales en sentido horario
PTD5 CWWm Pulsos manuales en sentido antihorario
Accionamiento 3
TMP3 CLK Señal de reloj del Temporizador 3
PTC1 H/F Selección del tipo de paso del motor 3
PTF7 CW/CWW Selección de sentido de giro de motor 3
PTF6 ENABLE Habilitar el motor 3
PTF5 FDCA Detección de sensor de fin de cuso A3
PTF4 FDCB Detección de sensor de fin de cuso B3
PTB3 PaP Selección de generación de pulsos manuales
PTB2 CWm Pulsos manuales en sentido horario
PTF3 CWWm Pulsos manuales en sentido antihorario
Alimentación
+5V +5V Voltaje para circuitos lógicos
GND GND Tierra común
Tabla 2.1 Relación de conexiones de la tarjeta del bus de comunicación.
46 Capítulo 2.
Figura 2.14 Diagrama esquemático de la tarjeta del bus de comunicación.
Descripción e implementación del hardware para el sistema de control 47
2.3.2 Rack y conectores
Para poder contar con un sistema de control portátil, el sistema obtenido de la interconexión
de las tarjetas electrónicas fue incorporado a una estructura en forma de rack vertical como
se muestra en la Figura 2.15.
a) b)
Figura 2.15 Rack del sistema de control.
En la figura 2.15 a), la tarjeta localizada en la primera posición (en orden descendente) es la
tarjeta de control y posteriormente se ubican las tres tarjetas de accionamiento de los motores.
Esta estructura cuenta con ventilador que permite la mejor circulación de aire interna que
permite la disipación del calor generado en el circuito L298. El switch lateral interrumpe el
suministro de voltaje lógico a todo el sistema. Las fuentes de voltaje para los motores de
pasos deben ser independientes y contar con un conector tipo jack para la conexión con la
tarjeta de accionamiento correspondiente.
Los indicadores LED se ubicaron en la carátula de cada tarjeta de accionamiento, como se
muestra en la figura 2.15 b), y se interpretan como se observa en la figura 2.16.
Figura 2.16 Carátula de la tarjeta de accionamiento con indicadores LED.
48 Capítulo 2.
2.4 Resultados del Capítulo
Se establecieron las características del sistema de control actual y las características que debe
cumplir el sistema de control propuesto.
Se diseñó el circuito de la tarjeta de control basada en el microcontrolador MCF51QE128
que permite la comunicación serie PC – Microcontrolador. El MCF51QE128 cuenta con tres
temporizadores independientes necesarios para la activación de hasta tres motores de pasos
de forma simultánea.
Se diseñó el circuito de la tarjeta de accionamiento en base al funcionamiento conjunto de
los circuitos integrados L297 y L298. En ésta tarjeta se generan las secuencias de excitación
en base al temporizador correspondiente de la tarjeta de control, además de acondicionar las
señales para la excitación de motores de tipo bipolar o unipolar.
El diseño de la tarjeta de control y la tarjeta de accionamiento dan cumplimiento a los dos
primeros objetivos particulares del este trabajo de tesis.
49
Capítulo 3. Diseño e implementación del algoritmo para el
sistema de control
3.1 Introducción
El algoritmo para el control de motores de pasos se ha implementado utilizando el
microcontrolador MC51QE128. El funcionamiento del sistema depende de los parámetros
que sean enviados a través del puerto serie. Estos parámetros fijan los valores de las
frecuencias para la velocidad de arranque y velocidad máxima, así como el incremento en la
frecuencia para la aceleración del motor dependiendo del sistema mecánico en que se
encuentre funcionando. En este capítulo se presentan los comandos implementados así como
una descripción de los mismos y su sintaxis. Posteriormente se explica de manera más
detallada el algoritmo de control. Finalmente se muestran las funciones específicas del
microcontrolador MC51QE128 que permiten el cálculo del perfil de aceleración en tiempo
de ejecución.
3.2 Los comandos de control implementados
Los comandos de control permiten el almacenamiento de los parámetros relacionados con el
sistema y su funcionamiento en el microcontrolador. Los comandos de control se clasificaron
en dos grupos: del mecanismo y de la trayectoria. Esta clasificación se basa en que los
comandos del mecanismo se utilizan para almacenar los parámetros y características del
sistema mecánico y una vez establecidos no es necesario utilizarlos de nuevo. Por el contrario
los comandos de control de la trayectoria son los más utilizados ya que establecen el tipo de
trayectoria y el número de pasos para que el sistema mecánico accionado por los motores de
pasos posicione el módulo de medición de los sistemas experimentales.
En la tabla 3.1 se muestran los comandos de control del mecanismo, la sintaxis, así como su
descripción. Para evitar confusión y redundancia los comandos que requieren valores
numéricos asociados a cada uno de los tres ejes (denotados con el subíndice x y z como le
corresponda) se introducen en una sola instrucción, separando los valores por un punto y
coma (;). Si no se cuenta con un sistema mecánico con tres ejes, basta colocar un cero en el
50 Capítulo 3.
lugar del valor correspondiente al eje con lo que se evitan errores de funcionamiento del
sistema.
Comando Sintaxis Descripción
fmin fmin=fminx;fminy;fminz Almacena la frecuencia, en Hz, de
arranque/parada del motor de cada eje.
fmax fmax=fmaxx;fmaxy;fmaxz Almacena la frecuencia, en Hz, para la
velocidad máxima del motor de cada eje.
df df=dfx;dfy;dfz Incremento lineal de la frecuencia, en Hz,
para la aceleración de los motores.
Tabla 3.1. Comandos de control del mecanismo.
La tabla 3.2 muestra los comandos que se implementaron para el caso que el sistema
mecánico a controlar disponga de sensores de fin de curso. El comando Z activa los tres
motores en el sentido de giro establecido para desplazar la carga hacia el cero mecánico. Una
vez en esa posición se introduce el comando xi para reiniciar el contador absoluto y luego se
hace uso del comando E para que los motores de pasos se activen en sentido opuesto al
establecido para el cero mecánico y así desplacen la carga hacia el final de cada eje. Cuando
la carga llegue al final de cada eje se establece el desplazamiento máximo en número de
pasos con el comando xf que será igual al valor del contador absoluto. El contador absoluto
asociado a cada eje evitará generar perfiles de velocidad para trayectorias imposibles.
Comando Sintaxis Descripción
Z cw Z= cwx;cwy;cwz Establece el sentido de giro de cada motor para llegar al
cero mecánico cww
E E Activa los motores para desplazar la carga hacia el final de
cada eje
xi xi Reinicia el contador absoluto
xf xf Establece el desplazamiento máximo en número de pasos
valor que se le asigna al contador absoluto
Tabla 3.2 Comandos para sistema mecánico con sensores de fin de curso.
En la tabla 3.3 se muestran los comandos de control de la trayectoria, la sintaxis así como su
descripción. Así mismo en el los comando que requieran valores numéricos es necesario
introducir los valores para tres ejes en una sola instrucción y en el caso de no requerirse el
desplazamiento de algún eje se debe colocar un cero en el lugar y así se deshabilitará el motor
correspondiente. La sintaxis de los comandos que requieren de comandos complementarios
como son el sentido de giro y el tipo de paso es un ejemplo en el que los tres ejes giran en un
Diseño e implementación del algoritmo para el sistema de control 51
mismo sentido o que el tipo de pasos es el mismo, sin embargo es posible establecer los
comandos complementarios en cualquier combinación que se requiera por cada eje.
Comando Sintaxis Descripción
xs xs=xsx;xsy;xsz Número de pasos de desplazamiento para cada eje
paso h paso=hx;hy;hz Medio paso para todos los ejes
f paso=fx;fy;fz Paso completo para todos los ejes
giro cw giro=cwx;cwy;cwz Giro horario para todos los ejes
ww giro=wwx;wwy;wwz Giro antihorario para todos los ejes
go go Inicia el desplazamiento de los ejes configurados
s s Detiene el desplazamiento con desaceleración
k k Cancela el desplazamiento de todo los ejes
p p Solicita la información de la posición de los ejes
Tabla 3.3 Comandos de control de trayectoria.
Los comandos listados en las tablas 3.1, 3.2, y 3.3 son enviados desde la PC al
microcontrolador a través del puerto serie. La interfaz gráfica del puerto serie más conocida
para el sistema operativo Windows es Hyperterminal o CuteCom para Opensuse de Linux
que es el utilizado en esta propuesta. La interfaz de puerto serie CuteCom requiere que se
establezca el nombre del puerto virtual habilitado para el envío de datos para ello es necesario
que la ejecutemos con acceso de superusuario. En la tabla 3.4 se enlista los datos de
configuración necesarios para establecer la comunicación serial que corresponde a los valores
configurado en el módulo de comunicación serial del microcontrolador.
Velocidad de Transmisión 9600 Baudios
Longitud de Dato 8 bits con un bit de parada
Bit de Paridad No
Tabla 3.4 Configuración para la comunicación serial PC - µC.
En la figura 3.1 se muestra la interfaz gráfica del puerto serie CuteCom con la configuración
que se requiere para poder establecer la comunicación con el microcontrolador. Esta interfaz
cuenta con dos ventanas, la superior para la recepción de datos provenientes del
microcontrolador y la inferior para el envío de datos al microcontrolador. En esta última se
puede observar un ejemplo del uso de comandos de control.
52 Capítulo 3.
Figura 3.1 Interfaz gráfica del puerto serie CuteCom para Opensuse de Linux.
3.3 Algoritmo de control
El algoritmo de control está basado en interrupciones para evitar la técnica de encuesta
(polling, por su traducción en inglés) para la atención de eventos. La técnica de encuesta
consiste en comprobar cada cierto tiempo el estado de un determinado evento o periférico, lo
que la convierte en una técnica que puede ser ineficiente en determinados casos ya que el
microprocesador consume recursos continuamente para realizar todas las instrucciones del
proceso de encuesta.
El algoritmo es programado en lenguaje C, el cual se ha convertido en un lenguaje común
para el desarrollo de programas en sistemas embebidos. El microcontrolador posee un set de
instrucciones en ensamblador que puede utilizarse también para la programación del
algoritmo. En nuestro caso, consideramos que es una opción poco práctica debido a la
complejidad interna del microcontrolador para controlar todos los recursos con los que
cuenta. El uso del lenguaje C además de ayudar a gestionar mejor programas complejos que
Diseño e implementación del algoritmo para el sistema de control 53
el ensamblador, también permite contar con una estructura estándar que puede ser analizada
y modificada más fácilmente por cualquiera persona que maneje este lenguaje aunque no
cuente con gran dominio del set de instrucciones del microcontrolador MC51QE128.
El desarrollo del software en el entorno de desarrollo del MCF51QE128 se estructura en base
a proyectos que agrupan varios módulos (ficheros) que se compilan y enlazan para formar
un programa ejecutable. El fichero principal es donde se encuentra la función main() está
basada en un bucle infinito en espera de una interrupción por comunicación serial. El
programa principal también tiene como función el control del envío de datos mediante la
comunicación serie establecida con la PC, así como el sensado de los fines de curso para la
desactivación oportuna de los temporizadores. En la figura 3.2 se muestra el diagrama de
flujo del programa principal del algoritmo de control.
Figura 3.2 Diagrama de flujo del programa principal.
En la figura 3.3 se muestra el diagrama de flujo de la interrupción una vez que se recibe una
cadena de caracteres.
Main Loop
FDCA1 o FDCB1 == 1 Si Desactiva Temporizador 1
Recepción de datos
Envía datosLimpiar buffer de
envío de datos
FDCA2 o FDCB2 == 1 Si Desactiva Temporizador 2
FDCA3 o FDCB3 == 1 Si Desactiva Temporizador 3
No
No
Envío de datos
No
Si
No
Interrupción por recepción de datos
Si
54 Capítulo 3.
Figura 3.3 Diagrama de flujo de la interrupción por comunicación serial.
El almacenamiento o modificación de los valores de los comandos requieren de una
metodología para la correcta caracterización y funcionamiento del sistema mecánico. La
metodología consiste en introducir la frecuencia mínima de cada motor con el comando fmin,
esta frecuencia será a la que gire el rotor de cada eje para ubicarse en la posición de cero
mecánico mediante el comando Z. Una vez que los ejes se encuentren en la posición del cero
mecánico se inicializa los contadores absolutos de cada eje con el comando xi. En este punto
se introduce el comando E para que los rotores giren en sentido opuesto al cero mecánico
hasta el desplazamiento máximo de cada eje, mientras el contador se incrementa en cada
pulso enviado por cada temporizador. Al final de esta rutina se conocerá el desplazamiento
máximo en número de pasos que se requiere por cada eje y se establecerá el valor de cada
contador absoluto con el comando xf. Cuando se haya realizado esta rutina se tiene que
introducir el valor de la frecuencia máxima con el comando fmax y el incremento lineal para
el perfil de velocidad de tipo trapezoidal con el comando df. Los valores de los comandos de
la caracterización del sistema y de los comandos de la caracterización de la trayectoria deben
ser diferentes de cero para que la función calculo(), que forma parte del fichero eventos,
calcule los valores necesarios para la generación del perfil de velocidad. La figura 3.4
muestra en diagrama de flujo de la función calculo().
Interrupción por recepción de datos
Almacena la cadena en el arreglo *recibida
Compara la cadena *recibida con los comandos establecidos en al
función comparaCadena(recibida)
cadena recibida == comando
Main Loop
Almacena o modifica los valores obtenidos
Si
No
Diseño e implementación del algoritmo para el sistema de control 55
Figura 3.4 Diagrama de flujo de la función que calcula la generación de perfil de velocidad.
La función calculo() se basa en el análisis de la gráfica de la figura 3.5 para calcular el número
de pasos necesarios para la parte de la aceleración del perfil de velocidad de tipo trapezoidal
utilizando la ecuación de la pendiente.
Figura 3.5 Análisis de la gráfica del perfil de velocidad.
Para ello se consideró que el número de pasos corresponde al eje de las abscisas y la
frecuencia del temporizador al eje de las ordenadas, las coordenadas del punto inicial será (0,
Si xa < xs/2
Calculo de xd
Asignar a xa=x’= xs/4Limitar la frecuencia máxima a f ’(alterno)
Caso Especial
Perfil Trapezoidal
Comando ‘go’
Inicializa x = 0
f = fmin
Si
Si
No
Calculo()
xa = fmax – fmin df
Main Loop
Activa GPP
No
56 Capítulo 3.
fmin). Para lograr que la frecuencia al inicio del desplazamiento sea igual al valor de la
frecuencia asociada a la velocidad máxima del sistema motor-carga es necesario incrementar
de forma lineal la frecuencia un número de pasos igual a xa. El incremento será igual al valor
introducido por el usuario a través del comando de incremento df, por lo que la ecuación de
la pendiente entre dos puntos queda como se muestra en la ecuación 3.1.
𝑚 =𝑦2−𝑦1
𝑥2−𝑥1 𝑑𝑓 =
𝑓𝑚𝑎𝑥−𝑓𝑚𝑖𝑛
𝑥𝑎−0 (3.1)
Despejando xa de la ecuación 3.1 se tiene la ecuación 3.2,
𝑥𝑎 =𝑓𝑚𝑎𝑥 − 𝑓𝑚𝑖𝑛
𝑑𝑓 (3.2)
Debido a que el perfil de velocidad de tipo trapezoidal tiene la característica de ser simétrico
el número de pasos necesarios para la aceleración (xa) será el mismo para la desaceleración
(xd).
Si el valor de xa es mayor que la mitad del total de pasos del desplazamiento xs el perfil de
velocidad de tipo trapezoidal no es realizable por lo que se diseñó una alternativa para ésta
condición.
3.3.1 Perfil de velocidad de tipo trapezoidal alterno
Cuando el número de pasos calculado para la aceleración xa es mayor que la mitad del
número de pasos totales xs es posible que la frecuencia se pueda incrementar hasta su valor
máximo. Sin embargo el número de pasos restantes del desplazamiento no serán suficientes
para la etapa de la desaceleración, lo que producirá un frenado abrupto que generará pérdida
de pasos. Para evitar este comportamiento se estableció que cuando exista esta condición se
le asigne a xa un valor alterno igual a 1/3 del número de pasos totales del desplazamiento xs.
Con estos nuevos valores se asegura que el incremento de la frecuencia en la etapa de la
aceleración solo llegue a un valor menor al de la frecuencia máxima, como se muestra en la
gráfica de la figura 3.6, pero se logrará la realización completa de un perfil de velocidad de
tipo trapezoidal que evitará la pérdida de pasos.
Diseño e implementación del algoritmo para el sistema de control 57
Figura 3.6 Perfil de velocidad de tipo trapezoidal alterno debido al criterio de xa.
Cuando ya se cuenta con los valores para la generación del perfil de velocidad para todos los
ejes activos, el algoritmo espera el comando go. Este comando inicializa la frecuencia de los
temporizadores con el valor de frecuencia mínima correspondiente, además inicializa un
contador local x para el control de pulsos generados por el temporizador. Finalmente habilita
los temporizadores y sus interrupciones para la atención del generador de pulsos programable
(PPG) del microcontrolador. El generador de pulsos programable habilita una interrupción
cada vez que se genere un pulso y atiende una función en la que el contador local x se
incrementa y con ello se establezcan las condiciones para el incremento o decremento de la
frecuencia para la generación del perfil de velocidad en tiempo de ejecución. En la figura 3.7
se muestra el diagrama de flujo de la función de pulsos programable de un temporizador que
varía la frecuencia en tiempo de ejecución.
Figura 3.7 Diagrama de flujo del generador de pulsos programable 1.
GPP1
x1==xs1?
Desactiva GPP1
Si
x1 < xa1 ? xa1 < x1 < xd1?
Velocidad ConstanteMantener la frecuencia
del pulso igual a la fmax1
xd1 < x1 < xs1?
AceleraciónIncrementa en df1 la frecuencia del pulso
Si
No No
Si
DesaceleraciónDisminuir en df1 la
frecuencia del pulso
Si
x++
Comando ‘k’?No
Si
Main Loop
Comando ‘s’?
x1==xd1
No
Si
No No
58 Capítulo 3.
Se incluyó la detección del comando k en el generador de pulsos programable para establecer
una parada de emergencia y el comando s para detener el desplazamiento con desaceleración
para evitar la pérdida de pasos que genera el comando k.
3.4 Funciones Específicas del MCF51QE12
La mayoría de los microcontroladores utilizan un entorno integrado de desarrollo o IDE
(Integrated Development Enviroment) que incluye el compilador, el depurador y otras
utilidades que pueden variar desde los más simple como un editor de texto, hasta lo más
complejo como una herramienta de generación automática de código fuente que permita el
desarrollo rápido de aplicaciones.
El IDE del MCF51QE128 es el Codewarrior el cual cuenta con varias versiones dependiendo
de las familias dentro de los microcontroladores de Freescale. El microcontrolador
MCF51QE128 pertenece a la familia Cold Fire V1 por lo que la versión utilizada de
Codewarrior es la 6.2. Esta versión incluye herramientas tales como: editor, compilador,
enlazador, cargador, depurador y simulador.
El Codewarrior clasifica los recursos del microcontrolador en módulos que encapsulan la
funcionalidad en componentes a los cuales se pueden configurar sus propiedades, métodos y
eventos mediante una ventana denominada inspector de componentes. Las propiedades son
los parámetros del componente donde se define cuales periféricos internos serán utilizados
así como la inicialización y el comportamiento en tiempo de ejecución. Los métodos son
funciones o subrutinas prediseñadas por lo que generan el código según como sean
habilitadas. Los eventos son una ocurrencia que afecta al funcionamiento y son utilizados
para el procesamiento de eventos relacionados con las subrutinas (errores, interrupciones,
desbordamiento del buffer, etc).
La arquitectura del Codewarrior cuenta con plugins que permite la generación automática de
código en un entorno gráfico denominado Procesador Experto. Este plugin mantiene una
relación exacta entre los periféricos del microcontrolador seleccionado y los componentes
con los que cuenta. Las ventajas de contar con el Procesador Experto son:
Diseño e implementación del algoritmo para el sistema de control 59
Se puede modificar el tipo de inicialización del componente.
Asegura que la configuración de los componentes corresponde a los parámetros de
los periféricos.
Se pueden seleccionar solo los métodos que se van a utilizar para evitar la generación
de código innecesario, así mismo se pueden seleccionar solo los eventos que se
requieren para el código en particular.
Las funciones generadas de cualquier periférico pueden ser modificadas en cualquier
momento.
Genera la cantidad de código óptimo para cada componente.
Todo esto permite la fácil y rápida configuración de los periféricos del microcontrolador.
3.4.1 Comunicación serie
El MCF51QE128 está dotado de dos módulos denominados SCI (Serial Communication
Interface) que facilitan la implementación de interfaces de comunicación serie asíncrona.
Ambos módulos SCI son iguales y pueden ser utilizados de manera independiente,
disponiendo cada uno de ellos de un conjunto separado de registros operacionales para su
control y configuración. Cada bloque está constituido por tres bloques, el bloque transmisor,
el bloque receptor y el bloque generador de baudios. Tanto el transmisor como el receptor
pueden operar de forma independiente uno del otro, pero comparten el mismo generador de
baudios, por lo que la velocidad será la misma tanto para la transmisión como para la
recepción.
En Codewarrior cada módulo SCI dispone de un Componente, con métodos y eventos para
la comunicación serial asíncrono, el Componente se puede configurar para atender los
eventos mediante encuesta o por interrupciones. Sin embargo, debido a que es posible la
activación simultánea de los tres módulos de temporización a diferentes frecuencias se acude
a la atención de eventos mediante interrupción. Para ello se cuenta con vectores de
interrupción que facilitan la implementación de rutinas cortas y eficientes que permitan aislar
la fuente de interrupción. Uno de los vectores de interrupción está asignado a eventos
asociados con el receptor, otro está asignado a eventos asociados con el transmisor y, por
último, existe un vector asociado a fuentes de error en la comunicación.
60 Capítulo 3.
Cuando existe un evento asociado a la recepción la interrupción generada atiende una
subrutina la cual solo almacena un carácter a la vez. Siendo necesario el almacenamiento de
la cadena de caracteres enviada desde la PC fue necesario complementar la función para que
almacenara la cadena de caracteres y se asociara a un apuntador, para su posterior
comparación con los comandos establecidos.
3.4.2 Generador de Pulso Programable (GPP)
El Componente para el generador de pulsos programable se encuentra asociado a un
temporizador, por ello se consideran los tres módulos temporizadores para la activación
simultanea de hasta tres motores de pasos. Dentro de sus propiedades se considera:
Asignación del módulo temporizador correspondiente
Asignación del canal del temporizador por el cual se obtendrá el tren de pulsos
Habilita/Deshabilita la interrupción
Asignación de la prioridad de la interrupción
Asignación del periodo inicial del pulso
Asignación de la duración de la parte activa del pulso
Asignación de la polaridad inicial
Inicializar el componente y/o los eventos
Los métodos de este Componente permiten:
Habilitar/Deshabilitar la generación del pulso
Habilitar/Deshabilitar los eventos
Modificar la duración de la parte activa del pulso
Modificar el periodo o la frecuencia del pulso
Los eventos de este Componente es una llamada a una función que se atiende cada vez que
termina el periodo de un pulso. En esta función se hace el uso del método que modifica el
periodo o la frecuencia del pulso. Debido a que los valores introducidos por el usuario para
la generación del perfil de velocidad se encuentran en Hz, se configuró el método para variar
Diseño e implementación del algoritmo para el sistema de control 61
la frecuencia del pulso. Sin embargo, lo más importante de este método es que la
modificación de la frecuencia se puede realizar en tiempo de ejecución, por lo que cada vez
que se atiende la función se verifica que la frecuencia corresponda al número del pulso que
se está ejecutando lo que es equivalente al número de pasos generados para la trayectoria
solicitada.
3.4.3 Excepciones, interrupciones y prioridades
El MCF51QE128 maneja una tabla de vectores de excepción en un espacio de memoria de
1MB y contiene 256 vectores de los cuales 64 están definidos por el núcleo del
microcontrolador y los 192 restantes son para interrupciones de dispositivos externos. El
microcontrolador puede manejar tanto excepciones internas como externas. Las excepciones
internas consideran 12 fuentes internas de excepción, aunque hay espacio en la tabla de
vectores para albergar hasta 6. Además las excepciones internas no pueden ser enmascaradas
de modo que han de ser procesadas en cuanto se producen. Esto haría necesario programar
todas las rutinas de tratamiento de excepción para todas y cada una de las fuentes de
excepción internas. Sin embargo el núcleo del microcontrolador facilita esta labor al
proporcionar un tratamiento por defecto (reset) para las excepciones internas más comunes,
como son:
Error de acceso a memoria
Error de dirección
Instrucción ilegal
Dividir entre cero
Error de formato
Por otra parte las excepciones externas, también conocidas como interrupciones,
provenientes de periféricos tales como temporizadores, puertos de entrada/salida, o
conversores analógico/digitales activan señales en respuesta a diferentes eventos. Para
gestionar todas las diferentes fuentes de interrupción el MCF51QE128 incorpora un módulo
controlador de interrupciones llamado CF1_INTC que aunque permite poca programabilidad
ofrece la funcionalidad requerida para esta tarea. Al generarse una interrupción este módulo
informa tanto del número del vector como de su nivel de prioridad. El nivel de interrupción
62 Capítulo 3.
se codifica en tres bits por lo que se pueden definir siete niveles de prioridad en las
interrupciones, siendo el nivel siete el de mayor prioridad. Las interrupciones de nivel 7 se
activan por flanco y no son enmascarables, el resto de las interrupciones funcionan por nivel
y pueden ser enmascarables. Además de estos siete niveles de prioridad, el controlador
CF1_INTC distinguen nueve prioridades dentro de cada nivel, siendo el nivel nueve el de
mayor prioridad. Por lo tanto se disponen de 63 fuentes de interrupción distintas, siete niveles
con nueve prioridades en cada nivel.
La figura 3.8 muestra la tabla ordenada con las diferentes fuentes de interrupción que gestiona
el controlador CF1_INCT. La distribución dispersa obedece a razones de compatibilidad con
microcontroladores anteriores. Para cada fuente de interrupción se indica, en el recuadro
inferior izquierdo el número de fuente de interrupción. Por otro lado, en el recuadro inferior
derecho se indica el vector de excepción asociado a cada interrupción. Tanto los niveles como
las prioridades siguen un orden descendente, de modo que el nivel 7 es más prioritario que
el nivel 3, del mismo modo que dentro de un mismo nivel la prioridad 9 es más prioritaria
que la 4.
Figura 3.8 Asignación de interrupciones por niveles y prioridades en el controlador de interrupciones del
MCF51QE128.
Tomado de [19].
Diseño e implementación del algoritmo para el sistema de control 63
Las dos interrupciones no enmascarables del nivel 7 son las del pin IRQ y el de detección de
nivel bajo de tensión, sus niveles son fijos por lo que no pueden ser modificadas de ninguna
manera. Las fuentes de interrupción restantes pueden ser reasignadas a otros niveles de
interrupción. Esta operación solo modifica el comportamiento interno del controlador
CF1_INTC pero no cambia el número del vector de excepción asociado a la fuente de
interrupción. Por ello para establecer la prioridad máxima (nivel 6, prioridad7) a la recepción
de comandos de la comunicación serie para que al recibir el comando de parada de
emergencia inhabilite inmediatamente el proceso. Por consiguiente los temporizadores se
ubicaron en orden con nivel de prioridad media: temporizador 1 (nivel 5), temporizador 2
(nivel 4) y temporizador 3 (nivel 3).
3.5 Resultados del Capítulo
Se implementaron y describieron los comandos utilizados para la comunicación serie entre
el microcontrolador y la PC.
Se diseñó el algoritmo de control para el cálculo y generación de perfiles de velocidad de
tipo trapezoidal en base a la información adquirida mediante los comandos introducidos.
Se explicaron las características con las que cuenta el MCF51QE128 que facilitaron la
implementación del algoritmo de control.
El diseño del algoritmo de control para la generación de perfiles de velocidad de tipo
trapezoidal de forma simultánea da cumplimiento al tercer objetivo particular de este trabajo
de tesis.
64 Capítulo 3.
Esta página se dejó en blanco intencionalmente.
65
Capítulo 4. Mediciones y evaluación del sistema de control
4.1 Introducción
En este capítulo se presentan una serie de pruebas y mediciones que se realizaron
inicialmente solo a la tarjeta de control para comprobar que el algoritmo de control diseñado
calculará y generará el perfil de velocidad de tipo trapezoidal. Posteriormente se evaluó el
sistema de control completo aplicado a un sistema mecánico comercial de tipo cartesiano.
4.2 Evaluación de la tarjeta de control del sistema de control propuesto
La evaluación de la tarjeta de control consistió en el análisis del tren de pulsos generado para
un perfil de velocidad de tipo trapezoidal a la salida de cada temporizador del
microcontrolador MCF51QE128. El tren de pulsos generado por cada temporizador se
adquirió con el osciloscopio DSO1460A de Agilent. Al inicio se generaron trenes de pulsos
a una frecuencia constante con un número de pulsos conocido para comprobar que el número
del pulsos del contador absoluto correspondieran al número de pulsos generados. En la figura
4.1 se muestra un tren de pulsos programado para generar 24 pulsos a una frecuencia
constante de 100 Hz. Las líneas auxiliares del osciloscopio contribuyen a establecer el tiempo
que le tomaría a un motor de pasos posicionar una carga con el número de pulsos, equivalente
al número de pasos, a la frecuencia establecida, el cual correspondería a 227 ms.
Figura 4.1 Tren de pulsos par un desplazamiento de 24 pasos a una frecuencia de 100 Hz.
66 Capítulo 4.
Posteriormente se programaron perfiles de velocidad para desplazamientos muy cortos a
frecuencias bajas para poder evaluar el tren de pulsos de forma directa en la pantalla del
osciloscopio con la ayuda de las líneas auxiliares. En la figura 4.2 se muestra el tren de pulsos
obtenido de la generación de un perfil de velocidad de tipo trapezoidal para un
desplazamiento de 24 pasos con una frecuencia de arranque/parada igual a 100 Hz, una
frecuencia máxima igual a 200 Hz y un incremento lineal de 12.5 Hz.
Figura 4.2 Tren de pulsos con variación de frecuencia en función de un perfil de velocidad de tipo trapezoidal.
El análisis visual demostró que en la etapa de aceleración y en la de desaceleración la
frecuencia de los pulsos correspondían a los valores esperados para el desarrollo de un perfil
de velocidad de tipo trapezoidal. También se comprobó que el contador concordaba con los
pulsos generados aun con la variación de la frecuencia. Además al comparar el tiempo en el
que se generó este tren de pulsos (81.6 ms) con el tiempo del tren de pulsos de la figura 4.1,
se demuestra la reducción del tiempo necesario para el posicionamiento de una carga
mediante el uso de perfil de velocidad.
Para poder hacer un análisis con una mayor cantidad de número de pasos y con valores
mayores tanto de frecuencias de arranque/parada como de frecuencia máxima, se recurrió a
una función del osciloscopio que genera una tabla de dos columnas y diez mil filas en un
archivo con extensión .xls de la señal obtenida en la pantalla. Las columnas de la tabla
almacenan el nivel de voltaje por unidad de tiempo en diez mil puntos de la señal guardada.
Mediciones y evaluación del sistema de control 67
De tal forma que al graficar estos valores con programas de gestión de tablas, como Excel o
Matlab, se pueda obtener nuevamente la señal medida en el osciloscopio. En la figura 4.3 se
muestra el tren de pulsos, graficado en Matlab con los valores de la tabla del archivo .xls
generada por el osciloscopio, de la tarjeta de control para la generación de un perfil de
velocidad de tipo trapezoidal para un desplazamiento de 100 pasos con frecuencia de
arranque/parada de 100 Hz y una frecuencia máxima de 500 Hz con incremento lineal de 10
Hz.
Figura 4.3 Tren de 100 pulsos con frecuencia inicial de 100 Hz con incremento lineal de 10Hz hasta una frecuencia
máxima de 500 Hz.
La tabla del archivo .xls se utilizó para analizar la variación de la frecuencia de los pulsos
con un programa desarrollado en Matlab. Este programa divide la tabla asignado la columna
del tiempo a un arreglo Dt[10000] y la columna de voltaje al arreglo DA[1000]. Analizando
cada elemento del arreglo DA para la detección de los flancos de subida se obtiene la
diferencia de tiempo entre los flancos de subida consecutivos del tren de pulsos. La diferencia
de tiempo corresponde al periodo de cada pulso, por lo que se almacenan en un arreglo
llamado Periodo[10000] para obtener el valor de la frecuencia que se almacena en el arreglo
Frecuencia[10000]. En la figura 4.4 se muestra el diagrama de flujo de este algoritmo.
68 Capítulo 4.
Figura 4.4 Diagrama de flujo para la gráfica de las frecuencias del tren de pulsos en Matlab.
Los valores obtenidos en el arreglo Frecuencia[10000] del tren de pulsos de la figura 4.3 se
graficaron en función del tiempo con lo que obtuvo la gráfica mostrada en la figura 4.5.
Inicio
Cargar archivo .xls
Almacena columnas en arreglosColumna de tiempo -> Dt[10000]
Columna de amplitud -> DA[10000]
Crea dos arreglosPeriodo[10000]
Frecuencia[10000]
Inicializa dos contadores, i=0 y j=0, la bandera que señala los flancos
de subida flag = 0
Si DA[i] > 2.5V
flag = 0
No
Si i < 10000
Si flag = 0 SiAlmacena en
Periodo[j] = Dt[i]flag = 1
No
Inicializa k=0
No
j++
Frecuencia [k]=1/(Periodo[k+1]-Periodo[k])
Si k < j
Grafica (Dt,Frecuencia)
No
Fin
i++
k++
Mediciones y evaluación del sistema de control 69
Figura 4.5 Perfil de velocidad obtenido a partir del programa implementado en Matlab para un tren de 100 pulsos
con una frecuencia inicial de 100 Hz y una frecuencia máxima de 500 Hz.
El resultado obtenido de esta gráfica valida de forma cuantitativa que el algoritmo del
microcontrolador calcula y genera el tren de pulsos de los temporizadores de forma que los
motores desplacen la carga a una velocidad que corresponda a la de un perfil de velocidad de
tipo trapezoidal.
4.3 Evaluación del sistema de control con un sistema mecánico de tipo cartesiano
Una vez que se aseguró la generación del perfil de tipo trapezoidal por parte de la tarjeta de
control se procedió a la evaluación del sistema de control completo aplicado a un sistema
mecánico comercial de tipo cartesiano.
El sistema mecánico de tipo cartesiano utilizado para la evaluación del sistema de control es
el KL4350 que cuenta con las siguientes características:
Dimensiones del Área de trabajo 432.8mm x 317.5mm x 58.4 mm (12.7”x 12.5” x
2.3”)
Velocidad máxima de desplazamiento sin carga de 5080 mm/min (200 in/min)
Tres motores de pasos 57BYGH78 de la marca Fenghe
Torque 2 N·m (282 oz·in, 20 Kg·cm)
Estructura de aluminio y área de trabajo de aluminio ranurado extruido
Eje X y Y de acero cromado de 20 mm HRC62-65
Eje Z de acero cromado de 12 mm HRC62-65
Husillos SFU1610-C7 de alta precisión y Anti-backlash
70 Capítulo 4.
El backlash, también conocido como juego, es la libertad o pérdida de movimiento en un
mecanismo causado por espacios entre las partes que lo componen. Se puede observar cuando
la dirección del movimiento se invierte, por lo que es necesario hacer alguna corrección
después de varios cambios de dirección. Esto afectaría al contador relativo del algoritmo y
por lo tanto al control en lazo abierto, por ello se requirió que el husillo contara con el sistema
Anti-backlash como el que se muestra en la figura 4.6.
Figura 4.6 Husillo SFU1610-C7 con sistema Anti-backlash.
Los ejes del KL4350 se asignaron como lo muestra la figura 4.7.
Figura 4.7 Asignación de ejes al CNC KL4350.
El fabricante de los motores 57BYGH78 solo proporciona las siguientes características:
Motor de pasos Hibrido de dos fases
Corriente por fase de 2.8 A
Angulo de paso de 1.8°
Par de retención mayor a 1.8 N·m
Debido a que no se proporciona información de las curvas de par vs velocidad para conocer
la frecuencia de arranque/parada y frecuencia máxima de los motores de pasos con su
respectiva carga, es necesario realizar una caracterización experimental.
Mediciones y evaluación del sistema de control 71
4.3.1 Caracterización experimental del sistema mecánico
Para la obtención de la frecuencia de arranque/parada se generaron trayectorias de
desplazamiento a frecuencia constante que fueran de un sensor de fin de curso a otro.
Inicialmente la frecuencia constante se estableció en 10 Hz y se desplazó la carga de cada eje
de un sensor de fin de curso a otro del eje correspondiente para conocer el número de pasos
del desplazamiento máximo. Este proceso se repitió solo 10 veces debido a que no se
presentaron variaciones en los valores obtenidos. Posteriormente se fue incrementando la
frecuencia constante de tal forma que el contador no reflejara una pérdida de pasos en el
desplazamiento. La frecuencia constante con la se perdieron pasos para el eje x fue de 210
Hz y para el eje y y z de 260 Hz, por lo que se estableció que la frecuencia mínima de
arranque/parada debía ser 10 Hz menor para evitar la pérdida de pasos al inicio o al final del
desplazamiento. En el caso de la frecuencia máxima se generaron los perfiles de velocidad
considerando el valor de la frecuencia de arranque/parada que ya se había obtenido pero
variando el valor de la frecuencia máxima en cada desplazamiento de un sensor de fin de
curso a otro hasta que se detectaron pérdida de pasos en el contador absoluto. Los valores
obtenidos de esta caracterización experimental son los mostrados en la tabla 4.1.
Eje Fmin (Hz) Fmax (Hz)
x 200 600
y 250 700
z 250 700
Tabla 4.1 Valores obtenidos de caracterización experimental.
El desplazamiento máximo por cada eje del sistema mecánico en número de pasos
establecido por el contador absoluto son los mostrados en la tabla 4.2
Eje Número de pasos
Paso Completo Medio Paso
x 15622 31244
y 12048 24096
z 3121 6242
Tabla 4.2 Valores del contador absoluto de cada eje.
En la tabla 4.3 se muestra el tiempo requerido para el desplazamiento máximo de cada eje a
frecuencia constante, igual a la frecuencia de arranque/parada, y tiempo requerido al utilizar
el perfil de velocidad de tipo trapezoidal establecido con los valores obtenidos de la
caracterización experimental.
72 Capítulo 4.
Eje Frecuencia Constante
(segundos)
Perfil Trapezoidal
(segundos)
x 75 23
y 57 20
z 15 5
Tabla 4.3 Comparativa de los tiempos de posicionamiento.
El tiempo para el desplazamiento de cada eje a la frecuencia arranque/parada de cada eje
corresponde al menor tiempo posible que tardaría un sistema de control convencional en
posicionar la carga de este sistema mecánico sin pérdida de pasos.
Finalmente se generaron trayectorias de desplazamiento desde 100 hasta 1000 pasos con
incrementos de 100 pasos, a frecuencia constante igual a la frecuencia arranque/parada.
Utilizando un vernier digital marca SURTEK con resolución de 0.01mm se midió el
desplazamiento que generaron las trayectorias en cada eje y se relacionó con el número de
pasos establecido, como se muestra en la tabla 4.4, obteniendo así una resolución de 0.03
mm por paso.
Trayectoria
Numero
de
pasos
Distancia
media sobre el
eje x (mm)
Distancia
media sobre el
eje y(mm)
Distancia
media sobre el
eje z(mm)
Resolución
1 100 3±0.02 3±0.02 3±0.02 0.03
2 200 6±0.02 6±0.02 6±0.02 0.03
3 300 9±0.02 9±0.02 9±0.02 0.03
4 400 12±0.02 12±0.02 12±0.02 0.03 5 500 15±0.02 15±0.02 15±0.02 0.03
6 600 18±0.02 18±0.02 18±0.02 0.03
7 700 21±0.02 21±0.02 21±0.02 0.03 8 800 24±0.02 24±0.02 24±0.02 0.03
9 900 27±0.02 27±0.02 27±0.02 0.03
10 1000 30±0.02 30±0.02 30±0.02 0.03
Tabla 4.4 Resolución obtenida mediante la relación del número de pasos con la distancia de la trayectoria para el
eje x, y, z.
Mediciones y evaluación del sistema de control 73
4.4 Resultados del Capítulo
Se diseñó un programa en Matlab para la evaluación de la generación de trenes de pulsos
correspondientes a perfiles de velocidad de tipo trapezoidal a través de los temporizadores
del microcontrolador de la tarjeta de control.
Se evaluó el sistema de control mediante un sistema mecánico comercial de tipo cartesiano.
Se caracterizó de forma experimental el sistema mecánico con lo que se obtuvieron los
valores de frecuencia de arranque y frecuencia máxima.
Se determinó que el sistema mecánico de tipo cartesiano tiene una resolución de 0.03 mm
por paso.
La evaluación del sistema de control aplicado a un sistema mecánico comercial de tipo
cartesiano da complimiento al último objetivo particular de este trabajo de tesis.
74
Conclusiones
Se diseñó una tarjeta de control basada en el microcontrolador MCF51QE128 para la
comunicación serial con la PC mediante comandos, para la caracterización de
sistemas mecánicos accionados por motores de pasos, así como el establecimiento de
sus trayectorias.
Se diseñó una tarjeta de accionamiento basada en los circuitos integrados L297 y
L298, que genera la secuencias de excitación de las fases de motores bipolares y
unipolares, lo que además contribuyó a la reducción significativa del algoritmo de
control
Se diseñó un algoritmo de control que calcula y genera perfiles de velocidad de tipo
trapezoidal para tres motores de pasos de forma simultánea en base a los tres
temporizadores independientes con los que cuenta el MCF51QE128. Además el uso
de la función del generador de pulsos programable hizo posible generar los perfiles
de velocidad en tiempo de ejecución.
Se evaluó la generación del tren de pulsos para el perfil de velocidad de tipo
trapezoidal mediante un programa diseñado en Matlab. El sistema de control en lazo
abierto se utilizó en un sistema mecánico de tipo cartesiano, el cual se caracterizó de
forma experimental, con lo que se obtuvo una resolución de 0.03 mm por paso.
75
Esta página se dejó en blanco intencionalmente
76
Trabajo a Futuro
Este trabajo cumplió con los objetivos propuestos sin embargo existen mejoras que debido
al límite de tiempo no pudieron ser realizadas. A continuación se enlistan algunas de ellas:
Inclusión de rutinas para la realización de barridos continuos.
Mejorar la tarjeta de accionamiento para controlar motores que requieran más de 2A
por fase.
La implementación de una función que genere un perfil de velocidad de tipo
parabólico.
Un arreglo que permita el control de un mayor número de motores de pasos.
77
Esta página se dejó en blanco intencionalmente.
78
Apéndice A /** ###################################################################
** Filename : Control de Posición.c
** Project : ProcessorExpert
** Processor : MCF51QE128CLH
** Version : Driver 01.00
** Compiler : CodeWarrior ColdFireV1 C Compiler
** Date/Time : 2013-10-01, 16:59, # CodeGen: 0
** Abstract :
** Main module.
** This module contains user's application code.
** Settings :
** Contents :
** ###################################################################*/
/* MODULE ProcessorExpert */
/* Including needed modules to compile this module/procedure */
#include "Cpu.h"
#include "Events.h"
#include "AS1.h"
#include "CLK1.h"
#include "CwCww1.h"
#include "HalfFull1.h"
#include "Enable1.h"
#include "FDCA1.h"
#include "FDCB1.h"
#include "PaP1.h"
#include "CWm1.h"
#include "CWWm1.h"
#include "CLK2.h"
#include "HalfFull2.h"
#include "Bit1.h"
#include "CwCww2.h"
#include "Enable2.h"
#include "FDCA2.h"
#include "FDCB2.h"
#include "PaP2.h"
#include "CWm2.h"
#include "CWWm2.h"
#include "CLK3.h"
#include "HalfFull3.h"
#include "CwCww3.h"
#include "Enable3.h"
#include "FDCB3.h"
#include "FDCA3.h"
#include "PaP3.h"
#include "CWm3.h"
#include "CWWm3.h"
#include "PE_Types.h"
#include "PE_Error.h"
#include "PE_Const.h"
#include "IO_Map.h"
Apéndice A
79
//Complemento de las variables para el control de la transmisión del
reporte de posición
extern int flag,giro[4];
int p=0;
void main(void)
{
// Processor Expert internal initialization.
PE_low_level_init();
//End of Processor Expert internal initialization.
for(;;){
//Control de tiempo para la transmisión de caracteres
if(flag==1){
if(p==500){
AS1_OnTxChar();
p=0;
}else{
p++;
}
}
//Verifica los sensores de fin de curso y deshabilita de ser necesario
if((FDCA1_GetVal())){
if((giro[1]==1)||(giro[1]==4)){
Enable1_ClrVal();
CLK1_Disable();
}
}
if((FDCB1_GetVal())){
if((giro[1]==2)||(giro[1]==3)){
Enable1_ClrVal();
CLK1_Disable();
}
}
if((FDCA2_GetVal())){
if((giro[2]==1)||(giro[2]==4)){
Enable2_ClrVal();
CLK2_Disable();
}
}
if((FDCB2_GetVal())){
if((giro[2]==2)||(giro[2]==3)){
Enable2_ClrVal();
CLK2_Disable();
}
}
if((FDCA3_GetVal())){
if((giro[3]==1)||(giro[3]==4)){
Enable3_ClrVal();
CLK3_Disable();
}
Apéndice A
80
}
if((FDCB3_GetVal())){
if((giro[3]==2)||(giro[3]==3)){
Enable3_ClrVal();
CLK3_Disable();
}
}
}
} //End of main routine.
/** ###################################################################
** Filename : Events.c
** Project : ProcessorExpert
** Processor : MCF51QE128CLH
** Component : Events
** Version : Driver 01.02
** Compiler : CodeWarrior ColdFireV1 C Compiler
** Date/Time : 2012-08-13, 16:25, # CodeGen: 0
** Abstract :
** This is user's event module.
** Put your event handler code here.
** Settings :
** Contents :
** ###################################################################*/
/* MODULE Events */
#include "Cpu.h"
#include "Events.h"
#include <stdlib.h> //Librería necesaria para la función itoa()
#include <math.h> //Librería necesaria para la función pow()
//Se establecen las cadenas identificadoras de los comandos
char *strPaso="paso=", *strHalf="h", *strFull="f";
char *strGiro="giro=",*strCw="cw", *strCww="ww";
char *strFmin="fmin=",*strZero="Z=",*strXi="Xi",*strEnd="E",*strXf="Xf";
char *strFmax="fmax=",*strDf="df=", *strXs="xs=";
char *strGo="go=",*strKill="k",*strStop="s",*strPos="p",*strReset="r";
//Se inicializan los arreglos en los que se almacenarán los valores
//enteros de los comandos
//Para todos los arreglos se consideró que
//El elemento [1] corresponde al eje X
//El elemento [2] corresponde al eje Y
//El elemento [3] corresponde al eje Z
int Fmax[4]={0x00};
int Fmin[4]={0x00};
int Df[4]={0x00};
int Xs[4]={0x00};
int giro[4]={0x00};
Apéndice A
81
//Se inicializan los arreglos en los que se almacenarán los valores
//enteros calculados para la generación del perfil de velocidad
int f[4]={0x00};
int xs[4]={0x00};
int cntAbs[4]={0x00};
int cntRel[4]={0x00};
int giroZero[4]={0x00};
int Xa[8]={0x00};
int Xd[8]={0x00};
int eventFlag[4]={0x00};
//Se inicializan los arreglos que almacenarán la cadena de caracteres de
//los valores que se soliciten para el reporte de posición
char strPasoXYZ[20]={0x00};
char strGiroXYZ[20]={0x00};
char strFminXYZ[20]={0x00};
char strCeroXYZ[20]={0x00};
char strFmaxXYZ[20]={0x00};
char strDfXYZ[20]={0x00};
char strXsXYZ[20]={0x00};
char strCntAbsX[20]={0x00};
char strCntAbsY[20]={0x00};
char strCntAbsZ[20]={0x00};
char strCntRelX[20]={0x00};
char strCntRelY[20]={0x00};
char strCntRelZ[20]={0x00};
char report[300]={0x00};
//para condicionar el comando stop
int m=0;
/*
** ===================================================================
** Event : AS1_OnRxChar (module Events)
** Component : AS1 [AsynchroSerial]
** Description : Este evento se active despues de que un character
** es recibido.
** Parameters : None
** Returns : Nothing
** ===================================================================
*/
//Inicializaciónn de variable y arreglo para la recepción de la
//comunicación serial
int numCharReceived = 0;
char received[20] = {0x00};
void AS1_OnRxChar(void)
{
AS1_TComData ch;//TComData type is defined in the AS1.h header file
byte err;
err = AS1_RecvChar(&ch);
Apéndice A
82
//Si hubo una interrupción por recepción en la comunicación serial
if((err == ERR_OK) && (ch != '\n')){ //y no es un Enter ('\n')
if((ch>'/')&&(ch<'{')){ //verificar que los caracteres
sean solo alfanuméricos
received[numCharReceived]= ch;//almacena el caracter en
//un arreglo
numCharReceived++; //contabiliza el número de
//caracteres recibidos
}
}
if((err == ERR_OK) && (ch == '\n')){ //Cuando se detecta un Enter
received[numCharReceived]= ch; //También se almacena
numCharReceived++; // se borra cualquier dato que
//no pertenezca al la cadena
//actual
for(numCharReceived; numCharReceived < 20; numCharReceived++)
received[numCharReceived] = 0x00;
numCharReceived = 0;
comparaCadena(received); //Se envía a la función para
//comparar la cadena con los comandos
//establecidos
}
}
/*
** ===================================================================
** Event : AS1_OnTxChar (module Events)
**
** Component : AS1 [AsynchroSerial]
** Description : Este evento se active cuando un caracter es enviado
** Parameters : None
** Returns : Nothing
** ===================================================================
*/
//Se inicializan las variables para el control de la transmición de datos
unsigned long len=0;
int n=0,flag=0;
void AS1_OnTxChar(void)
{
AS1_TComData ch;
len=strlen(report); //Se cuenta el número de caracteres a transmitir
ch=report[n]; //Se establece el caracter que corresponda para la
//transmisión
if(n<len){ //Si el caracter no es el último de la cadena
AS1_SendChar(ch); // Se transmite
n++;
AS1_OnRxChar();
}else{
AS1_OnRxChar(); //Si es el último deja de transmitir
len=0; //reiniciando la bandera
flag=0;
Apéndice A
83
}
}
/*
** ===================================================================
** Función : void comparaCadena(char *received)
** Descripción : Compara la cadena de caracteres recibida con
** las cadenas establecidas para los comandos
** Parametros : apuntador del arreglo received
** Retorno : Ninguno
** ===================================================================
*/
void comparaCadena(char *received){
unsigned short l;
//Comando "paso=" para establecer el tipo de paso de los motores x,y,z
if(!(strncmp(strPaso,received,5))){
l=0;
while(strPasoXYZ[l]!= 0x00){ //Limpia el arreglo
strPasoXYZ[l]=0x00;
l++;
}
while(*received != 0x00){ //recorre el arreglo para
++received; // analizarlo de atrás hacia adelante
}
while(*received != ';'){//busca caracter antes del primer ";"
--received;
if(*received == 'h'){
HalfFull3_SetVal();//establece el tipo de paso en
//medio paso para el eje z
}
if(*received == 'f'){
HalfFull3_ClrVal();//establece el tipo de paso
//completo para el eje z
}
}
--received;
while(*received != ';'){
if(*received == 'h'){
HalfFull2_SetVal();//establece el tipo de paso en
//medio paso para el eje y
}
if(*received == 'f'){
HalfFull2_ClrVal();//establece el tipo de paso
//completo para el eje y
}
--received;
}
while(*received != '='){
--received;
if(*received == 'h'){
HalfFull1_SetVal();//establece el tipo de paso en
//medio paso para el eje x
}
Apéndice A
84
if(*received == 'f'){
HalfFull1_ClrVal();//establece el tipo de paso
//completo para el eje x
}
}
strcat(strPasoXYZ,(++received)); //almacena la cadena para el
//reporte de posición
}
//Comando "fmin=" para introducir en Hz la frecuencia de arranque de los
//motores x,y,z
if(!(strncmp(strFmin,received,5))){
l=0;
while(strFminXYZ[l]!= 0x00){
strFminXYZ[l]=0x00;
l++;
}
while(*received != 0x00){
++received;
}
while(*received != ';'){
Fmin[3] = atoi(received); //Convierte el valor ASCII en
f[3]=Fmin[3]; //entero y lo almacena en el elemento [3]
--received; //que corresponde a eje z
}
--received;
while(*received != ';'){
Fmin[2] = atoi(received);//Convierte el valor ASCII en
f[2]=Fmin[2];//entero y lo almacena en el elemento [2]
--received; //que corresponde a eje y
}
while(*received != '='){
Fmin[1] = atoi(received);//Convierte el valor ASCII en
f[1]=Fmin[1];//entero y lo almacena en el elemento [1]
--received; //que corresponde a eje x
}
CLK1_SetFreqHz((unsigned short)f[1]); //Se establece el valor
CLK2_SetFreqHz((unsigned short)f[2]); //de la frecuencia de
CLK3_SetFreqHz((unsigned short)f[3]); //arranque en cada
//temporizador
strcat(strFminXYZ,(++received)); //almacena la cadena para el
//reporte de posición
Calculo(); //La función Calculo() calcula los valores para la
//generación del perfil si todos los valores
//necesarios han sido introducidos por el usuario
}
//Comando "Z=" para posicionar en cero mecánico los ejes x,y,z
if(!(strncmp(strZero,received,2))){
eventFlag[1]=1; //Se establece el inicio de la localización
eventFlag[2]=1; //del cero mecánico mediante la bandera
eventFlag[3]=1; //eventFlag igual a 1 para todos los ejes
Apéndice A
85
l=0;
while(strCeroXYZ[l]!= 0x00){
strCeroXYZ[l]=0x00;
l++;
}
while(*received != 0x00){
++received;
}
while(*received != ';'){
received=received-3;
if(*received == 'c'){ //Se almacena el sentido de giro
received=received+2;// seleccionado para cada eje
giro[3]=1;
}
if(*received == 'w'){
received=received+2;
giro[3]=2;
}
}
--received;
while(*received != ';'){
--received;
if(*received == 'c'){
giro[2]=1;
}
if(*received == 'w'){
giro[2]=2;
}
}
--received;
while(*received != '='){
--received;
if(*received == 'c'){
giro[1]=1;
}
if(*received == 'w'){
giro[1]=2;
}
}
SelectGiro();
if(!(((FDCA1_GetVal())&&(giro[1]==1))^((FDCB1_GetVal())&&(giro[1]==2)))){
Enable1_SetVal(); //Habilitan los motores y los
CLK1_Enable(); //temporizadores así como los
CLK1_EnableEvent();//eventos asociados para la
//detección del sensor de fin de curso
// y el control de los contadores
}
if(!(((FDCA2_GetVal())&&(giro[2]==1))^((FDCB2_GetVal())&&(giro[2]==2)))){
Enable2_SetVal();
CLK2_Enable();
CLK2_EnableEvent();
}
Apéndice A
86
if(!(((FDCA3_GetVal())&&(giro[3]==1))^((FDCB3_GetVal())&&(giro[3]==2)))){
Enable3_SetVal();
CLK3_Enable();
CLK3_EnableEvent();
}
}
//Comando "k" para generar una parada de emergencia o detener el
//desplazamiento de los motores para establecer el cero mecánico y el
//desplazamiento máximo de forma manual si no se cuenta con sensores de
//fin de curso
if(!(strncmp(strKill,received,1))){
Enable1_ClrVal(); //Deshabilita todos los motores y sus
Enable2_ClrVal(); // temporizadores
Enable3_ClrVal();
CLK1_Disable();
CLK2_Disable();
CLK3_Disable();
}
//Comando "Xi" para establecer el cero mecánico ya sea con o sin sensores
//de fin de curso
if(!(strncmp(strXi,received,2))){
giroZero[1]=giro[1]; //Se almacena el sentido de giro con el
giroZero[2]=giro[2]; //que se consiguió llegar al cero
giroZero[3]=giro[3]; //mecánico de cada eje
cntAbs[1]=0; //Se inicializa el contador absoluto de
cntAbs[2]=0; //todos los ejes
cntAbs[3]=0;
eventFlag[1]=2; //Se establece la bandera para la
eventFlag[2]=2; //localización del desplazamiento máximo
eventFlag[3]=2;
}
//Comando "E" para posicionar en fin mecánico los ejes x,y,z con la
//detección de los sensores de fin de curso o utilizando el comando k
//para el posicionamiento manual
if(!(strncmp(strEnd,received,1))){
if(eventFlag[1]==2){
if(giro[1]==1){
CwCww1_ClrVal(); //girar en sentido opuesto al
giro[1]=3; // establecido para el cero mecánico
}
if(giro[1]==2){
CwCww1_SetVal();
giro[1]=4;
}
Enable1_SetVal(); //Habilitar el motor y el
CLK1_Enable(); // temporizador así como sus eventos
CLK1_EnableEvent();
}
if(eventFlag[2]==2){
Apéndice A
87
if(giro[2]==1){
CwCww2_ClrVal();
giro[2]=3;
}
if(giro[2]==2){
CwCww2_SetVal();
giro[2]=4;
}
Enable2_SetVal();
CLK2_Enable();
CLK2_EnableEvent();
}
if(eventFlag[3]==2){
if(giro[3]==1){
CwCww3_ClrVal();
giro[3]=3;
}
if(giro[3]==2){
CwCww3_SetVal();
giro[3]=4;
}
Enable3_SetVal();
CLK3_Enable();
CLK3_EnableEvent();
}
}
//Comando "Xf" para establecer el desplazamiento máximo
if(!(strncmp(strXf,received,2))){
cntRel[1]=cntAbs[1]; //Se establece el contador relativo
cntRel[2]=cntAbs[2]; //que nos dará la posición en la que
cntRel[3]=cntAbs[3]; //se encuentre cada eje
eventFlag[1]=3; //Se finaliza el proceso para
eventFlag[2]=3; // establecer el área de trabajo
eventFlag[3]=3;
}
//Comando "fmax=" para introducir en Hz la frecuencia máxima de los
//motores x,y,z
if(!(strncmp(strFmax,received,5))){
l=0;
while(strFmaxXYZ[l]!= 0x00){
strFmaxXYZ[l]=0x00;
l++;
}
while(*received != 0x00){
++received;
}
while(*received != ';'){
Fmax[3] = atoi(received);
--received;
}
--received;
while(*received != ';'){
Fmax[2] = atoi(received);
Apéndice A
88
--received;
}
while(*received != '='){
Fmax[1] = atoi(received);
--received;
}
strcat(strFmaxXYZ,(++received));
Calculo();
}
//Comando "df=" para introducir el incremento lineal de la frecuencia de
//los motores x,y,z
if(!(strncmp(strDf,received,3))){
l=0;
while(strDfXYZ[l]!= 0x00){
strDfXYZ[l]=0x00;
l++;
}
while(*received != 0x00){
++received;
}
while(*received != ';'){
Df[3] = atoi(received);
--received;
}
--received;
while(*received != ';'){
Df[2] = atoi(received);
--received;
}
while(*received != '='){
Df[1] = atoi(received);
--received;
}
strcat(strDfXYZ,(++received));
Calculo();
}
//Comando "xs=" para introducir la distancia en número de pasos a
//recorrer de los motores x,y,z
if(!(strncmp(strXs,received,3))){
l=0;
while(strXsXYZ[l]!= 0x00){
strXsXYZ[l]=0x00;
l++;
}
while(*received != 0x00){
++received;
}
while(*received != ';'){
Xs[3] = atoi(received);
--received;
}
--received;
Apéndice A
89
while(*received != ';'){
Xs[2] = atoi(received);
--received;
}
while(*received != '='){
Xs[1] = atoi(received);
--received;
}
strcat(strXsXYZ,(++received));
Calculo();
}
//Comando "giro=" para establecer el sentido de giro de los tres motores
//x,y,z
if(!(strncmp(strGiro,received,5))){
l=0;
while(strGiroXYZ[l]!= 0x00){
strGiroXYZ[l]=0x00;
l++;
}
while(*received != 0x00){
++received;
}
while(*received != ';'){
received=received-3;
if(*received == 'c'){
received=received+2;
giro[3]=1;
SelectGiro();
}
if(*received == 'w'){
received=received+2;
giro[3]=2;
SelectGiro();
}
}
--received;
while(*received != ';'){
--received;
if(*received == 'c'){
giro[2]=1;
SelectGiro();
}
if(*received == 'w'){
giro[2]=2;
SelectGiro();
}
}
--received;
while(*received != '='){
--received;
if(*received == 'c'){
giro[1]=1;
SelectGiro();
}
Apéndice A
90
if(*received == 'w'){
giro[1]=2;
SelectGiro();
}
}
strcat(strGiroXYZ,(++received));
}
//Comando "go" para generar un reporte de los valores introducidos
if(!(strncmp(strGo,received,2))){
xs[1]=0;
xs[2]=0;
xs[3]=0;
f[1]=Fmin[1];
f[2]=Fmin[2];
f[2]=Fmin[2];
CLK1_SetFreqHz((unsigned short)f[1]); //Se establece el valor
CLK2_SetFreqHz((unsigned short)f[2]); //de la frecuencia de
CLK3_SetFreqHz((unsigned short)f[3]); // arranque en cada
if(Xs[1]>0){ // temporizador
Enable1_SetVal();
CLK1_Enable();
CLK1_EnableEvent();
}
if(Xs[2]>0){
Enable2_SetVal();
CLK2_Enable();
CLK2_EnableEvent();
}
if(Xs[3]>0){
Enable3_SetVal();
CLK3_Enable();
CLK3_EnableEvent();
}
}
//Comando "s" para detener el desplazamiento con una desaceleración para
//evitar la pérdida de pasos
if(!(strncmp(strStop,received,1))){
if(eventFlag[1]==3){
Xs[1]=Xa[1];
xs[1]=Xs[1];
}
if(eventFlag[2]==3){
Xs[2]=Xa[2];
xs[2]=Xs[2];
}
if(eventFlag[3]==3){
Xs[3]=Xa[3];
xs[3]=Xs[3];
}
}
//Comando "r" para generar un reporte de los valores introducidos
if(!(strncmp(strPos,received,1))){
l=0;
Apéndice A
91
while(report[l]!=0x00){
report[l]=0x00;
l++;
}
itoa(cntAbs[1],strCntAbsX);
itoa(cntAbs[2],strCntAbsY);
itoa(cntAbs[3],strCntAbsZ);
itoa(cntRel[1],strCntRelX);
itoa(cntRel[2],strCntRelY);
itoa(cntRel[3],strCntRelZ);
strcat(report,"Frecuencia de Arranque: ");
strcat(report,strFminXYZ);
strcat(report,"Frecuencia Maxima: ");
strcat(report,strFmaxXYZ);
strcat(report,"Incremento de la Frecuencia: ");
strcat(report,strDfXYZ);
strcat(report,"Desplazamiento maximo:");
strcat(report,strCntAbsX);
strcat(report,";");
strcat(report,strCntAbsY);
strcat(report,";");
strcat(report,strCntAbsZ);
strcat(report,"\n");
strcat(report,"Posicion actual:");
strcat(report,strCntRelX);
strcat(report,";");
strcat(report,strCntRelY);
strcat(report,";");
strcat(report,strCntRelZ);
strcat(report,"\n");
n=0;
flag=1;
}
//Comando "r" para reinciar la configuración en cero
if(!(strncmp(strReset,received,1))){
}
}
/*
** ===================================================================
** Función : void Calculo()
** Descripción : Calcula los valores necesarios para el desarrollo
** del perfil de velocidad
** Parámetros : Ninguno
** Retornos : Ninguno
** ===================================================================
*/
void Calculo(){
for(m=1;m<4;m++){
if((Fmax[m]!=0)&&(Fmin[m]!=0)&&(Df[m]!=0)&&(Xs[m]!=0)){
Xa[m]=((Fmax[m]-Fmin[m])/Df[m])+1;
if((Xa[m]*2)>Xs[m]){
Xa[m]=Xs[m]/4;
}
Apéndice A
92
Xd[m]=Xs[m]-Xa[m];
}
}
}
/*
** ===================================================================
** Función : void SelectGiro()
** Descripción : Establece el giro en base al valor numérico del
** elemento correspondiente en el arreglo
** Parámetros : Ninguno
** Retornos : Ninguno
** ===================================================================
*/
void SelectGiro(){
if(giro[1]==1){
CwCww1_SetVal();
}
if(giro[1]==2){
CwCww1_ClrVal();
}
if(giro[2]==1){
CwCww2_SetVal();
}
if(giro[2]==2){
CwCww2_ClrVal();
}
if(giro[3]==1){
CwCww3_SetVal();
}
if(giro[3]==2){
CwCww3_ClrVal();
}
}
/*
** ===================================================================
** Función : void itoa()
** Descripción : Almacena en una cadena el código ASCII de un entero
** Parámetros : Ninguno
** Retornos : Ninguno
** ===================================================================
*/
int curDig=0, e=0;
long Dig=0;
void itoa(int cntAbs, char *strCntAbs){
char strAlt[30];
e=1;
Dig=cntAbs;
do{
Dig/=pow(10,(e));
Dig*=pow(10,(e));
curDig=cntAbs-Dig;
curDig/=pow(10,e-1);
Apéndice A
93
if(curDig<=9){
strAlt[e++]=L'0'+curDig;
}
}while(Dig);
strCntAbs--;
do{
*strCntAbs=strAlt[e];
strCntAbs++;
e--;
}while(e>0);
while(*strCntAbs!=0x00){
*strCntAbs=0x00;
}
}
/*
** ===================================================================
** Event : CLK1_OnEnd (module Events)
**
** Component : CLK1 [PPG]
** Description :
** This event is called when the specified number of iterations
** is generated. (Only when the component is enabled - <Enable>
** and the events are enabled - <EnableEvent>). The event is
** available only when the peripheral supports an interrupt,
** that is generated at the end of the PWM period.
** Parameters : None
** Returns : Nothing
** ===================================================================
*/
void CLK1_OnEnd(void)
{
if(eventFlag[1]==2){
cntAbs[1]++;
}
if(eventFlag[1]==3){
if(Xs[1]){
Xs[1]--;
xs[1]++;
if(xs[1]<=Xa[1]){
CLK1_SetFreqHz((unsigned short)f[1]);
f[1]+=Df[1];
}
if(xs[1]>=Xd[1]){
f[1]-=Df[1];
CLK1_SetFreqHz((unsigned short)f[1]);
}
if(giro[1]==giroZero[1]){
cntRel[1]--;
}else{
cntRel[1]++;
}
}else{
Apéndice A
94
Enable1_ClrVal();
CLK1_Disable();
CLK1_DisableEvent();
}
}
}
/*
** ===================================================================
** Event : CLK2_OnEnd (module Events)
**
** Component : CLK2 [PPG]
** Description :
** This event is called when the specified number of iterations
** is generated. (Only when the component is enabled - <Enable>
** and the events are enabled - <EnableEvent>). The event is
** available only when the peripheral supports an interrupt,
** that is generated at the end of the PWM period.
** Parameters : None
** Returns : Nothing
** ===================================================================
*/
void CLK2_OnEnd(void)
{
if(eventFlag[2]==2){
cntAbs[2]++;
}
if(eventFlag[2]==3){
if(Xs[2]){
Xs[2]--;
xs[2]++;
if(xs[2]<=Xa[2]){
CLK2_SetFreqHz((unsigned short)f[2]);
f[2]+=Df[2];
}
if(xs[2]>=Xd[2]){
f[2]-=Df[2];
CLK2_SetFreqHz((unsigned short)f[2]);
}
if(giro[2]==giroZero[2]){
cntRel[2]--;
}else{
cntRel[2]++;
}
}else{
Enable2_ClrVal();
CLK2_Disable();
CLK2_DisableEvent();
}
}
}
Apéndice A
95
/*
** ===================================================================
** Event : CLK3_OnEnd (module Events)
**
** Component : CLK3 [PPG]
** Description :
** This event is called when the specified number of iterations
** is generated. (Only when the component is enabled - <Enable>
** and the events are enabled - <EnableEvent>). The event is
** available only when the peripheral supports an interrupt,
** that is generated at the end of the PWM period.
** Parameters : None
** Returns : Nothing
** ===================================================================
*/
void CLK3_OnEnd(void)
{
if(eventFlag[3]==2){
cntAbs[3]++;
}
if(eventFlag[3]==3){
if(Xs[3]){
Xs[3]--;
xs[3]++;
if(xs[3]<=Xa[3]){
CLK3_SetFreqHz((unsigned short)f[3]);
f[3]+=Df[3];
}
if(xs[3]>=Xd[3]){
f[3]-=Df[3];
CLK3_SetFreqHz((unsigned short)f[3]);
}
if(giro[3]==giroZero[3]){
cntRel[3]--;
}else{
cntRel[3]++;
}
}else{
Enable3_ClrVal();
CLK3_Disable();
CLK3_DisableEvent();
}
}
}
Apéndice A
96
/** ###################################################################
** Filename : Events.h
** Project : ProcessorExpert
** Processor : MCF51QE128CLH
** Component : Events
** Version : Driver 01.02
** Compiler : CodeWarrior ColdFireV1 C Compiler
** Date/Time : 2013-10-01, 16:59, # CodeGen: 0
** Abstract :
** This is user's event module.
** Put your event handler code here.
** Settings :
** Contents :
** No public methods
**
** ###################################################################*/
#ifndef __Events_H
#define __Events_H
/* MODULE Events */
#include "PE_Types.h"
#include "PE_Error.h"
#include "PE_Const.h"
#include "IO_Map.h"
#include "PE_Timer.h"
#include "AS1.h"
#include "CLK1.h"
#include "CwCww1.h"
#include "HalfFull1.h"
#include "Enable1.h"
#include "FDCA1.h"
#include "FDCB1.h"
#include "PaP1.h"
#include "CWm1.h"
#include "CWWm1.h"
#include "CLK2.h"
#include "HalfFull2.h"
#include "Bit1.h"
#include "CwCww2.h"
#include "Enable2.h"
#include "FDCA2.h"
#include "FDCB2.h"
#include "PaP2.h"
#include "CWm2.h"
#include "CWWm2.h"
#include "CLK3.h"
#include "HalfFull3.h"
#include "CwCww3.h"
#include "Enable3.h"
#include "FDCB3.h"
#include "FDCA3.h"
#include "PaP3.h"
#include "CWm3.h"
#include "CWWm3.h"
/*
Apéndice A
97
** ===================================================================
** Event : AS1_OnRxChar (module Events)
** Component : AS1 [AsynchroSerial]
** Description :
** This event is called after a correct character is received.
** The event is available only when the <Interrupt
** service/event> property is enabled and either the <Receiver>
** property is enabled or the <SCI output mode> property (if
** supported) is set to Single-wire mode.
** Parameters : None
** Returns : Nothing
** ===================================================================
*/
void AS1_OnRxChar(void);
/*
** ===================================================================
** Event : AS1_OnTxChar (module Events)
** Component : AS1 [AsynchroSerial]
** Description :
** This event is called after a character is transmitted.
** Parameters : None
** Returns : Nothing
** ===================================================================
*/
void AS1_OnTxChar(void);
void comparaCadena(char *);
void Calculo(void);
void SelectGiro(void);
void itoa(int, char *);
/*
** ===================================================================
** Event : CLK1_OnEnd (module Events)
**
** Component : CLK1 [PPG]
** Description :
** This event is called when the specified number of iterations
** is generated. (Only when the component is enabled - <Enable>
** and the events are enabled - <EnableEvent>). The event is
** available only when the peripheral supports an interrupt,
** that is generated at the end of the PWM period.
** Parameters : None
** Returns : Nothing
** ===================================================================
*/
void CLK1_OnEnd(void);
Apéndice A
98
/*
** ===================================================================
** Event : CLK2_OnEnd (module Events)
**
** Component : CLK2 [PPG]
** Description :
** This event is called when the specified number of iterations
** is generated. (Only when the component is enabled - <Enable>
** and the events are enabled - <EnableEvent>). The event is
** available only when the peripheral supports an interrupt,
** that is generated at the end of the PWM period.
** Parameters : None
** Returns : Nothing
** ===================================================================
*/
void CLK2_OnEnd(void);
/*
** ===================================================================
** Event : CLK3_OnEnd (module Events)
**
** Component : CLK3 [PPG]
** Description :
** This event is called when the specified number of iterations
** is generated. (Only when the component is enabled - <Enable>
** and the events are enabled - <EnableEvent>). The event is
** available only when the peripheral supports an interrupt,
** that is generated at the end of the PWM period.
** Parameters : None
** Returns : Nothing
** ===================================================================
*/
void CLK3_OnEnd(void);
/* END Events */
#endif /* __Events_H*/
99
Apéndice B
Vista superior de la tarjeta de control
PCB de la tarjeta de control
Apéndice B
100
Vista superior de la tarjeta de accionamiento
PCB de la tarjeta de accionamiento
101
Bibliografía
[1] Sears, Zemansky, Física Universitaria con Física Moderna, Vol. 2, Decimosegunda
Edición, Pearson Educación, México, 2009.
[2] Plonus M. A., Electromagnetismo aplicado, Ed. Reverté, 1994.
[3] Acarnley P. P., Stepping motors. A guide to theory and practice, The Institution of
Engineering and Technology, London, United Kingdom, 2007.
[4] Hughes A., Electric Motors and Drives. Fundamentals, Types and Applications,
Third Edition, Elsevier Ltd. Great Brirain, 2006.
[5] Kenjo T., Stepping motors and their microprocessor controls, Oxford, United States,
1984.
[6] Ogata K., Ingeniería de control moderna, Ed. Pearson, España, 2010.
[7] Lee S. Y., Kang C. S., Hyun C. H., Park M., S-Curve Profile Switching Method using
Fuzzy System for Position Control of DC Motor under Uncertain Load, ICROS, 2012.
[8] Wang B., Liu Q., Zhou L., Zhang Y., Li X., Zhang J., Velocity Profile algorithm
Realization on FPGA for Stepper Motor Controller, IEEE, Pág. 6072-6075, 2011.
[9] Shuquiu Gong A., Bin He B., LabVIEW-based automatic rising and falling Speed
control of stepper motor, ICEMS, 2009.
[10] Li L., Chen X., Study on the Novel Main Circuit Topology of Stepping Motor Drive,
IEEE, Pág. 2021-2024, 2009.
[11] Zhihuang H., Lin L., Donghui G., Desing of Stepping Motor Driving Module for
Automatic Microscope System, IEEE, Pág. 328-331, 2009
[12] Weiwei H., Jianjing S., Desing and Study of the High-precision Stepping Motor
Control System for Intelligent Sampling of Liquid, IEEE, Volume 3 Pág. 125-
128,2010.
[13] Sung-Wook M., Young-Jin K., Yoon-Taek L., Dong Hwan K., Missing Step
Detection in a High Speed Micro Stepping Motor Using Current Feedback, ICROS,
Pág. 494-497, 2012
Bibliografía
102
[14] Huan T., Jianxun Z. y Wenqin L., Desing of DSP based Multiple Stepping-motors
Micro-stepping Driving Controller, IEEE, Pág. 340-345, 2005.
[15] Wei C., Zhongwei F., A Fast Accelerating Algorithm For Stepping Motor, IEEE,
Pág.1179-1182, 2010.
[16] Martínez O.K., Leija L., Vera A., 3Dcartesian System for the Characterization of
Electromagnetic and Ultrasonic Aplicators: Validation and Performance Testing,
IEEE, Pág. 160-162, 2013.
[17] Espina-Hernández J. H., Automatización de las mediciones de textura con el uso de
un goniómetro comercial, Tesis de maestría en sistemas automatizados de medición,
I.S.P.J.A.E. Facultad de Eléctrica, Cuba, 1998.
[18] Espina-Hernández J. H., New intelligent stepping motor controller at the LNLS,
LNLS – Campinas, Brazil, 2002.
[19] Díaz-Estrella A., Teoría y diseño con microcontroladores de Freescale, Ed.
McGRAW-HILL, España 2008.
103
Agradecimientos
Le agradezco primeramente a Dios que me ha permitido la claridad de mente y la vida para
adquirir el conocimiento que me ha permitido llegar hasta el cumplimiento de esta meta.
Le agradezco a mi mamá Patricia Vázquez por haberme dado la vida y el ímpetu para buscar
ser lo mejor en cualquier ámbito en el que me desarrolle. A mis suegros que me han apoyado
tal como si fuera su propia hija. A mi abuelita Ofelia y a mi tía Mayte que a través de su
ejemplo de lucha contra el cáncer me han enseñado a nunca darme por vencida a pesar de las
circunstancias. A mi abuelito Sotero, a mi abuelita Maty y a mi abuelito Miguel que me
enseñaron la importancia de la unidad familiar para disfrutar al máximo de los triunfos y
atenuar el dolor de los fracasos. A toda mi familia que siempre busca la forma de hacerse
presente para ofrecerme el apoyo en todo momento. Pero sobre todo a mi amado esposo
Daniel De La Paz que ha cumplido a letra cabal la frase de “en las buenas y en las malas” y
que siempre ha apoyado sin reservas mi crecimiento profesional, espiritual y emocional.
A mis directores de tesis el Dr. José Hiram Espina Hernández y el Dr. José Alberto Pérez
Benítez por brindarme su asesoría, tiempo, consejos, revisiones y correcciones durante la
realización de este trabajo de tesis.
A mis profesores y sinodales por ofrecer su tiempo y experiencia en el campo de la
investigación correspondiente.
A mis compañeros Andrés, Saraí y Javier por compartir esta etapa de la vida conmigo desde
el inicio. A mis compañeros de laboratorio Eduardo, Pedro, Juan, Nathalia, Arturo y Jorge
que siempre estuvieron dispuestos a compartir análisis y propuestas. Agradezco a todos mis
compañeros tanto del programa de maestría como del doctorado, a los que ya egresaron y a
los que faltan por egresar, ya que han contribuido a que la estancia de la maestría se haya ido
como un suspiro.