Escolar Documentos
Profissional Documentos
Cultura Documentos
TESIS
Presenta
Omar Rodrguez Paez
Agosto 2008
A mis padres, mi hermana, mis abuelos y toda mi familia.
Dedicatoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v
Contenido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vi
Lista de Figuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi
Lista de Tablas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv
Lista de Smbolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii
Lista de Publicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix
1. Introduccion 1
1.1. Antecedentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2. Objetivo de la tesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3. Justificacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4. Organizacion del documento . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2. El robot SCARA 13
2.1. Arquitectura del robot SCARA . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2. Motores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2.1. Motores de CD con escobillas . . . . . . . . . . . . . . . . . . . . . . 14
2.2.2. Motores de pasos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3. Sensores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3.1. Odometro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3.2. Sensores de lmite . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.4. Fuente de alimentacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.5. Microcontrolador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.6. Esquema de conexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.6.1. Programacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.7. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
vii
viii Contenido
5. Fuente de alimentacion 73
5.0.1. Circuito regulador de voltaje ajustable LM338 . . . . . . . . . . . . 74
5.0.2. Circuito regulador de voltaje L7805 . . . . . . . . . . . . . . . . . . 75
5.1. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6. Pruebas y resultados 79
6.1. Diseno de la fuente de alimentacion y pruebas realizadas . . . . . . . . . . . 79
6.1.1. Otros esquemas probados e investigados . . . . . . . . . . . . . . . . 80
6.1.2. Pruebas realizadas a la fuente de alimentacion operando los dos mo-
tores de pasos con distintos valores del snubber de sobrevoltaje . . . 83
6.2. Pruebas realizadas al CI SLA7062M . . . . . . . . . . . . . . . . . . . . . . 87
6.3. Microcontrolador y pruebas de software . . . . . . . . . . . . . . . . . . . . 88
6.4. Pruebas del robot realizadas sobre madera . . . . . . . . . . . . . . . . . . . 91
6.4.1. Cinematica del robot . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
6.4.2. Cinematica inversa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
6.5. Comparacion de costos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
6.6. Sugerencias para el desarrollo del robot . . . . . . . . . . . . . . . . . . . . 98
7. Conclusiones 99
7.1. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
7.2. Sugerencias para trabajos futuros . . . . . . . . . . . . . . . . . . . . . . . . 101
Contenido ix
Referencias 167
Glosario 175
xi
xii Lista de Figuras
A.1. Figura que muestra los comandos del control de los motores de pasos. . . . 108
3.1. Secuencia con una sola bobina energizada del motor de pasos. . . . . . . . . 30
3.2. Secuencia con dos bobinas energizadas. . . . . . . . . . . . . . . . . . . . . . 31
3.3. Secuencia de medio paso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.4. Modos de Paso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
xv
Lista de Smbolos
xvii
Lista de Publicaciones
xix
Captulo 1
Introduccion
Esta tesis trata sobre el diseno y construccion de un brazo-robot tipo SCARA (del
ingles Selective Compliance Assembly Robot Arm [Robotics06b]) de 4 grados de libertad,
de plataforma abierta, desarrollado en la division de Estudios de Posgrado de la Facultad
de Ingeniera Eectrica de la UMSNH.
En la actualidad, practicamente todos los robots SCARA que se encuentran en el
mercado son de origen extranjero. Para que una empresa establecida en el pas consiga un
robot de este tipo es necesario importarlo. Esto trae consigo varias desventajas [Romero01]:
(1) El costo de adquisicion es elevado y se incrementa aun mas con el pago de gastos de
importacion (alrededor de un 35 % adicional), (2) el mantenimiento es ineficiente y caro, si
ocurre alguna avera es necesario exportarlo y reimportarlo con todo lo que ello implica, o
bien, llamar a un equipo de tecnicos expertos de la empresa extranjera a la que se le compro y
pagar los servicios y viaticos del grupo; (3) es muy comun que se trate de sistemas cerrados,
por lo que no es posible anadir nuevas capacidades.
Para enfrentar este problema se esta desarrollando software y hardware, libre e
independiente, como es el caso de un pequeno grupo de investigadores japoneses que esperan
emular el exito del movimiento del codigo abierto que ha tenido el sistema operativo Linux,
en el mundo de los humanoides [Williams02, Arellano05]. El proyecto se llama Open PINO
Platform, cuya intencion es acelerar la investigacion y desarrollo de robots humanoides
difundiendo a todo mundo la informacion tecnica de PINO.
Siguiendo esta idea, se desarrolla y construye un robot SCARA flexible, robusto,
expansible, economico y de plataforma abierta. El objetivo esencial es contribuir al impulso
del desarrollo de la tecnologa en el area de robotica, mediante la descripcion detallada del
1
2 Captulo 1: Introduccion
1.1. Antecedentes
El termino robot fue introducido en 1917 por Karel Capek en su obra Opilec
[Ramrez98, Spong89], proviente de la palabra checoslovaca robota, que significa labor monoto-
na o trabajo forzado. A traves de los anos desde su aparicion, el significado de robot ha
tenido diversas definiciones. Sin embargo, la definicion con mayor aceptacion es la adoptada
por el Instituto Norteamericano de Robots [Ramrez98]:
Un robot es una maquina de proposito general que puede ser programada para realizar
una variedad de tareas de forma similar a una computadora, que es basicamente, un
circuito electronico capaz de ser programado para realizar una gran variedad de tareas
[Mckerrow91].
Los robots son dispositivos mecanicos versatiles equipados con actuadores y sensores
bajo el control de un sistema computacional. Los robots son programables y pueden
realizar tareas ejecutando movimientos en el espacio fsico, sujeto a las leyes naturales
[Latombe91].
1.1. Antecedentes 3
Trazo
vertical
Trazo horizontal
Alcance horizontal
Alcance horizontal maximo
Topes de minimo
Espacio de trabajo movimiento
Giro vertical
alrededor del
hombro
Giro alrededor
de la base
Trazo
Alcance
horizontal horizontal
Figura 1.1: Diferentes categoras en las que se encuentran los robots manipuladores y sus
respectivas areas de trabajo [Petriu06].
1.1. Antecedentes 5
En 1979 el diseno del robot SCARA (Selective Compliance Assembly Robot Arm),
mostrado en la Figura 1.2, fue introducido por primera vez en Japon [Spong89]. Debido a
su configuracion adquirio rapidamente gran popularidad en operaciones de montaje. Este
tipo de brazo robot se clasifica en la categora de manipuladores de coordenadas cilndricas.
En general, los robots SCARA tienen 4 grados de libertad y se pueden mover a cualquier
coordenada X-Y-Z dentro de su espacio de trabajo. Ademas, posee otro movimiento so-
bre su propio eje en el plano Z, denominado comunmente rotacion de muneca (Theta-Z)
[Robotics06b]. Los movimientos en las direcciones X, Y y Theta-Z se obtienen con tres
uniones rotacionales de ejes paralelos. El movimiento vertical es usualmente un eje lineal
independiente que se encuentra ya sea en el extremo del brazo o en la base del robot, el cual
puede ser usado para mover objetos relativamente pesados en el plano horizontal. Como
virtud del esquema de uniones rotacionales de ejes paralelos, el brazo-robot puede ubicarse
en cualquier punto de las direcciones X y Y, pero es rgido en la direccion Z, de ah el
termino Selective Compliance [Yamaha06]. Lo anterior es una ventaja para varios tipos de
operaciones de montaje. Otro atributo que tienen los robots SCARA es que emulan las ca-
ractersticas de un brazo humano, por lo que tambien se denominan brazos articulados. Esta
caracterstica permite al manipulador extenderse hasta areas confinadas y despues reple-
garse. Las uniones rotatorias de los brazos manipuladores SCARA son a menudo preferidos
por su fuerza, poca friccion y fiabilidad [Petriu06]. La Figura 1.3 muestra algunos robots
6 Captulo 1: Introduccion
comerciales.
(a) SCARA JRS 4400 de JANO- (b) SCARA de IntelliSpen- (c) SCARA Ki-
ME [Com06a]. ce Inc.[Solutions06]. NEDEx de
Peak Robotics
[Robotics06a]
(d) SCARA SS-HD (e) SCARA SI-600 (f) SCARA SH-800 (g) SCARA Cobra s600 de
de Peak Robotics de Peak Robotics de Peak Robotics Adept [Technology]
[Robotics06a] [Robotics06a] [Robotics06a]
Los robots SCARA son ideales para operaciones de precision a gran velocidad, tales
como cerrar, sellar, distribuir, insertar partes (pick and place), montar, trasladar compo-
nentes, envasar, empaquetar, pintar en spray, soldar, perforar, rellenar, recubrir, atornillar,
etc. [Actuator06, Yamaha06, Wikipedia06, Salimian06, Brumson06]. Son ampliamente uti-
lizados en las industrias de moldeado plastico, circuitos impresos electronicos (para colocar
circuitos integrados y otros componentes en las tarjetas de computadoras y equipo simi-
1.1. Antecedentes 7
lar), montaje de automoviles, fibra optica, medicina (equipo medico quirurgico), pintura y
alimentos, entre otras.
Tres de las caractersticas mas relevantes propias de los robots SCARA son la
resolucion, precision y la repetibilidad que se explican a continuacion.
Los robots SCARA comerciales poseen muchas caractersticas optimas para labo-
rar dentro de las industrias, dentro de las cuales, se resumen a continuacion las mas des-
tacables [Com06a, Actuator06, Solutions06, Com06a, Technology, Fisnar06, Motoman06,
Educativa06]:
Otras caractersticas. Son fiables las 24 hrs. del da, algunos poseen sistemas de
enfriamiento, son capaces de rotar los 360 sobre su base, algunos hacen uso de un
sistema de engranaje de alta precision (enhanced harmonic gearing) en lugar de cajas
de engranes o bandas.
1.3. Justificacion
Debido a los altos costos de los robots SCARA comerciales y sus plataformas
cerradas es que se decide construir uno localmente, usando una plataforma abierta y un
software libre para que pequenas y medianas empresas puedan disponer de el, ampliarlo,
mejorarlo. En el estado de Michoacan existe una gran cantidad de pequenas y medianas
industrias, en particular la importante industria de las artesanias que requiere una gran
cantidad de mano de obra. Esto lo pone en desventaja con las empresas trasnacionales. La
utilizacion de robots SCARA de bajo costo en algunos procesos que no sacrifiquen la parte
artesanal podra mejorar la produccion. Esta tesis puede servir ademas como base para el
desarrollo de futuros trabajos referentes al area de la robotica en la Universidad Michoacana
de San Nicolas de Hidalgo.
El captulo 6 presenta las pruebas hechas sobre cada parte del robot, su operacion en
conjunto y los resultados obtenidos.
1.4. Organizacion del documento 11
Los apendices contienen las hojas de datos de los circuitos utilizados, los circuitos
impresos, los comandos usados para mover al robot, el codigo de los programas usados
e informacion adiccional.
El robot SCARA
2.2. Motores
Los elementos que proporcionan movimiento a los ejes del robot SCARA son los
motores los cuales son dispositivos electromagneticos capaces de transformar la energa
electrica que se aplica en sus terminales, a movimiento mecanico que proporciona su flecha
13
14 Captulo 2: El robot SCARA
[Ros07].
Existen muchos tipos de motores, pero solo unos cuantos son utiles en robotica,
y dentro de estos se encuentran los motores de corriente directa [Jones98]. Los motores
o servomotores de CD son preferidos debido a su relativa facilidad para ser controlados
comparados con otros tipos de motores de CD y con los motores de CA [Estrada06].
El robot cuenta con dos motores de pasos, uno para el hombro y otro para el codo,
estos permiten un movimiento sobre los ejes X y Y; y dos motores de CD con escobillas
para el eje Theta (denominado comunmente rotacion de muneca) y Theta-Z.
Figura 2.2: Imagenes de los motores de CD y del encoder usados en el robot SCARA
[Automation06].
Los motores de pasos utilizados son unipolares de la marca Mycom modelo PS4913M-
02B 2 phase high resolution stepping motor, de 2 fases, 12v, 1.8A/fase, 800pasos/rev (0.45 /paso),
par maximo de 486 oz-in. Tiene una longitud de 5 pulgadas, un peso de 3.6Kg y una exac-
titud de 3 minutos de grado. La Figura 2.3 muestra una fotografa del motor de pasos, el
cual tiene un costo de 145.8 USD cada uno mas gastos de importacion y envo. Este tipo de
motores se utilizan cuando el movimiento y la posicion se tienen que controlar con precision
[Wildi02].
La Figura 2.4 muestra los elementos esenciales del esquema de control de un motor
de pasos. El microcontrolador produce los pulsos que controlan al motor de pasos. Cada paso
que avanza el motor corresponde a un pulso que aplica el microcontrolador al circuito de
control. Variando la razon de pulso, se puede hacer que el motor avance muy lentamente, un
paso a la vez, o que gire a velocidades altas. Los pulsos se cuentan y almacenan positivamente
cuando el motor gira en un sentido y se cuentan y almacenan negativamente cuando el motor
gira en el otro sentido. Como resultado, siempre se conoce con una exactitud de un paso el
16 Captulo 2: El robot SCARA
numero total de pasos que avanza el motor, as como el numero de revoluciones que gira el
motor [Wildi02]. 1
Circuito de Motor
Microcontrolador control de Pasos
2.3. Sensores
2.3.1. Odometro
LED
Tren de pulsos
(Salida del fototransistor)
Odomtro
Motor
Los odometros incrementales permiten saber el sentido de giro del motor utilizando
dos LEDs y dos fototransistores colocados en cuadratura, esto es, uno adelantado 90 del
periodo del otro. As, conociendo como cambian las dos senales (denominadas A y B), se
puede conocer el sentido de rotacion. Ademas de estas dos senales, tambien existe una
18 Captulo 2: El robot SCARA
tercera senal (senal I) que se activa cuando la flecha del motor ha producido una vuelta
completa. De esta forma, los odometros permiten hacer una retroalimentacion del estado de
giro de la flecha de los motores y con ello se logra tener un mayor control sobre la posicion,
velocidad y aceleracion del robot.
Seal B
Seal A
Seal I
(a) Imagen de la cabeza lec- (b) Imagen del montaje del enco-
tora, marca HP modelo der de los motores del robot
HEDS-9140#A00, de los SCARA.
encoders de los motores.
Figura 2.7: Imagenes del odometro o encoder que utilizan los motores Pittman del robot
SCARA construido.
2.3. Sensores 19
+5V
10 K
10 K
Microcontrolador
S1 Nc
proteger al microcontrolador.
Otra parte del robot SCARA que es importante describir es la fuente de poten-
cia o de energa que proporciona la energa necesaria para que todos los elementos del
robot funcionen adecuadamente: motores, controladores, encoders, sensores de lmite y el
microcontrolador.
Debido a que se trata de un robot SCARA que por lo general se encuentra en la
industria y es fijo en su base, no esta provisto de bateras o acumuladores para proporcionar
la energa a los dispositivos que conforman el robot. En cambio, toma energa del proveedor
de servicios electricos para llevar a cabo su proposito.
Para alimentar todos los dispositivos del robot mencionados es necesario transfor-
mar el voltaje de CA que recibe la fuente, a un voltaje de CD con los niveles adecuados
para cada elemento; esto se realiza mediante 5 fuentes reguladas: a) 4 fuentes de 24V para
la etapa de potencia: una para cada motor de pasos, una para los dos motores de CD y otra
para los niveles constantes de 24V que requieren los controladores de los motores de pasos
(vease la seccion 3.5.1), b) Una fuente de 5V para la etapa de control e instrumentacion
2.5. Microcontrolador 21
2.5. Microcontrolador
HCS12CPU
ATD0 ATD1
V reg 5V to 2.5V 8 ch, 10bit 8 ch, 10bit
Internal Bus
16key Wakeup
IRQ Ports Enhanced Capture Timer
8 ch, 16bit
5 x CAN
2.0 A/B PWM
8 ch, 8bit / 4 ch, 16bit
Figura 2.11: Diagrama de los principales bloques e imagen del modulo Adapt9S12DP256
del microcontrolador 68hcs12 [Arts04].
digitales discretas de I/O con capacidad de interrupcion y activacion, 5 CAN 2.0 A,B de
modulos compatibles de software (MSCAN12), y un Bus Inter-IC. El microcontrolador tiene
un bus de datos de 16 bits internamente, sin embargo, el bus externo puede operar a 8 bits.
Ademas utiliza 5 V de corriente regulada y trabaja a una frecuencia maxima de reloj de 24
MHz. Para obtener informacion mas detallada del microcontrolador ver [Motorola02].
El microcontrolador juega un papel de vital importancia en el desarrollo del robot
SCARA, ya que se encarga de realizar multiples tareas entre las cuales se encuentran pro-
porcionar las instrucciones de control de velocidad y posicion de los motores, la adquisicion
de datos (a traves de sensores) y la comunicacion con la PC. Al final del captulo la Figura
2.13 se muestra algunas imagenes de la caja que aloja al microcontolador y los controladores
de los motores de CD y de pasos.
La fuente de potencia alimenta a los motores tanto los motores de CD como a los
motores de pasos y a sus respectivos controladores a 24V; al microcontrolador, los encoders
y sensores de lmite a 5V. El microcontrolador se comunica con una PC a traves de una
conexion serial (RS-232), de donde recibe instrucciones en forma de comandos reconocibles
por el robot y este a su vez manda las senales necesarias a los controladores de los motores.
2.6.1. Programacion
2.7. Resumen
Figura 2.13: Imagenes de la caja construida que aloja al microcontrolador y a los contro-
ladores de los motores de CD y de pasos, tambien se pueden observar los dos Snubbers de
sobrevoltaje. Vease 3.5.3.
Captulo 3
Figura 3.1: Vista superior de los dos motores de pasos que dan movimiento al robot en los
ejes X y Y.
25
26 Captulo 3: Controlador de los motores de CD de pasos
Consiste en que cada fase esta compuesta por un solo devanado, al invertir la
corriente en los devanados, la polaridad electromagnetica de estos es invertida. Este arreglo
es mas simple que el unipolar sin embargo su control es mas complicado pero, como el
robot utiliza motores de iman permanente unipolares, el esquema unipolar se describira con
mayor detalle enseguida. La Figura 3.2 muestra este esquema.
B B
A com
B B com B
Los motores de pasos del robot SCARA son unipolares y tienen dos bobinas (bo-
bina 1 y bobina 2) en su estator, cada una de las cuales tiene una derivacion central, como
se muestra en la Figura 3.4. La derivaciones centrales de las bobinas 1 y 2 estan fuera del
motor como dos cables separados. Como resultado, los motores tienen 6 cables. En adelante
a una mitad de la bobina 1 se le llamara bobina A y a la otra mitad bobina A (ver Figura
3.4). De igual manera a una mitad de la bobina 2 se le llamara B y a la otra mitad bobina
B.
Motor de
pasos
A
Rojo
Bobina 1
Negro
Bobina 2
Rojo /
blanco A
B B
Blanco
Verde /
Verde
blanco
Para hacer girar el motor de pasos se requiere cambiar la direccion de flujo magneti-
co energizando adecuadamente las bobinas 1 y 2. La Figura 3.5 muestra el circuito de control
de un motor de pasos unipolar. El cable del punto medio de las bobinas 1 y 2 se conecta a
3.3. Metodos para excitar los motores de pasos 29
la fuente de energa (Vs), mientras que los cables de los puntos extremos de las bobinas se
conectan a tierra mediante los interruptores S1, S2, S3 y S4.
Vs
A A B B
Bobina 1 Bobina 2
S1 S2 S3 S4
La Figura 3.6 (a) muestra un motor unipolar en el cual se energizan las terminales
A y B. Los polos norte en A y B provocan que el rotor sea alineado en la posicion indicada.
Si ahora el interruptor S2 se abre y S1 se cierra (ver Figura 3.6 (a)), entonces se energizan
las bobinas A y B y el rotor se mueve 90 para alinearse con el nuevo campo del estator.
Si se dejan de energizar las bobinas A y B, el rotor permanecera alineado con el ultimo
par de polos debido a que es un iman permanente. En efecto, el motor desarrolla un par de
detencion o de frenado cuando las bobinas no son energizadas.
Al abrir y cerrar los interruptores S1, S2, S3 y S4 en una determinada secuencia,
el motor puede avanzar en una cierta direccion. En la practica los transistores de potencia
como los Mosfets y los BJT son utilizados como interruptores para interrumpir la corriente
en instantes precisos de tiempo. A continuacion se describen las secuencias de excitacion
del motor de pasos unipolar.
Hay tres metodos comunmente utilizados para excitar los motores de pasos. Estos
metodos son: de paso completo, de medio paso y de micropasos. El metodo de paso completo
se realiza energizando las bobinas A, A, B y B secuencialmente en 4 formas diferentes, el
metodo de medio paso se realiza energizando las bobinas A, A, B y B secuencialmente en
8 formas diferentes y en el metodo de micropasos, se alimentan las bobinas del estator con
senales senoidal y cosenoidal. A continuacion se van a describir estas secuencias. Se mos-
traran unas tablas en las cuales un 1 significara que la terminal de la bobina esta energizada
y un 0 que no esta energizada. Para invertir el sentido del giro del motor, simplemente se
30 Captulo 3: Controlador de los motores de CD de pasos
(a) Las bobinas A y B son energizadas. (b) Las bobinas A y B son energizadas.
1. Metodo de paso completo. Con este metodo los motores de pasos se mueven a
traves de su angulo basico de paso, es decir 0.9 /paso (para los motores del robot)
y necesitan avanzar 400 pasos para realizar una revolucion mecanica. El metodo de
excitacion de paso completo se puede realizar con dos secuencias diferentes: una so-
la bobina energizada y dos bobinas energizadas. Estas secuencias se describiran a
continuacion.
a) Secuencia con una sola bobina energizada. En esta secuencia se activa solo
una bobina a la vez. Dicha secuencia se muestra en la Tabla 3.1 y en la Figura
3.7. Despues del paso 4 seguira el paso 1 y la secuencia se repite.
N S
S N S N S N S N S N
N S
Figura 3.7: Secuencia con una sola bobina energizada del motor de pasos.
N S S N
N S S N N S S N N S N
S
N S S N
N N S
S N S S N S N S N N S
N N S
paso 5 paso 6 paso 7 paso 8
N N S
S S N
N S N N S N S N S N
S
S S N
3. Metodo de micropasos.
El control por micropasos se obtiene haciendo que existan mas niveles de corriente
por cada una de las bobinas, controlando la corriente de manera que por una bobina
aumente gradualmente hasta llegar a un valor maximo mientras que la corriente por
la otra disminuye hasta llegar a cero. El numero de pasos por paso esta definido por
la cantidad de posibles niveles de control de la corriente. De esta forma tambien se
pueden obtener avances de medio paso si se crea un nivel intermedio entre el valor
maximo de corriente y cero. Para lograr pasos del mismo valor angular es necesario
que el par se mantenga constante durante todo el ciclo para cada angulo, esto se
da si la corriente de un embobinado incrementa mientras la otra disminuye para
cada angulo, manteniendo su suma como fasores siempre constante. Si se aplica una
corriente senoidal por la fase 1 y una cosenoidal por la fase 2 (ver Figura 3.10), se
puede tener una rotacion suave y un posicionamiento preciso; ademas se logra que
el motor gire con par constante para cualquier numero de micropasos por paso. Este
metodo se llama micropasos con seno y coseno [Jones08].
El controlador de los motores de pasos del Robot SCARA excita las bobinas de los
motores mediante el metodo de micropasos, teniendo la posibilidad de avanzar 1/2,
1/4, 1/8 y 1/16 de paso basico. Se utiliza este metodo para manejar los movimientos
del SCARA con incrementos muy pequenos, teniendo una resolucion fina. De esta
manera es posible utilizar el robot en aplicaciones que requieran de una precision muy
buena. Obteniendose as un movimiento mas continuo y suave del rotor
34 Captulo 3: Controlador de los motores de CD de pasos
I1=I MAXcos
Para entender porque es benefico operar a los motores de pasos con voltajes altos,
es necesario observar el comportamiento de la corriente en las bobinas de un motor de pasos.
Una bobina puede ser modelada como el circuito resistivo-inductivo (RL) mostrado en la
Figura 3.12 (a) [Condit04].
t=t1 dI (t=0) = V
dt L
I MAX = V
Corriente
Bobina del motor
R
R
63%
V +
dI (t=t1) = V
dt L
L 63%
e t=t1 tiempo
V R
I(t) = (1 et L ) (3.1)
R
Inicialmente la corriente crece con una velocidad dada por:
dI V
(t = 0) = (3.2)
dt L
Esta velocidad decrece conforme la corriente se acerca a su valor maximo o final:
V
IM AX = (3.3)
R
El valor de e = L/R es definido como la constante de tiempo electrica del circuito.
e es el tiempo necesario para que la corriente alcance el 63 % (1 1e ) de su valor final.
36 Captulo 3: Controlador de los motores de CD de pasos
V R
I(t) = (e(tt1 ) L ) (3.4)
R
La velocidad instantanea con que la corriente decrece cuando el voltaje es removido
es dI/dt = V /L.
Cuando se aplica una onda de voltaje cuadrada a la bobina, como sucede en el
metodo de paso completo, la corriente es suavizada. Se muestra a continuacion el compor-
tamiento de la corriente a tres frecuencias distintas. La Figura 3.13(a) muestra la forma
de onda de la corriente cuando se tiene una frecuencia del voltaje bajo. Arriba de una
cierta frecuencia (Figura 3.13 (b)), la corriente apenas alcanza su valor maximo y a una
frecuencia aun mayor (Figura 3.13 (c)), la corriente nunca alcanza su valor maximo. Como
el par del motor es proporcional a la corriente, el par maximo sera reducido a medida que
se incremente la frecuencia de los pasos [Circuits06].
Para solucionar este problema existen dos posibilidades, incrementar la velocidad
con que la corriente crece y decrece y/o decrementar la constante de tiempo e . De acuerdo
a 3.1 y 3.2, la velocidad con que la corriente crece en una bobina se incrementa al utilizar
una fuente de mayor voltaje. Sin embargo, 3.3 muestra que la corriente IM AX es afectada
al incrementar la fuente de voltaje. La manera mas simple para mejorar el tiempo de
crecimiento de la corriente sin exceder IM AX es agregar una resistencia en serie con el
motor, decrementando a la vez e . Esto se describe a continuacion.
de subida de la corriente se reduce y por lo tanto el desempeno del motor se mejora. Sin
embargo, la eficiencia del sistema cae significativamente con la introduccion de la resistencia
de potencia. Cuando la fuente de suministro del motor es una batera, el tiempo de operacion
del motor se reduce significativamente por la energa desperdiciada en la resistencia de
potencia.
R
I MAX = V = 2V
Corriente
R 2R
e2 = L
e2 e1 tiempo
t on
Bobina del motor
V + R
V +
V + L
por un sistema de lazo cerrado o de lazo abierto. Para el control en lazo cerrado se utiliza
una pequena resistencia que provee retroalimentacion al controlador y el voltaje se cambia
al nominal cuando la corriente alcanza el valor IM AX . Esto se explicara en detalle en la
siguiente seccion. En el esquema de lazo abierto, la conmutacion de una fuente a otra seria
en base a consideraciones de tiempo.
La Figura 3.15 (b) muestra el comportamiento de la corriente para las tres situa-
ciones anteriormente descritas:
2. Utilizando un alto voltaje (dos veces el nominal) con una resistencia de potencia (curva
3.4. Operacion a alta velocidad 39
2).
Se puede observar que al utilizar dos fuentes de suministro se obtienen los mejores
resultados. Este metodo tambien tiene el beneficio de ser mas eficiente que el metodo de
agregar una resistencia en serie. Sin embargo existe otro metodo que utiliza una fuente de
alto voltaje para lograr el comportamiento de la corriente mostrado en la situacion 3 de
la Figura 3.15 (b), el metodo de control chopper [Condit04] que se explica mas adelante
3.4.5. Este metodo de control chopper es el que se usa con los motores de pasos del robot
descrito en esta tesis. Para entenderlo bien, es conveniente revisar primero el concepto de
modulacion de ancho de pulso.
V V
Vprom
Vprom
Tper t Tper t
(a) Senal modulada con un ciclo de tra- (b) Senal modulada con un ciclo de tra-
bajo del 25 %. bajo del 50 %.
Para controlar motores a altas frecuencias con PWM es conveniente que los inte-
rruptores para conectar o desconectar el suministro de voltaje sean implementados mediante
interruptores de estado solido, los cuales pueden ser BJT, MOSFET o IGBT [Jones98]. En
[Ros07] se explica a detalle el problema que existe cuando se interrumpe la corriente en un
motor, debido a que es una carga inductiva.
Corriente en la bobina
I MAX
tiempo
Voltaje de suministro
Toff Ton
tiempo
Figura 3.17: Corriente y voltaje en la bobina utilizando el control chopper. Al inicio el ciclo
de trabajo de la senal de PWM es de 100 % y despues este ciclo se modifica para limitar la
corriente a IM AX .
Hay varias maneras para implementar el control chopper. La Figura 3.18 muestra
un posible circuito chopper para un motor unipolar. La manera como opera este circuito es
que el voltaje a traves de la resistencia que sensa la corriente (Vsensor ) se compara con el
voltaje de referencia Vref , el cual es determinado acorde a:
Vref = Rs IM AX (3.5)
actua como autotransformador. As, el voltaje sobre el Mosfet que no se utilice es el doble
del voltaje de suministro Vs . Cuando Q1 se enciende, la corriente fluye de Vs a tierra a
traves de la bobina A y por Q1 . Cuando Q1 se apaga, la corriente tiende a seguir fluyendo
a traves de la bobina, y por lo tanto el voltaje sobre Q1 aumenta arriba de Vs . Cuando el
voltaje sobre la terminal A alcanza 2Vs , el voltaje en la terminal A sera menor de 0V y
fluira corriente por el diodo interno de Q2 . Debido a las inductancias parasitas presentes en
el circuito chopper, se tendra un sobrevoltaje adicional (mayor de 2Vs ) cuando se apagan
los Mosfets y este voltaje puede exceder el voltaje maximo de estos dispositivos. Como
resultado, los Mosfets actuan como diodos zener y limitan el sobrevoltaje. El voltaje maximo
de los Mosfets debe ser significativamente mas alto que 2Vs [SILICON04]. Cabe senalar que
el voltaje que aparece sobre los Mosfets cuando estan apagados usualmente se suprime a
Vs colocando un diodo a traves la bobina A y de la bobina A (con el catodo del diodo
apuntando hacia Vs ). La desventaja de esta solucion es que la corriente que circula por las
bobinas decae lentamente y no se puede conmutar de una bobina a otra tan rapido como
3.5. Controlador de los motores 43
se quisiera.
Para controlar a los motores de pasos del robot SCARA mediante el control chop-
per, se utiliza el circuito integrado SLA7062M de Sanken, el cual opera bajo el principio de
funcionamiento del circuito mostrado en la Figura 3.18 e incorpora toda la logica necesa-
ria para el control chopper, los Mosfets, los comparadores y componentes para proveer el
tiempo de apagado fijo Tof f de PWM. Con el SLA7062M, la corriente del motor se regula
seleccionando la resistencia Rs y el voltaje de referencia Vref usando algunos componentes
externos. En la siguiente seccion se describira el diagrama de bloques y el circuito esquemati-
co del controlador de los motores de pasos, y en la seccion 3.5.1 se describiran brevemente
las caractersticas del SLA7062M.
LM2940
1 OUT 3 +
+5V
IN
2.7K
2.7K
2.7K
GND -
0.47uF 2 100uF A
B
I
10K
10K
10K
+5V
+ A
- Senales de salida
B
del encoder hacia
I
Entrada de 5V el microcontrolador
24V Cargas
constantes (CC) 24V
(CC)
1N4007 1N4007
+ SLA7062M
16 VBB OUTA 1
-
6 2
+5V
1N4007 VDD OUTA
Entrada para la 10K 10K
7 VREF OUTA 3
alimentacion del A A
0.47uF 8 RESET OUTA 4 24V
SLA7062M Motores
9 CW/CCW OUTB 20 B B
0.47uF
10 CLOCK OUTB 21
Senal
12 M2 OUTB 18
de PWM Vref
13 M1 OUTB 19
Reset
Microcontrolador
Unipolar Stepper
14 M0
Motor Controller
Senales digitales
Clock
5 SENSEA +
M2
17 SENSEB -
M1 10K 11 GND
M0 Entrada para la
alimentacion de
Sync
24V de los motores
un circuito (circuito sequencer ) que recibe las senales para definir el tamano de paso (M1,
M2), la senal de reloj(Clock), la alimentacion de 5V y la senal de reseteo . Este circuito
manda una de las senales de control del circuito chopper que reciben los pre-controladores
los cuales controlan la conmutacion de los mosfets; la otra senal de control que reciben los
pre-controladores se obtiene del resultado de la comparacion del voltaje de referencia y el
voltaje que se sensa a traves de una resistencia mediante un circuito de control PWM.
Una descripcion detallada de este circuito se puede encontrar en [Allegro MicroSystems07]
y la hoja de datos se encuentra en el appendice B.2.
Al final del captulo, la Figura 3.27 muestra las senales de reloj y la forma de onda
de la corriente para medio paso, un cuarto de paso, un octavo de paso y un dieciseisavo de
paso; tomadas de las hojas de datos del CI SLA7062M.
frecuencia fija de 44KHz, cuyo ciclo de trabajo se varia de 0 a 255 2 para ajustar Vref al valor
deseado. La funcion del filtro pasabajas es remover los componentes de alta frecuencia de la
senal de PWM y dejar solamente los componentes de baja frecuencia (CD) (ver Figura 3.23
(b)). Dicho filtro tiene una frecuencia de corte fc de 33.86Hz (fc = 1/2RC). La funcion
de los dos diodos 1N4004 es limitar Vref a 1V.
2
Un valor de 0 significa un ciclo de trabajo del 0 % y un valor de 255 significa un ciclo de trabajo del
100 %.
48 Captulo 3: Controlador de los motores de CD de pasos
Limitador de voltaje
1N4004 1N4004
1N4004 SLA7026M
Senal de PWM del
microcontrolador
0 t 0 t
Funcion y clasificacion
3. Limitanto la velocidad con que aumenta la corriente (di/dt) a traves del dispositivo
cuando este es encendido.
+
24V Rsn Dsn
Alim. 24V Motores
Fuente
de alim.
Csn
1. Snubbers serie RC sin polaridad, que son usados para proteger diodos y tiristores
limitando el voltaje maximo y la velocidad de aumento dv/dt en la recuperacion
inversa.
ser usados solos o en combinacion con otros, dependiendo de las caractersticas requeridas.
Sin embargo, la complejidad y el costo adicional introducidos al sistema por la presencia del
snubber debe ser balanceado con los beneficios de limitar la tension electrica en componentes
crticos del circuito.
Existe una clasificacion alterna de los snubbers de acuerdo a su uso en transis-
tores o dispositivos de interrupcion para condicionar su trayectoria de conmutacion. Esta
clasificacion incluye los siguientes tres tipos:
1. Snubbers de apagado. Para evitar los problemas que se presentan al apagar dispo-
sitivos semiconductores de interrupcion, el objetivo de estos snubbers es proveer un
voltaje de 0V a traves del dispositivo mientras la corriente se apaga.
3. Snubbers de encendido. Son usados solo para reducir las perdidas por conmutacion en
el encendido a altas frecuencias, y para limitar la corriente maxima de recuperacion
inversa del diodo.
cuando sucede esto, los mosfets operan como diodos zener. Esto produce calentamiento en
los mosfets porque disipan la energa de la inductancia, pero no les causa dano permanente
siempre y cuando dicha energa no exceda un valor maximo permitido.
A continuacion se muestran unas imagenes tomadas de [Concha07] sobre unas
pruebas realizadas cuando se utiliza un snubber de sobrevoltaje y cuando no se utiliza. La
Figura 3.25 muestra el voltaje Vp (voltaje de alimentacion) sin snubber; en este caso se tiene
un pico grande de voltaje con una oscilacion prolongada. La Figura 3.26 muestra Vp con
snubber; en este caso el pico de voltaje disminuye y la oscilacion es corta.
Para nuestro caso para el motor M 0 (la primera articulacion) se implemento el
snubber con una resistencia Rsn de 1.5/10W, un capacitor electroltico Csn de 100F
/250V y un diodo Schottky STPS745 de alta velocidad Dsn que puede soportar hasta 100A
pico. Para el motor M 1 (la segunda articulacion) el valor de la resistencia es de 0.5/15W
y el capacitor de 1000F/35V. El valor de la resistencia y del capacitor se obtuvieron
experimentalmente. En la seccion 6 se explican las pruebas que se ralizaron para determinar
los mejores valores de los elementos del snubber de sobrevoltaje para cada motor de pasos.
60V
(a) Vista que muestra las transiciones de Vp en (b) Una vista de cerca de Vp cuando se apagan
el encendido y apagado de los Mosfets. los Mosfets.
(a) Vista que muestra las transiciones de V p en (b) Una vista de cerca de Vp cuando se apagan
el encendido y apagado de los Mosfets. los Mosfets.
3.6. Resumen
Figura 3.27: Forma de onda de corriente para 1/2, 1/4, 1/8 y 1/16 de paso
[Allegro MicroSystems07].
Captulo 4
El robot SCARA utiliza tambien motores de cd con escobillas, estos son los encar-
gados del eje theta-z (rotacion de muneca) para realizar movimientos en el plano vertical.
As como con los motores de pasos, se desarrollo tambien el controlador para los motores
de cd; esto con el fin de reducir costos y tener el control adecuado para el robot SCARA. Se
tomo el diseno del circuito del controlador desarrollado para motores de cd de [Ros07] de-
bido a que ya haba sido probado y funcionaba adecuadamente. En la Figura 4.1 se muestra
una imagen de los motores de CD montados sobre el robot.
Figura 4.1: Vista superior de los motores de CD, encargados de mover los ejes theta y
theta-z.
55
56 Captulo 4: Controlador de los motores de CD
controlador. Es necesario mencionar que este captulo fue tomada en su mayora de [Ros07]
debido a que la primera version del robot SCARA desarrollado en la tesis de Omar Ros
Lopez utilizo los mismos motores de CD.
F
l I
nl
B
B
F
F F F
F A
l
nl I
I
~ B
F~ = Il ~ (4.1)
~ = IA
~ B
~ (4.2)
Iman
Iman
Conmutadores
Escobillas
V CD
Figura 4.3: Disposicion de los elementos del motor de CD de iman permanente [Urena06].
Escobilla
er
cod
En
r
oto
M
s
rane
ng
dee
Caja
velocidad de los motores de CD a traves del control del voltaje en su armadura haciendo
uso de dispositivos semiconductores de potencia.
4.2. Puente H
PuenteH
S1 S3
+
+ V
Suministro Motor
de Voltaje
S2 S4
una direccion, mientras que si se activan S2 y S3, desactivando S1 y S4, la direccion del
movimiento del motor sera en sentido opuesto, ocasionado por el cambio de la direccion de
la corriente en el motor.
En algunos casos, donde se requiere optimizar el desempeno del motor o del sis-
tema, es posible utilizar otro esquema al mostrado anteriormente. Esto ocurre cuando se
opta por usar frenado regenerativo o dinamico. Esto se lleva a cabo activando por pares los
interruptores S1 y S3 o S2 y S4. Lo anterior trae como consecuencia que, si el puente H
tiene activos un par de interruptores que permiten que el motor gire en una determinada
direccion, y al momento de frenarlo se activan los interruptores en la parte alta o en la parte
baja de las piernasdel puente H, existe un medio mediante el cual la energa almacenada
en el devanado del motor puede manifestarse como una corriente en un circuito cerrado
cuya resistencia es pequena (ya sea en la parte alta del puente H o en la parte baja). Por
lo tanto, la corriente en el circuito decae rapidamente, logrando as que el motor frene con
mayor prontitud y eficacia.
De esta manera, se puede resumir que de acuerdo a los estados de los interruptores
S1, S2, S3 y S4 de la Figura 4.5 es posible que el controlador se encuentre en uno de los
siguientes cuatro estados [Ohm06]:
1. Conduccion. Una fase del puente H esta en alto, mientras que la otra fase esta en
bajo. As, por ejemplo, S1 y S4 podran estar cerrados.
4.3. Esquema PWM que implementa el controlador 61
2. Cortocircuito a la lnea positiva. Las dos fases son conectadas al lado de alta del bus
de alimentacion (terminal positiva de la fuente de alimentacion). En la figura, esto
representara que S1 y S3 esten cerrados.
3. Cortocircuito a la lnea de retorno. Las dos fases son conectadas al lado de baja del
bus de alimentacion (terminal negativa o de retorno de la fuente de alimentacion. Para
este caso S2 y S4 estaran cerrados.
4. Regeneracion. Una fase esta en alto y la otra en bajo. La diferencia entre este estado
y el de conduccion recae en que en el estado de conduccion la potencia fluye del enlace
de CD al motor, mientras que la direccion del flujo de potencia es invertida en el
estado de regeneracion.
Es importante mencionar los distintos esquemas de PWM que existen para contro-
lar los motores de CD. Estos esquemas de switcheo afectan las caractersticas de rendimiento
tales como el rizado de la corriente en la conexion o enlace de CD, armonicos en la corriente
y perdidas en los motores y controladores. Tomando como base los parametros del motor
y los requerimientos de la aplicacion, la seleccion del esquema optimo de switcheo puede
mejorar la eficiencia de operacion del motor. A continuacion se explican estos esquemas
utilizando la Figura 4.6(c). Estos esquemas son expuestos y descritos en [Ohm06], donde se
puede encontrar informacion mas amplia al respecto.
PuenteH
+V +V
B S1 S3
iL iL Diodo
antiparalelo +
V Motor
A
S2 S4
(a) La corriente en (b) El diodo crea un camino (c) Puente H con un diodo en antiparalelo en
un inductor no para la corriente inducti- cada interruptor.
puede interrum- va cuando el interruptor es
pirse subitamen- abierto.
te.
Durante el tiempo de apagado (S1 abierto), la corriente del motor encuentra un camino
para fluir a traves de S4 y el diodo en antiparalelo de S2 y decae lentamente debido
a la resistencia del devanado del motor y a los interruptores. Se obtiene un resultado
similar cuando se aplica el esquema de conmutacion PWM a S2, manteniendo S3
activo. En este esquema la capacitancia del canal de conduccion es pequena y las
perdidas por switcheo son muy bajas. La desventaja recae en que el motor no puede
cambiar de direccion rapidamente.
esta en que se obtiene un control dinamico del motor, pues proporciona una forma
de controlarlo en 4 cuadrantes. Esto hace posible que se logren cambios rapidos en
la direccion de giro del motor, ya que la energa almacenada en el motor se regresa
rapidamente a la fuente de alimentacion. Debido a esto, tambien es necesaria una
fuente de alimentacion con flujo de potencia bidireccional.
contiene un puente H con dispositivos DMOS para controlar el motor, y un circuito que
monitorea las senales de salida de los canales del encoder. Ademas, se incluye tambien un
amortiguador o snubber de sobrevoltaje RCD similar al utilizado para los motores de pasos,
el cual desempena la funcion de reducir el voltaje transitorio pico en los dispositivos DMOS
del CI LMD18200 durante la conmutacion.
las senales de salida de los canales del encoder. El snubber o amortiguador de sobrevoltaje
RCD se explico en las seccion 3.5.3.
Las principales razones por las cuales se opto por usar este controlador son: la
facilidad y sencillez que ofrece para controlar el motor conectado a sus terminales de salida,
y la experiencia en el uso y conocimiento de su funcionamiento en otros trabajos como son
[Romero01, Arellano05, Estrada06, Ros07].
LMD18200
A1 B1
+ A B
VS Motor
A2 B2
LMD18200
+5V
PWM
A1 B1
Logica
DIR
+ A B
de VS Motor
Control
BRAKE A2 B2
Figura 4.11: Senales de control y esquema de conexion para implementar la tecnica control
completo anti-fase en el CI LMD18200.
corriente fluye a traves de los dispositivos DMOS de potencia de la parte de arriba del
puente H. Cuando la corriente fluye en la otra direccion no existe salida en el pin de salida
para sensar la corriente.
Control signo/magnitud
LMD18200
PWM
A1 B1
Logica
DIR
+ A B
de VS Motor
Control
BRAKE A2 B2
Figura 4.12: Senales de control y esquema de conexion para implementar la tecnica control
signo/magnitud en el CI LMD18200.
que para los motores de CD del robot SCARA de esta version se utilizo el control completo
anti-fase por su facilidad de controlar la direccion y la velocidad.
Al igual que en los motores de pasos es necesario utilizar un snubber de sobrevoltaje
RCD que reduce el voltaje transitorio pico a traves de los dispositivos de interrupcion DMOS
del CI LMD18200. As, para los dos motores de CD se le anade un snubber de sobrevoltaje
en paralelo a la alimentacion de los motores.
A continuacion se explica el circuito usado para monitorear las senales de los
encoders utilizados con los motores de CD.
La Figura 4.13 muestra el circuito que monitorea las tres senales de salida de los
canales del encoder, los cuales son usados para realizar el control. Los encoders u odometros
se alimentan de la fuente de 5V. Para reducir el posible ruido en las senales del encoder, se
conecta una resistencia de 10K entre cada salida del encoder y el bus de 5V.
Seales de salida
de los canales
del encoder R=10K
Suministro R=10K
I
de voltaje
Seales del
B
encoder
A haia el micro
Figura 4.13: Diagrama del circuito electronico que monitorea las senales de salida del encoder
[Ros07].
La Figura 4.14 muestra una imagen del circuito de los controladores de los motores
de CD.
Figura 4.14: Imagen del circuito controlador de los motores de CD con escobillas.
4.5. Resumen
Fuente de alimentacion
73
74 Captulo 5: Fuente de alimentacion
mantienen una baja impedancia aun a altas frecuencias, los cuales recomienda el fabricante.
plantilla del circuito impreso. Si se desea mas informacion sobre este regulador de voltaje
se puede consultar [Catalog.com08]. En la Figura 5.4 se muestra una imagen del circuito de
la fuente de 5V.
Al final del captulo la Figura 5.5 muestra algunas imagenes de la fuente de ali-
mentacion construida.
5.1. Resumen
Pruebas y resultados
79
80 Captulo 6: Pruebas y resultados
Puesto que el robot cuenta con cuatro motores de cd, dos de ellos de pasos y los
otros dos con escobillas, la fuente de alimentacion deba ser capaz de suministrar la corriente
demandada por los cuatro motores si estos estuviesen trabajando de manera simultanea a
su maxima capacidad; para esto se calculo la corrriente total. Los motores de pasos manejan
una corriente nominal de 1.8A por fase, si se operan las dos fases al mismo tiempo al cien
por ciento de su capacidad nominal, se tendra una corriente de 3.6A por motor; esto es,
7.2A por los dos motores de pasos. Para los motores de cd el motor GM9236S021 usado en
el robot para mover el eje Theta maneja una corriente de pico teorica de 9.6A y el motor
GM8724S011 usado para mover el eje Theta-Z maneja una corriente de pico teorica de
1.41A. Por lo tanto la corriente total maxima teorica demandada por los cuatro motores
es de 18.2A; esto significaba tener una fuente de 24V que entregara 18A. Posteriormente
al escoger los circuitos controladores de los motores de pasos (CI SLA7062M) y los de los
motores de CD (CI LMD18200), se estudiaron sus especificaciones tecnicas para conocer
sus capacidades de corriente. El CI SLA7062M opera con una corriente de 3A y el CI
LMD18200 con una corriente de 3A y 6A pico, de esta manera al usar dos CI SLA7062M y
dos CI LMD18200 se requieren de 12 a 18A. Debido a que en el trabajo de tesis de liceniatura
de Antonio Concha [Concha07] se utlizaron circuitos reguladores de voltaje LM338 para el
cargador de baterias, se decidio utilizar los mismos circuitos para la construccion de la
fuente de alimentacion del robot SCARA.
En la hoja de datos del LM338 se muestran algunos disenos, entre ellos un re-
gulador de 15A, en la Figura 6.1 se muestra el diagrama esquematico de este circuito. Se
construyo este circuito pero tuvo algunos inconvenientes; uno de ellos es que el valor maximo
de suministro de voltaje del amplificador operacional es de 18V; ademas se estaba usando un
transformador de 127/36 volts por lo que el voltaje de cd despues del puente rectificador era
alrededor de 36 volts. Se intento suministrar un valor independiente de voltaje a la entrada
de suministro de voltaje del amplificador operacional pero no logro funcionar de manera
adecuada. Posteriormente se decidio que la manera mas eficiente de suministrar energa al
robot es usando una fuente individual para cada motor. En la seccion 5.0.1 se muestra el
diagrama esquematico de la fuente construida y usada en el robot 5.1.
Otro esquema que se investigo para la construccion de la fuente de alimentacion
fue el diseno de una fuente conmutada. Una fuente conmutada es un dispositivo electronico
6.1. Diseno de la fuente de alimentacion y pruebas realizadas 81
El tamano de una fuente conmutada es mucho menor que el de una lineal para una
potencia dada y por lo tanto, mas liviana, esto es debido a que trabajan a altas
frecuencias de switcheo.
82 Captulo 6: Pruebas y resultados
Existen algunos circuitos integrados que cuentan con los bloques principales de una
fuente conmutada entre ellos el circuito integrado LT1074 de Linear technology el cual es
un convertidor Buck (convertidor de potencia que obtiene a su salida una tension continua
menor que a su entrada). Este circuito ocupa solo unos cuantos componentes externos para
su operacion. La Figura 6.2 muestra una imagen del diagrama esquematico de este circuito
[Technology07].
no descenda sino que se mantena cerca de 24V y se utilizo el capacitor de 100F /250V.
Para el motor M1 se noto una pequena mejora al utilizar un capacitor de 1000F/35V.
Las siguientes imagenes muestran las formas de onda tanto del voltaje como de la
corriente a la salida de la fuente de alimentacion (en parallelo con el snubber de sobrevoltaje)
cuando se opera el motor M 0 a medio paso con el circuito SLA7062M. La forma de onda
del voltaje es la que se encuentra arriba y empieza desde el centro, la de la corriente se
encuentra abajo y empieza dos cuadros debajo del centro. Para el voltaje la escala es 10V
por cuadro y para la corriente es de 1A por cuadro. Todas las imagenes que se muestran a
continuacion fueron tomadas con la misma escala del osciloscopio.
La Figura 6.3 muestra el comportamiento al utilizar un snubber sin resistencia
y solo un capacitor de 100F/250V. Se puede observar que cuando el motor M O esta en
reposo, el voltaje varia arriba de los 30V y en movimiento su valor es estable en 27 volts. En
reposo la corriente tiene un comportamiento interesante ya que el CI SLA7062M realiza un
sensado de la corriente que pasa a traves de unas resistencias, y mediante el control chopper
mantiene la corriente que circula por las bobinas del motor por debajo de su corriente
nominal, 1.8A para nuestro caso. Es conveniente recordar que el control chopper es usado
cuando se tiene un suministro de voltaje mas alto que el nominal del motor (vease la seccion
3.4.5). Se puede observar que la corriente aumenta un poco arriba de 2A y luego desciende,
despues de esto existe un periodo de conmutacion el cual tiene un pequeno pico de corriente
negativa y se estabiliza durante un tiempo pequeno como de 150s, es desde este punto en
que la corriente vuelve a aumentar de nuevo arriba de 2A. En este caso la temperatura de
los reguladores de voltaje LM338 fue alrededor de 38 C. Cabe mencionar que los circuitos
LM338 soportan una temperatura maxima de 150 C.
La Figura 6.4 muestra el comportamiento totalmente inadecuado cuando se au-
menta el valor de la resistencia a 2.7. La forma de onda del voltaje en movimiento ya no
es tan estable, vara mas que cuando no se tiene resistencia y ahora cuando se encuentra
en reposo el motor, el voltaje desciende por debajo de los 20V. Ademas, la forma de onda
de la corriente muestra que ya no aumenta hasta 2A y ahora es mas notorio la corriente
negativa. Para este caso la temperatura de los reguladores de voltaje LM338 fue alrededor
de 70 C.
La Figura 6.5 muestra el comportamiento de la fuente cuando se usa una resisten-
cia de 1 y el mismo capacitor. Ahora la forma de onda de voltaje tanto en reposo como
en movimiento se mantiene de manera estable alrededor de 30V. Donde s hay un cambio
6.1. Diseno de la fuente de alimentacion y pruebas realizadas 85
Figura 6.3: Forma de onda de voltaje (arriba) y corriente (abajo) de la fuente utilizando un
snubber de sobrevoltaje con un capacitor de 100F/250V y sin resistencia.
notable es con la corriente ya que su valor maximo llega alrededor de 1.5A. Despues de
su periodo de transitorio, ya no tiene un periodo de establilizacion en donde disminuye su
valor sino que vuelve a aumentar desde ese punto. Se pueden observar tambien pequenos
picos negativos de corriente. Ademas la temperatura de los circuitos reguladores LM338 no
aumenta de 40 C. Es por esta razon que este valor de la resistencia fue el que se consi-
dero como el mejor para el buen funcionamiento de la fuente de alimentacion. Despues de
encontrar este valor se probo con diferentes valores de capacitancia pero no se observo un
cambio significativo.
86 Captulo 6: Pruebas y resultados
Figura 6.4: Forma de onda de voltaje (arriba) y corriente (abajo) de la fuente utilizando un
snubber de sobrevoltaje con un capacitor de 100F/250V y una resistencia de 2.7/15W.
Figura 6.5: Forma de onda de voltaje (arriba) y corriente (abajo) de la fuente utilizando un
snubber de sobrevoltaje con un capacitor de 100F/250V y una resistencia de 1/10W.
Figura 6.6: Forma de onda de voltaje (arriba) y corriente (abajo) de la fuente utilizando un
snubber de sobrevoltaje con un capacitor de 100F/250V sin resistencia.
Figura 6.7: Forma de onda de voltaje (arriba) y corriente (abajo) de la fuente utilizando un
snubber de sobrevoltaje con un capacitor de 100F/250V y una resistencia de 2.7/10W.
de CD; todos hacia el microcontrolador, y se probo que las senales mandadas y recibidas por
este fueran las adecuadas. Se utilizo el puerto A del microcontrolador para las senales Sync,
M1, M2, Clk, Dir y Reset que ocupan los controladores de los motores de pasos SLA7062M
del motor M 0 y el puerto H para las senales del controlador del motor M 1. Para la senal
Vref de cada uno de los controladores se uso el puerto PP o PWM. Para los controladores
de los motores de CD LMD18200, se usaron los puertos H y A para las senales Brk y PWM
de M 2 y M 3 respectivamente. Para la senal Dir de los controladores de estos motores se
uso el puerto PP o PWM. Para las senales A, B e I de los encoders de los motores de
CD se uso el puerto T . Para los interruptores de inicio de posicion de las 4 articulaciones
se uso el puerto B. La Tabla 6.1 muestra la configuracion de las conexiones.
Es importante mencionar que dos pines del puerto P del microcontrolador estaban
danados y de esta manera el micro estaba consumiendo una mayor corriente, 205mA, y al
deshabilitarlo este consuma solamente 117mA, disminuyendo tambien su temperatura.
Posteriormente se hicieron pruebas de comunicacion; esto se hizo utilizando el
programa serial (apendice E) el cual establece una comunicacion a traves del puerto serie
o RS232 entre la PC y el microcontrolador.
Despues se verificaron las senales de los sensores de contacto para que cuando estos
estuvieran accionados, el microcontrolador detectara y mostrara cual de estos sensores se
encontraba en ese estado; mediante esto se puede guardar y programar la posicion de inicio
90 Captulo 6: Pruebas y resultados
Figura 6.8: Forma de onda de voltaje (arriba) y corriente (abajo) de la fuente utilizando un
snubber de sobrevoltaje con un capacitor de 100F/250V y una resistencia de 0.5/10W.
para cada motor. Despues se probaron los encoders comprobando que cuando estos giraran
en un sentido, el microcontrolador detectara los cambios de las senales A y B, y cuando
cada motor diera una vuelta completa el microcontrolador lo contabilizara usando la senal
I.
Una vez realizado todo lo anterior se prosiguio a operar los controladores de los
motores dandoles las senales necesarias desde el microcontrolador. Se probo el funciona-
miento de los motores de pasos mandando las senales adecuadas a las entradas M1 y M2 del
CI SLA7062M para hacer operar los motores a 1/2, 1/4, 1/8, y 1/16 de paso. Despues se
hicieron pruebas de precison y repetibilidad de los motores haciendolos avanzar hasta una
6.4. Pruebas del robot realizadas sobre madera 91
Figura 6.9: Forma de onda de voltaje (arriba) y corriente (abajo) de la fuente utilizando un
snubber de sobrevoltaje con un capacitor de 1000F/35V y una resistencia de 0.5/10W.
posicion y luego retornando a su posicion inicial de ese movimiento. Mediante una marca
sobre un papel milimetrico se anoto el punto de inicio y la posicion despues de dar un paso,
luego haciendolo regresar se observo que llegaba exactamente al mismo punto; aun cuando
avanzaba muchos pasos y a diferentes velocidades, siempre retornaba al mismo lugar. Para
los motores de CD solo se hicieron algunas pruebas para verificar que estos respondieran a
los comandos del microcontrolador y que operaran a distintas velocidades.
(c) Trabajo en las barras de la tapa 2 (d) Trabajo en las barras de la tapa 3
Figura 6.10: Trabajos sobre madera realizados de forma manual para la fabricacion de
guitarras.
La cinematica del robot estudia el movimiento del mismo con respecto a un siste-
ma de referencia. As, la cinematica se interesa por la descripcion analtica del movimiento
espacial del robot como una funcion del tiempo, y en particular por las relaciones entre la
posicion y la orientacion del extremo final del robot con los valores que toman sus coor-
denadas articulares. Existen dos problemas fundamentales para resolver la cinematica del
robot [UDG08]:
Soluciones numericas
a2 = b2 + c2 (2bc)cosA (6.2)
Primero se tiene que la orientacion del ultimo eslabon es la suma de las variables
articulares lo cual se muestra en la Figura 6.11.
94 Captulo 6: Pruebas y resultados
= 1 + 2 + 3 (6.3)
Se calcula 2 :
Debido a que:
cos(180 2 ) = cos2 (6.5)
Resulta:
x2 + y 2 l12 l22
cos2 = (6.6)
2l1 l2
Calculo de 1 .
1 = (6.7)
6.4. Pruebas del robot realizadas sobre madera 95
El angulo se calcula:
y
sin = p (6.8)
x2 + y 2
x2 + y 2 + l12 l22
cos = p (6.9)
2l1 x2 + y 2
3 = 1 2 (6.10)
fue posible que el robot dibujara circulos de diferentes diametros y relieves, cuadrados y
triangulos. Estos codigos se muestran en el apendice E.2. Despues se le acoplo una pequena
herramienta rotatoria (Dremel) para hacer los cortes sobre madera. A continuacion se
muestran algunas la Figura 6.14 muestra unas imagenes.
El valor de un robot SCARA comercial vara entre 9000 y 25000 USD; esto es, entre
de 92000 y 258000 pesos. En la Tabla 6.2 se muestra el costo del robot SCARA desarrollado
en esta tesis.
Como se puede observar el robot SCARA construido cumple con el objetivo de ser
economicamente mas flexible que un robot importado de este tipo. En cuanto a repetibilidad,
el robot desarrollado cuenta con las mismas caracteristicas que uno importado, esto gracias
a los motores de pasos y la posibilidad de ser manejados a traves del metodo de micropasos;
sin embargo la velocidad con el cual puede ser manejado el robot es relativamente lento
98 Captulo 6: Pruebas y resultados
Aterrizar todas las tierras o los negativos a una tierra fsica, esto se puede hacer
directamente a las cajas metalicas utilizadas, para evitar tener algun valor de voltaje
entre las salidas de las fuentes.
Para las fuentes de 24V se recomienda el uso de capacitores de tantalio debido a que
mantienen una baja impedancia aun a altas frecuencias.
Conclusiones
7.1. Conclusiones
El diseno mecanico del robot SCARA se realizo en Paracho Mich., donde fueron mon-
tados los motores En el Laboratorio de Sistemas Computacionales de la Division de
Estudios de Posgrado de la FIE se colocaron los sensores, se conectaron los motores,
los encoders, se diseno y construyo la fuente de alimentacion, se disenaron y cons-
truyeron los circuitos controladores de los motores, se construyeron los circuitos de
proteccion y se realizaron algunas pruebas. El robot se dejo listo para el desarrollo de
aplicaciones y pruebas en los talleres de fabricacion de guitarras en Paracho.
99
100 Captulo 7: Conclusiones
Los motores de pasos utilizados en el robot para los ejes X y Y (M0 y M1) cumplen
con las caractersticas buscadas y otorgan una mayor precision y repetibilidad al
robot comparado con la version anterior debido a su posibilidad de ser operados con
el metodo de micropasos.
Se desarrollaron los controladores para los motores de pasos los cuales funcionaron
eficientemente. El circuito controlador SLA7062M cumple con las caractersticas ne-
cesarias para controlar adecuadamente a los motores de pasos ya sea si se manejan a
1/2, 1/4, 1/8 y 1/16 de paso.
Se resalta el uso del snubber de sobrevoltaje RCD que permite que los efectos de
las inductancias parasitas al interrumpir la corriente a traves de los motores sean
despreciables, manteniendo el voltaje de alimentacion de los CI y de los motores en
niveles seguros y eliminando la resonancia en los motores. Principalmente para los
motores de pasos.
El uso de cable blindado en los cables de alimentacion y control el cual contiene pan-
talla electrostatica es indispensable para evitar un mal funcionamiento de los compo-
nentes provocado por fenomenos de induccion. As mismo, el cableado adecuado de
los diferentes elementos y la conexion adecuada a tierra es necesario para un buen
funcionamiento del sistema.
El robot se mueve a una baja velocidad, sin embargo tiene una precision excelente
por lo que sus aplicaciones se enfocaran mas a trabajos donde se requiere una buena
precision.
Las pruebas realizadas sobre el corte de madera dieron resultados satisfactorios para
algunos trabajos orientados a la fabricacon de guitarras.
Debido a la facilidad con que se controlan los motores de pasos, se podran utilizar
este tipo de motores para los ejes theta (M2) y theta-z (M3). De esta manera los
costos se recuciran e incrementara la duracion de vida del robot debido a que las
escobillas de los motores de CD se van desgastando.
Utilizar sistemas de engranaje de alta precision (enhanced armonic gearing) en vez del
sistema caja de engranes - bandas utilizado en este trabajo, con lo cual se eliminaran
practicamente por completo las holguras y problemas mecanicos y se obtendran tanto
102 Captulo 7: Conclusiones
una excelente precision como una repetibilidad muy cercana a los mejores robots
SCARA comerciales. Esto implica un aumento en el costo del robot, debido a que los
engranes armonicos son caros (del orden de 1500 USD cada uno). Con esto ya no se
cumplira el objetivo de construir un robot economico, por lo que se podran intentar
fabricar estos sistemas de engranes en la compana Cervantes Co. (Paracho Mich.).
Disenar una fuente de potencia de mayor capacidad que sea capaz de proporcionar
mayor corriente a los motores y que en general sea mas robusta. Se podra usar una
fuente conmutada u otro diseno de la fuente alimentacion, con la finalidad de poder
proveer la corriente necesaria requerida por los motores usados y de esta manera tener
la posibilidad de incrementar el voltaje de alimentacion de los motores lo cual hara
que se incrementara la velocidad.
Utilizar un microcontrolador mas rapido que el usado en este trabajo, con esto se
podra realizar operaciones a mayores velocidades.
Crear una interfaz grafica para controlar al robot, este puede tener su codigo fuente
en lenguaje C, o bien en Java. Esta interfaz tambien podra crear trayectorias para
que el robot las siga y programar al robot para que realice una determinada tarea en
aplicaciones practicas.
Apendice A
El programa serial establece una conexion serial con el robot, de manera que el
comando (de texto) que se ingrese en la terminal y que termine con una tecla de Return, se
enva directamente al robot. Por otro lado, la respuesta del robot se presenta inmediatamen-
te en la terminal. Este programa es semejante a tener una terminal conectada directamente
al puerto serial del robot y es util para probar el robot interactivamente.
Para ejecutar el programa serial se debe ingresar como root y ejecutar el programa
con el dispositivo asociado al puerto serial ttyS0 (primer serial) o ttyUSB0 (en caso de
que se use el convertidor USB-Serial) como primer argumento. En forma alternativa se
pueden modificar los permisos del dispositivo para que cualquier usuario pueda acceder al
dispositivo. Por ejemplo:
El usuario puede utilizar los codigos de estos programas como ejemplo para desa-
rrollar nuevos programas que interactuen con el robot.
103
104 Apendice A: Control del robot
El robot realiza una secuencia de inicializacion para todos los motores llevandolos
a su punto de inicio; esto es, al punto donde accionan los interuptores y desde el cual se
encuentran en la posicion 0. Luego los dos motores de pasos se mueven hasta la mitad de
su movimiento maximo; este punto es el punto de trabajo en el cual el brazo del robot
se encuentra totalmente extendido. El motor 2 tamben se mueve hasta la mitad de su
movimiento maximo y el motor 3 se queda en la poscion de inicio. Despues de esto el robot
esta listo para recibir comandos desde la PC.
Se muestra un ejemplo de como se mandan las instrucciones y a continuacion se
exponen los comandos usados con el robot.
# ./serial /dev/ttyS0 <Return>
M0 1000<Return>
M
M1 2000<Return>
M
p 128 128<Return>
< c >< p1 >< sp >< p2 >< sp >< p3 > ... < pn >< \n >
Donde: < c > indica una letra que identifica la orden o comando dada al robot.
< pn > indica el n-esimo argumento numerico de la orden.
El rango de este argumento vara dependiendo del
motor que se esta controlando.
< sp > indica un caracter de espacio.
< \n > indica un caracter de salto de lnea.
106 Apendice A: Control del robot
El puerto serial debe configurarse de la siguiente forma: 9600bps, 8bits, sin paridad
y sin control de flujo. A continuacion se describen los comandos que obedece el robot.
Se muestran los comandos usados para mover cada eje del robot.
A continuacion se muestra una tabla de los valores que puede tomar la variable c
para los motores de pasos.
El robot responde a este comando informando al usuario cual de los cuatro inte-
rruptores del robot esta accionado.
En este apendice se muestran los comandos que se usaron para definir la aceleracion
de los motores de pasos. Se muestra una parte del codigo de control el cual se puede ver
al final de los apendices, tambien se puede descargar de la pagina web del Dr. Leonardo
Romero Munoz http://faraday.fie.umich.mx/ lromero/ o se pueden solicitar a traves de los
siguientes correos electronicos: lromero@umich.mx, omarorp@gmail.com
Este comando define los parametros de aceleracion de los motores de pasos, de esta
forma se puede lograr un movimiento suave al inicio y al final del movimiento. Un valor de
mot = 0 indica que los cambios seran asociados al motor 0 y un valor de mot = 1 indica
que los cambios seran del motor 1. Los nuevos parametros se consideran en la ejecucion del
siguiente comando de movimiento de los primeros dos ejes del robot (motor 0 y 1).
Comando:
K < mot >< sp >< timer step max >< sp >< timer step min >< sp ><
timer step inc >< sp >< timer step control >
Donde:
mot es un 0 o un 1
timer step control es el tiempo en que se realiza el incremento total, hasta timer step min
si esta iniciando el movimiento o timer step max si esta frenando.
T
Timer_max
Timer_Inc
Timer_min
Timer_Control
Pasos
N
Figura A.1: Figura que muestra los comandos del control de los motores de pasos.
timer = g_timer_step[m];
steps = blm_steps[m];
inc = g_timer_step_inc[m];
control = g_timer_step_control[m];
Este comando define los parametros de aceleracion de los motores de CD los cuales
mueven los ejes theta y theta-z, de tal forma que se logre un movimiento suave al inicio y al
final. Un valor de mot = 2 indica que los cambios seran asociados al motor 2 y un valor de
mot = 3 indica que los cambios seran del motor 3. Los nuevos parametros se consideran en
la ejecucion del siguiente comando de movimiento de los dos ultimos ejes del robot (motor
2 y 3).
Comando:
K < mot >< sp >< k pro1 >< sp >< k pro2 >< sp >< k int >< sp >< min pwm ><
sp >< max pwm >
Los tres primeros parametros (k pro1, k pro2, k int ) son valores usados para
modificar que tanto se acerca el movimiento a la posicion deseada tomando en cuenta el error
que existe al realizar este movimiento. Para en entender un poco el control usado se muestra
una parte del codigo el cual se puede ver al final de los apendices, tambien se puede descargar
de la pagina web del Dr. Leonardo Romero Munoz http://faraday.fie.umich.mx/ lromero/
o se pueden solicitar a traves de los siguientes correos electronicos: lromero@umich.mx,
omarorp@gmail.com El desarrollo de este control se tomo de la tesis de Omar Ros [Ros07]
donde se explica de manera detallada.
Parte del codigo de control:
// Position Control Demon
static void dc_position_control()
{
110 Apendice A: Control del robot
switch (active_motor) {
case M2: error *= -1; break;
}
pos_old[active_motor] = g_pos[active_motor];
alter_power (error);
if(dif < 0)
dif = - dif;
if (dif < k_tol[active_motor])
blm_steps[active_motor] = 0;
Los dos ultimos parametros (min pwm, max pwm) son usados para indicar que
tan fuerte se va a realizar el movimiento en una direccion o la otra, esto por el esquema 2
de PWM que se uso para los motores de CD. Un PWM de 128 indica que no se mueve el
motor, un valor de 0 indica un movimiento fuerte en una dirrecion y un valor de 255 indica
un movimiento fuerte en la otra direccion.
Respuesta:
K < \n >
Las figuras B.1, B.2 y B.3 muestran algunos datos tecnicos de los motores de pasos
que se utilizaron. En la figura B.1 la lnea que corresponde a los motores usados es la ultima
dentro del grupo de motores de alta resolucion.
B.2. CI SLA7062M
La tabla B.1 muestra los datos principales de este dispositivo en cuanto a montaje,
caja de engranes, encoder y el propio motor.
La tabla B.2 muestra los datos principales de este dispositivo en cuanto a montaje,
caja de engranes, encoder y el propio motor.
111
112 Apendice B: Hojas de datos de fabricantes
B.5. CI LMD18200
Las figuras B.6 y B.7 muestran los datos tecnicos del CI LMD18200 dados por el
fabricante. En estas figuras se presenta su descripcion general, sus aplicaciones, su diagrama
de bloques funcional, sus rangos de operacion y sus caractersticas electricas.
B.5. CI LMD18200 113
121
122 Apendice C: Circuitos impresos desarrollados
V5
1. Se imprime el circuito impreso disenado sobre el lado mas liso de un acetato para
impresora laser (tambien se puede imprimir sobre una hoja de transferencia termica
para circuitos impresos como PNP BLUE de Steren), usando una impresora laser. El
circuito no debe imprimirse como espejo.
4. Se lija la baquelita con fibra o lana de acero (usada para lavar trastes).
6. La parte impresa del acetato se coloca sobre el cobre de la placa de baquelita y se fija
con cinta.
7. Mediante el uso de una prensa termica construida localmente se aplica calor y fuerza
sobre el acetato para transferir el toner de la impresion a la baquelita. La temperatura
usada en la prensa fue de 180 C. Se recomienda poner una hoja de papel entre la
prensa y el acetato para que este no se queme. El tiempo durante el cual se aplica
calor y fuerza a la placa varia dependiendo de la calidad de la impresion y del tamano
del circuito impreso; tpicamente oscila entre 5 y 8 minutos. Se debe tener presente
tambien que si la prensa esta muy caliente y se aplica una fuerza excesiva sobre la
placa, el toner se puede expandir hacia los lados, resultando en lneas mas gruesas
de toner sobre el cobre que generalmente tienen que ser muy retocadas o en uniones
indeseables con toner entre las pistas.
C.2. Metodo de fabricacion de los circuitos impresos 123
Figura C.2: Plantilla del circuito impreso de dos de las fuentes de 24V, las otras dos fuentes
de 24V son iguales.
10. Retocar las pistas que no se vean bien con un marcador de tinta indeleble.
11. Colocar la placa en un recipiente (de preferencia que se pueda cerrar) con cloruro
ferrico.
12. Esperar a que el cloruro ferrico remueva el cobre sobre el cual no hay toner, mientras
se mueve constantemente el recipiente. Cuando se remueve el cobre en la baquelita, los
lugares donde no haba toner comienzan a cambiar de color (normalmente se ponen
de color amarillo).
13. Cuando ya se haya removido todo el cobre no deseado, se vaca el cloruro a su envase
y se lava la placa con agua.
124 Apendice C: Circuitos impresos desarrollados
14. Con thiner o alcohol en una estopa o algodon, se quita (despinta) todo el toner de la
baquelita.
15. Se realizan las perforaciones requeridas con un taladro, ya sea de pistola o de banco.
16. Se colocan los componentes electronicos en su lugar y se soldan con un cautn, solda-
dura y pasta para soldar. Despues de esto, la tarjeta ya esta lista para probarse.
C.2. Metodo de fabricacion de los circuitos impresos 125
1 2 V 4 2 1 2
t t
o o
u u
+
M W P M W P
K R B K R B
R I D R I D
A I B A
V
5
Figura C.4: Plantilla del circuito impreso de la tarjeta controladora de M2 y M3 del robot
SCARA.
Figura C.5: Plantilla del circuito impreso del snubber de sobrevoltaje RCD.
Apendice D
127
128 Apendice D: Tarjetas H1 y H2 para la conexion del microcontrolador
En este apendice se muestran los codigos que se usaron para el robot. Estos pro-
gramas son software gratuito; los cuales pueden ser redistribuidos y/o modificados bajo los
terminos de licencia GNU. Estos codigos se pueden descargar de la pagina web del Dr. Leo-
nardo Romero Munoz http://faraday.fie.umich.mx/ lromero/ o se pueden solicitar a traves
de los siguientes correos electronicos: lromero@umich.mx, omarorp@gmail.com
A continuacion se muestran los codigos utilizados para la interfase con el robot y
desarrollo de nuevos programas, as como los codigos en lenguaje C compilados y cargados
al microcontrolador del robot SCARA.
3. adapt9s12dp256. Este programa sirve para descargar un archivo ejecutable (en codi-
go maquina) al microcontrolador usando el puerto serie o RS232.
135
136 Apendice E: Codigo del microcontrolador
E.1.1. Makefile
//-----------------------------------------------------------------------------
/*
Copyright (C) 2007 Leonardo Romero email:lromero@umich.mx
*/
/*
File: command.c
Author: Leonardo Romero
Date: May 9, 2007
Rev. No.: 1.0
Description: Initial Release
*/
#m68hc11-as -m68hc12 -mshort -o serial.o serial.s
NAME = main
#BINDIR = c:/68hc11/gcc/bin
BINDIR = /usr/bin
CC = $(BINDIR)/m68hc11-gcc
AS = $(BINDIR)/m68hc12-as
LD = $(BINDIR)/m68hc12-ld
OC = $(BINDIR)/m68hc12-objcopy
.c.o:
$(CC) $(CFLAGS) -S $<
$(AS) $(AFLAGS) -a=$*.lst -o $@ $*.s
.s.o:
$(AS) $(AFLAGS) -a=$*.lst -o $@ $<
.S.o:
$(AS) $(AFLAGS) -a=$*.lst -o $@ $<
all: $(OBJS)
$(LD) -T$(NAME).ld $(LFLAGS) -o$(NAME).obj $(OBJS) $(ARCHIVES)
$(OC) $(OCFLAGS) $(NAME).obj $(NAME).s19
sh srec.sh $(NAME).s19
@echo ">>>" out.s19 is ready to download to adapt9s12dp256 "<<<"
clean:
rm -f *.o; rm -f *.s19; rm -f *.s
//-----------------------------------------------------------------------------EOF
E.1. Programas de interfase y desarrollo usados 137
E.1.2. serial.c
#include "serial.h"
#include "ioRegsHcs12DP256.h"
#define scimask b(0,0,1,0,1,1,0,0) //RIE - SCI Interrupt enable ;RE - Receiver Enable
void ser0_putchar(char c)
{
g_w_command_line[g_w_command_len] = c;
g_w_command_len++;
}
void ser0_putcharnl(char c)
{
ser0_putchar(c);
ser0_putchar(\n);
}
{
while(*s){
ser0_putchar(*s);
s++;
}
}
void ser0_putnl()
{
ser0_putchar(\n);
}
void ser0_putspace()
{
ser0_putchar( );
}
#define NDIGITS 5
void ser0_putushort(unsigned short x)
{
static byte d[NDIGITS];
static int i;
i = NDIGITS -1;
do {
d[i--] = x % 10;
x /= 10;
} while (x);
for(i++; i < NDIGITS; i++)
ser0_putchar(d[i] + 0);
}
void ser0_putshort(short x)
{
if(x < 0){
ser0_putchar(-);
x = -x;
}
ser0_putushort((unsigned short) x);
}
#define NDIGITS_LONG 10
void ser0_putulong(unsigned long x)
{
static byte d[NDIGITS_LONG];
static int i;
i = NDIGITS_LONG -1;
do {
d[i--] = x % 10;
x /= 10;
} while (x);
for(i++; i < NDIGITS_LONG; i++)
ser0_putchar(d[i] + 0);
}
void ser0_putlong(long x)
{
if(x < 0){
ser0_putchar(-);
x = -x;
E.1. Programas de interfase y desarrollo usados 139
}
ser0_putulong((unsigned long) x);
}
g_command_line[g_command_len++]=c;
if(c==\n){
g_command_line[g_command_len++]=0;
// ser0_puts(g_command_line);
g_command_pending=1;
}
// ser1_putchar(c);
//-----------------------------------------------------------------------------
// Serial 1
void ser1_putchar(char c)
{
unsigned char reg;
do {
reg = TDRE;
reg &= SCI1SR1;
} while (reg==0);
// while ((SCI1SR1 & TDRE)==0); no funciona en 3.3.5-m68hc1x-20050515
SCI1DRL = c;
}
//-----------------------------------------------------------------------------EOF
//-----------------------------------------------------------------------------EOF
140 Apendice E: Codigo del microcontrolador
E.1.3. adapt9s12dp256.c
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
int fd;
bzero(&newtio, sizeof(newtio));
// newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR | IXON | IXOFF | IXANY;
newtio.c_oflag = 0;
tcflush(fd, TCIOFLUSH);
tcsetattr(fd,TCSANOW,&newtio);
tcflush(fd, TCIOFLUSH);
pthread_create(&a_thread,NULL,read_serial_port,NULL);
while(1) {
fgets(command,255,stdin);
write(fd,command,1);
if(strcmp(command,"b\n")==0)
load_program(fd,argv[2]);
}
return 0;
}
//-----------------------------------------------------------------------------
E.2.1. main.c
#include <stdio.h>
#include <string.h>
#include "main.h"
#include "ioRegsHcs12DP256.h"
#include "serial.h"
#include "command.h"
#include "isr.h"
#include "control.h"
int main(void);
static decode_command()
{
static int inicio_num, i, signo;
static char c;
command=g_command_line[0];
num_params=0;
param[0]=0;
inicio_num=0;
signo = 1;
for(i=1; (c=g_command_line[i]); i++) {
if(c==\r)
continue;
if(c== || c == \n) {
param[num_params] *= signo;
signo = 1;
param[++num_params]=0;
} else if(c==-) {
signo = -1;
} else {
inicio_num=1;
param[num_params] *= 10;
param[num_params] += c - 0;
}
}
if(!inicio_num)
num_params--;
g_command_len=0;
}
int main()
{
static unsigned short k,j;
DISABLE_INTERRUPTS;
ENABLE_INTERRUPTS;
step = 0;
while(1){
if(step <= I_READY){ ////
if(init_secuence(step)) ////
step++; ////
}
if(g_command_pending && !edo_wait){
g_command_pending=0;
decode_command();
do_command(command,num_params,param);
}
if(g_rtf){
g_rtf = 0;
}
if(g_rtf_ms){
blm_demon();
real_time_control();
real_time_rutine_ms();
g_rtf_ms = 0;
}
if(g_rtf_sec){
// real_time_rutine_second();
g_rtf_sec = 0;
}
check_end_commands();
ser0_write_demon();
}
return 0;
}
//-----------------------------------------------------------------------------EOF
E.2.2. command.c
E.2. Programa del microcontrolador del robot SCARA 145
/* command.c */
#include <stdio.h>
#include <string.h>
#include "ioRegsHcs12DP256.h"
#include "main.h"
#include "command.h"
#include "control.h"
#include "serial.h"
#include "isr.h"
#include "step_motor.h"
ser0_putnl();
ser0_putushort((unsigned short) GET_PWM(M0_PWM));
ser0_putspace();
ser0_putushort((unsigned short) GET_PWM(M1_PWM));
ser0_putspace();
ser0_putushort((unsigned short) GET_PWM(M2_PWM));
ser0_putspace();
ser0_putushort((unsigned short) GET_PWM(M3_PWM));
ser0_putspace();
ser0_putnl();
ser0_putushort((unsigned short) get_switchB(mB_SwitchM0));
ser0_putspace();
ser0_putushort((unsigned short) get_switchB(mB_SwitchM1));
ser0_putspace();
ser0_putushort((unsigned short) get_switchB(mB_SwitchM2));
ser0_putspace();
ser0_putushort((unsigned short) get_switchB(mB_SwitchM3));
ser0_putnl();
ser0_putushort((unsigned short) PORTH);
ser0_putnl();
ser0_putushort((unsigned short) PORTA);
ser0_putnl();
// blm_t();
}
void check_end_commands(void)
{
check_end_wait();
}
}
}
//-----------------------------------------------------------------------------EOF
E.2.3. command.h
//-----------------------------------------------------------------------------
/*
Copyright (C) 2007 Leonardo Romero email:lromero@umich.mx
/* command.h */
E.2.4. control.c
//#define DEBUG 1
#include "ioRegsHcs12DP256.h"
#include "main.h"
#include "serial.h"
#include "step_motor.h"
#include "control.h"
#include "isr.h"
// Masks
// K0 480 100 20 5 16
void set_ac(unsigned short num_params, DEF_PARAM param[])
{
short m;
m = param[0];
if(motor_type[m] == STEP_MOTOR) {
if(num_params == 6) {
g_timer_step_init_pwm[m] = (short) param[1];
g_timer_step_max[m] = (short) param[2];
g_timer_step_min[m] = (short) param[3];
g_timer_step_inc[m] = (short) param[4];
g_timer_step_control[m] = (short) param[5];
}
//K2 10 1000 0 255
//K3 10 1000 0 255
} else {
k_pro1[m] = param[1];
k_pro2[m] = param[2];
k_int[m] = param[3];
k_min_pwm[m] = (unsigned char) param[4];
k_max_pwm[m] = (unsigned char) param[5];
}
}
E.2. Programa del microcontrolador del robot SCARA 149
active_motor = m;
steps = signed_steps;
if(steps < 0)
steps = -steps;
blm_steps[m] = steps;
if(motor_type[m] == STEP_MOTOR){
if(signed_steps > 0)
blm_dir[m] = 1;
else
blm_dir[m] = 0;
stm_init_motor(active_motor);
}
}
if(num_params == 2){
m = (short) param[0];
pos = param[1];
if((m == 0 && pos > 31200) || (m == 1 && pos > 10820) || (m==2 && pos > 65000) ||
(m==3 && pos > 480000) ) //If pos is out of range
return; // Do not move
/*
* PAN: 628 + 5 units = 360 degrees, pos = 316 to align the pan with the front of the robot,
1 unit = 0.5687 degrees
* TILT: pos = 51 to align with vertical, pos = 189 to align with horizontal,
1 unit = 0.6521 degress
*/
void report_status(void)
{
short m;
ser0_putchar(L);
150 Apendice E: Codigo del microcontrolador
ser0_putlong((long) g_pos[m]);
ser0_putspace();
ser0_putulong((long)blm_steps[m]);
ser0_putspace();
}
ser0_putnl();
}
/* SPEED_CONTROL */
min_p = min_pwm[active_motor];
max_p = max_pwm[active_motor];
vel=g_vel[active_motor];
if(vel < 0)
vel = -vel;
vel_ref = max_vel[active_motor];
if(vel > vel_ref){
dif = vel - vel_ref;
min_p += dif;
max_p -= dif;
} else {
min_p--;
max_p++;
}
switch (active_motor) {
case M2: error *= -1; break;
}
pos_old[active_motor] = g_pos[active_motor];
alter_power (error);
void real_time_control(void)
{
short m;
void real_time_rutine_ms(void)
{
if(g_timer)
g_timer--;
void init_control()
{
short m;
// PWME |= mP_MTiltPWM | mP_MPanPWM; // Pulse Width Channel 6 & 7 Enable (use Clock B)
PWME = b(0,0,1,1,0,0,1,1); // Pulse Width Channel 0 & 1 Enable (use Clock B), 5 use Clock A
// PWMPRCLK = b(0,0,1,0,0,0,1,0); //Clock B=Bus clock/4
//1/(1/24e6 * 4 *256))=23437Hz
// PWMPRCLK = b(0,1,0,0,0,1,0,0); //Clock B=Bus clock/16 (1/24e6 * 16 *256)=5859Hz
// PWMPRCLK = b(0,0,1,1,0,0,1,1); //Clock B=Bus clock/8 (1/(1/24e6 * 8 *256)=11718Hz
// PWMPRCLK = b(0,1,1,1,0,1,1,1); //Clock B=Bus clock/128 (1/(1/24e6 * 128 *256)=732Hz
// PWM46KHz;
PWM22KHz;
// PWM5859Hz;
PWMPOL = 0xff; // PWM outputs are high at the beginning of the period, then goes
// low when the duty count is reached
// PWMPOL = 0x00; // PWM outputs are low at the beginning of the period, then goes
// high when the duty count is reached
// TSCR2 = b(0,0,0,0,1,1,1,1); //Timer Prescaler = Bus clock /128 = 1/1E24 * 128 =5.33 microseg,
TCRE=1 Timer Counter Reset Enable
// TC7 = 100; // Periodo = 100 * 5.33 microseg = 0.533 miliseg 1.875 Khz
// TC7 = 50; // Periodo = 50 * 5.33 microseg = 0.266 miliseg 3.750 Khz
// TSCR2 = b(0,0,0,0,1,0,1,1); //Timer Prescaler = Bus clock /8 = 1/1E24 * 8 =0.333 microseg,
TCRE=1 Timer Counter Reset Enable
// TC7 = 150; // Periodo = 150 * 0.333 microseg = 0.05 miliseg
// TSCR2 = b(0,0,0,0,1,1,0,0); //Timer Prescaler = Bus clock /16 = 1/1E24 * 16 =0.666 microseg,
TCRE=1 Timer Counter Reset Enable
// TC7 = 150; // Periodo = 150 * 0.66 microseg = 0.1 miliseg
// TSCR2 = b(0,0,0,0,1,0,1,0); //Timer Prescaler = Bus clock /4 = 1/1E24 * 4 =0.166 microseg,
TCRE=1 Timer Counter Reset Enable
// TC7 = 150; // Periodo = 150 * 0.166 microseg = 0.025 miliseg 40kz (muy alto)
// TSCR2 = b(0,0,0,0,1,1,1,0); //Timer Prescaler = Bus clock /64 = 1/1E24 * 64 =2.666 microseg,
TCRE=1 Timer Counter Reset Enable
// TC7 = 50; // Periodo = 50 * 2.666 microseg = 0.133 miliseg 7.5 khz
// TC7 = 40; // Periodo = 40 * 2.666 microseg = 0.1066 miliseg 9.375 khz
// TSCR2 = b(0,0,0,0,1,1,0,1); //Timer Prescaler = Bus clock /32 = 1/1E24 * 32 =1.333 microseg,
TCRE=1 Timer Counter Reset Enable
// TC7 = 50; // Periodo = 50 * 1.333 microseg = 0.133 miliseg 15 khz (muy alto)
// TC6 = 20;
// TC5 = 20;
// TC4 = 10;
init_encoders();
#define TIMER_PT 15
#define TIMER_PT_LONG 100
int init_secuence(int s)
{
static short result;
result = 0;
if(s==I_M0_RIGHT){
if(!get_switchB(mB_SwitchM0) && !blm_steps[0])
set_move_params(0,-1);
if(get_switchB(mB_SwitchM0) && !blm_steps[0])
result = 1;
} else if(s==I_M0_LEFT){
if(get_switchB(mB_SwitchM0) && !blm_steps[0])
set_move_params(0,1);
if(!get_switchB(mB_SwitchM0) && !blm_steps[0]){
result = 1; g_pos[0] = 0;
}
} else if (s==I_M1_RIGHT){
if(!get_switchB(mB_SwitchM1) && !blm_steps[1])
set_move_params(1,1);
if(get_switchB(mB_SwitchM1) && !blm_steps[1])
result = 1;
} else if(s==I_M1_LEFT){
if(get_switchB(mB_SwitchM1) && !blm_steps[1])
set_move_params(1,-1);
if(!get_switchB(mB_SwitchM1) && !blm_steps[1]){
result = 1; g_pos[1] = 10820;
}
} else if (s == I_M2_RIGHT){
if(!get_switchB(mB_SwitchM2) && !blm_steps[2]){
g_pos_ref[2]=10000; g_pos[2] = 10000;
param[0] = 2; param[1] = g_pos_ref[2]+100; move(2,param);
}
if(get_switchB(mB_SwitchM2) && !blm_steps[2]){
result = 1;
}
} else if (s == I_M2_LEFT ){
if(get_switchB(mB_SwitchM2) && !blm_steps[2]){
param[0] = 2; param[1] = g_pos_ref[2] - 1; move(2,param);
}
if(!get_switchB(mB_SwitchM2) && !blm_steps[2]){
g_pos[2]=80000; g_pos_ref[2]=65000; result=1;
}
} else if (s == I_M3_UP) {
if(!get_switchB(mB_SwitchM3) && !blm_steps[3]){
g_pos_ref[3]=10000; g_pos[3] = 10000;
param[0] = 3; param[1] = g_pos_ref[3] -100; move(2,param);
}
if(get_switchB(mB_SwitchM3) && !blm_steps[3]){
result=1;
}
} else if (s == I_M3_DOWN) {
if(get_switchB(mB_SwitchM3) && !blm_steps[3]){
param[0] = 3; param[1] = g_pos_ref[3] + 10; move(2,param);
}
if(!get_switchB(mB_SwitchM3) && !blm_steps[3]){
g_pos[3]=0; g_pos_ref[3]=0; result=1;
}
} else if (s==I_M0_CENTER) {
E.2. Programa del microcontrolador del robot SCARA 155
// param[0]=0; param[1]=13250;
param[0]=0; param[1]=5000;
move(2,param);
result = 1;
} else if (!blm_steps[0] && s==I_M1_CENTER) {
param[0]=1; param[1]=5350;
move(2,param);
result = 1;
} else if (s==I_M2_CENTER) {
param[0]=2; param[1]=42500;
move(2,param);
result = 1;
} else if (!blm_steps[1] && s == I_READY){
result = 1;
}
return result;
}
//-----------------------------------------------------------------------------EOF
E.2.5. control.h
/* control.h */
#define DC_MOTOR 0
#define STEP_MOTOR 1
#define NUM_TEMP_SENSORS 7
#define mB_SwitchM0 b(0,0,0,0,0,0,0,1)
#define mB_SwitchM1 b(0,0,0,0,0,0,1,0)
#define mB_SwitchM2 b(0,0,0,0,0,1,0,0)
#define mB_SwitchM3 b(0,0,0,0,1,0,0,0)
E.2.6. isr.c
* isr.c
*/
156 Apendice E: Codigo del microcontrolador
#include "main.h"
#include "isr.h"
#include "serial.h"
#include "control.h"
#include "step_motor.h"
void get_vel()
{
/* MCCTL |= ICLAT; //Force the contents of 8-bit accumulators to be latched into their
//associated holding registers
unsigned char p, t;
p = PAN_AC;
t = TILT_AC;
*/
DISABLE_INTERRUPTS;
g_vel[M2] = g_pos_rel_M2;
g_vel[M3] = g_pos_rel_M3;
g_pos_rel_M2 = 0;
g_pos_rel_M3 = 0;
ENABLE_INTERRUPTS;
g_rtf_ms=1;
// g_timer_ms = 15;
g_timer_ms = 7;
}
g_rtf=1;
}
//-----------------------------------------------------------------------------EOF
E.2.7. isr.h
/*
* isr.h
*/
#ifndef ISR_H
#define ISR_H
#endif
//-----------------------------------------------------------------------------EOF
#include <stdio.h>
#include <string.h>
#include "ioRegsHcs12DP256.h"
#include "main.h"
#include "serial.h"
#include "command.h"
#include "control.h"
#include "step_motor.h"
#include "isr.h"
//#define DEBUG
void stm_set_motor(short m)
{
switch(m){
case 0: setb(mA_a0_M1,PORTA); setb(mA_a0_M2,PORTA); clearb(mA_a0_Sync,PORTA);
clearb(mA_a0_Clock,PORTA); break;
// case 0: clearb(mA_a0_M1,PORTA); clearb(mA_a0_M2,PORTA); clearb(mA_a0_Sync,PORTA);
clearb(mA_a0_Clock,PORTA); break;
158 Apendice E: Codigo del microcontrolador
// K0 40 40 5 5 8
// K1 40 40 5 5 8
volatile unsigned short g_timer_step_init_pwm[N_MOT]= {20,20}; /* 480 * 1/16ms = 30ms */
volatile unsigned short g_timer_step_max[N_MOT]= {20,20};
volatile unsigned short g_timer_step_min[N_MOT]= {10,10};
volatile unsigned short g_timer_step_inc[N_MOT]= {1,1};
volatile unsigned short g_timer_step_control[N_MOT]= {10,10};
volatile unsigned short g_timer_step[N_MOT]= {20,20};
volatile unsigned char g_pwm = 0;
// ms/vuelta = g_timer_step*1/16 *800
// 20 -> 1000ms por 800 pasos (1 vuelta)
// 30 -> 1500ms por 800 pasos (1 vuelta)
// 35 -> 1750ms por 800 pasos (1 vuelta) No pierde pasos en vacio
// 40 -> 2000ms por 800 pasos (1 vuelta)
//
void blm_ajusta_timer_motor(short m)
{
E.2. Programa del microcontrolador del robot SCARA 159
timer = g_timer_step[m];
steps = blm_steps[m];
inc = g_timer_step_inc[m];
control = g_timer_step_control[m];
switch (m){
case 0: setb(mA_a0_Clock, PORTA); break;
case 1: setb(mH_a1_Clock, PORTH); break;
}
blm_ajusta_timer_motor(m);
g_clock_lo[m]=g_timer_step[m];
g_clock_hi[m]=g_timer_step[m];
if(g_clock_lo[m])
return;
raw_motor_conmutator_to_low(m);
if (blm_steps[m] && !g_clock_hi[m]){
if(blm_steps[m]){
raw_motor_conmutator_to_high(m);
}
if(blm_steps[m]){
blm_steps[m]--;
if(blm_dir[m])
g_pos[m]++;
else
160 Apendice E: Codigo del microcontrolador
g_pos[m]--;
}
if(!blm_steps[m]) {
set_pwm_motor(m,MAX_PWM_HOLD); // Stop the motor
stm_set_sync_high_motor(m);
}
}
}
void stm_init_motor(short m)
{
stm_set_motor(m);
set_pwm_motor(m,MAX_PWM);
g_clock_lo[m] = g_timer_step_init_pwm[m];
g_clock_hi[m] = g_timer_step_init_pwm[m];
g_timer_step[m] = g_timer_step_max[m];
}
void blm_demon(void)
{
short m;
unsigned char step;
get_vel();
for(m=0; m < 2; m++){
if(blm_steps[m]){
set_pwm_motor(m,MAX_PWM_HOLD);
blm_pwm(m);
}
}
}
//-----------------------------------------------BRUSHED MOTORS
if (enc_derr_M2 != enc_actual_M2) {
if(enc_forward[enc_derr_M2] == enc_actual_M2) {
g_pos_rel_M2++;
enc_derr_M2 = enc_actual_M2;
}
if(enc_backward[enc_derr_M2] == enc_actual_M2) {
g_pos_rel_M2--;
enc_derr_M2 = enc_actual_M2;
}
}
E.2. Programa del microcontrolador del robot SCARA 161
if (enc_derr_M3 != enc_actual_M3) {
if(enc_forward[enc_derr_M3] == enc_actual_M3) {
g_pos_rel_M3--;
enc_derr_M3 = enc_actual_M3;
}
if(enc_backward[enc_derr_M3] == enc_actual_M3) {
g_pos_rel_M3++;
enc_derr_M3 = enc_actual_M3;
}
}
}
void init_encoders()
{
enc_derr_M2 = GET_FILTER_PORT(mB_AB_filter,TWIST_MOTOR_ENCODER_PORT);
enc_derr_M3 = GET_FILTER_PORT(mB_AB_filter,Z_MOTOR_ENCODER_PORT>>2);
}
get_twist_encoder();
get_z_encoder();
ENABLE_INTERRUPTS;
}
void __attribute__ ((interrupt)) ISR_IC6(void)
{
TFLG1 |= b(0,1,0,0,0,0,0,0); //clear flag
}
void __attribute__ ((interrupt)) ISR_IC5(void)
{
// g_pos[3]++;
TFLG1 |= b(0,0,1,0,0,0,0,0); //clear flag
}
void __attribute__ ((interrupt)) ISR_IC4(void)
{
// g_pos[2]++;
TFLG1 |= b(0,0,0,1,0,0,0,0); //clear flag
}
void __attribute__ ((interrupt)) ISR_IC3(void)
{
TFLG1 |= b(0,0,0,0,1,0,0,0); //clear flag
}
void __attribute__ ((interrupt)) ISR_IC2(void)
{
TFLG1 |= b(0,0,0,0,0,1,0,0); //clear flag
}
//-----------------------------------------------------------------------------EOF
162 Apendice E: Codigo del microcontrolador
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#include <math.h>
FILE *f;
int fd;
char command[256], line[256];
#define PI 3.14159
// Unidades en milimetros
void elipse(double radio_a, double radio_b, double xc, double yc, int n, double x[], double y[])
{
int i;
double inc_ang, ang;
// n >= 2
void linea( double x0, double y0, double x1, double y1, int n, double x[], double y[])
{
int i;
double inc_lambda = 1.0 / (n - 1.0);
void dibuja(int n, double x[], double y[], double M3, int levanta)
{
int i,i0, M[4];
char comando[256], respuesta[256];
i0 = 0;
for(i=0; i < n; i++){
get_angles(x[i], y[i], M);
164 Apendice E: Codigo del microcontrolador
}
}
void prueba_robot()
{
int n=1000;
double x[10000], y[10000];
M3 = M3_inicio;
radio = 1.0;
x0 = x[n-1]; y0 = y[n-1];
radio = radio + 1.0;
printf("%f\n", radio);
}
x0 = 70.0, y0 = 200.0;
double x1 = -70.0, y1 = 200.0, x2 = -70.0, y2 =270.0, x3 = 70.0, y3 = 270.0;
linea(x0, y0, x1, y1, n, x, y); dibuja(n,x,y,M3,1);
linea(x1, y1, x2, y2, n, x, y); dibuja(n,x,y,M3,1);
linea(x2, y2, x3, y3, n, x, y); dibuja(n,x,y,M3,1);
linea(x3, y3, x0, y0, n, x, y); dibuja(n,x,y,M3,1);
}
E.2. Programa del microcontrolador del robot SCARA 165
bzero(&newtio, sizeof(newtio));
// newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR;
newtio.c_oflag = 0;
tcflush(fd, TCIOFLUSH);
tcsetattr(fd,TCSANOW,&newtio);
tcflush(fd, TCIOFLUSH);
f = fdopen(fd,"w+");
/*
for(i=0; i < 1; i++){
printf("*** Iteracion %d ***\n\n",i);
167
168 Referencias
URL http://www.roboticsonline.com/public/articles/-
archivedetails.cfm?id=518/. Updated: 2006/02/03
[Technology] Technology, A.
URL http://www.adept.com/. Updated: 2006/02/22
Actuador Dispositivo capaz de transformar algun tipo de energa en energa mecanica que
se traduce como un movimiento mecanico.
BJT Acronimo del ingles Bipolar Junction Transistors que se refiere al componente electroni-
co semiconductor conocido como transistor de union bipolar.
Control en lazo abierto Esquema de control en el que la salida del sistema no se usa en
forma alguna para aplicar una accion de control. Generalmente la salida del sistema a
controlar se compara con la entrada para dar lugar al error en base al cual se calcula
y aplica la accion de control correspondiente a traves del controlador.
Control en lazo cerrado Esquema de control en el que la salida del sistema es usado para
obtener el error entre la entrada y la salida para posteriormente calcular y aplicar la
accion de control correspondiente a traves del controlador.
Controlador del motor Dispositivo en base a circuitos electronicos de potencia y/o logi-
cos encargado de aplicar la corriente y voltaje adecuados algun devanado del motor
para que realice un movimiento con las caractersticas requeridas.
DOF Acronimo del ingles Degrees of Freedom que se refiere al numero de grados de libertad
de un robot o sistema.
175
176 Glosario
GNU Acronimo del ingles General Public License que se refiere al software que es de
dominio o licencia publica.
L7805T Circuito integrado regulador de voltaje que proporciona un nivel de tension fijo
de 5 volts entre sus terminales de salida.
Micropaso Tecnica de control de posicion de un motor de pasos que produce varios pasos
pequenos por cada paso del motor mediante la modulacion del voltaje aplicado a sus
devanados.
MOSFET Acronimo del ingles Metal Oxide Semiconductor Field Effect Transistor que se
refiere al elementeo semiconductor denominado transistor de efecto de campo de oxido
semiconductor.
Puente H Circuito de control que usa dispositivos semiconductores de potencia que con-
mutan de manera que proporcionan un control de cuatro cuadrantes a la carga conec-
tada en sus terminales de salida. Este esquema es usado tpicamente para controlar
motores de CD.
PWM Acronimo del ingles Pulse Width Modulator que se refiere a la tecnica de control
de voltaje mediante la modulacion del ancho de pulso. Es utilizada para variar conti-
nuamente la potencia promedio a una carga electrica mediante la variacion del ciclo
de trabajo (DC) de la senal pulsante aplicada a la carga.
Snubber Circuito anadido al sistema de potencia para eleiminar el efecto de las inductan-
cias parasitas sobre el comportamiento del sistema.
178 Glosario
caractersticas, 21
PWM, 40
Adapt9S12DP256, 21
codigo, 135 Robot
programacion, 23 definicion, 2
179
180 Indice