Professional Documents
Culture Documents
PROYECTO MIHRO
(MOBILE INTELLIGENT HEXAPOD ROBOT)
VOLUMEN I
OTOO 2008
VOLUMEN I
MEMORIA DESCRIPTIVA
Resumen
Este proyecto trata sobre el proceso de diseo y construccin de un robot hexpodo de
tres grados de libertad por pata. Su desarrollo engloba las tareas de estudio previo y anlisis
de otros proyectos similares, diseo CAD de toda su estructura mecnica, su construccin
a partir de chapa de aluminio, el diseo electrnico del hardware y su programacin en
lenguaje ensamblador. La caracterstica ms destacable de su diseo mecnico es que otorga
a sus seis patas la capacidad de detectar tanto el suelo como los posibles obstculos que
puedan interrumpir la trayectoria de cada paso. Su control est distribuido entre siete placas
electrnicas: un cerebro, o master, y seis esclavos encargados de controlar a cada una de
las patas, todas ellas basadas en el microcontrolador PIC16F88. El software desarrollado
permite controlar dinmicamente la posicin de cada articulacin con una precisin de
072 mediante la generacin de una seal PWM para cada servomotor estndar Futaba
S3003. La comunicacin entre los sistemas electrnicos se realiza a travs de un bus I2C,
por lo que se ha programado el soporte hardware que ofrece el PIC16F88 para los
dispositivos en modo slave y se ha implementado el modo master enteramente por
software. Adems del mdulo SSP (comunicacin I2C), el programa hace uso del mdulo
Timer1 y de las interrupciones externa y por cambio de estado de los pines RB4:RB7 del
microcontrolador. El robot se opera manualmente desde un teclado o mando conectado a
su placa master.
Resum
El projecte tracta sobre el procs de disseny i construcci dun robot hexpode de tres
graus de llibertat per pota. El seu desenvolupament engloba les tasques destudi previ i
anlisi daltres projectes similars, disseny CAD de tota la seva estructura mecnica, la seva
construcci a partir de xapa dalumini, el disseny electrnic del hardware i la seva
programaci en llenguatge assemblador. La caracterstica ms destacable del seu disseny
mecnic s que atorga a les seves sis potes la capacitat de detectar tant el terra com els
possibles obstacles que puguin interrompre la trajectria de cada passa. El seu control est
distribut entre sis plaques electrniques: un cervell, o master, i sis esclaus encarregats de
controlar cadascuna de les potes, totes elles basades en el microcontrolador PIC16F88. El
software desenvolupat permet controlar dinmicament la posici de cada articulaci amb
una precisi de 072 mitjanant la generaci dun senyal PWM per a cada servomotor
estndard Futaba S3003. La comunicaci entre els sistemes electrnics es realitza a travs
dun bus I2C, pel que sha programat el suport hardware que ofereix el PIC16F88 pels
dispositius en mode slave i sha implementat el mode master completament per
software. A ms del mdul SSP (comunicaci I2C), el programa fa s del mdul Timer1 i
de les interrupcions externa i per canvi destat dels pins RB4:RB7 del microcontrolador. El
robot sopera manualment des dun teclat o comandament connectat a la seva placa
master.
Abstract
This project is about the designing and construction of an hexapod robot with three
degrees of freedom each leg. Its development includes tasks such as previous study and
analysis of other similar projects, CAD designing of all its mechanical structure, its
construction using aluminium plating, the hardwares electronic designing and its
programming in assembler language. The most remarkable feature of its mechanical
designing is that it gives each one of its six legs the capacity of detecting not only the floor
but also the possible obstacles that may interrupt the trajectory of every step. Its control is
distributed in seven electronic plates: a brain, or master, and six slaves in charge of
controlling each one of the legs, all of them based on the PIC16F88 microcontroller. The
developed software allows dynamic control of the position of every articulation with a
072 precision by generating a PWM signal for each standard Futaba S3003 servomotor.
The communication among the electronic systems is carried out through an I2C bus, so it
has been programmed its hardware support on PIC16F88 for devices in "slave" mode, and
the "master" mode has been entirely implemented by software. Aside from the SSP module
(I2C communication), the program uses the Timer1 module and the external interruptions
as well as the interrupt by change on the microcontrollers RB4:RB7 pins. The robot
operates manually from a keyboard or a pad connected to its master board.
ndice
[Pgina en blanco]
ndice II
ndice de Contenidos
1
Prefacio __________________________________________________________ 1
2.2.2
2.4.1
Objetivos ________________________________________________ 12
2.4.2
2.4.3
2.4.4
2.4.5
3.2.1
3.2.2
Prototipos _______________________________________________ 19
3.2.3
3.2.4
4.3.2
ndice III
ndice
4.3.3
4.3.4
4.3.4
5.2.2
5.2.3
5.2.4
ndice IV
5.4.2
5.4.3
5.4.4
5.5.1
5.5.2
5.5.3
6.2.2
ndice V
ndice
ndice de Figuras
Figura F. 1: Robots de Carlos Vivancos y Marc Rivas. ____________________________4
Figura F. 2: IC-Hexapod _________________________________________________ 18
Figura F. 3: BF Hexapod V5 (inacabado) ______________________________________5
Figura F. 4: CH3-R ______________________________________________________5
Figura F. 5: Asterisk ______________________________________________________6
Figura F. 6: AMOS-WD06 _________________________________________________6
Figura F. 7: Mike Smyths Hexapod __________________________________________7
Figura F. 8: Bill-Ant ______________________________________________________7
Figura F. 9: Ejemplar de Lauron III del IRI __________________________________ 21
Figura F. 10: Lauron IVc __________________________________________________8
Figura F. 11: Melanie III __________________________________________________8
Figura F. 12: Diagrama de bloques general ____________________________________ 14
Figura F. 13: Diagrama de bloques de la comunicacin I2C _______________________ 15
Figura F. 15: Segundo prototipo de pata _____________________________________ 19
Figura F. 14 Primer prototipo de pata _______________________________________ 19
Figura F. 16: Detector de obstculo abierto ___________________________________ 33
Figura F. 17: Detector de obstculo cerrado __________________________________ 20
Figura F. 18: Tercer prototipo de pata _______________________________________ 20
Figura F. 19: Aspecto final del tercer prototipo ________________________________ 21
Figura F. 20: Primera etapa del diseo final de la pata ___________________________ 21
Figura F. 22: Modelo de cadera fija _________________________________________ 22
Figura F. 21: Modelo de cadera mvil _______________________________________ 22
Figura F. 23: Diseo final de las patas _______________________________________ 23
Figura F. 25: Caractersticas de la seal PWM _________________________________ 24
Figura F. 24: Control de posicin del servo ___________________________________ 24
Figura F. 27: Imgen panormica de la seal PWM obtenida _____________________ 38
Figura F. 28: Imgen 1 de detalle de la seal PWM obtenida ______________________ 38
Figura F. 29: Imgen 2 de detalle de la seal PWM obtenida ______________________ 25
Figura F. 26: Primera controladora _________________________________________ 25
Figura F. 30: Placa entrenadora ____________________________________________ 26
Figura F. 31: Collage con distintas vistas del diseo y el resultado finales _____________ 28
ndice VI
ndice VII
ndice
ndice de Tablas
Tabla T. 1: Etapas de desarrollo del robot MIHRO (1) __________________________ 10
Tabla T. 2: Etapas de desarrollo del robot MIHRO (2) __________________________ 11
Tabla T. 3: Propiedades mecnicas del robot MIHRO ___________________________ 27
Tabla T. 4: Consumo elctrico del robot _____________________________________ 29
Tabla T. 5: rdenes manuales mediante teclado o mando _______________________ 116
ndice VIII
ndice IX
ndice
[Pgina en blanco]
ndice X
1 Prefacio
Mediante el presente documento tengo el enorme placer de presentarles a MIHRO, un
robot hexpodo de 18 grados de libertad que supone la consecuencia de cientos de horas
de trabajo, diseo y tambin, debo reconocerlo, de mi propia ensoacin. Quienes me
conocen les dirn de m que tengo cierta tendencia a la megalomana, aunque quizs esto
slo sea el reflejo de mi propio afn de superacin. No obstante, cuando empec esta
carrera, y aunque senta cierta curiosidad por la robtica, en mi foro interno jams pude
verme a m mismo dedicado en un futuro no muy lejano a disear y construir robots, una
tarea que por aqul entonces me pareca harto compleja, hasta el punto de considerarla
inaccesible. Un ao como miembro del CRA (Club de Robtica Autnoma) de la EUPMT,
y dos aos ms como presidente electo cambiaron en cierto modo esa visin temerosa de la
robtica y la sustituyeron gradualmente por otra mucho ms cercana, aunque respetuosa.
El CRA me brind la posibilidad de acceder a tcnicas y recursos bsicos pero eficaces que
me permitieron comenzar a desarrollar mis primeros prototipos, la mayora de ellos robots
relativamente sencillos pensados para competir en concursos de robtica como el que el
mismo CRA organizaba anualmente, evento en el cual tuve oportunidad de participar en
ms de una ocasin, e incluso de colaborar en su organizacin. Y durante todo ese tiempo
se fue fraguando en mi cabeza la posibilidad de enfrentarse a un reto tan enorme como
construir y gobernar un robot hexpodo completo, un tipo de robot con un sistema de
locomocin tan complejo por la gran cantidad de dispositivos que integra, que a menudo se
ha descartado como opcin de locomocin en cientos de proyectos similares.
Es ms, durante casi tres aos la seductora idea de realizar este trabajo como proyecto de
final de carrera mantuvo mi inquietud ocupada indagando en todo lo referente a este tipo
de robots, e incluso tuve oportunidad de realizar mis primeros diseos y experimentos en la
construccin y el control de dos maquetas en forma de pata robtica articulada. Al ver que
mis primeros experimentos concluan de forma satisfactoria mi concepcin del robot en su
estado final fue creciendo hasta convertirse en un proyecto tan extenso y ambicioso que de
ningn modo poda abarcarse en el tiempo correspondiente a la asignatura de Proyecto de
Final de Carrera. No obstante, esta circunstancia encajaba bastante bien con mis planes
futuros de perpetuar mis estudios en un ciclo superior de Electrnica, pues la idea de
realizar una parte del proyecto ahora y el resto como proyecto de final de carrera de este
segundo ciclo me permiti finalmente englobar todos mis objetivos.
Es por eso que esta memoria es el testigo de la primera etapa de un trabajo que no
terminar, al menos, hasta dentro de dos aos; una primera etapa que adems pone de
manifiesto la complejidad intrnseca a estos robots, la cual, adems las funciones aadidas
para las que se ha diseado el robot MIHRO en concreto, hacen que este proyecto no slo
pretenda ser el encumbramiento ms clebre que puedo darle a los conocimientos que he
adquirido durante la carrera, sino tambin la victoria sobre un profundo reto personal.
Que lo disfruten.
Pgina 1
Introduccin al proyecto
2 Introduccin al Proyecto
2.1 Motivacin
Tal y como deja entrever el prefacio, mi pasin por la robtica, infundida en gran medida
por mi contacto con el Club de Robtica Autnoma durante los aos que llevo en la
EUPMT, ha sido la principal motivacin que me ha llevado a embarcarme en este
proyecto. No obstante, hay que matizar que el gusto por la robtica no es ms que una
motivacin precursora de mi afn de aprendizaje en esta rea para la posterior aplicacin de
los conocimientos adquiridos en mi futuro profesional. As pues, el objeto final de este
proyecto no es la diversin, la autocomplacencia o el cumplimiento de los crditos
requeridos para terminar la carrera, sino el mayor aprendizaje posible para alcanzar un buen
futuro profesional en este campo.
De hecho, esta primera premisa se hace patente a lo largo de todo el proyecto, pues no se
ha llevado a cabo prcticamente ningn procedimiento que intente resolver de forma
simplificada un proceso cuya naturaleza es ms compleja. As pues, para empezar, el
lenguaje de programacin escogido ha sido el ensamblador, mucho ms crptico y complejo
que los lenguajes de alto nivel, como C o Basic, con que se pueden programar tambin los
microcontroladores escogidos, pero que a su vez aporta un mayor entendimiento del
funcionamiento interno real de la mquina. Por otro lado, tampoco se han usado libreras
pre-programadas, como las que habitualmente proporcionan los fabricantes para simplificar
el desarrollo de aplicaciones, o mquinas diseadas para resolver automticamente procesos
complejos. De este modo, no se usan libreras para gobernar la comunicacin I2C, sino que
se resuelve enteramente por software, y no se usan generadores automticos de seales
PWM o microcontroladores con soporte hardware para controlar un alto nmero de
servomotores. Tampoco se pretende hallar algoritmos lineales simples para resolver
procesos que deberan tomar soluciones dinmicas ms complejas, como es el caso de los
motores, que pueden controlarse de forma dinmica con una precisin de 07, en vez de
basar su control en la repeticin secuencial de unas pocas posiciones pre-programadas.
De la misma manera, y quiz en este caso se hace ms patente la filosofa general que rige el
proyecto, no se han usado piezas prefabricadas especficamente diseadas para construir el
esqueleto de robots hexpodos, como las que distribuye la empresa Lynxmotion, sino que se
ha diseado y fabricado un esqueleto mecnico a partir de chapa de aluminio sin mecanizar.
Es ms, el diseo mecnico, aunque estticamente inspirado en algunos de los robots ms
conocidos dentro del mundo de los hexpodos, es completamente indito, y si se analiza su
estructura con atencin se puede comprobar que no slo muestra diferencias
fundamentales con estos famosos robots, sino que aporta nuevas estructuras mecnicas,
como las tibias, que no se asemejan, por lo menos, a ningn otro de los ms de 60
proyectos de este tipo que he tenido oportunidad de analizar.
Pgina 2
2.2 Antecedentes
Entre los proyectos que de algn modo han inspirado el diseo tanto esttico como
funcional de MIHRO destacan:
Pgina 3
Introduccin al proyecto
Pgina 4
Figura F. 2: IC-Hexapod
(Fuente: www.micromagicsystems.com)
Lynxmotion
Esta empresa desarrolla, entre muchos
otros tipos de robots, varios modelos de
robots hexpodos ensamblados o por
piezas. De entre estos, merecen ser
mencionados los hexpodos de tipo
estrella, un tipo de hexpodos que
ofrece una distribucin en crculo de sus
patas, en vez de disponerlas en paralelo a
lado y lado de su cuerpo, y que por ende
Figura F. 4: CH3-R
se controlan de forma vectorial,
(Fuente: www.lynxmotion.com)
avanzando en cualquier direccin sin
necesidad de rotar el cuerpo. Su producto estrella, no obstante, es un hexpodo normal,
con distribucin de las patas en paralelo, llamado Phoenix, cuyo diseo mecnico no
trata de ocultar su evidente similitud con los robots de Matt Denton.
Pgina 5
Introduccin al proyecto
Asterisk
Este es un asombroso robot de tipo estrella
desarrollado en el Arai Lab, de la Universidad
de Osaka. Fue presentado al mundo en la
World Expo 2005 de Aichi, aunque tuvo su
primera gran actuacin en la Osaka Robot Fair
de 2006, en la que se le pudo ver haciendo
cosas tan inslitas como caminar boca abajo
colgado de un soporte en forma de reja, recoger
y transportar objetos con sus patas, escalar
obstculos altos o atravesar huecos en forma de
Figura F. 5: Asterisk
arco agachndose y arrastrndose para pasar
(Fuente: www-arailab.sys.es.osaka-u.ac.jp)
bajo ellos. Constructivamente, su caracterstica
ms remarcable es que sus patas ofrecen cuatro grados de libertad, y que tienen un sensor
de contacto que les permite adaptarse dinmicamente al terreno.
Projekt Marvin
Este es un fabuloso proyecto completamente desarrollado por un solo aficionado a la
robtica. Las caractersticas de este robot son tantas que cuesta enumerarlas todas, pero
entre ellas destacan: cuerpo con seis patas de tres grados de libertad cada una, ms una
cabeza con dos grados de libertad ms, en total veinte servos. Visin estereoscpica,
medicin de reas de distancia 2D mediante lser y ultrasonido, control distribuido entre
catorce procesadores Atmel, control del movimiento mediante cinemtica inversa,
reproductor WAV, sistema de equilibrio basado en giroscopios, control adaptativo al
terreno, GPS, sistema de gestin de la energa, uso de una tarjeta MicroSD como memoria
de masa, y muchas otras. El valor del contenido de este proyecto es incalculable, pero
desgraciadamente su creador slo trabaja por amor al arte, por lo que no publica
documentacin tcnica, y su pgina web slo est disponible en alemn.
AMOS-WD06
Figura F. 6: AMOS-WD06
(Fuente: www.chaos.gwdg.de)
Pgina 6
Bill-ant
Robot desarrollado por William
Lewinger,
del
Center
for
Biologically Inspired Robotics
Research de la Unicersidad Case
Western Reserve. Este hexpodo
incorpora un total de 22 grados de
libertad reales (William Lewinger
considera otros seis grados
pasivos en los detectores del piso
de sus patas), distribuidos en tres
grados de libertad por pata, tres
Figura F. 8: Bill-Ant
grados de libertad ms en el cuello
(Fuente: biorobots.cwru.edu/projects/billant)
de su cabeza y otro ms para
articular una mandbula mecnica. El robot, claramente inspirado en la anatoma de las
hormigas, lleva incorporados sensores de fuerza en el extremo de sus patas y mandbulas
que le permiten cuantificar el peso que carga cada pata o la fuerza que deben realizar las
mandbulas para sujetar objetos. Adems, el robot, de casi 3 Kg de peso, puede andar
mientras lleva una carga de casi otros 3 Kg ms.
Pgina 7
Introduccin al proyecto
Lauron
Este es uno de los robots hexpodos ms impresionantes que pueden verse hoy da. Su
fabricacin viene de la mano de la alemana FZI (Forschungszentrum Informatik), y los
pocos ejemplares que se producen se venden mayoritariamente a instituciones relacionadas
con la investigacin y el desarrollo de aplicaciones en el campo de la robtica. Se trata de
un enorme robot de aluminio mecanizado de gran calidad, con tres grados de libertad por
pata y dos grados de libertad ms en una cabeza articulada. Dispone de caractersticas muy
avanzadas en su sistema locomotor, diseadas para potenciar su capacidad de adaptacin al
terreno, de navegacin y de orientacin. Entre estas caractersticas destacan la deteccin en
los tres ejes de la presin que cada pata ejerce contra el suelo, la capacidad de visin
artificial omnidireccional, y un avanzado sistema de visin estereoscpica que le permite
orientarse en mapas tridimensionales que crea mientras recorre su entorno. El IRI, Institut
de Robtica i Informtica Industrial de la Universitat Politcnica de Catalunya, dispone de
un ejemplar de la tercera versin de este robot (la ltima versin fabricada es la 4c), con el
que desarrollan investigaciones sobre locomocin, orientacin y visin artificial.
Melanie III
Pgina 8
Introduccin al proyecto
La siguiente tabla revela una previsin de las principales etapas por las que habr de
transcurrir el desarrollo de MIHRO.
Etapa
Contenido
1- Primeros
experimentos
2- Diseo y
construccin
4- Gestin de la
energa
6- Sistema de
navegacin
7- Conectividad
8- Comunicacin
Pgina 10
Etapa
Contenido
9- Sistema de visin
artificial
12- Clula
fotovoltaica
La tabla deja entrever, por un lado, la complejidad final para la que se disea el robot desde
un principio, y por otro lado, las posibilidades futuras de desarrollo tan enormes que ofrece
este proyecto, lo que lo convierte en una plataforma excelente para el aprendizaje de las
tcnicas y los recursos relacionados con todas sus caractersticas.
Cabe decir tambin que la inclusin de todos estos sistemas en el robot no slo es fruto de
la inquietud o la curiosidad por sus respectivos campos de aplicacin, sino que responden
conjuntamente al objetivo final del robot, que no es otro que el de ser un robot explorador.
As pues, las caractersticas para las que se disea no estn en absoluto carentes de un
objetivo comn, sino que se enfocan a perfeccionar el modo en que este robot discurre de
forma autnoma o teleoperada por un territorio desconocido, inaccesible u hostil,
potenciando su capacidad de adaptacin a un terreno irregular e imprevisible y la
accesibilidad de su interfaz con un usuario controlador humano (de ah que una de las
etapas de desarrollo del robot incluya la implementacin de sistemas de realidad virtual que,
aparentemente, pudieran estar fuera de lugar en un proyecto completamente centrado en el
campo de la robtica).
Pgina 11
Introduccin al proyecto
Adems, esta capacidad exploradora de MIHRO no slo tiene fines acadmicos, sino que
tambin tiene su aplicabilidad en el mercado y la sociedad actuales, pues cada da se invierte
mayor capital en el desarrollo de aplicaciones robticas para tareas de salvamento,
exploracin espacial, y manejo de sustancias peligrosas. As pues, finalmente MIHRO
puede ser adaptado para su uso como robot de rescate, entrando en zonas de difcil acceso
como edificios derrumbados, incendios, cuevas, etc. Tambin puede recibir uso como
herramienta de maniobra en ambientes qumicos o radiolgicos hostiles, como reas
selladas por fugas de gas o de material radiactivo, o como herramienta de deteccin de
sustancias y aparatos peligrosos, como minas anti-persona. Del mismo modo, las
capacidades de captacin de entornos y desenvoltura por terrenos irregulares permitiran a
MIHRO realizar tareas de exploracin espacial o trabajos de campo en exploracin militar.
Incluso podra recibir uso como avanzadilla en misiones antiterroristas. Por ltimo, el robot
tambin podra recibir uso en espeleologa, minera o arqueologa, mediante la exploracin
de cmaras y recovecos concurridos en cuevas, minas y yacimientos arqueolgicos, como
antiguas tumbas faranicas y catacumbas. Como curiosidad, merece la pena mencionar que
ciertas cmaras de gran relevancia arqueolgica del famoso monumento funerario egipcio
del Valle de los Reyes no fueron descubiertas hasta que se fabricaron robots exploradores
especficamente diseados para recorrer sus estrechas cavidades.
Por ltimo, hay que decir que la eleccin de MIHRO como nombre del robot no slo se
fundamenta en su significado como siglas de Mobile Intelligent Hexapod Robot, sino en
la propiedad de este nombre de aludir a la capacidad de ver y a la accin de mirar, que
inexorablemente relaciona al robot con su funcin de explorador.
2.4.1 Objetivos
Por ahora, el desarrollo de este proyecto comprende:
El estudio de las posibilidades de control, adquisicin y tratamiento de datos de
microcontroladores bsicos, as como su programacin e implementacin.
El estudio de las posibilidades de sensorizacin y adecuacin de seales de sistemas
robticos tpicos.
Estudio y planificacin de un sistema de locomocin que permita a un robot de seis
patas y tres grados de libertad por pata interactuar con obstculos u objetos de su
Pgina 12
Introduccin al proyecto
Mot2
Sensor 1
Sensor 2
Mot1
Mot1
Slave2
Mot2
Mot3
Sensor 1
Sensor 2
Slave1
Mot3
Mot3
Mot2
Mot2
Master
Slave4
Mot1
Slave3
Sensor 1
Sensor 2
Sensor 1
Sensor 2
Sensor 1
Sensor 2
Mot3
Mot1
Slave6
Mot2
Sensor 1
Sensor 2
Slave5
Mot1
Mot1
1
Pgina 14
Mot2
Mot3
10K
10K
Master
Slave1
Slave6
Las dos resistencias pull-up de 10K estn fsicamente integradas en el Master, y realizan
una funcin de AND lgico, pues mantienen el bus a nivel alto siempre que ninguno de los
elementos conectados al mismo fuerce el estado del bus a nivel bajo. Esto significa que
para introducir un nivel alto en el bus los elementos conectados al mismo no necesitan
aplicar directamente un nivel de tensin alto, sino que simplemente se configuran en
colector abierto para que la resistencia haga el resto. Si alguno de los elementos pretende
poner un nivel bajo en el bus y otro de ellos un nivel alto, siempre prevalecer el nivel bajo.
Introduccin al proyecto
3 Diseo mecnico
3.1 Premisas
El robot ser un hexpodo de tres grados de libertad por pata y tres grados de
libertad ms entre cuello y cabeza.
Su esqueleto, sobretodo en esta etapa en que se usan motores poco potentes,
deber ser robusto pero ligero, por lo que se construir enteramente de aluminio.
Sus patas se distribuirn a lado y lado de su cuerpo, pero no formando dos lneas
rectas paralelas, sino dos curvas convexas ms separadas en el centro, cosa que
permitir al robot cambiar ms fcilmente de un esquema de locomocin paralelo
a uno circular o vectorial.
Sus articulaciones siempre tendrn dos puntos de apoyo, formadas por el eje
motriz de cada servo y por un eje trasero que deber aadrsele manualmente.
Sus patas sern lo ms estrechas posible para minimizar la posible obstaculizacin
del movimiento horizontal, siempre priorizando su requisito de robustez.
Sus patas dispondrn de una articulacin cadera lo ms chata posible, para
minimizar el esfuerzo que sufrir el eje trasero del motor que otorgue el
movimiento horizontal.
El segmento ms alejado de las patas, o tibias, deber estar provisto de un
sistema electromecnico capaz de captar la presin contra el suelo y contra un
eventual obstculo que interrumpa la trayectoria de la pata.
o Este mecanismo deber ceder sin ofrecer casi resistencia ante la presin en
el sentido de avance de la pata, pero tambin deber mostrarse firme en el
sentido de retroceso para aportar un buen punto de apoyo en el avance del
robot.
o Este mecanismo deber ofrecer la mayor superficie de deteccin posible,
incluyendo sobretodo el extremo ms alejado de la pata, o pi.
o Este mecanismo deber integrarse en el conjunto de la pata sin romper los
criterios estticos del robot.
Sus patas debern poder elevarse lo mximo posible para lograr superar obstculos
altos o, en el caso de las patas delanteras, para poder ejecutar una secuencia de
movimientos capaz de recoger un objeto ligero del terreno y cargarlo sobre s.
Sus patas debern poder descender lo mximo posible para que el robot pueda
andar con el cuerpo lo ms elevado posible en caso de que ste discurra por
terreno muy abrupto.
El cuerpo del robot dispondr de espacio suficiente para alojar a todos sus
sistemas electrnicos, adems de la batera y la cabeza.
Tomando como prioritario todo lo anterior, el robot se disear de acuerdo con
un criterio esttico (que no funcional) inspirado en la anatoma de las araas.
Pgina 17
Diseo mecnico
Pgina 18
3.2.2 Prototipos
El segundo prototipo que se dise jams lleg a ver la luz, pues fue rpidamente
sustituido por el tercer prototipo. Aunque conserva algunos patrones de su predecesor,
mejora sustancialmente su movilidad vertical e incorpora elementos que han permanecido
hasta el diseo final, como el sensor de contacto con el suelo basado en una varilla
metlica, acabada en un taco de goma y suspendida sobre un muelle. Adems, en este
prototipo se estudi la posible inclusin de un encoder realimentador de la posicin vertical
de la pata, que se descart cuando se desarroll una estrategia de software capaz de emular
esta funcin incluso con mayor precisin.
Pgina 19
Diseo mecnico
El tercer prototipo se dise con la idea especfica de incluir un mecanismo de deteccin
del suelo y de los obstculos. Este mecanismo, distinto al que finalmente incorporan las
patas de MIHRO, consiste en un tubo estrecho envainado dentro de otro tubo algo ms
grueso, de modo que el primero, en cuyo extremo se asienta el tope de goma que hace de
pi, puede ascender por el interior del segundo para presionar un pulsador cuando la pata
hace contacto con el suelo. Al mismo tiempo, el tubo grueso se sujeta a la estructura de la
tibia atravesado slo por un tornillo, cosa que le permite pivotar en el plano paralelo a la
cara frontal de la tibia cuando la trayectoria de la pata interfiere con un obstculo. Al
pivotar, el movimiento de la parte superior del tubo presiona un pequeo interruptor que
hace efectiva la deteccin del obstculo.
Pgina 20
En cuanto al cuarto prototipo, quizs no sea demasiado exacto llamarlo as, pues en
realidad se trata de un largo proceso de diseo que parte de un modelo completamente
distinto a los tres prototipos anteriores, y que culmina con el diseo final de la pata de
MIHRO. En la primera etapa de dicho proceso, se disea un modelo de pata con mayor
capacidad para recogerse sobre s mismo y mayor capacidad de elevacin vertical de la tibia.
As mismo, este primer concepto ofrece la ventaja de que, en su posicin recogida, el fmur
permanece completamente vertical, lo que reduce drsticamente el consumo de los motores
de la pata cuando sta se halla en su posicin inicial. Durante esta misma etapa se realizan
varias pruebas de rediseo del mecanismo de deteccin de suelo y obstculos para
adaptarlo a la nueva estructura y se intenta, sin xito, disear un fmur que permita situar
su motor de elevacin bajo el motor de movimiento horizontal de la cadera.
Pgina 21
Diseo mecnico
Durante una segunda etapa se ponen a
prueba dos estructuras de cadera posibles
que condicionaran drsticamente el
aspecto final del robot. En la primera
estructura, el motor de movimiento
horizontal de la cadera forma parte de la
pata, por lo que el cuerpo del robot
deber sujetarlo por sus dos ejes, dejando
suficiente espacio libre en su interior
como para que el motor, junto con la
pata,
se
muevan
libremente.
Conceptualmente, esta es la misma
estructura que usan los robots de Matt
Denton (ver captulo de Antecedentes),
Figura F. 21: Modelo de cadera mvil
por lo que cualquier parecido con un
(Fuente: Proyecto MIHRO)
sistema tan trillado se ha considerado
poco deseable. Adems, aunque este sistema otorga a la pata una gran capacidad de
movimiento horizontal, reduce su capacidad de movimiento vertical. No obstante, para
atenuar esta circunstancia, se disea un fmur con el puente (el segmento de metal que
une las dos aletas del fmur) avanzado, cosa que aumenta la capacidad de descenso del
mismo.
En la segunda estructura, por el contrario, el motor de movimiento horizontal de la cadera
forma parte de la estructura del trax y no de la pata, por lo que, para empezar, el motor
no se mueve dentro del cuerpo del robot, de manera que todo el rea no ocupada por los
motores del mismo se convierte en zona til para acoplar los sistemas que conforman su
electrnica.
Pgina 22
Diseo mecnico
Dicha tensin de referencia
est condicionada por la
posicin de un potencimetro,
que
a
su
vez
est
mecnicamente conectado al
eje de salida del servomotor.
De esta manera, la seal PWM
es convertida a un nivel de
tensin que se compara con el
nivel de realimentacin de la
Figura F. 24: Control de posicin del servo
posicin del servo; si hay
(Fuente: www.digitalnemesis.com)
diferencia, el amplificador del
error har que el motor gire en un sentido u otro para minimizarla, y si las tensiones de
referencia y consigna se igualan, el motor se detendr en esa posicin. En el caso de los
Futaba S3003, y de la mayora de servos analgicos que hay hoy da en el mercado, este TON
representa una pequea fraccin de aproximadamente el 10% del perodo T, cosa que pone
de manifiesto la ineficiencia inherente a este tipo de servos en comparacin con los
llamados digitales, en los que este pulso de control llega a alcanzar entre el 20% y el 60%
del perodo total.
Si se indaga un poco sobre el parmetro TON se descubre que la mayora de servos
analgicos de esta escala responden ante una anchura de pulso que vara aproximadamente
entre 03 y 23ms, de forma que una seal con el pulso mnimo conducir al servo a
posicionarse en el extremo inferior de su rango de movimiento, mientras que una con el
pulso mximo le llevar a su extremo superior, pudiendo configurarse en cualquiera de sus
posiciones intermedias.
Pgina 24
Figura F. 27
Figura F. 28
Figura F. 29
Imgenes panormica y de detalle de la seal PWM obtenida fluctuando entre dos valores
(Fuente: Proyecto MIHRO)
Despus de ste y otros experimentos realizados hubo que abandonar esta primera placa de
control por problemas inherentes al PIC16f84A, un dispositivo explotado hasta la saciedad
por ser uno de los ms vendidos de la marca Microchip, pero hoy da bastante desfasado.
El sustituto escogido fue el PIC16f88, un recambio generacional relativamente reciente del
PIC16f84, que integra en un espacio tambin de 18 patillas la mayora de mdulos de otros
microcontroladores mucho ms grandes, convirtindose en uno de los PICs ms verstiles
en relacin a su tamao que ofrece Microchip en esta gama. Para explorar las principales
opciones de comunicacin y procesamiento de este dispositivo, se dise una nueva placa
entrenadora que permite igualmente controlar los tres motores del prototipo, a la vez que
explotar las posibilidades de comunicacin I2C y USART (para RS-232) de este
microcontrolador. La placa adems incorpora tres botones de control, cinco LEDs y
conectividad para la programadora y para los dos sensores de contacto de la tibia del tercer
prototipo.
Pgina 25
Diseo mecnico
Con la placa entrenadora se pudieron realizar importantes avances en el control del tercer
prototipo; entre ellos destacan:
Mejora de la rutina de retraso para
lograr controlar la posicin de los
servos en base a una variable de
250 valores posibles, cifra que se
corresponde mucho mejor con las
caractersticas de una mquina de
8 bits. Con esta rutina se pueden
controlar los servos con una
precisin de 072.
Programacin de una secuencia de
movimiento que permite a la pata
dar un paso y retroceder hasta
su posicin inicial. Despus se
mejora la secuencia para reducir la
Figura F. 30: Placa entrenadora
inercia en sus extremos, evitando
(Fuente: Proyecto MIHRO)
as temblores indeseados.
Introduccin de cinco parmetros que controlan y definen todas las caractersticas
del paso. Estas son:
o Speed: Proporcin en la que fluctan las variables que definen la posicin
de los motores cada 20ms.
o Centro: Posicin central del paso. Permite corregir las pequeas diferencias
de montaje de cada pata, as como adaptar la posicin central de las patas
oblcuas.
o Rango: Distancia de avance y retroceso que cubrir el paso respecto del
centro. Influye sobre la velocidad de avance del robot.
o Zanco: Altura a la que se produce el movimiento horizontal de avance
respecto del de retroceso de la pata.
o Altura: Altura a la que se produce el movimiento horizontal de retroceso de
la pata. Determina la altura del cuerpo del robot respecto del suelo mientras
ste est andando.
Control de estas cinco variables mediante los tres botones de la placa. El
experimento demostr que poda controlarse el movimiento de la pata de forma
dinmica.
La conclusin ms importante a la que se lleg era que si se mantena la variable Speed
acotada en un valor inferior a 10, la pata responda con suficiente fidelidad a las consignas
de movimiento. Una velocidad superior a 10 provocaba reducciones en los rangos de
movimiento, pues el motor no es lo bastante rpido como para asumir una fluctuacin tan
precipitada. De este modo, se considera que la pata siempre est posicionada de acuerdo
con el valor instantneo de su variable de control, cosa que hace que no sea necesario un
encoder para realimentar la posicin vertical u horizontal de la pata cuando se produce la
deteccin del suelo o de un obstculo; basta con capturar el valor de dicha variable.
Pgina 26
Caracterstica
Peso del robot
Tamao robot (rectngulo circunscrito)
Tamao Trax Base (rectngulo circunscrito)
rea til del Trax Base
rea til mxima de las Tapas Superior e Inferior
Distancia central til
Distancia cervical til
Distancia entre las patas delanteras a 90
Distancia entre la Tapa Superior y el Trax Base
Distancia entre la Tapa Inferior y el Trax Base
Movilidad horizontal de las patas delanteras, Fmur
plegado
Movilidad horizontal de las patas delanteras, Fmur
desplegado
Movilidad horizontal de las patas centrales, Fmur plegado
Movilidad horizontal de las patas centrales, Fmur
desplegado
Movilidad horizontal de las patas traseras, Fmur plegado
Movilidad horizontal de las patas traseras, Fmur
desplegado
Capacidad de elevacin del Fmur desde la posicin inicial
Capacidad de descenso del Fmur desde la posicin inicial
Capacidad de elevacin de la tibia en posicin inicial
Capacidad de elevacin de la tibia en elevacin mxima del
fmur
Rango de movimiento mximo de las Tibias
Distancia entre los ejes horizontal y vertical de la Cadera
Distancia entre los ejes de Fmur y Tibia
Apertura del paso (Fmur: 25, Tibia: 25) con incidencia
de las patas adyacentes
Capacidad de inclinacin lateral
Capacidad de inclinacin frontal
Altura mxima del cuerpo en posicin horizontal
Altura mxima de las patas delanteras en inclinacin frontal
mxima
Tabla T. 3: Propiedades mecnicas del robot MIHRO
(Fuente: Proyecto MIHRO)
Pgina 27
MIHRO
2250 Kg
31,1 cm X 32,1 cm
26 cm X 17 cm
162 cm2
281 cm2 x2
5 cm
3 cm
3 cm
2 cm
3 cm
-60, + 95
-75, + 95
-60, +60
-70, +60
-95, + 60
-110, + 60
35
150
95
25
190
3,8 cm
7 cm
-35, + 35
31
38
16,1 cm
38,7 cm
Diseo mecnico
Algunas imgenes del diseo definitivo y el resultado final.
Figura F. 31: Collage con distintas vistas del diseo y el resultado finales
(Fuente: Proyecto MIHRO)
Pgina 28
Situacin
Consumo
Pgina 29
290mA
740mA
140A
310A 350A
414A
170A 380A
190mA
16mA
230mA
75mA 95mA
65mA
90mA
Pgina 30
Hay que mencionar que los elementos del despiece marcados como [S4], [S5] y [E2]
corresponden al montaje de la cabeza (que se lleva a cabo en la etapa 6 del desarrollo global
de MIHRO), por lo que no se concretan mayores detalles sobre estos elementos en este
proyecto. As mismo, las piezas [P10], [P11] y [P12], correspondientes al mecanismo de
elevacin del cuello, junto con los elementos que las acompaan (como el servo [S0]), han
sido diseados dentro del proyecto actual, pero sin llegar a montarse, pues su nica razn
de ser es el de elevar una cabeza que an no existe, y el espacio que ocupan se hace
necesario para instalar la placa entrenadora, que en esta etapa del proyecto hace las veces de
cerebro del robot.
Pgina 31
Alim. 4,8 V
3,2 Kg/cm
0,23 sec/60
Alim. 6 V
4,1 Kg/cm
0,16 sec/60
Nylon
41x20x36mm
37,2g
~12
Este servo se comercializa con pionera de nylon y eje de plstico, y est diseado para
acoplarse slo por un extremo de su eje de rotacin. Esto significa que es vulnerable a
fuerzas de torsin excesivas, pudiendo llegar a romperse si se somete a estrs fuera de su
eje normal de rotacin. Aunque el peso del robot no fuera suficiente para romper los ejes
de estos servos, la idea de sujetar los motores slo por uno de los extremos de su eje de
rotacin slo contribuira a aumentar la fragilidad del robot y a disminuir el tiempo de vida
de los motores, por eso es necesario hacer ciertas modificaciones en cada uno de los servos
antes de acoplarlos al robot. Estas modificaciones llevan, finalmente, a instalar un nuevo
extremo del eje de rotacin en la tapa trasera del servo, de forma que ste pueda acoplarse
al robot agarrado por dos puntos y no slo uno, aumentando as su robustez y durabilidad.
Pgina 32
Pgina 33
Pgina 34
Pgina 35
Pgina 36
Una vez desplegadas las piezas se exportan a otro programa, LayOut, incluido en el
paquete de Google SketchUp Pro 6, y que constituye una til herramienta para gestionar la
presentacin e impresin de los modelos diseados en SketchUp. Desde LayOut se
imprimen varios planos a escala 1:1 donde se disponen algunas de las piezas desplegadas,
Pgina 37
Una vez impreso, el plano se convierte en una plantilla calcndolo en una lmina de
plstico transparente con un rotulador indeleble de punta fina. Durante el calco, la lmina
de plstico y el plano deben mantenerse bien unidos para evitar que uno se mueva respecto
del otro. Adems, durante este proceso de calco se tendrn en cuenta ciertas reas que
harn de puente entre unas piezas y otras para mantenerlas unidas tras el recorte. De este
modo se conserva en una sola plantilla la distribucin de todas las piezas y no hay que
volver a distribuirlas cada vez que se pasen a la chapa de aluminio. Las zonas de doblado
deben quedar especialmente bien definidas y los agujeros deben quedar bien claros y
centrados durante el calco. Puesto que hay agujeros de distintos tamaos, ser bueno
marcar el dimetro de cada uno y perforarlos usando una broca de 2mm antes de recortar
la plantilla. Tambin es conveniente, para evitar errores, marcar sobre cada pieza el espesor
del aluminio que le corresponde.
Una vez listas las plantillas, se repasan sus bordes exteriores y los agujeros con un rotulador
permanente sobre la chapa de aluminio correspondiente. Las lneas deben quedar gruesas y
las reas de doblado bien marcadas, puesto que la manipulacin a la que se sometern las
piezas las borrar fcilmente, de manera que tendremos que repintarlas en ms de una
ocasin. Una vez listo el dibujo, los agujeros se marcan usando un punzn de acero
templado; de este modo ya no ser necesario repintarlos constantemente. Finalmente, se
recortan las piezas.
Pgina 38
Para cortar las piezas se dispone de un banco de trabajo con dos tornillos de sujecin, y dos
sierras distintas: una para cortes rectos y otra para los curvos. Los dos tornillos del banco
servirn para agarrar por dos puntos las placas de aluminio cuando an son aparatosamente
grandes, ya que se venden en un formato de 60x60 cm. En el trabajo con las sierras habr
que tener en cuenta ciertas directrices: en primer lugar, el corte es impreciso y erosiona la
zona adyacente al mismo, de forma que se define un margen de 1mm aproximadamente
que separar la lnea de la zona de corte para salvaguardarla. En segundo lugar, el ancho del
corte es diferente para cada sierra: la sierra de cortes rectos elimina una franja de
aproximadamente 1mm de ancho, mientras que la de cortes curvos elimina una franja de
casi 3mm. Esto repercute directamente en la distancia que hay que mantener entre el corte
y la lnea. Por ltimo es muy importante colocar correctamente la pieza en el tornillo de
sujecin cuando se realiza un corte: la zona de incidencia de la sierra, sobretodo de la sierra
de corte recto, debe estar lo ms cerca posible del tornillo, porque de lo contrario el empuje
que se le da a la sierra podra doblar el aluminio y volver la pieza inservible si la sierra se
atascara, cosa que ocurre con frecuencia.
Pgina 39
Con esto concluye el corte y el limado de los contornos exteriores, pero algunas piezas
ofrecen contornos interiores que debern ser tratados de forma algo diferente.
Concretamente, aquellas piezas que abrazan y sujetan un servo muestran un contorno
rectangular que debe ser vaciado, limado y redondeado sin acceso desde el exterior. Estas
piezas son el Trax Base, P00, y las 6 Partes fijas de la Tibia, P06. El Conector CaderaFmur, P04, tambin abraza un servo, pero no lo hace por los cuatro costados, sino por
slo tres. Esto significa que se puede recortar con la sierra de forma normal, accediendo
por el lado abierto del rectngulo. Adems, en el caso de las piezas P04 y P06, el vaciado de
la cavidad del servo debe realizarse siempre despus de haber doblado la pieza. El motivo
tiene que ver con la robustez de la misma, puesto que en estos dos casos el doblez de la
pieza pasa muy cerca de los lados ms largos del hueco de los servos, de forma que una vez
Pgina 40
El proceso de vaciado del hueco de los servos comienza usando el punzn de acero para
marcar siete puntos equidistantes formando un ngulo recto en dos de las esquinas
diagonalmente opuestas del rectngulo. Sobre cada una de estas marcas se perforar con
una broca de 3mm, de forma que deben estar suficientemente alejadas del contorno del
hueco como para que la broca no sobrepase la lnea de contorno, y suficientemente juntas
como para que cada agujero se solape ligeramente con sus dos agujeros adyacentes. Una
vez perforados, se usa una fresa de 3mm para eliminar el material que separa los agujeros
entre s. El resultado son dos ranuras yuxtapuestas en un vrtice y formando un ngulo
recto, de modo que cada una de las ranuras es ligeramente ms larga que el ancho de una
sierra de metal para corte recto, como la empleada anteriormente. Esto significa que, con la
ayuda de un mango especial que la agarra slo por un lado, podremos introducir la sierra
por las ranuras y serrar en ambas direcciones hasta recortar el hueco en el que deber entrar
el servo. Una vez hecho esto, de nuevo habr que limar los contornos del hueco hasta
dejarlos bien definidos para luego redondear los bordes, comprobando sta vez que el
agujero es suficiente para que el servo encaje. Cabe decir tambin que es conveniente
perforar los agujeros de sujecin del servo despus de haber terminado con el vaciado del
hueco, pues de lo contrario el ajuste de la pieza en el tornillo de sujecin o el doblado, si es
que se perforan estos agujeros antes de doblar, podran combar la superficie plana donde se
asentarn los tornillos que sujetarn el servo.
Pgina 41
Una vez cortadas y limadas las piezas, y solucionado el problema de los contornos
interiores, el siguiente paso ser perforar las piezas segn las especificaciones del diseo.
No obstante, no todas las marcas hechas con el punzn deben perforarse por ahora, ya que
algunos agujeros han de albergar elementos mecnicos que deben ajustar entre s a la
perfeccin, y su localizacin exacta se calcular sobre las piezas definitivas, una vez
dobladas y montadas. El orden en el que deben intercalarse la perforacin de cada agujero y
los sucesivos procesos de la fabricacin de cada pieza se explicitan en el apartado de
montaje. Los agujeros se han realizado usando un taladro de columna a bajas revoluciones.
Esto es preferible al taladrar metal, porque conserva la integridad de la punta de las brocas,
que a altas revoluciones se calientan, y por ende se ablandan y se desafilan ms. El
problema es que perforar aluminio a bajas revoluciones provoca grandes extrusiones del
metal en la cara opuesta a la penetracin de la broca, de manera que habr que limar y
posteriormente repasar cada agujero.
Pgina 42
Una vez terminada la primera tanda de agujeros se procede a doblar las piezas. El aluminio
laminado es un material muy poco elstico, de manera que prcticamente no recupera su
forma inicial despus de someterlo a una deformacin. Esto por un lado es algo positivo,
ya que facilita el proceso de doblado, pero por el otro conlleva un riesgo. Cuando el
aluminio se dobla, el lado interno del doblez se comprime y se densifica, mientras que el
lado externo se expande y se ablanda. Si slo se dobla una vez, la pieza es resistente y
fiable, pero si este doblez se desdobla en sentido contrario, la parte comprimida del doblez
no se expande de forma plstica, sino que se agrieta y se degrada. De este modo, si un
doblez se realiza en sentido contrario por error, al desdoblarse quedar mucho ms frgil, y
si se desdobla una tercera vez puede llegar a partirse. Por eso todos los dobleces han de
salir bien el en primer intento, pues no hay una segunda oportunidad: si sale mal, la pieza se
deshecha.
Pgina 43
Para que los dobleces definan una lnea perfecta no es recomendable fiarse de los gastados
bordes del tornillo de sujecin, es mejor usar una barra de acero de borde recto y definido.
Esta barra siempre se coloca entre la pieza y el tornillo en el sentido de doblado,
aproximadamente 1mm o 1,5mm por encima del borde marcado del doblez para los
aluminios de 2mm y 2,5mm, respectivamente. Esto se debe a que el aluminio se deformar
ligeramente por el lado en que lo tenemos agarrado al tornillo en cuanto lo reafirmemos en
su posicin final, con ayuda de una escuadra y fuera del tornillo.
Adems, en algunos dobleces especialmente anchos el aluminio resulta ser tan resistente
que es imposible doblarlo por simple empuje perpendicular. En estos casos es necesario
usar un martillo y un tas, que no es otra cosa que una pieza de metal no demasiado duro
(cobre, en nuestro caso) que se usa sobre la pieza de aluminio para dirigir el efecto de los
golpes, y para que ste no reciba directamente los impactos del martillo, que le dejaran
marca.
Pgina 44
Pgina 45
Adems, para facilitar la insercin en sentido oblicuo del servo en el espacio interior de la
pieza, en ms de una ocasin se hace necesario practicar un avellanado interno del orificio
de sujecin del eje trasero ([O75] y [O86 O87]), que realizaremos, igual que hicimos
antes, con una broca de 6mm, pero accediendo esta vez desde el agujero de 8mm que
hicimos en la parte opuesta de la pieza.
Sobre estos orificios cabe decir tambin que, aunque servirn para albergar soportes [E1]
idnticos, en el caso del agujero [O88] el soporte podr quedar ajustado en el orificio,
mientras que en el de los agujeros [O76] y [O89] el soporte deber quedar holgado. Esto es
un requisito derivado del proceso de montaje, ya que el agujero [O88] est situado en una
de las dos aletas de la pieza P05, y la forma de dichas aletas les permite deformarse
separndose entre s lo suficiente como para poder encajar el servo en su interior y
encerrarlo posteriormente al restablecerse la forma original de la pieza por pura elasticidad
Pgina 46
Pgina 47
Pgina 48
Pgina 49
Los sensores de contacto [E3] tambin han sido fijados al esqueleto con Araldit, pero en
este caso el proceso ha sido mucho ms delicado (y accidentado) que en el resto de casos.
Para empezar, el sensor no es ms que una pequea caja de plstico fino que dispone en
una de sus caras de una fina palanquilla de metal que, si se presiona, hunde un pequesimo
botn de plstico que abre o cierra un
interruptor. La palanquilla en s no es ms
que una lmina elstica de metal con una
forma tal que puede sujetarse a modo de
bisagra en un extremo de la caja de
plstico; es el muelle situado bajo el botn
de plstico lo que hace que si se deja de
Pgina 50
Pgina 51
Por el contrario, la instalacin de los muelles [E6] de los sensores de obstculo es mucho
ms compleja. Hay un conjunto de piezas formado por un tornillo [T8] con su tuerca, un
separador [Y2] y una arandela [A0] que se instalan de forma solidaria a la parte mvil de la
Tibia, P08, a travs del orificio [O114] (para entender la nomenclatura de la explicacin que
sigue es recomendable consultar el apartado correspondiente al ensamblado de las Tibias
en el captulo de montaje). Dicho conjunto atraviesa el orificio [O100] de la parte fija de la
Tibia, P06, de manera que permite que la aleta inferior de P06 circule a lo largo de [Y2],
pero limitado en un extremo por el cuerpo de P08 y en el otro por la arandela [A0] que le
hace de tope, cosa que permite que el movimiento pendulante de P08 quede limitado por
esta estructura. Adems ha de tenerse en cuenta que [O100] debe ser suficientemente
ancho y alargado como para que [Y2] circule por su interior sin rozamiento alguno, pues de
haberlo el mecanismo podra dejar de funcionar correctamente, pero a la vez debe ser ms
pequeo que el dimetro exterior de la arandela [A0], pues de lo contrario sta dejara de
Pgina 52
Pgina 53
Otro procedimiento que debe detallarse en este apartado es el de las numerosas piezas del
robot que se cortan a medida usando una cortadora de disco. Para empezar, prcticamente
todos los tornillos del robot se cortan a medida una vez apretados para eliminar el sobrante
de tornillo que, en muchos casos, puede llegar obstaculizar la instalacin o el movimiento
de otras piezas. Dado que estos tornillos son de acero, para cortarlos se usa un taladro de
mano de alta velocidad al que se le ha puesto un disco de corte en el cabezal. La misma
herramienta se usa tambin en otro proceso que no tiene que ver con el largo de los
tornillos: el vaciado de los contornos interiores de las tapas superior e inferior del cuerpo
del robot. Estas piezas, P01 y P02, estn hechas de aluminio de 1mm, que puede cortarse
fcilmente con la cortadora de disco en un procedimiento mucho ms rpido y sencillo que
el que se sigue para vaciar los contornos interiores de las piezas de P00 y P06, de 25mm y
2mm de espesor respectivamente. En este ltimo caso no se usa la cortadora de disco
porque el aluminio es demasiado grueso, y su corte conlleva demasiado desgaste del disco y
demasiado tiempo continuado de uso de esta herramienta, que est diseada para usos
cortos ya que se calienta con rapidez, pudiendo llegar a quemarse si se usa
continuadamente durante demasiado rato.
Pgina 54
Con todo esto, ya es posible construir el robot. No obstante, como cada pieza es
ligeramente diferente a las dems, aunque sean del mismo tipo, se hace necesario probar
cada pieza con el soporte en el que ha de encajar hasta encontrar las parejas de piezas que
encajen mejor. Incluso algunas patas encajarn en determinadas zonas del cuerpo mejor
que otras, por eso se hace necesario numerar todas las piezas antes de su montaje
definitivo. Adems, una vez construido el robot habr que retocar ciertos puntos crticos
para conseguir que todas las piezas se muevan con suavidad. Estos retoques se realizan con
una fresa cnica colocada en el cabezal del taladro de maquetismo, y limando las zonas
crticas, ya sean de aluminio o excesos de Araldit. Finalmente las patas del robot consiguen
la movilidad para la que se disearon.
Pgina 55
Por ltimo, una vez montado y comprobado el robot se sueldan los terminales de los
sensores usando cables blandos cortados a la medida necesaria, y agrupados, junto con los
cables de los servos, en fundas de goma termo-retrctil que se fijan al esqueleto con bridas
de plstico pequeas.
Pgina 56
1- Corte de la preforma.
Pgina 57
4- Doblado de la pieza.
o Montaje del Cuello: Se hacen pasar 4 tornillos [T4] a travs de los orificios
[O0 O3] de la pieza P10, del servo [S0] y de 4 arandelas [A1], para acabar
apretndose en sus tuercas.
Construccin del Trax: El Trax es el mdulo central del robot; el resto de sus
partes (las seis Patas y el Cuello + Cabeza), adems de todos los mdulos
electrnicos, van unidas a l. Est formado por cinco piezas, cuyo proceso de
fabricacin se explica a continuacin:
Pgina 58
1- Corte de la preforma.
O34
O24
O25
O26
O27
O40
O41
O42
O33
O39
O20
O21
O43
O38
O32
O22
O23
O19
O17
O16
Pgina 59
4- Avellanado
de
los
orificios [O34 O39].
El avellanado se realiza
por la cara inferior de la
pieza (en sta y las otras
imgenes la pieza est
boca arriba), ya que los
tornillos que encajarn
en estos orificios tienen
la cabeza cnica.
1- Corte de la preforma.
Pgina 60
1- Corte de la preforma.
Pgina 61
[O63] [O64]
[O65] [O66]
3-
Doblado de la pieza
[O68] [O69] [O67]
4-
Pgina 62
2- Del mismo modo, se usan 6 tornillos [T8] para sujetar 6 separadores [Y0] a travs
de los orificios [O34 O39] de la pieza P00. Tampoco aqu se recorta el sobrante
de tornillo, ya que debe quedar suficiente tornillo para acoplar P01 ms adelante.
Pgina 63
4- Un tornillo [T0] fija la pieza P11 al servo [S0] del Cuello, atravesando [E1] y [O60],
al mismo tiempo que dos tornillos [T3] y sus tuercas unen las piezas P11 y P00 a
travs de los orificios [O42], [O43], [O63] y [O64].
Pgina 64
Detalle del Hombro Derecho, P12, una vez acoplado al Trax Base, P00, y al
conjunto del Cuello.
Pgina 65
Pgina 66
8- Siguiendo el mismo proceso se instala la Tapa Inferior del Trax, P02, aadiendo
una tuerca a cada tornillo [T5], y a travs de los orificios [O50 O55]. En este caso
habr que tener en cuenta que tambin hay que fijar la pieza P11 a P02 mediante
dos tornillos [T3] que atravesarn los orificios [O56 O57], de P02, y [O65 O66],
de P11. Del mismo modo, se fija P12 a P02 usando tambin dos tornillos [T3] que
atravesarn en este caso los orificios [O58 O59], de P02, y [O70 O71], de P12.
Una vez instalada la pieza, pueden recortarse los sobrantes de todos los tornillos
para mejorar el acabado de la Tapa Inferior del Trax.
Con este ltimo paso concluye el montaje del Trax, sin embargo las Tapas
Superior e Inferior del mismo debern retirarse en varias ocasiones despus de este
punto para instalar el resto de componentes electrnicos del robot. Por eso es
recomendable que los tornillos [T3] de la Tapa Inferior se instalen al revs (de
arriba abajo, en vez de abajo a arriba, como muestra el diagrama de montaje), y que
sus tuercas no se aprieten demasiado hasta que el robot est finalizado y la Tapa
Inferior pueda montarse de forma permanente.
Pgina 67
Pgina 68
Pgina 69
Pgina 70
Corte de la preforma.
2. Perforacin de los orificios de 3mm.
O72
O73
O74
O75
3. Doblado de la pieza.
[O76]
[O77]
[O78]
Corte de la preforma.
2.
Pgina 71
5.
O82
O83
O84
O85
6. Avellanado de los
orificios [O79],
[O80] y [O81].
[O86]
[O87]
Pgina 72
O90
O91
O92
O93
[E1] debe quedar holgado en [O89] por exigencias del proceso de montaje, mientras que
[O88] puede quedar ajustado. Esto se debe a que, excepto con [O88], el eje del servo
tendr que entrar en el orificio antes que [E1] para poder quedar encerrado en la pieza.
Pgina 73
Pgina 74
4.
Pgina 75
Pgina 76
Pgina 77
Pgina 78
Pgina 79
Pgina 80
Pgina 81
[O100]
Pgina 82
Pgina 83
O101
O102
1- Corte de la preforma.
3- Doblado de la pieza.
Pgina 84
[O104]
[O105]
[O106]
[O107]
[O111]
[O108]
[O110]
Es necesario hacer
notar que el orificio
[O108] es ms bien una
ranura, por lo que
primero ser necesario
hacerle tomar la forma
de dos orificios de
3mm muy juntos
(izquierda), para luego
convertirlos finalmente
en una ranura usando
una fresa de 3mm
(derecha).
Pgina 85
[O109]
Pgina 86
Pgina 87
Pgina 88
Pgina 89
Pgina 90
1- El montaje empieza con la instalacin del sensor de contacto [E3] en la pieza P08
mediante dos tornillos [T6] y a travs de los orificios [O110 O111]. Estos
tornillos no usan tuerca, ya que roscan a presin en los orificios de la estructura de
plstico de [E3], pero el tornillo sobrante debe ser cortado al ras para no
obstaculizar la insercin del pi ms adelante.
Pgina 91
Pgina 92
5- Una vez acopladas las dos piezas y comprobado el buen funcionamiento del eje de
movimiento, ya no ser necesario operar en el espacio interior de P06, por lo que
puede acoplarse el servo [S3], que ocupar ese mismo espacio. Para hacerlo se usan
cuatro tornillos [T4] con sus tuercas, y cuatro arandelas [A1] para sujetar el servo a
P06 a travs de los orificios [O94 O97].
Pgina 93
Pgina 94
Hecho esto las Tibias estn terminadas, y slo queda ver si funcionan correctamente
comprobando que los sensores dan seal y que los retornos elsticos confieren a las partes
mviles de la Tibia un movimiento suave pero firme. Las siguientes imgenes muestran el
acabado real de la Tibia y el funcionamiento de sus dos sensores puesto a prueba.
Pgina 96
Pgina 97
(Vistas
superior
flechas
apertura
Fmur).
frontal, trasera y
del montaje. Las
verdes indican la
de las aletas del
El proceso se repite con las seis patas hasta obtener el esqueleto completo (a excepcin de
la cabeza). Las siguientes imgenes muestran su aspecto final desde varios ngulos.
Adems, llegados a este punto resulta interesante comparar el modelo virtual con el
esqueleto real para comprobar que se han cumplido todas las especificaciones de diseo,
por eso cada vista renderizada del robot va acompaada de su fotografa anloga. Las
imgenes hablan por s solas: el diseo original se ha recreado de forma satisfactoria, todas
las Tibias son perfectamente funcionales y las articulaciones cubren todo el rango de
movimiento para el que se disearon.
(Hay que apuntar que, como se ha apuntado al inicio de este captulo, el cuello del robot
finalmente no se montar en esta etapa del proyecto, por lo que en las fotografas que
siguen el Cuello an no ha sido instalado en el robot, aunque el diseo lo contemple).
Pgina 98
Pgina 99
Pgina 100
Pgina 101
Pgina 102
5 Diseo electrnico
5.1 PIC16f88
El microcontrolador escogido para este proyecto es uno de los ms verstiles de entre los
integrados pequeos de la familia 16f de Microchip. Entre sus caractersticas ms
importantes destacan:
Integrado PDIP de 18 pines
16 pines de Entrada/Salida genricos
7 Kbytes de memoria Flash de programa (4096 instrucciones de un Word)
368 bytes de memoria SRAM
256 vytes de memoria EEPROM
Modo oscilador HS de hasta 20 MHz
7 Canales de conversin ADC de 10 bits
Mdulo SSP con soporte hardware para I2C Slave y SPI
Mdulo AUSART (en operacin RS-232 usa un oscilador interno)
Dos mdulos Timer de 8 bits con disparo de interrupcin
Un mdulo Timer de 16 bits con disparo de interrupcin
Mdulo Capture/Compare/PWM de 16 y 10 bits
Dos fuentes de interrupcin externa: RB0 y cambio en el Puerto B[4:7]
In-Circuit Serial Programming (ICSP)
100 000 ciclos tpicos de lectura/escritura en la memoria Flash
1 000 000 ciclos tpicos de lectura/escritura en la memoria EEPROM
Set de slo 35 instrucciones RISC
La cantidad de funciones que puede
realizar cada patilla, expresada en su
diagrama de conexionado, pone de
manifiesto la aglomeracin de sistemas
que agrupa este integrado. Las tres placas
electrnicas que se desarrollan en este
proyecto hacen uso de todas y cada una
de estas patillas, as como de las
principales funciones de sus mdulos SSP
y Timer1, y de sus dos fuentes de
interrupcin externa, adems de varias de
las internas, entre otros.
Figura F. 32: Patillaje del PIC16f88
(Fuente: PIC16f88 DataSheet)
Pgina 103
Diseo electrnico
Pgina 105
Diseo electrnico
Figuras F. 35, F. 36 y F. 37: Serigrafas Top, Bottom y SST, a escala real, de la Placa Patas grupo A
(Fuente: Proyecto MIHRO)
En las tres imgenes (aparecen ampliadas en el anexo de Planos) puede verse que el perfil
rectangular de la placa tiene una hendidura de 3 x 20mm en su costado inferior, justo
debajo del espacio que ocupa el PIC. Esta hendidura sirve para evitar que la placa quede
levantada por encima de las tuercas de los tornillos que sujetan el servo tras el que se
instalar esta placa. Tambin evita que dichas tuercas puedan entrar en contacto con las
pistas o las soldaduras de la placa, pudiendo provocar as algn puente o cortocircuito.
La mayor dificultad en la fabricacin de estas placas ha sido sin duda el proceso de soldado.
Las placas, adems de ser pequeas y apiadas, exigen que los componentes electrnicos
que las integran se suelden por sus dos caras. Esto es relativamente sencillo en el caso de
resistencias o condensadores, pero se vuelve una tarea ardua en el caso de los conectores,
pues todos ellos disponen de un zcalo que tapa, al instalar el componente sobre la placa
en su posicin correcta, los pads en los que deben soldarse sus patillas. Ms difcil an
resulta la soldadura de los zcalos que han de albergar a los microcontroladores (estos
integrados son sensibles a la temperatura y se estropean, por lo que nunca se sueldan
directamente a la placa), pues la soldadura debe realizarse tanto en la cara por la que
sobresalen las patillas del zcalo al colocarlo en su lugar como en la misma cara en la que se
asienta el zcalo, teniendo que soldar con gran habilidad debajo del mismo, y sin ninguna
oportunidad de error. Otros componentes, como el botn de RESET, el Xtal oscilador, los
LEDs o el conector de 16 pines, tambin resultan extremadamente difciles de soldar, por
lo que la tarea de soldadura ha acabado por ser una de las ms complejas de todo el
proyecto en cuanto a la habilidad manual que exige.
Pgina 106
5.2.4 Operacin
El acceso a los conectores, los indicadores y el RESET de la placa patas se realiza desde
el exterior y, excepto en el caso del conector principal, desde el lateral del robot.
Conector A:
VSS
VDD
VSERVO
RESET
Conectores:
S1
LED 1
S2:
LED 2
PWM
VSERVO
VSS
LED 3
S3
Conector
Principal
Xtal 20MHz
PIC 16f88
Hay que tener en cuenta que LED 1 y LED 3 son, respectivamente, los indicadores de
deteccin de obstculo y contacto con el suelo. As mismo, S1, S2 y S3 corresponden, por
orden, a los servomotores de Cadera, Fmur y Tibia. Los tres tienen el mismo
patillaje, pero diferencindose en que cada uno recibe su propia seal PWM.
Pgina 107
Diseo electrnico
El conector principal ofrece acceso a las principales caractersticas de la placa. No obstante
algunas de ellas, como el botn de RESET, son incompatibles con la tarjeta programadora
empleada en este proyecto, por lo que habr dos conectores, uno normal y otro de
programacin, que permitirn conectar las patillas que sean necesarias en cada caso. Este
botn de RESET est inicialmente desconectado de la patilla MCLR del microcontrolador,
pero tanto sta como el botn disponen de un pin en el conector principal, de manera que
el botn puede conectarse al PIC puenteando ambas patillas fsicamente en el conector. De
esta manera, al conectar la programadora, la patilla MCLR estar conectada slo a la
programadora, mientras que al conectar el robot de forma normal MCLR volver a
conectarse con el botn de RESET.
Por ltimo ha de mencionarse que los ltimos tres pines del conector principal no se usan
(los ltimos dos pines, si contamos con que uno de ellos lo usa la tarjeta programadora).
Estos pines corresponden a una posible expansin an no implementada de las funciones
de la pata, que consiste en introducir un tercer plano de deteccin de obstculos mediante
un dispositivo ptico, como un optoacoplador reflexivo. La inclusin de un tercer plano de
deteccin en las patas permitira al robot detectar obstculos tambin cuando avanzara de
forma vectorial. No obstante, la implementacin mecnica de este sistema es
extremadamente compleja, si se pretenden conservar los criterios de robustez del robot,
por lo que se ha optado por una solucin ptica en vez de mecnica. La placa patas est
preparada, mediante estos pines y las resistencias de 47K y 220, para digitalizar una
seal analgica procedente de un optoacoplador reflexivo genrico situado en la Tibia (los
valores de las resistencias corresponden a un CNY70) y cuantificar as la proximidad de un
obstculo.
Opto In (NC)
220 (NC)
VDD
MCLR
PGD
PGC
VDD
Sens. Suelo
Sens. Obst.
VSS
SDA
SCL
SDA
SCL
VSS
RESET
Programadora
Sensores
I2C Out
I2C In
En el diagrama, las lneas verdes corresponden al conector normal, mientras que las rojas se
refieren al conector de la programadora. Adems, el diagrama tambin es vlido para el
conector hembra.
Pgina 108
Pgina 109
Diseo electrnico
Figuras F. 44, F. 45 y F. 46: Serigrafas Top, Bottom y SST, a escala real, de la Placa Patas grupo B
(Fuente: Proyecto MIHRO)
(El anexo Planos dispone de una versin ampliada de estas serigrafas para su mejor
visualizacin).
Aunque el proceso de programacin y la operacin con esta placa son los mismos que con
la placa de grupo A, hay que hacer notar que el patillaje del Conector Principal de esta placa
es distinto, por lo que las Patas grupo B necesitarn, entre otras cosas, un cable de
programacin propio.
Pgina 110
VSS
SDA
RESET
I2C In
SCL
SDA
SCL
Sens. Obst.
VSS
VDD
Sens. Suelo
PGD
PGC
VDD
MCLR
Opto In (NC)
220
I2C Out
Sensores
Programadora
Otra diferencia entre la placa de grupo A y de grupo B que hay que poner de manifiesto es
la distribucin de los conectores de los servos. En el caso de la placa de grupo A, los servos
de Cadera, Fmur y Tibia se conectan a los conectores S1, S2 y S3, respectivamente.
Esto es, de arriba abajo y de fuera a dentro. Por el contrario, los conectores de los servos
de la placa de grupo B se cuentan de dentro a fuera y de abajo arriba, por lo que, en el
diagrama del apartado 5.2.4 el servo Cadera correspondera a S3, el servo Fmur a S2 y
el servo Tibia a S1.
Como informacin adicional, se puede decir que tanto la
placa patas de grupo A como la de grupo B presentan un
consumo medio de 12mA, algo menos si los motores estn
alimentados y en reposo. Tambin es interesante mencionar
que los LEDs de estado se han incluido en la placa con el fin
de detectar fcilmente fallos en el funcionamiento de los
sensores de contacto o de la misma electrnica, y tambin
con el fin de ayudar en el desarrollo del software durante las
etapas de programacin. Con el mismo objeto se ha incluido
el botn de RESET en el diseo de estas placas, pues en la
Figura F. 48: LEDs de estado
aplicacin final carecen de mayor uso, ya que en pocas
(Fuente: Proyecto MIHRO)
circunstancias se puede dar el caso de que estas placas deban
reiniciarse manualmente, y en tal caso bastara con desconectar la alimentacin y volverla a
conectar. En cualquier caso, en el momento de la programacin se puede activar o
desactivar la funcin que realiza este botn actuando sobre el flag de configuracin
MCLRE (Memmory Clear Enabled), pero en caso de que est activado ha de tenerse en
cuenta que estas placas no debern funcionar si no tienen su conector principal conectado,
pues de no tenerlo el pin de MCLR quedara al aire, de modo que su funcionamiento se
volvera impredecible y podra provocar reinicios del programa no deseados.
Pgina 111
Diseo electrnico
Pgina 113
Diseo electrnico
Pgina 114
5.4.4 Operacin
La placa Entrenadora, de acuerdo con el uso especfico que recibe en su aplicacin final
sobre el robot, slo necesita de la conexin de sus conectores de alimentacin e I2C. El
resto de sus conectores estn pensados para su uso como controladora del tercer prototipo
de pata en la maqueta para la que se dise, o como herramienta de comunicacin con un
PC mediante RS-232, aunque esta aplicacin no ha llegado a implementarse en este
proyecto.
Alimentacin VDD
Alimentacin VSERVO
Sensor de suelo
PIC16F88
Servos
Ranuras de
expansin
Sensor de obstculo
Microrruptor
de 5 vas
MAX232
I2C
Programacin
RS-232
Pgina 115
Diseo electrnico
Teclado
Mando
Dgito 1
Dgito2
Dgito3
Dgito4
No botn
0
1
2
3
4
5
6
7
8
9
#
No botn
4
1 (L1, Sel.)
L2 (3)
Up
R2
Left
Down
Right
Start (2)
Stop ()
+0
+ 100
+ 200
(N.I.)()
action,4=1()
action,1=1()
action,5=1()
action,2=1()
action,1=0()
action,3=1()
I2C Send()
+0
+10
+20
+30
+40
+50
+60*/[Err()]
+70*/[Err()]
+80*/[Err()]
+90*/[Err()]
Err()
+0
+1
+2
+3
+4
+5
+6**/[Err()]
+7**/[Err()]
+8**/[Err()]
+9**/[Err()]
Err()
"acu"=0
Speed
Centro
Rango
Zanco
Altura
M1
M2
M3
Slave ***
Mode
No obstante, el mando, mucho ms cmodo para el control de las funciones dinmicas del
robot, no ofrece la posibilidad de introducir todos los valores numricos disponibles desde
el teclado, por lo que este ltimo ser preferible para las tareas de control esttico del robot.
Las rdenes introducidas desde el mando o el teclado se interpretan en el PIC maestro, que
produce una serie de envos de datos por el bus I2C a los distintos esclavos, consiguiendo
que stos acten en consecuencia.
Pgina 116
Diseo electrnico
6 Programacin
6.1 Herramientas de programacin
La tarea de programacin del robot se divide a su vez en tres sub-tareas (edicin,
compilado y grabacin) que han sido realizadas mediante programas gratuitos descargados
de Internet:
EditPlus 2: Este sencillo programa constituye una interesante herramienta de
edicin de cdigo fuente en ensamblador si se configura adecuadamente. Lo que
hay que hacer sencillamente es linkar ciertos parmetros del panel de preferencias
del programa a un archivo de sintaxis, que nosotros mismos podemos escribir o
modificar, para poder ver los distintos elementos del cdigo en pantalla coloreados
para su mejor distincin. Con esto el programa permite visualizar en una lista
ayudante la correcta escritura de las 35 instrucciones que componen el lenguaje
ensamblador (sin macros) de la familia 16F de Microchip, as como disear
nuestros propios templates con cabeceras, fragmentos de cdigo, etc., adems de sus
otras caractersticas genricas.
Pgina 119
Programacin
MPASM: Compilador para lenguaje ensamblador proporcionado por Microchip.
Su funcin es la de traducir el texto guardado en un archivo de cdigo fuente .asm
a un archivo .hex de valores hexadecimales (cdigo mquina), que contiene la
informacin que deberemos grabar en el PIC. Tras la compilacin se generan los
archivos secundarios de error, listado y referencia cruzada, adems del archivo.hex.
Pgina 120
Pgina 121
Programacin
6.2 Programas
Resulta complicado dejar una constancia fehaciente del trabajo de programacin realizado
en este proyecto, pues la extensin del cdigo fuente desarrollado, as como el carcter
crptico inherente al lenguaje ensamblador hacen difcil tanto la tarea de adjuntarlo en esta
memoria como la de explicar su funcionamiento detallado. Finalmente, la estrategia
adoptada para solucionar el problema ha sido la de aunar ambas tareas escribiendo un
cdigo fuente muy comentado, casi a cada lnea que se preste a ello, y adjuntar en el anexo
de Cdigo fuente los programas del Master y de uno de los esclavos. Hay que tener en
cuenta que, aunque son muy similares, los seis programas esclavos desarrollados mantienen
sustanciosas diferencias entre s, como por ejemplo la declaracin de las variables limitantes
de sus movimientos o las rutinas de correccin de los motores 2 y 3 en las etapas finales de
cada paso. No obstante, la totalidad del software definitivo escrito suma ms de 10.000
lneas de cdigo, por lo que finalmente se opt por incluir en el proyecto escrito, y slo en
un documento anexo, dos de los programas desarrollados (los dos ms distintos entre s).
As mismo, esta memoria slo pretende dar a conocer el funcionamiento genrico y global
de estos dos programas, dejando las explicaciones ms concretas en manos de los
comentarios intercalados en el cdigo.
Programacin
Dichas banderas son modificadas por el Master mediante la rutina de comunicacin I 2C,
que se trata ms tarde, y se usan para coordinar la accin motora que deber realizar la pata.
Por eso, los bits [2:5] slo se emplean en el programa del Master, mientras que el resto de
bits sirven para ordenar al esclavo un movimiento de avance o retroceso que se sincroniza
con el del resto de las patas mediante la activacin y desactivacin controlada de los bits
[6:7].
La variable 'mode' contiene 8 banderas:
mode,0 : 1= Modo Dinmico
0= Modo Esttico
mode,1 : 1= Modo levantamiento
0= No Modo
mode,2 : 1= Modo Coger
0= No Modo
mode,3 : 1= Modo Inicial
0= No Modo
mode,4 : 1= Modo Programacin
0= No Modo
mode,5 : 1= Obstculo detec.
0= No Obstculo
mode,6 : 1= (N.I.)
0= (N.I.)
mode,7 : 1= (N.I.)
0= (N.I.)
Mode, por el contrario, acta a un nivel ms alto, determinando el tipo de accin motora
que deber realizar la pata entre:
Modo esttico: La pata no ejecuta el control evolutivo de las variables m1, m2 y
m3, slo copia en ellas las consignas que le enva el Master para mantener cada
motor en una posicin fija. Mediante este modo, el usuario puede introducir por
teclado el valor exacto de la posicin que desea que adquiera un motor del robot.
Modo Dinmico: La pata ejecuta un control evolutivo de las variables m1, m2 y m3
diseado para reproducir la secuencia de movimientos de un paso. Dicha secuencia
recibe el nombre de igl por la forma que dibujan sus motores 1 y 2 trabajando al
unsono, y su principal caracterstica es que est diseada para reducir la inercia en
los lmites de su rango de movimiento, consiguiendo as evitar las oscilaciones,
optimizar el paso, reducir el consumo y alargar la vida de los motores. La secuencia
igl se divide en 7 etapas controladas por 8 variables que definen puntos clave de
su movimiento en los ejes de m1, m2 y m3. Dichas variables estn a su vez
controladas por las variables speed, centro, rango, zanco y altura, que constituyen las 5
consignas definitorias del paso. As pues, mediante el envo de estas 5 variables, el
Master controla todas las caractersticas de cada paso de la pata. Tambin hay que
decir que cada etapa se nutre de las rutinas fluc y find_m3 para ejecutar,
respectivamente, una evolucin progresiva de la posicin de los motores tanto en
su sentido de avance como de retroceso, y una correccin del valor de m3 que le
permite definir una lnea recta en su movimiento de retroceso (mejorando as la
estabilidad en el avance del robot).
Modo inicial: lleva al robot a una posicin conocida de inicio que mantiene durante
un par de segundos
Modo levantamiento: hace que el robot se levante con sus seis patas. Normalmente
se llega a este modo justo despus del modo inicial.
Modo programacin: hace que las patas del robot desciendan con las tibias
recogidas, cosa que facilita la operacin de darle la vuelta al robot para programarlo.
Pgina 124
Pgina 125
Programacin
Adems, existen normas para presionar una u otra tecla en cada uno de los dgitos. Por
ejemplo, si se presiona la secuencia de teclas 1-4-3-1 (consultar la tabla T.5 del
apartado 5.5.4), el cdigo de dgito 1 de la tecla 1 har que una variable acu valga 100,
el cdigo de dgito 2 de la tecla 4 har que acu se incremente en 40, el cdigo de dgito
3 de la tecla 3 har que acu se incremente en 3 puntos, obteniendo el valor 143 en
acu, y por ltimo el cdigo de dgito 4 de la tecla 1 har que dicho valor se almacene
en la variable speed. De este modo, el cdigo se protege contra su mal uso, evitando que se
introduzcan valores errneos. Por ejemplo, si intentamos introducir un 5 en el primer
dgito se iluminar un LED rojo gestionado desde la rutina led4, indicndonos que ha
habido un error. El error, por otro lado, es lgico, pues cualquier cifra que empezara por 5
en su campo de las centenas debera valer al menos 500, y lo mximo que pueden
cuantificar las variables de 8 bits es 255 (FFh). Otro ejemplo de cifra errnea sera la
introduccin de la secuencia 2-7-X o 2-5-7; en el primer caso, el siete no
llegara a entrar, pues cualquier nmero superior a 270 supera ya de por s a 255, por lo que
el sistema ni siquiera nos dejara llegar al tercer dgito. En el segundo caso, el 5 entrara
pero el sistema nos dara error al introducir el 7 final.
Algunas teclas, no obstante, se toleran en situaciones errneas para darles otros usos. Es el
caso, por ejemplo, de los nmeros superiores a 2 en el primer dgito, todos incorrectos
segn lo explicado, pero que en este caso sirven para manejar la rutina movs, activando y
desactivando los flags de la variable action que le indican qu tipo de secuencia debe
sincronizar el Master en todas las patas para producir unos u otros movimientos. Por
ejemplo, si se le da la orden de avanzar en lnea recta el primer dgito la rutina mandar las
consignas de movimiento dinmico a cada pata para que ejecuten una secuencia de
locomocin triangular normal (esto significa que todas las patas avanzan y retroceden la
misma distancia, pero las patas 1, 4 y 5 lo hacen a destiempo de las 2, 3 y 6, de forma que
cuando unas avanzan las otras retroceden). Por otro lado, si se le da la orden de girar a la
derecha mientras se avanza, le estar indicando a la rutina que ejecute la secuencia de
locomocin triangular, pero reduciendo el rango de las patas del lado derecho del robot
respecto de las del izquierdo, consiguiendo as que el robot se ladee.
Otros botones ejecutan tareas ms concretas de almacenamiento y envo de los datos,
como la tecla # que enva los datos almacenados por I2C al esclavo cuya direccin se
haya almacenado usando la tecla 9, o a todos ellos si dicho valor es 0.
A parte de esto, slo queda por decir que el Master no usa ninguna fuente de interrupcin,
aunque disponga de algunas programadas para futuras revisiones de este programa, y que
su rutina ms compleja, la implementacin de la comunicacin I2C en modo Single Master
completamente por software, exige un anlisis demasiado concreto como para abordarlo en
este apartado, por lo que deber ser consultado en el apartado correspondiente del anexo
de Cdigo fuente.
Pgina 126
7 Resultado
La integracin de todos sus sistemas le confieren a MIHRO su aspecto final.
Puesto que el resultado final no puede evaluarse con una imagen, sino que exige ver al
robot en funcionamiento, se han adjuntado algunos vdeos demostrativos en el CD que
muestran algunos de los principales experimentos que ha conllevado el desarrollo de
MIHRO, as como la demostracin de su operacin y de sus principales habilidades.
Pgina 127
Conclusin
8 Conclusin
Este proyecto persegua desde un principio unos objetivos que exigan una cantidad de
trabajo que exceda ampliamente las expectativas y la disponibilidad de tiempo de esta
asignatura, por eso, como explican los primeros captulos de esta memoria, el trabajo se
fragment en etapas diseadas para abordar el desarrollo de partes y caractersticas
concretas del robot, obteniendo al final de cada una un resultado visible y evaluable. Con
este sistema, se determin que los objetivos principales de este proyecto corresponderan a
las tres primeras etapas de su desarrollo global, y a partir de de ah se ira ampliando el
proyecto con tantos objetivos de las etapas siguientes como el tiempo permitiera. No
obstante, llegados al final de la asignatura ha quedado patente que el trabajo de estas tres
primeras etapas fue subestimado, pues la consecucin de sus objetivos solamente ha dejado
tiempo para comenzar el desarrollo de uno de los puntos de la cuarta etapa, el diseo de la
placa de alimentacin, sin llegar siquiera a completarlo. A pesar de ello, la consecucin de
estos objetivos principales ya supone un logro para el proyecto, pues su desarrollo ha
resultado ser una tarea ardua y compleja que ha exigido una dedicacin muy superior a lo
esperado.
La parte grata de esta circunstancia es que se han adquirido montones de conocimientos de
gran valor sobre todas la materias y procesos incluidos en este trabajo. Se concluye
entonces que se han asumido con xito todos los objetivos principales de este proyecto,
incluyendo los que se referan a la consideracin del mismo como herramienta de
aprendizaje y preparacin para el futuro profesional:
Se ha aprendido a desarrollar aplicaciones que requieran el uso de
microcontroladores PIC, incluyendo los recursos electrnicos y las tcnicas
necesarias para programarlos.
Se ha aprendido a programar y gobernar un sistema de comunicacin electrnica
basada en el bus I2C.
Se ha adquirido experiencia y habilidad en la soldadura de circuitos electrnicos de
dificultad avanzada.
Se han asumido valiosos mtodos y herramientas tiles para el diseo de estructuras
mecnicas.
Se han adquirido grandes conocimientos, experiencia y habilidad en la construccin
y montaje de mecanismos y piezas articuladas.
Se ha aprendido a disear circuitos y serigrafas usando OrCAD Capture y OrCAD
Layout.
Se ha aprendido a dominar el lenguaje ensamblador de la familia 16F de Michochip,
incluyendo la programacin de algunos de los principales mdulos perifricos y del
sistema interruptivo de estos dispositivos.
Se han adquirido tcnicas de programacin que permiten el control dinmico de
servomotores pequeos mediante seales PWM.
Pgina 128
Pgina 129
Bibliografa
9 Bibliografa
9.1 Proyectos de Final de Carrera EUPMT
[1]
[2]
[3]
Marc Rivas Capafons, Disseny i creaci dun microbot insect autnom. Matar, EUPMT
2005.
[4]
[5]
9.2 Libros
[1]
[2]
[3]
[4]
Pgina 130
Microchip Technology Inc. AN515. Communicating with the I2C Bus Using the
PIC16C5X. DS00515D. 1993.
[2]
[3]
[4]
Microchip Technology Inc. AN578. Use of the SSP Module in the I2C Multi-Master
Environment. DS00578B. 1997.
[5]
[6]
[7]
[8]
[9]
[10]
[11]
[12]
Microchip Technology Inc. AN734. Using the PIC Devices SSP and MSSP Modules
for Slave I2C Communication. DS00734B. 2008.
Pgina 131
Bibliografa
Enric Celaya, Jos Luis Albarral. Implementation of a hierarchical walk controller for the
LAURON III hexapod robot. IRI, Institut de Robtica i Informtica Industrial
(UPC-CSIC), 2003.
[2]
Nstor Sorli Martnez de Oraa, Pedro Fernndez Gmez. Robot Hexpodo. Escola
Universitria Politcnica de Vilanova i la Geltr (UPC), 2003.
[3]
[4]
A. Schneider, U. Schmucker. Force Sensing for Multi-legged Walking Robots: Theory and
Experiments Part 1: Overview and Force Sensing.
(Fuente: Mobile Robots, Moving Intelligence. Jonas Buchli, 2006.)
[5]
[6]
Shota Fujii, Kenji Inoue, Tomohito Takubo, Tatsuo Arai. Climbing up onto
Steps for Limb Mechanism Robot ASTERISK. Universidad de Osaka, 2006.
[7]
[2]
[3]
Pgina 132
[5]
[6]
[7]
[8]
[9]
[10]
[11]
[12]
[13]
[14]
[15]
Projekt Marvin.
http://www.vreal.de
[16]
[17]
[18]
Robot Bill-Ant.
http://biorobots.cwru.edu/projects/billant
Pgina 133
Bibliografa
[19]
Robot RHex.
http://www.rhex.web.tr
[20]
Robot Arachnobot.
http://www.pdjinc.com/arachno
[21]
[22]
[23]
[24]
Robot AMOS-WD06
http://www.chaos.gwdg.de/~poramate/AMOSWD06
[25]
[26]
[27]
[28]
Pgina 134
Pgina 135
Bibliografa
[Pgina en blanco, para k anexos vaya en pgina par]
Pgina 136
PROYECTO MIHRO
(MOBILE INTELLIGENT HEXAPOD ROBOT)
VOLUMEN II
OTOO 2008
VOLUMEN II
PRESUPUESTO
ndice de presupuesto
Mediciones _____________________________________________________VII
Pgina V
Presupuesto
1 Desglose de material
Concepto
Cantidad
Precio Unitario
()
Total
()
1
1
1
13
1
12
12
6
2
1
26,00
22,00
15,00
2,50
2,50
0,60
0,20
7,20
5,70
5,60
26,00
22,00
15,00
32,50
2,50
7,20
2,40
43,20
11,40
5,60
12
22
1
1
1,25
10,00
3,00
8,50
15,00
220,00
3,00
8,50
6
4
2
1
10
2
1
2
10
8
76
32
26
13
5
87
12
-
4,89
5,29
3,52
3,79
5,32
3,61
1,22
0,19
0,38
0,16
0,22
-
29,34
21,16
7,04
3,79
53,21
7,22
1,22
0,39
0,43
3,04
12,16
1,59
1,38
2,86
3,61
27,57
14,48
1,32
Componentes mecnicos
Chapa de aluminio 25mm (50x50cm)
Chapa de aluminio 2mm (50x50cm)
Chapa de aluminio 1mm (30x30cm)
Tornillera (20 unidades)
Tubo de aluminio para separadores
Tacos de goma antideslizante
Muelles
Tubos de latn cromado
Araldit Standard
Araldit Rpido
Componentes electromecnicos
Sensores de contacto Mini-bumper
Servos Standard Futaba S3003
Teclado numrico
Pad videoconsola
Componentes electrnicos
Placa de cobre de doble cara
Placa de topos de Baquelita (100x170)
Estao para soldadura 1mm
Estao para soldadura 0,5mm
PIC16F88
PIC16F84A
MAX232
L7805
Zcalos
Xtal oscilador 20MHz
Resistencias
Condensadores
LEDs
Pulsadores
Interruptores
Conectores
Cables (paquetes de 1 metro)
Otros (miscelnea)
Subtotal
606,11
Pgina VI
2 Mediciones
Ref.
1
2
3
4
5
6
7
8
9
10
11
12
Descripcin
Partes iguales
30
100
70
50
30
20
6
255
400
2
1
1800
3 Cuadro de precios
Ref.
Unidades
Precio unitario ()
1
2
3
4
5
6
7
8
9
10
11
12
Horas
Horas
Horas
Horas
Horas
Horas
CDs
Hojas en calidad
Hojas en borrador
Encuadernacin
Billetes de Cercanas (T10 3 zonas)
Minutos
25
50
25
50
50
25
0,5
0,45
0,15
7
19,80
0,03
Pgina VII
Presupuesto
4 Presupuesto parcial
Ref.
1
2
3
4
5
6
7
8
9
10
11
12
Partes
Precio
Importe
iguales unitario ()
()
Descripcin
Horas de proyectista destinadas a la
bsqueda de informacin y antecedentes
Horas de proyectista destinadas al diseo
electrnico y mecnico
Horas de proyectista destinadas a la
fabricacin y montaje de los elementos
mecnicos y electrnicos
Horas de proyectistas destinadas al
desarrollo del software
Horas de proyectista destinadas a la
puesta en marcha de todo el conjunto
Horas de proyectista destinadas a la
elaboracin escrita de la memoria del
proyecto
Soporte para el almacenamiento de
informacin y copias de seguridad (CDs)
Impresin de los documentos del
proyecto.
Impresin de documentos de soporte y
versiones preliminares
Encuadernacin de los documentos del
proyecto.
Desplazamientos varios (Onda Radio
BCN)
Minutos de conexin telefnica a Internet
Subtotal
30
25
750
100
50
5.000
70
25
1.750
50
50
2.500
30
50
1.500
20
25
500
0,5
255
0,45
114,75
400
0,15
60
14
19,80
19,80
1800
0,03
54
12.265,55
Pgina
VIII
5 Presupuesto global
Concepto
Cantidad ()
Total Material
606,11
12.265,55
Total
12.871,66
IVA (16%)
2.059,47
Total Presupuesto
14.931,13
La elaboracin del presente proyecto genera unos gastos de catorce mil novecientos treinta
y uno con trece euros.
Pgina IX
VOLUMEN II
PLANOS
ndice de planos
1
Esquemticos ___________________________________________________ IV
1.1 Esquemtico de las placas Patas __________________________________ IV
1.2 Esquemtico de la placa Entrenadora _______________________________ VI
1.3 Esquemtico de la placa de Alimentacin ___________________________ VIII
1.4 Esquemtico de la programadora PIPO2 _____________________________ X
Serigrafas ______________________________________________________XII
2.1 Placa Entrenadora, TOP _________________________________________ XII
2.2 Placa Entrenadora, BOTTOM ___________________________________ XIII
2.3 Placa Patas, grupo A, TOP ____________________________________ XIV
2.3.1 Escala 1:1______________________________________________ XIV
2.3.2 Escala 3:1______________________________________________ XIV
2.4 Placa Patas, grupo A, BOTTOM _________________________________ XV
2.4.1 Escala 1:1_______________________________________________ XV
2.4.2 Escala 3:1_______________________________________________ XV
2.5 Placa Patas, grupo A, SST _____________________________________ XVI
2.5.1 Escala 1:1______________________________________________ XVI
2.5.2 Escala 3:1______________________________________________ XVI
2.6 Placa Patas, grupo B, TOP ___________________________________ XVII
2.6.1 Escala 1:1_____________________________________________ XVII
2.6.2 Escala 3:1_____________________________________________ XVII
2.7 Placa Patas, grupo B, BOTTOM _______________________________ XVIII
2.7.1 Escala 1:1_____________________________________________ XVIII
2.7.2 Escala 3:1_____________________________________________ XVIII
2.8 Placa Patas, grupo B, SST _____________________________________ XIX
2.8.1 Escala 1:1______________________________________________ XIX
2.8.2 Escala 3:1______________________________________________ XIX
Planos mecnicos ________________________________________________ XX
3.1 P00: Trax Base _______________________________________________ XX
3.2 P01: Tapa Superior del Trax ___________________________________ XXII
3.3 P02: Tapa Inferior del Trax ____________________________________ XXIV
3.4 P03: Conector Cadera-Trax y P04: Conector Cadera-Fmur ___________ XXVI
3.5 P05: Fmur _______________________________________________ XXVIII
3.6 P06: Parte Fija de la Tibia ______________________________________ XXX
3.7 P07: Soporte Superior del Pi y P08: Parte Mvil de la Tibia ___________ XXXII
3.8 P09: Pi y P10: Cuello 1 _____________________________________ XXXIV
3.9 P11: Hombro Izquierdo y P12: Hombro Derecho _________________ XXXVI
Pgina III
Planos
1 Esquemticos
Pgina IV
Pgina V
Planos
Pgina VI
Pgina VII
Planos
Pgina
VIII
Pgina IX
Planos
Pgina X
Pgina XI
Planos
2 Serigrafas
2.1 Placa Entrenadora, TOP
Pgina XII
Pgina
XIII
Planos
Pgina
XIV
Pgina XV
Planos
Pgina
XVI
Pgina
XVII
Planos
Pgina
XVIII
Pgina
XIX
Planos
3 Planos mecnicos
Pgina XX
Pgina
XXI
Planos
Pgina
XXII
Pgina
XXIII
Planos
Pgina
XXIV
Pgina
XXV
Planos
Pgina
XXVI
Pgina
XXVII
Planos
Pgina
XXVIII
Pgina
XXIX
Planos
Pgina
XXX
Pgina
XXXI
Planos
Pgina
XXXII
Pgina
XXXIII
Planos
Pgina
XXXIV
Pgina
XXXV
Planos
Pgina
XXXVI
Pgina
XXXVII
VOLUMEN II
CDIGO FUENTE
Pgina III
Cdigo fuente
Pgina IV
;
;
;
;
;
;
;
;
;
;
; Registro 2 de Configuracin
__CONFIG
_CONFIG2, _IESO_OFF
& _FCMEN_OFF
;--------------------- Variables en memoria ------------------------cont
del
cont2
del2
cont3
del3
m1
m2
m3
action
w_temp
stat_t
pcl_t
mot
mot2
fst
speed
centro
rango
zanco
altura
m1_max
m1_min
m2_max
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
h'20'
h'21'
h'22'
h'23'
h'24'
h'25'
h'26'
h'27'
h'28'
h'29'
h'2A'
h'2B'
h'2C'
h'2D'
h'2E'
h'2F'
h'30'
h'31'
h'32'
h'33'
h'34'
h'35'
h'36'
h'37'
Pgina V
Cdigo fuente
m2_min
m3_max
m3_min
umax_m1
umin_m1
usup_m1
uinf_m1
usup_m2
umed_m2
uinf_m2
upos_m3
mot3
meta
var
comp
mode
r_m1
r_m2
r_m3
mot4
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
h'38'
h'39'
h'3A'
h'3B'
h'3C'
h'3D'
h'3E'
h'3F'
h'40'
h'41'
h'42'
h'43'
h'44'
h'45'
h'46'
h'47'
h'48'
h'49'
h'4A'
h'4B'
; hasta 7Fh
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
la variable
mode,0 : 1=
mode,1 : 1=
mode,2 : 1=
mode,3 : 1=
mode,4 : 1=
mode,5 : 1=
mode,6 : 1=
mode,7 : 1=
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
Pgina VI
;
;
;
;
;
;
;
;
;
0x00
inicio
0x04
isr
0X05
STATUS,RP0
b'00000000'
ANSEL
b'10110000'
TRISA
b'00110011'
TRISB
b'11000110'
OPTION_REG
b'11000000'
INTCON
b'00001001'
PIE1
b'00000000'
PIE2
d'30'
SSPADD
SSPSTAT,SMP
SSPSTAT,CKE
BCF
MOVLW
MOVWF
MOVLW
MOVWF
STATUS,RP0
b'00010001'
T1CON
b'00110110'
SSPCON
MOVLW
MOVWF
MOVLW
MOVWF
b'00000000'
PIR1
b'00000000'
PIR2
; banco mem 1
; ADC desactivado
; PORTA (0=output, 1=input)
;
;
;
;
;
;
;
;
;
;
;
;
banco mem 0
Configuracin y encendido del Timer1
preescaler 1:2, segn el clock interno
configuracin del mdulo SSP
SSPCON,5 = enable bit
SSPCON,4 = enable clock
SSPM<3:0> = 0110 Slave mode, 7-bit
Pgina VII
Cdigo fuente
;---------------------- Inicializaciones ---------------------------CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
PORTA
PORTB
SSPBUF
cont
del
cont2
del2
cont3
del3
mot
mot2
mot3
mot4
action
w_temp
stat_t
pcl_t
umax_m1
umin_m1
usup_m1
uinf_m1
usup_m2
umed_m2
uinf_m2
upos_m3
meta
var
comp
mode
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
d'2'
speed
d'135'
centro
d'55'
rango
d'130'
zanco
d'210'
altura
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
d'210'
m1_max
d'60'
m1_min
d'220'
m2_max
d'20'
m2_min
d'250'
m3_max
d'15'
m3_min
; M1 tope superior
BSF
BSF
BSF
MOVLW
MOVWF
mot,6
mot2,0
PORTB,2
d'250'
fst
MOVF
MOVWF
MOVF
MOVWF
MOVF
MOVWF
centro,W
m1
m2_max,W
m2
m3_min,W
m3
; m1 empieza en centro
; velocidad inicial = 2
; centro incial = 135
; rango incial = 55
; zanco incial = 100
; altura incial = 210
; M1 tope inferior
; M2 tope superior
; M2 tope inferior
; M3 tope superior
; M3 tope inferior
; m2 empieza en m2_max
; m3 empieza en m3_min
Pgina
VIII
centro,W
r_m1
centro,W
r_m2
centro,W
r_m2
mot,4
ciclo
mot,5
movs
; identificador de "ciclo"
bucle
; identificador de "movs"
m1,W
del
PORTA,1
delay
PORTA,1
;
;
;
;
;
carga
carga
RA1 =
llama
RA1 =
m1 en W
W en "del"
1
la rutina de retardo
0
MOVF
MOVWF
BSF
CALL
BCF
m2,W
del
PORTA,2
delay
PORTA,2
;
;
;
;
;
carga
carga
RA2 =
llama
RA2 =
m2 en W
W en "del"
1
la rutina de retardo
0
MOVF
MOVWF
BSF
CALL
BCF
m3,W
del
PORTA,3
delay
PORTA,3
;
;
;
;
;
carga
carga
RA3 =
llama
RA3 =
m2 en W
W en "del"
1
la rutina de retardo
0
BCF
BSF
mot,4
mot,5
RETURN
Pgina IX
Cdigo fuente
;------------------------ RUTINA DE MOVIMIENTO ---------------------;____________________________________________________________________
;--------------------------- Limitadores ---------------------------movs
com1
com2
MOVF
SUBLW
BTFSS
CLRF
speed,W
d'10'
STATUS,C
speed
;
;
;
;
si speed
10-speed
si speed
si speed
MOVF
SUBLW
BTFSC
GOTO
MOVLW
MOVWF
rango,W
d'125'
STATUS,C
com1
d'125'
rango
;
;
;
;
MOVF
rango,W
ADDWF
BTFSS
GOTO
MOVF
SUBWF
MOVWF
centro,W
STATUS,C
com2
rango,W
m1_max,W
centro
;
;
;
;
;
MOVF
ADDWF
SUBWF
BTFSC
rango,W
centro,W
m1_max,W
STATUS,C
GOTO
com3
MOVF
rango,W
SUBWF m1_max,W
MOVWF centro
com3
com4
MOVF
rango,W
SUBWF
BTFSC
GOTO
MOVF
ADDWF
MOVWF
centro,W
STATUS,C
com4
rango,W
m1_min,W
centro
MOVF
SUBWF
SUBWF
BTFSS
rango,W
centro,W
m1_min,W
STATUS,C
GOTO
com5
MOVF
rango,W
ADDWF m1_min,W
MOVWF centro
com5
MOVF
SUBLW
SUBWF
BTFSS
m2_min,W
d'250'
altura,W
STATUS,C
GOTO
com6
MOVF
m2_min,W
SUBLW d'250'
MOVWF altura
; rango = 125
si en centro+rango ha habido un salto de 255 a 0;
centro+rango = m1_max
centro+rango en W
si en centro+rango ; C=0; otra cosa
si en centro+rango ; C=1; solucin
; centro = m1_max-rango
;
;
;
;
;
;
;
; centro = m1_max-rango
;
;
;
;
;
; centro = m1_min+rango
;
;
;
;
;
;
;
; centro = m1_min+rango
;
;
;
;
;
;
;
; altura = 250-m2_min
Pgina X
com6
BCF
RRF
ADDLW
SUBWF
BTFSC
STATUS,C
rango,W
d'5'
zanco,W
STATUS,C
GOTO
com7
RRF
rango,W
ADDLW d'5'
MOVWF zanco
com7
MOVF
altura,W
SUBLW
ADDWF
SUBWF
BTFSC
d'250'
zanco,W
m2_max,W
STATUS,C
GOTO
umbral
MOVF
SUBLW
ADDWF
MOVWF
m2_max,W
d'250'
zanco,W
altura
;
;
;
;
;
;
;
;
; zanco = 5 + rango/2
;
;
;
;
;
;
;
cosa
; si m2_max < (zanco + (250 - altura));
; m2_max-(zanco + (250 - altura)) < 0: C=0; solucin
; 250 - m2_max
; zanco + (250-m2_max)
; altura = zanco + (250-m2_max)
; centro + rango
; umax_m1 = centro + rango
MOVF
rango,W
SUBWF centro,W
MOVWF umin_m1
; centro - rango
; umin_m1 = centro - rango
BCF
RRF
ADDWF
MOVWF
STATUS,C
rango,W
centro,W
usup_m1
;
;
;
;
BCF
RRF
SUBWF
MOVWF
STATUS,C
rango,W
centro,W
uinf_m1
;
;
;
;
MOVF
altura,W
SUBLW d'250'
MOVWF uinf_m2
; 250 - altura
; uinf_m2 = 250 - altura
MOVF
zanco,W
ADDWF uinf_m2,W
MOVWF usup_m2
; uinf_m2 + zanco
; usup_m2 = uinf_m2 + zanco
BCF
RRF
SUBWF
MOVWF
;
;
;
;
STATUS,C
rango,W
usup_m2,W
umed_m2
Pgina XI
Cdigo fuente
;--------------------- Posicionamiento inicial ---------------------BTFSS
GOTO
BTFSC
GOTO
una_vez
MOVF
MOVWF
MOVF
MOVWF
MOVF
MOVWF
DECFSZ
GOTO
BSF
GOTO
mot,6
et0
mot,7
ini0
centro,W
m1
m2_max,W
m2
m3_min,W
m3
; m1 empieza en centro
fst,F
salir
mot,7
salir
; m2 empieza en m2_max
; m3 empieza en m3_min
BTFSS mot2,0
GOTO
ini1
; estoy en etapa 0
MOVLW
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSS
GOTO
d'25'
meta
m3,W
var
d'0'
comp
fluc
var,W
m3
mot3,0
salir
BCF
CLRF
BSF
GOTO
mot3,0
mot2
mot2,1
salir
; compensacin de velocidad
; Comprovacin de llegada de m3
BTFSS mot2,1
GOTO
salir
; estoy en etapa 1
MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
uinf_m2,W
meta
m2,W
var
d'0'
comp
fluc
var,W
m2
MOVLW
SUBWF
BTFSC
GOTO
MOVF
SUBLW
MOVWF
d'170'
m2,W
STATUS,C
salir
m2,W
d'220'
m3
BTFSS mot3,0
GOTO
salir
; compensacin de velocidad
; m2 - 170
; Si m2 > 170, C=1; si m2 < 170, C=0
; valor que busca m3 en esta etapa
; 250 - m2 - 30 = INV(uinf_m2) - 30 = 220 - m2
; Comprovacin de llegada de m3
Pgina XII
mot3,0
mot2
mot2,7
mot,7
mot,6
salir
;____________________________________________________________________
;------------------------------- Etapas ----------------------------;
;
Este apartado ejecuta una secuencia de movimiento que realiza
;
un paso de tipo "ing", segn el esquema siguiente.
;
Se llama as por la forma que definen el movimento de los
;
motores 1 y 2. Su principal ventaja es que reduce la inercia
;
en los extremos del movimiento horizontal, logrando disminuir
;
as la oscilacin de la pata, y por tanto su conumo
;
;
;
2___________________3
;
/-\
;
/
\
;
/
\
;
1//
\\4
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
0||<-----|----------|-----||5
;
7
6
;-------------- Etapa 0 ------------------------------et0
BTFSS mot2,0
GOTO
et1
; estoy en etapa 0
MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF
umin_m1,W
meta
m1,W
var
d'0'
comp
fluc
var,W
m1
mot3,0
mot3,1
mot3,0
MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF
umed_m2,W
meta
m2,W
var
d'1'
comp
fluc
var,W
m2
mot3,0
mot3,2
mot3,0
BCF
CLRF
CALL
mot3,5
upos_m3
find_m3
; compensacin de velocidad
; compensacin de velocidad
Pgina
XIII
Cdigo fuente
BTFSS
GOTO
BTFSS
GOTO
mot3,1
salir
mot3,2
salir
BCF
BCF
mot3,1
mot3,2
CLRF
BSF
GOTO
mot2
mot2,1
salir
BTFSS mot2,1
GOTO
et2
; estoy en etapa 1
MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF
uinf_m1,W
meta
m1,W
var
d'0'
comp
fluc
var,W
m1
mot3,0
mot3,1
mot3,0
MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF
usup_m2,W
meta
m2,W
var
d'0'
comp
fluc
var,W
m2
mot3,0
mot3,2
mot3,0
BCF
CLRF
CALL
mot3,5
upos_m3
find_m3
BTFSS
GOTO
BTFSS
GOTO
mot3,1
salir
mot3,2
salir
BCF
BCF
mot3,1
mot3,2
CLRF
BSF
GOTO
mot2
mot2,2
salir
; compensacin de velocidad
; compensacin de velocidad
Pgina
XIV
BTFSS mot2,2
GOTO
et3
; estoy en etapa 2
MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF
usup_m1,W
meta
m1,W
var
d'1'
comp
fluc
var,W
m1
mot3,0
mot3,1
mot3,0
MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF
usup_m2,W
meta
m2,W
var
d'0'
comp
fluc
var,W
m2
mot3,0
mot3,2
mot3,0
BCF
CLRF
CALL
mot3,5
upos_m3
find_m3
BTFSS
GOTO
BTFSS
GOTO
mot3,1
salir
mot3,2
salir
BCF
BCF
mot3,1
mot3,2
CLRF
BSF
GOTO
mot2
mot2,3
salir
; compensacin de velocidad
; compensacin de velocidad
BTFSS mot2,3
GOTO
et4
; estoy en etapa 3
MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF
umax_m1,W
meta
m1,W
var
d'0'
comp
fluc
var,W
m1
mot3,0
mot3,1
mot3,0
; compensacin de velocidad
Pgina XV
Cdigo fuente
MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF
umed_m2,W
meta
m2,W
var
d'0'
comp
fluc
var,W
m2
mot3,0
mot3,2
mot3,0
BCF
CLRF
CALL
mot3,5
upos_m3
find_m3
BTFSS
GOTO
BTFSS
GOTO
mot3,1
salir
mot3,2
salir
BCF
BCF
mot3,1
mot3,2
CLRF
BSF
GOTO
mot2
mot2,4
salir
; compensacin de velocidad
BTFSS
GOTO
MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF
mot2,4
et5
umax_m1,W
meta
m1,W
var
d'0'
comp
fluc
var,W
m1
mot3,0
mot3,1
mot3,0
; estoy en etapa 4
MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF
uinf_m2,W
meta
m2,W
var
d'1'
comp
fluc
var,W
m2
mot3,0
mot3,2
mot3,0
BCF
CLRF
CALL
mot3,5
upos_m3
find_m3
BTFSS mot3,1
GOTO
salir
BTFSS mot3,2
; compensacin de velocidad
; compensacin de velocidad
Pgina
XVI
salir
BCF
BCF
mot3,1
mot3,2
CLRF
BSF
GOTO
mot2
mot2,5
salir
BTFSS mot2,5
GOTO
et6
; estoy en etapa 5
MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF
usup_m1,W
meta
m1,W
var
d'0'
comp
fluc
var,W
m1
mot3,0
mot3,1
mot3,0
MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF
uinf_m2,W
meta
m2,W
var
d'0'
comp
fluc
var,W
m2
mot3,0
mot3,2
mot3,0
BSF
CALL
mot3,5
find_m3
BTFSS
GOTO
BTFSS
GOTO
mot3,1
salir
mot3,2
salir
BCF
BCF
mot3,1
mot3,2
CLRF
BSF
GOTO
mot2
mot2,6
salir
; compensacin de velocidad
; compensacin de velocidad
BTFSS mot2,6
GOTO
et7
; estoy en etapa 6
MOVF
MOVWF
MOVF
MOVWF
uinf_m1,W
meta
m1,W
var
Pgina
XVII
Cdigo fuente
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF
d'1'
comp
fluc
var,W
m1
mot3,0
mot3,1
mot3,0
; compensacin de velocidad
MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF
uinf_m2,W
meta
m2,W
var
d'0'
comp
fluc
var,W
m2
mot3,0
mot3,2
mot3,0
BSF
CALL
mot3,5
find_m3
BTFSS
GOTO
BTFSS
GOTO
mot3,1
salir
mot3,2
salir
BCF
BCF
mot3,1
mot3,2
CLRF
BSF
GOTO
mot2
mot2,7
salir
; compensacin de velocidad
BTFSS mot2,7
GOTO
salir
; estoy en etapa 7
MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF
umin_m1,W
meta
m1,W
var
d'0'
comp
fluc
var,W
m1
mot3,0
mot3,1
mot3,0
MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
uinf_m2,W
meta
m2,W
var
d'0'
comp
fluc
var,W
m2
mot3,0
mot3,2
; compensacin de velocidad
; compensacin de velocidad
Pgina
XVIII
mot3,0
BSF
CALL
mot3,5
find_m3
BTFSS
GOTO
BTFSS
GOTO
mot3,1
salir
mot3,2
salir
BCF
BCF
mot3,1
mot3,2
CLRF
BSF
mot2
mot2,0
mot,5
RETURN
;____________________________________________________________________
;----------------------- Flujo de variable -------------------------fluc
MOVF
SUBWF
BTFSS
GOTO
BSF
GOTO
var,W
meta,W
STATUS,Z
diff
mot3,0
sale
MOVF
SUBWF
BTFSS
GOTO
var,W
meta,W
STATUS,C
resta
MOVF
ADDWF
ADDWF
MOVF
SUBWF
BTFSC
GOTO
MOVF
MOVWF
BSF
GOTO
speed,W
comp,W
var,F
var,W
meta,W
STATUS,C
sale
meta,W
var
mot3,0
sale
resta MOVF
ADDWF
SUBWF
MOVF
SUBWF
BTFSS
GOTO
MOVF
MOVWF
BSF
speed,W
comp,W
var,F
var,W
meta,W
STATUS,C
sale
meta,W
var
mot3,0
diff
suma
sale
;
;
;
;
;
meta - var
Z=1 si meta = var, Z=0 si meta <> var
Si meta <> var, voy a diff
si meta = var, flag de finalizar fluctuacin
y salgo de rutina
; meta - var
; C=1 si meta > var, C=0 si meta < var
; meta - var
; C=1 si meta > var, C=0 si meta < var
; meta - var
; C=1 si meta > var, C=0 si meta < var
RETURN
Pgina
XIX
Cdigo fuente
;------------------------- Clculo de m3 ----------------------------find_m3
MOVF
m2,W
SUBLW d'220'
MOVWF m3
etapa6
bit1
etap6
menor
eta6
bit_1
etp6
listo
BTFSS
GOTO
MOVF
SUBWF
BTFSS
GOTO
BTFSC
GOTO
BTFSS
GOTO
BTFSC
GOTO
MOVLW
ADDWF
BCF
GOTO
INCF
BCF
GOTO
BTFSS
GOTO
BTFSC
GOTO
BTFSC
GOTO
MOVLW
ADDWF
BSF
GOTO
INCF
BSF
GOTO
BTFSC
GOTO
BTFSS
GOTO
BTFSC
GOTO
MOVLW
SUBWF
BCF
GOTO
DECF
BCF
GOTO
BTFSS
GOTO
BTFSC
GOTO
BTFSC
GOTO
MOVLW
SUBWF
BSF
GOTO
DECF
BSF
MOVF
SUBWF
mot3,5
listo
centro,W
m1,W
STATUS,C
menor
m1,3
bit1
mot3,4
listo
mot2,6
etapa6
d'4'
upos_m3,F
mot3,4
listo
upos_m3,F
mot3,4
listo
m1,3
listo
mot3,4
listo
mot2,6
etap6
d'4'
upos_m3,F
mot3,4
listo
upos_m3,F
mot3,4
listo
m1,3
bit_1
mot3,4
listo
mot2,6
eta6
d'4'
upos_m3,F
mot3,4
listo
upos_m3,F
mot3,4
listo
m1,3
listo
mot3,4
listo
mot2,6
etp6
d'4'
upos_m3,F
mot3,4
listo
upos_m3,F
mot3,4
upos_m3,W
m3,F
RETURN
Pgina XX
retar3 NOP
NOP
DECFSZ cont3,F
GOTO
retar3
NOP
DECFSZ del3,F
GOTO
delay3
NOP
retar NOP
NOP
DECFSZ cont,F
GOTO
retar
NOP
DECFSZ del,F
GOTO
delay2
NOP
RETURN
Pgina
XXI
Cdigo fuente
;____________________________________________________________________
;------------------------- Rutina de Esclavo I2C -------------------; Esta rutina identifica 5 posibles estados en la comuncacin I2C
;
+ Escritura del master, envo de la direccin del esclavo
;
+ Escritura del master, envo del dato
;
+ Lectura del master, envo de la direccin del esclavo
;
+ Lectura del master, envo del dato desde el esclavo
;
+ Reset en la comnicacin I2c, el master manda un No-ACK
; Despus el master enva una secuencia de variables (Speed, Centro,
; Rango, Zanco, Altura) o demanda unas variables de control (mot2,
; mode, Zanco y Altura)
;-------------------------------------------------------------------i2c_com
BSF
BTFSC
GOTO
BTFSC
GOTO
GOTO
s_1
BTFSS
GOTO
BTFSC
GOTO
BCF
BTFSC
GOTO
STATUS,RP0
SSPSTAT,S
s_1
SSPSTAT,P
res_I2C
exit
;
;
;
;
;
;
SSPSTAT,D_A
no_res
SSPSTAT,BF
no_res
STATUS,RP0
SSPCON,CKP
res_I2C
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
no_res BSF
STATUS,RP0
BTFSC SSPSTAT,R_W
GOTO
read
read
BTFSC
GOTO
GOTO
BTFSS
GOTO
GOTO
SSPSTAT,D_A
w_dat
w_dir
SSPSTAT,D_A
r_dir
r_dat
STATUS,RP0
SSPSTAT,BF
in_dir
STATUS,RP0
SSPBUF,W
SSPCON,SSPOV
SSPCON,SSPOV
fallo
STATUS,RP0
SSPBUF,W
mot,1
mot,2
mot,3
mot3,6
mot3,7
mot4,0
mot4,1
mot4,2
mot4,3
mot4,4
exit
;
;
;
;
;
;
;
banco mem 1
Leo BF para ver si el dato ha entrado
si 1, voy al dato
banco mem 0
Leo SSPBUF para borrar BF, descarto el dato
miro overflow
si es 1 lo borro
;
;
;
;
;
;
banco mem 0
Leo SSPBUF para borrar BF, descarto el dato
A continuacin viene por el I2C la secuencia de
actualizacin de variables
As que borro las banderas, y activo la primera
para empezar por speed
Pgina
XXII
STATUS,RP0
SSPSTAT,BF
in_dat
STATUS,RP0
SSPBUF,W
SSPCON,SSPOV
SSPCON,SSPOV
fallo
STATUS,RP0
SSPCON,SSPOV
speed_c
SSPCON,SSPOV
SSPBUF,W
fallo
;
;
;
;
;
;
;
banco mem 1
Leo BF para ver si el dato ha entrado
si 1, voy al dato
banco mem 0
Leo SSPBUF para borrar BF, descarto el dato
miro overflow
si es 1 lo borro
;
;
;
;
;
;
banco mem 0
Compruevo que No ha habido Overflow
si No ha habido Overfow, recibo el primer dato
S ha habido overflow, borro el bit de overflow
leo SSPBUF para borrar BF, descarto el dato
finalmente, llamo a fallo
speed_c
BTFSS
GOTO
MOVF
MOVWF
BCF
BSF
GOTO
mot,1
cent_c
SSPBUF,W
speed
mot,1
mot,2
acaba
cent_c BTFSS
GOTO
MOVF
MOVWF
BCF
BSF
GOTO
mot,2
rango_c
SSPBUF,W
centro
mot,2
mot,3
acaba
rango_c
BTFSS
GOTO
MOVF
MOVWF
BCF
BSF
GOTO
mot,3
zanco_c
SSPBUF,W
rango
mot,3
mot3,6
acaba
zanco_c
BTFSS
GOTO
MOVF
MOVWF
BCF
BSF
GOTO
mot3,6
altur_c
SSPBUF,W
zanco
mot3,6
mot3,7
acaba
altur_c
BTFSS
GOTO
MOVF
MOVWF
BCF
BSF
GOTO
mot3,7
mode_c
SSPBUF,W
altura
mot3,7
mot4,0
acaba
mode_c BTFSS
GOTO
MOVF
MOVWF
BCF
BSF
GOTO
mot4,0
actio_c
SSPBUF,W
mode
mot4,0
mot4,1
acaba
Pgina
XXIII
Cdigo fuente
actio_c
BTFSS
GOTO
MOVF
MOVWF
BCF
BSF
GOTO
m1_c
m2_c
m3_c
mot4,1
m1_c
SSPBUF,W
action
mot4,1
mot4,2
acaba
BTFSS
GOTO
MOVF
MOVWF
BCF
BSF
GOTO
mot4,2
m2_c
SSPBUF,W
r_m1
mot4,2
mot4,3
acaba
BTFSS
GOTO
MOVF
MOVWF
BCF
BSF
GOTO
mot4,3
m3_c
SSPBUF,W
r_m2
mot4,3
mot4,4
acaba
BTFSS
GOTO
MOVF
MOVWF
BCF
BSF
mot4,4
exit
SSPBUF,W
r_m3
mot4,4
mot,1
STATUS,RP0
SSPSTAT,BF
fallo
exit
;
;
;
;
acaba BSF
BTFSC
GOTO
GOTO
STATUS,RP0
SSPCON,CKP
fallo
SSPBUF,W
mot,1
;
;
;
;
;
banco mem 0
CKP = 0?
CKP = 1, error
Leo Buffer para borrar BF
BF = 0, preparo las banderas para envo secuencial
mot,2
mot,3
mot3,6
mot3,7
mot4,0
mot4,1
mot4,2
mot4,3
mot4,4
mot2R
Pgina
XXIV
STATUS,RP0
SSPCON,CKP
fallo
STATUS,RP0
SSPSTAT,BF
r_dat
STATUS,RP0
;
;
;
;
;
;
;
;
banco mem 0
CKP = 0?
CKP = 1
banco mem 1
CKP = 0, compruebo BF = 0?
BF = 1, me espero a que se vace
BF = 0, continua la secuencia de envo (Speed ya
est enviado), banco mem 0
mot2R BTFSS
GOTO
BCF
MOVF
MOVWF
BTFSC
GOTO
BSF
BCF
BSF
GOTO
mot,1
modeR
SSPCON,WCOL
mot2,W
SSPBUF
SSPCON,WCOL
mot2R
SSPCON,CKP
mot,1
mot,2
exit
;
;
;
;
;
;
;
;
;
modeR BTFSS
GOTO
BCF
MOVF
MOVWF
BTFSC
GOTO
BSF
BCF
BSF
GOTO
mot,2
zancoR
SSPCON,WCOL
mode,W
SSPBUF
SSPCON,WCOL
modeR
SSPCON,CKP
mot,2
mot,3
exit
;
;
;
;
;
;
;
;
;
zancoR BTFSS
GOTO
BCF
MOVF
MOVWF
BTFSC
GOTO
BSF
BCF
BSF
GOTO
mot,3
alturaR
SSPCON,WCOL
zanco,W
SSPBUF
SSPCON,WCOL
zancoR
SSPCON,CKP
mot,3
mot3,6
exit
;
;
;
;
;
;
;
;
;
alturaR
BTFSS
GOTO
BCF
MOVF
MOVWF
BTFSC
GOTO
BSF
BCF
BSF
GOTO
mot3,6
exit
SSPCON,WCOL
altura,W
SSPBUF
SSPCON,WCOL
alturaR
SSPCON,CKP
mot3,6
mot,1
exit
;
;
;
;
;
;
;
;
;
Pgina
XXV
Cdigo fuente
;--------------- Fin de la comunicacin ----------------------------res_I2C
MOVF
BSF
BTFSC
GOTO
BCF
BTFSC
BCF
BSF
BCF
BCF
BCF
BCF
BCF
BCF
BCF
BCF
BCF
GOTO
BCF
STATUS,RP0
; banco mem 0
SSPBUF,W
; Leo SSPBUF para borrar BF, descarto el dato
STATUS,RP0
; banco mem 1
SSPSTAT,BF
; Leo BF para ver si se ha borrado
fallo
; si sigue siendo 1 error
STATUS,RP0
; banco mem 0
SSPCON,SSPOV ; miro overflow
SSPCON,SSPOV ; si es 1 lo borro
mot,1
; Reinicio de la secuencia de envo/recepcin
mot,2
mot,3
mot3,6
mot3,7
mot4,0
mot4,1
mot4,2
mot4,3
mot4,4
exit
;---------------------------------------------------------------fallo BCF
STATUS,RP0
BCF
PORTB,2
RETURN
; banco mem 0
; Led de estado OFF
exit
; banco mem 0
; Led de estado ON
BCF
STATUS,RP0
BSF
PORTB,2
RETURN
;____________________________________________________________________
;--------------- Rutina de Servicio de Interrupcin-----------------;
(para salvar el reg. status se usa swap pk as no se altera el
;
contenido (status contiene los flag aritmticos). Al volver de
;
la rutina se restablece el orden de los nibbles.)
;
;
Hay tres fuentes de interrupcin:
;
flanco de rubida de RB0/int (sirve para el control de
;
adaptacin al terreno, actualmente sin implementar)
;
Mdulo SSP
;
ovrerflow del Timer 1
;-------------------------------------------------------------------isr
MOVWF
SWAPF
MOVWF
MOVF
MOVWF
w_temp
STATUS,W
stat_t
PCLATH,W
pcl_t
BCF
BCF
INTCON,GIE
STATUS,RP0
; apago interrupciones
; banco mem 0
BTFSC INTCON,RBIF
GOTO
i_rb
BTFSC INTCON,INTF
GOTO
i_rb0
;
;
;
;
;
pooling de RB7:RB4
(Actualmente desactivado para preservar
el funcionamiento de I2C_com)
pooling de RB0/INT
Actualmente no implementado
BTFSC PIR1,SSPIF
GOTO
i2c_ev
BTFSC PIR1,TMR1IF
GOTO
i_tmr1
GOTO
escape
Pgina
XXVI
MOVF
BCF
BSF
GOTO
PORTB,F
INTCON,RBIF
INTCON,RBIE
escape
i_rb0 BCF
BSF
GOTO
INTCON,INTF
INTCON,INTE
escape
; limpiamos el flag
; desenmascaramos la INT
i_tmr1 BCF
BSF
BSF
BCF
PIR1,TMR1IF
STATUS,RP0
PIE1,TMR1IE
STATUS,RP0
; limpiamos el flag
; banco mem 1 (PIE1 est en banco 1)
; desenmascaramos la INT
; banco mem 0
MOVLW
MOVWF
MOVLW
MOVWF
h'3C'
TMR1H
h'B0'
TMR1L
cargo 3C en TMR1H y
BSF
GOTO
mot,4
escape
;
;
;
;
;
;
;
;
;
PIR1,SSPIF
STATUS,RP0
PIE1,SSPIE
STATUS,RP0
;
;
;
;
limpiamos el flag
banco mem 1 (PIE1 est en banco 1)
desenmascaramos la INT
banco mem 0
i2c_com
pcl_t,W
PCLATH
stat_t,W
STATUS
w_temp,F
w_temp,W
;
;
;
;
i2c_ev BCF
BSF
BSF
BCF
CALL
escape MOVF
MOVWF
SWAPF
MOVWF
SWAPF
SWAPF
RETFIE
; limpiamos el flag
; desenmascaramos la INT
le da la vuelta al stat_t
y lo reestablece en status
reestablece W desde W_temp
dandole la vuelta 2 veces
; salgo de rutina
;-----------------------------------------END
;------------------------------------------
Pgina
XXVII
Cdigo fuente
Pgina
XXVIII
;
;
;
;
;
;
;
;
;
;
; Registro 2 de Configuracin
__CONFIG
_CONFIG2, _IESO_OFF & _FCMEN_OFF
;--------------------- Variables en memoria ------------------------cont
del
cont2
del2
cont3
del3
m1
m2
m3
fail
w_temp
stat_t
pcl_t
mot
mot2
mot3
acu
time
dato
send_d
read_d
slave
speed
centro
rango
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
h'20'
h'21'
h'22'
h'23'
h'24'
h'25'
h'26'
h'27'
h'28'
h'29'
h'2A'
h'2B'
h'2C'
h'2D'
h'2E'
h'2F'
h'30'
h'31'
h'32'
h'33'
h'34'
h'35'
h'36'
h'37'
h'38'
Pgina
XXIX
Cdigo fuente
zanco
altura
slv1
slv2
slv3
slv4
slv5
slv6
slv_gen
action
mode
r_mot2
r_mode
r_zanco
r_altu
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
h'39'
h'3A'
h'3B'
h'3C'
h'3D'
h'3E'
h'3F'
h'40'
h'41'
h'42'
h'43'
h'44'
h'45'
h'46'
h'47'
; hasta 7Fh
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
la variable
mode,0 : 1=
mode,1 : 1=
mode,2 : 1=
mode,3 : 1=
mode,4 : 1=
mode,5 : 1=
mode,6 : 1=
mode,7 : 1=
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
Pgina
XXX
0x00
inicio
0x04
isr
0X05
STATUS,RP0
b'00000000'
ANSEL
b'10111111'
TRISA
b'11111111'
TRISB
b'11000000'
OPTION_REG
b'01010000'
INTCON
b'00001000'
PIE1
b'00000000'
PIE2
d'70'
SSPADD
BCF
BCF
BCF
MOVLW
MOVWF
SSPSTAT,SMP
SSPSTAT,CKE
STATUS,RP0
b'00111011'
SSPCON
MOVLW
MOVWF
MOVLW
MOVWF
b'00000000'
PIR1
b'00000000'
PIR2
; banco mem 1
; ADC desactivado
; PORTA (0=output, 1=input)
;
;
;
;
;
Pgina
XXXI
Cdigo fuente
;---------------------- Inicializaciones -------------------------CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
PORTA
PORTB
SSPBUF
cont
del
cont2
del2
cont3
del3
mot
mot2
mot3
w_temp
stat_t
pcl_t
acu
time
fail
dato
send_d
read_d
action
mode
r_mot2
r_mode
r_zanco
r_altu
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
CLRF
d'10'
slv1
d'20'
slv2
d'30'
slv3
d'40'
slv4
d'50'
slv5
d'60'
slv6
slv_gen
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
d'4'
speed
d'135'
centro
d'15'
rango
d'130'
zanco
d'210'
altura
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
d'135'
m1
d'135'
m2
d'135'
m3
BSF
mot3,1
MOVLW d'250'
MOVWF time
; direccin esclavo 1
; direccin esclavo 2
; direccin esclavo 3
; direccin esclavo 4
; direccin esclavo 5
; direccin esclavo 6
; direccin esclavo introducido por el usuario
; velocidad inicial = 4
; centro incial = 135
; rango incial = 15
; zanco incial = 100
; altura incial = 210
; m1, m2 y m3 comienzan en un valor cntrico
Pgina
XXXII
PORTA,0
mot,0
PORTA,1
mot,1
PORTA,2
mot,2
PORTA,3
mot,3
PORTA,4
mot,4
PORTB,5
mot,5
PORTB,6
mot,6
PORTB,7
mot,7
PORTB,2
mot3,0
PORTB,3
mot3,6
PORTB,0
mot3,7
; bot0
; bot1
; bot2
; bot3
; bot4
; bot5
; bot6
; bot7
; bot8
; bot9
; botA
BTFSC
CALL
BTFSC
CALL
BTFSC
CALL
BTFSC
CALL
BTFSC
CALL
BTFSC
CALL
BTFSC
CALL
BTFSC
CALL
BTFSC
CALL
BTFSC
CALL
BTFSC
CALL
mot,0
bot0
mot,1
bot1
mot,2
bot2
mot,3
bot3
mot,4
bot4
mot,5
bot5
mot,6
bot6
mot,7
bot7
mot3,0
bot8
mot3,6
bot9
mot3,7
botA
; Llamada bot0
GOTO
bucle
; Llamada bot1
; Llamada bot2
; Llamada bot3
; Llamada bot4
; Llamada bot5
; Llamada bot6
; Llamada bot7
; Llamada bot8
; Llamada bot9
; Llamada botA
Pgina
XXXIII
Cdigo fuente
;____________________________________________________________________
;---------------- Rutinas de accin de los botones -----------------;--------------- Rutina botn 0 -------------------------------------bot0
MOVLW
MOVWF
CALL
BTFSC
GOTO
b0_d1 BTFSS
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
b0_d2 BTFSS
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
b0_d3 BTFSS
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
b0_d4 BTFSS
GOTO
CLRF
BCF
BCF
BCF
BSF
exb0
d'250'
del
delay
PORTA,0
bot0
mot3,1
b0_d2
d'0'
acu,F
mot3,1
mot3,2
led1
exb0
mot3,2
b0_d3
d'0'
acu,F
mot3,2
mot3,3
led2
exb0
mot3,3
b0_d4
d'0'
acu,F
mot3,3
mot3,4
led3
exb0
mot3,4
exb0
acu
mot2,2
mot2,5
mot3,4
mot3,1
;
;
;
;
;
;
BCF
mot,0
RETURN
MOVLW
MOVWF
CALL
BTFSC
GOTO
b1_d1 BTFSS
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
b1_d2 BTFSS
GOTO
MOVLW
ADDWF
BCF
d'250'
del
delay
PORTA,1
bot1
mot3,1
b1_d2
d'100'
acu,F
mot3,1
mot3,2
led1
exb1
mot3,2
b1_d3
d'10'
acu,F
mot3,2
Pgina
XXXIV
mot3,3
led2
exb1
mot3,3
b1_d4
d'1'
acu,F
mot3,3
mot3,4
led3
exb1
mot3,4
exb1
acu,W
speed
d'1'
acu
led5
acu
mot2,2
mot2,5
mot3,4
mot3,1
BCF
mot,1
RETURN
MOVLW
MOVWF
CALL
BTFSC
GOTO
b2_d1 BTFSS
GOTO
MOVLW
ADDWF
BSF
BCF
BSF
CALL
GOTO
b2_d2 BTFSS
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
b2_d3 BTFSS
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
b2_d4 BTFSS
GOTO
MOVF
MOVWF
MOVLW
MOVWF
CALL
CLRF
d'250'
del
delay
PORTA,2
bot2
mot3,1
b2_d2
d'200'
acu,F
mot2,2
mot3,1
mot3,2
led1
exb2
mot3,2
b2_d3
d'20'
acu,F
mot3,2
mot3,3
led2
exb2
mot3,3
b2_d4
d'2'
acu,F
mot3,3
mot3,4
led3
exb2
mot3,4
exb2
acu,W
centro
d'1'
acu
led5
acu
; Idem k bot1
; Salta si RA2=0
Pgina
XXXV
Cdigo fuente
BCF
BCF
BCF
BSF
exb2
mot2,2
mot2,5
mot3,4
mot3,1
;
;
;
;
BCF
mot,2
RETURN
MOVLW
MOVWF
CALL
BTFSC
GOTO
b3_d1 BTFSS
GOTO
CALL
GOTO
b3_d2 BTFSS
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
b3_d3 BTFSS
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
b3_d4 BTFSS
GOTO
MOVF
MOVWF
MOVLW
MOVWF
CALL
CLRF
BCF
BCF
BCF
BSF
exb3
d'250'
del
delay
PORTA,3
bot3
mot3,1
b3_d2
led4
exb3
mot3,2
b3_d3
d'30'
acu,F
mot3,2
mot3,3
led2
exb3
mot3,3
b3_d4
d'3'
acu,F
mot3,3
mot3,4
led3
exb3
mot3,4
exb3
acu,W
rango
d'1'
acu
led5
acu
mot2,2
mot2,5
mot3,4
mot3,1
; Idem k bot1
; Salta si RA3=0
; Mensaje de error
; Apretar b3 en el primer dgito no tiene sentido
; Accin para apretar b3 en el segundo dgito
BCF
mot,3
RETURN
MOVLW
MOVWF
CALL
BTFSC
GOTO
b4_d1 BTFSS
GOTO
CALL
GOTO
b4_d2 BTFSS
GOTO
MOVLW
ADDWF
d'250'
del
delay
PORTA,4
bot4
mot3,1
b4_d2
led4
exb4
mot3,2
b4_d3
d'40'
acu,F
; Idem k bot1
; Salta si RA4=0
; Mensaje de error
; Apretar b4 en el primer dgito no tiene sentido
; Accin para apretar b4 en el segundo dgito
Pgina
XXXVI
mot3,2
mot3,3
led2
exb4
mot3,3
b4_d4
d'4'
acu,F
mot3,3
mot3,4
led3
exb4
mot3,4
exb4
acu,W
zanco
d'1'
acu
led5
acu
mot2,2
mot2,5
mot3,4
mot3,1
BCF
mot,4
RETURN
MOVLW
MOVWF
CALL
BTFSC
GOTO
b5_d1 BTFSS
GOTO
CALL
GOTO
b5_d2 BTFSS
GOTO
MOVLW
ADDWF
BTFSC
BSF
BCF
BSF
CALL
GOTO
b5_d3 BTFSS
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
b5_d4 BTFSS
GOTO
MOVF
MOVWF
MOVLW
MOVWF
CALL
CLRF
BCF
BCF
d'250'
del
delay
PORTB,5
bot5
mot3,1
b5_d2
led4
exb5
mot3,2
b5_d3
d'50'
acu,F
mot2,2
mot2,5
mot3,2
mot3,3
led2
exb5
mot3,3
b5_d4
d'5'
acu,F
mot3,3
mot3,4
led3
exb5
mot3,4
exb5
acu,W
altura
d'1'
acu
led5
acu
mot2,2
mot2,5
; Idem k bot1
; Salta si RB5=0
; Mensaje de error
; Apretar b5 en el primer dgito no tiene sentido
; Accin para apretar b5 en el segundo dgito
; Si el primer digito es 2 (200 + ...)
; Bandera de segundo digito es cinco
Pgina
XXXVII
Cdigo fuente
BCF
BSF
exb5
mot3,4
mot3,1
BCF
mot,5
RETURN
MOVLW
MOVWF
CALL
BTFSC
GOTO
b6_d1 BTFSS
GOTO
CALL
GOTO
b6_d2 BTFSS
GOTO
BTFSC
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
over6 CALL
GOTO
b6_d3 BTFSS
GOTO
BTFSC
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
ovr6
CALL
GOTO
b6_d4 BTFSS
GOTO
MOVF
MOVWF
MOVLW
MOVWF
CALL
CLRF
BCF
BCF
BCF
BSF
exb6
d'250'
del
delay
PORTB,6
bot6
mot3,1
b6_d2
led4
exb6
mot3,2
b6_d3
mot2,2
over6
d'60'
acu,F
mot3,2
mot3,3
led2
exb6
led4
exb6
mot3,3
b6_d4
mot2,5
ovr6
d'6'
acu,F
mot3,3
mot3,4
led3
exb6
led4
exb6
mot3,4
exb6
acu,W
m1
d'1'
acu
led5
acu
mot2,2
mot2,5
mot3,4
mot3,1
; Idem k bot1
; Salta si RB6=0
; Mensaje de error
; Apretar b6 en el primer dgito no tiene sentido
; Continua si el primer dgito no es 2
; Accin para apretar b6 en el segundo dgito
; Mensaje de error
; Mensaje de error
; Accin para apretar b6 en el cuarto dgito
; apretar "6" en el dgito 4
; carga m1 con el valor introducido
; cargo 1 en acu
; mando un 1 a led5 para sealizar la carga correcta
;
;
;
;
BCF
mot,6
RETURN
MOVLW
MOVWF
CALL
BTFSC
GOTO
d'250'
del
delay
PORTB,7
bot7
; Idem k bot1
; Salta si RB7=0
Pgina
XXXVIII
b7_d2
over7
b7_d3
ovr7
b7_d4
exb7
CALL
GOTO
BTFSS
GOTO
BTFSC
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
CALL
GOTO
BTFSS
GOTO
BTFSC
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
CALL
GOTO
BTFSS
GOTO
MOVF
MOVWF
MOVLW
MOVWF
CALL
CLRF
BCF
BCF
BCF
BSF
led4
exb7
mot3,2
b7_d3
mot2,2
over7
d'70'
acu,F
mot3,2
mot3,3
led2
exb7
led4
exb7
mot3,3
b7_d4
mot2,5
ovr7
d'7'
acu,F
mot3,3
mot3,4
led3
exb7
led4
exb7
mot3,4
exb7
acu,W
m2
d'1'
acu
led5
acu
mot2,2
mot2,5
mot3,4
mot3,1
; Mensaje de error
; Apretar b7 en el primer dgito no tiene sentido
; Continua si el primer dgito no es 2
; Accin para apretar b7 en el segundo dgito
; Mensaje de error
; Mensaje de error
; Accin para apretar b7 en el cuarto dgito
; apretar "7" en el dgito 4
; carga m2 con el valor introducido
; cargo 1 en acu
; mando un 1 a led5 para sealizar la carga correcta
;
;
;
;
BCF
mot,7
RETURN
MOVLW
MOVWF
CALL
BTFSC
GOTO
b8_d1 BTFSS
GOTO
CALL
GOTO
b8_d2 BTFSS
GOTO
BTFSC
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
over8 CALL
GOTO
b8_d3 BTFSS
GOTO
d'250'
del
delay
PORTB,2
bot8
mot3,1
b8_d2
led4
exb8
mot3,2
b8_d3
mot2,2
over8
d'80'
acu,F
mot3,2
mot3,3
led2
exb8
led4
exb8
mot3,3
b8_d4
; Idem k bot1
; Salta si RB2=0
; Mensaje de error
; Apretar b8 en el primer dgito no tiene sentido
; Continua si el primer dgito no es 2
; Accin para apretar b8 en el segundo dgito
; Mensaje de error
Pgina
XXXIX
Cdigo fuente
BTFSC
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
ovr8
CALL
GOTO
b8_d4 BTFSS
GOTO
MOVF
MOVWF
MOVLW
MOVWF
CALL
CLRF
BCF
BCF
BCF
BSF
exb8
mot2,5
ovr8
d'8'
acu,F
mot3,3
mot3,4
led3
exb8
led4
exb8
mot3,4
exb8
acu,W
m3
d'1'
acu
led5
acu
mot2,2
mot2,5
mot3,4
mot3,1
; Mensaje de error
; Accin para apretar b8 en el cuarto dgito
; apretar "8" en el dgito 4
; carga m3 con el valor introducido
; cargo 1 en acu
; mando un 1 a led5 para sealizar la carga correcta
;
;
;
;
BCF
mot3,0
RETURN
MOVLW
MOVWF
CALL
BTFSC
GOTO
d'250'
del
delay
PORTB,3
bot9
b9_d1 BTFSS
GOTO
CALL
GOTO
b9_d2 BTFSS
GOTO
BTFSC
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
over9 CALL
GOTO
b9_d3 BTFSS
GOTO
BTFSC
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
ovr9
CALL
GOTO
b9_d4 BTFSS
GOTO
MOVF
MOVWF
MOVLW
MOVWF
mot3,1
b9_d2
led4
exb9
mot3,2
b9_d3
mot2,2
over9
d'90'
acu,F
mot3,2
mot3,3
led2
exb9
led4
exb9
mot3,3
b9_d4
mot2,5
ovr9
d'9'
acu,F
mot3,3
mot3,4
led3
exb9
led4
exb9
mot3,4
exb9
acu,W
slv_gen
d'1'
acu
; Idem k bot1
; Salta si RB3=0
; Mensaje de error
; Apretar b9 en el primer dgito no tiene sentido
; Continua si el primer dgito no es 2
; Accin para apretar b9 en el segundo dgito
; Mensaje de error
; Mensaje de error
; Accin para apretar b9 en el cuarto dgito
; apretar "9" en el dgito 4
; carga slv_gen con el valor introducido
; cargo 1 en acu
Pgina XL
led5
acu
mot2,2
mot2,5
mot3,4
mot3,1
BCF
mot3,6
RETURN
MOVLW
MOVWF
CALL
BTFSC
GOTO
bA_d1 BTFSS
GOTO
CALL
GOTO
bA_d2 BTFSS
GOTO
CALL
GOTO
bA_d3 BTFSS
GOTO
CALL
GOTO
bA_d4 BTFSS
GOTO
MOVF
MOVWF
MOVLW
MOVWF
CALL
CLRF
BCF
BCF
BCF
BSF
exbA
d'250'
del
delay
PORTB,0
botA
mot3,1
bA_d2
i2c_wr
exbA
mot3,2
bA_d3
led4
exbA
mot3,3
bA_d4
led4
exbA
mot3,4
exbA
acu,W
mode
d'1'
acu
led5
acu
mot2,2
mot2,5
mot3,4
mot3,1
; Idem k bot1
; Salta si RB0=0
BCF
mot3,7
RETURN
;___________________________________________________________________________
;----------------------------- Rutina LED 1 -------------------------------led1
ld1
MOVLW
MOVWF
CALL
BTFSC
GOTO
d'250'
del
delay
PORTA,0
led1
BSF
MOVLW
MOVWF
BCF
STATUS,RP0
b'10111110'
TRISA
STATUS,RP0
; banco mem 1
BSF
MOVLW
MOVWF
CALL
PORTA,0
d'250'
del
delay
; Salta si RA0=0
; RA0 outputs
; banco mem 0
; Llamar a un retraso de 2,28ms
; para evitar rebotes
DECFSZ time,F
GOTO
ld1
BCF
PORTA,0
Pgina XLI
Cdigo fuente
BSF
MOVLW
MOVWF
BCF
STATUS,RP0
b'10111111'
TRISA
STATUS,RP0
MOVLW d'250'
MOVWF time
RETURN
; banco mem 1
; RA0 input
; banco mem 0
; 250 veces 2,28ms son 0,57s
ld2
MOVLW
MOVWF
CALL
BTFSC
GOTO
d'250'
del
delay
PORTA,4
led2
BSF
MOVLW
MOVWF
BCF
STATUS,RP0
b'10101111'
TRISA
STATUS,RP0
; banco mem 1
BSF
MOVLW
MOVWF
CALL
PORTA,4
d'250'
del
delay
; Salta si RA4=0
; RA4 output
; banco mem 0
; Llamar a un retraso de 2,28ms
; para evitar rebotes
DECFSZ time,F
GOTO
ld2
BCF
PORTA,4
BSF
MOVLW
MOVWF
BCF
STATUS,RP0
b'10111111'
TRISA
STATUS,RP0
MOVLW d'250'
MOVWF time
RETURN
; banco mem 1
; RA4 input
; banco mem 0
; 250 veces 2,28ms son 0,57s
ld3
MOVLW
MOVWF
CALL
BTFSC
GOTO
d'250'
del
delay
PORTB,7
led3
BSF
MOVLW
MOVWF
BCF
STATUS,RP0
b'01111111'
TRISB
STATUS,RP0
; banco mem 1
BSF
MOVLW
MOVWF
CALL
DECFSZ
GOTO
BCF
BSF
MOVLW
MOVWF
BCF
PORTB,7
d'250'
del
delay
time,F
ld3
PORTB,7
STATUS,RP0
b'11111111'
TRISB
STATUS,RP0
MOVLW d'250'
MOVWF time
RETURN
; Salta si RB7=0
; RB7 output
; banco mem 0
; Llamar a un retraso de 2,28ms
; para evitar rebotes
; banco mem 1
; RB7 input
; banco mem 0
; 250 veces 2,28ms son 0,57s
Pgina
XLII
ld4
ld44
MOVLW
MOVWF
CALL
BTFSC
GOTO
d'250'
del
delay
PORTB,2
led4
BSF
MOVLW
MOVWF
BCF
STATUS,RP0
b'01111011'
TRISB
STATUS,RP0
; banco mem 1
BSF
MOVLW
MOVWF
CALL
PORTB,2
d'250'
del
delay
DECFSZ
GOTO
MOVLW
MOVWF
time,F
ld4
d'250'
time
BCF
MOVLW
MOVWF
CALL
PORTB,2
d'250'
del
delay
DECFSZ
GOTO
MOVLW
MOVWF
time,F
ld44
d'250'
time
BSF
MOVLW
MOVWF
BCF
STATUS,RP0
b'11111111'
TRISB
STATUS,RP0
; Salta si RB2=0
; RB2 output
; banco mem 0
; Llamar a un retraso de 2,28ms
; para evitar rebotes
RETURN
;----------------------------- Rutina LED 5 --------------------------------led5
MOVLW
MOVWF
CALL
BTFSC
GOTO
d'250'
del
delay
PORTB,5
led5
BSF
MOVLW
MOVWF
BCF
STATUS,RP0
b'01011111'
TRISB
STATUS,RP0
; banco mem 1
; Salta si RB2=0
; RB5 output
; banco mem 0
ld53
BSF
PORTB,5
MOVLW d'250'
MOVWF time
; Enciendo LED
; 250 veces 2,28ms son 0,57s
ld5
MOVLW
MOVWF
CALL
DECFSZ
GOTO
ld52
d'250'
del
delay
time,F
ld5
BCF
PORTB,5
MOVLW d'250'
MOVWF time
; Apago LED
; 250 veces 2,28ms son 0,57s
MOVLW d'250'
Pgina
XLIII
Cdigo fuente
MOVWF
CALL
DECFSZ
GOTO
del
delay
time,F
ld52
DECFSZ acu,F
GOTO
ld53
BSF
MOVLW
MOVWF
BCF
STATUS,RP0
b'11111111'
TRISB
STATUS,RP0
MOVLW d'250'
MOVWF time
RETURN
; banco mem 1
; RB5 input
; banco mem 0
; 250 veces 2,28ms son 0,57s
retar NOP
NOP
DECFSZ cont,F
GOTO
retar
NOP
DECFSZ del,F
GOTO
delay2
NOP
RETURN
Pgina
XLIV
slv_gen,W
STATUS,Z
resend
s_send
slv_gen,W
slave
write_s
mot3,5
;
;
;
;
compruevo si slv_gen es 0
si lo es, envo los parmetros a todas las patas
Mando seal Start
Cargo la direccin del esclavo escojido en "slave"
vari
;
;
;
;
s_send
MOVF
MOVWF
CAll
BTFSS
RETURN
CALL
slv1,W
slave
write_s
mot3,5
MOVF
MOVWF
CAll
BTFSS
RETURN
CALL
slv2,W
slave
write_s
mot3,5
MOVF
MOVWF
CAll
BTFSS
RETURN
CALL
slv3,W
slave
write_s
mot3,5
MOVF
MOVWF
CAll
BTFSS
RETURN
CALL
slv4,W
slave
write_s
mot3,5
MOVF
MOVWF
CAll
BTFSS
slv5,W
slave
write_s
mot3,5
RETURN
resend CALL
vari
vari
vari
vari
;
;
;
;
Pgina
XLV
Cdigo fuente
RETURN
CALL
vari
MOVF
MOVWF
CAll
BTFSS
RETURN
CALL
slv6,W
slave
write_s
mot3,5
vari
;
;
;
;
RETURN
;----------------- Secuencia de escritura de los parmetros ---------------vari
MOVF
MOVWF
CAll
BTFSS
RETURN
speed,W
send_d
data_s
mot3,5
;
;
;
;
;
Envo de "speed"
Cargo el dato que deseo mandar en "send_d"
Mando el dato, si NACK repite el envo
compruevo si ha habido ACK
No ha habido ACK por 10 veces, error de envo
MOVF
MOVWF
CAll
BTFSS
RETURN
centro,W
send_d
data_s
mot3,5
;
;
;
;
;
Envo de "centro"
Cargo el dato que deseo mandar en "send_d"
Mando el dato, si NACK repite el envo
compruevo si ha habido ACK
No ha habido ACK por 10 veces, error de envo
MOVF
MOVWF
CAll
BTFSS
RETURN
rango,W
send_d
data_s
mot3,5
;
;
;
;
;
Envo de "rango"
Cargo el dato que deseo mandar en "send_d"
Mando el dato, si NACK repite el envo
compruevo si ha habido ACK
No ha habido ACK por 10 veces, error de envo
MOVF
MOVWF
CAll
BTFSS
RETURN
zanco,W
send_d
data_s
mot3,5
;
;
;
;
;
Envo de "zanco"
Cargo el dato que deseo mandar en "send_d"
Mando el dato, si NACK repite el envo
compruevo si ha habido ACK
No ha habido ACK por 10 veces, error de envo
MOVF
MOVWF
CAll
BTFSS
RETURN
altura,W
send_d
data_s
mot3,5
;
;
;
;
;
Envo de "altura"
Cargo el dato que deseo mandar en "send_d"
Mando el dato, si NACK repite el envo
compruevo si ha habido ACK
No ha habido ACK por 10 veces, error de envo
MOVF
MOVWF
CAll
BTFSS
RETURN
mode,W
send_d
data_s
mot3,5
;
;
;
;
;
Envo de "mode"
Cargo el dato que deseo mandar en "send_d"
Mando el dato, si NACK repite el envo
compruevo si ha habido ACK
No ha habido ACK por 10 veces, error de envo
MOVF
MOVWF
CAll
BTFSS
RETURN
action,W
send_d
data_s
mot3,5
;
;
;
;
;
Envo de "action"
Cargo el dato que deseo mandar en "send_d"
Mando el dato, si NACK repite el envo
compruevo si ha habido ACK
No ha habido ACK por 10 veces, error de envo
MOVF
MOVWF
CAll
BTFSS
RETURN
m1,W
send_d
data_s
mot3,5
;
;
;
;
;
Envo de "m1"
Cargo el dato que deseo mandar en "send_d"
Mando el dato, si NACK repite el envo
compruevo si ha habido ACK
No ha habido ACK por 10 veces, error de envo
MOVF
MOVWF
CAll
BTFSS
RETURN
m2,W
send_d
data_s
mot3,5
;
;
;
;
;
Envo de "m2"
Cargo el dato que deseo mandar en "send_d"
Mando el dato, si NACK repite el envo
compruevo si ha habido ACK
No ha habido ACK por 10 veces, error de envo
Pgina
XLVI
m3,W
send_d
data_s
mot3,5
;
;
;
;
;
Envo de "m3"
Cargo el dato que deseo mandar en "send_d"
Mando el dato, si NACK repite el envo
compruevo si ha habido ACK
No ha habido ACK por 10 veces, error de envo
CALL
p_send
RETURN
;------------------- Secuencia de lectura de parmetros -------------------i2c_rd
CALL
s_send
MOVF
MOVWF
CAll
BTFSS
RETURN
slv_gen,W
slave
read_s
mot3,5
CALL
MOVF
MOVWF
CALL
data_r
read_d,W
r_mot2
ack_s
;
;
;
;
CALL
MOVF
MOVWF
CALL
data_r
read_d,W
r_mode
ack_s
;
;
;
;
CALL
MOVF
MOVWF
CALL
data_r
read_d,W
r_zanco
ack_s
CALL
data_r
MOVF
read_d,W
MOVWF r_altu
CALL
p_send
RETURN
Pgina
XLVII
Cdigo fuente
;------------------ Mandar secuencia de Sart --------------------s_send
BSF
BSF
BSF
BCF
BTFSS
GOTO
NOP
NOP
NOP
NOP
BSF
BCF
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BSF
BCF
BCF
STATUS,RP0
TRISB,1
TRISB,4
STATUS,RP0
PORTB,4
s_send
;
;
;
;
;
;
;
;
Enviar Start
banco mem 1 (TRISB est en banco 1)
SDA en alto
SCL en alto
banco mem 0
SCL est bloqueado por esclavo (=0)?
S, lo intento hasta que el esclavo lo libere
No, retraso total de 1,6us
STATUS,RP0
TRISB,1
; banco mem 1
; SDA flanco de bajada mientras SCL en alto
; retraso de 1,6 us
STATUS,RP0
TRISB,4
STATUS,RP0
;
;
;
;
banco mem 1
SCL en bajo para encadenar con el siguiente pulso
banco mem 0
el cdigo cumple el retraso total de 1,6 us
RETURN
;------------------ Mandar secuencia de Paro --------------------p_send
BSF
BCF
BSF
BCF
BTFSS
GOTO
NOP
NOP
NOP
NOP
BSF
BSF
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BCF
STATUS,RP0
TRISB,1
TRISB,4
STATUS,RP0
PORTB,4
p_send
;
;
;
;
;
;
;
;
Enviar Stop
banco mem 1 (TRISB est en banco 1)
SDA en bajo
SCL en alto
banco mem 0
SCL est bloqueado por esclavo (=0)?
S, lo intento hasta que el esclavo lo libere
No, retraso total de 1,6us
STATUS,RP0
TRISB,1
; banco mem 1
; SDA flanco de subida mientras SCL en alto
; retraso de 1,6 us
STATUS,RP0
; banco mem 0
RETURN
Pgina
XLVIII
;
;
;
;
dato,7
bit_1
STATUS,RP0
TRISB,1
hold
STATUS,RP0
TRISB,1
TRISB,4
;
;
;
;
el bit es 0?
el bit es 1
banco mem 1
el bit es 0, SDA = 0
;
;
;
;
banco mem 1
el bit es 1, SDA = 1
me aseguro que SCL en bajo al empezar
retraso total de 1,6 us
STATUS,RP0
TRISB,4
STATUS,RP0
PORTB,4
snd
;
;
;
;
;
;
banco mem 1
SCL en alto manda el bit
banco mem 0
SCL est bloqueado por esclavo (=0)?
S, lo intento hasta que el esclavo lo libere
No, retraso total de 1,6 us
STATUS,RP0
TRISB,4
STATUS,RP0
dato,F
CAll
ack_r
BTFSC mot3,5
;
;
;
;
;
;
;
;
;
;
banco mem 1
SCL en bajo para encadenar con el siguiente pulso
banco mem 0
roto dato a la izquierda
retraso software mayor de 1'6 us
inicialmente 8
hasta el bit 0, repito el proceso
retraso software mayor de 1'6 us
llamo a la comprovacin de ACK
compruevo ACK
RETURN
; Si ACK, salgo
MOVLW d'8'
MOVWF cont2
new_bit
BTFSC
GOTO
BSF
BCF
GOTO
bit_1 BSF
BSF
hold
BCF
NOP
NOP
NOP
NOP
NOP
NOP
snd
BSF
BSF
BCF
BTFSS
GOTO
NOP
NOP
NOP
NOP
BSF
BCF
BCF
RLF
DECFSZ cont2,F
GOTO
new_bit
MOVF
send_d,W
MOVWF
INCF
MOVF
SUBLW
BTFSS
GOTO
CLRF
GOTO
dato
fail,F
fail,W
d'10'
STATUS,Z
data_s
fail
fallo
;
;
;
;
;
10 fail
si fail=10, 10-fail = 0
si fail < 10, vuelvo a intentar
si fail = 10, borro fail y
error
Pgina
XLIX
Cdigo fuente
;-------------------------- recibir dato ------------------------; Salidas: dato recibido en "read_d"
;----------------------------------------------------------------data_r MOVLW d'8'
MOVWF cont2
n_bit NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BSF
BSF
BCF
BTFSS
GOTO
BTFSS
GOTO
BSF
GOTO
b_zero BCF
decr
DECFSZ
GOTO
GOTO
corr_0 RLF
STATUS,RP0
TRISB,4
STATUS,RP0
PORTB,4
n_bit
PORTB,1
b_zero
read_d,0
decr
read_d,0
cont2,F
corr_0
fin_r
read_d,F
NOP
BSF
BCF
NOP
NOP
NOP
NOP
NOP
GOTO
STATUS,RP0
TRISB,4
banco mem 1
SCL en alto para recibir el bit
banco mem 0
SCL est bloqueado por esclavo (=0)?
S, lo intento hasta que el esclavo lo libere
No, testeo SDA
SDA=0
SDA=1, enciendo el bit 0
; borro el bit 0
; decremento el contador
;
;
;
;
;
;
;
;
y lo corro a la izquierda
cuando haya corrido 8 veces, el primero
recibido estar en el bit 7
no hace falta ms retraso para que se cumpla
el Ton de SCL
banco mem 1
SCL en bajo para encadenar con el siguiente pulso
retraso preventivo de 1us
;
;
;
;
n_bit
fin_r NOP
BSF
BCF
CALL
;
;
;
;
;
;
;
;
STATUS,RP0
TRISB,4
ack_s
RETURN
;------------------------ Enviar Direccin para escritura ------------------; Entradas: Direccin del esclavo en "slave"
;---------------------------------------------------------------------------write_s
BCF
MOVF
MOVWF
CALL
slave,0
slave,W
send_d
data_s
RETURN
Pgina L
slave,0
slave,W
send_d
data_s
RETURN
;------------------------ leer ACK / mandar NACK --------------------------ack_r
BSF
BSF
NOP
NOP
NOP
NOP
STATUS,RP0
TRISB,1
puls_9 BSF
BSF
BCF
BTFSS
GOTO
BTFSS
GOTO
BCF
GOTO
hold2 BSF
NOP
STATUS,RP0
TRISB,4
STATUS,RP0
PORTB,4
puls_9
PORTB,1
hold2
mot3,5
hold3
mot3,5
hold3 BSF
BCF
BCF
STATUS,RP0
TRISB,4
STATUS,RP0
;
;
;
;
;
;
;
;
;
;
;
;
banco mem 1
SCL en alto
banco mem 0
SCL est bloqueado por esclavo (=0)?
S, lo intento hasta que el esclavo lo libere
No, compruevo SDA
SDA=0, ACK
SDA=1, NACK
banco mem 1
SCL en bajo para encadenar con el siguiente pulso
banco mem 0
retraso software mayor de 1'6 us
RETURN
;------------------------ Mandar ACK --------------------------ack_s
BSF
BCF
NOP
NOP
NOP
NOP
NOP
NOP
NOP
puls9 BSF
BSF
BCF
BTFSS
GOTO
NOP
NOP
NOP
NOP
BSF
BCF
BCF
;
;
;
;
Enviar ACK
banco mem 1
SDA=0 significa ACK
Retraso total de 1,6us
STATUS,RP0
TRISB,4
STATUS,RP0
PORTB,4
puls9
;
;
;
;
;
;
banco mem 1
SCL en alto
banco mem 0
SCL est bloqueado por esclavo (=0)?
S, lo intento hasta que el esclavo lo libere
No, retraso total de 1,6 us
STATUS,RP0
TRISB,4
STATUS,RP0
; banco mem 1
; SCL en bajo para encadenar con el siguiente pulso
; banco mem 0
STATUS,RP0
TRISB,1
RETURN
Pgina LI
Cdigo fuente
;------------------------ Mandar NACK --------------------------nack_s
CALL
ack_r
; Enviar NACK
; recibir un ACK pone SDA en nivel alto,
; por lo que es lo mismo que mandar NACK
RETURN
;------------------------ En caso de Fallo --------------------------fallo CALL
led4
RETURN
; mensaje de error
MOVWF
SWAPF
MOVWF
MOVF
MOVWF
w_temp
STATUS,W
stat_t
PCLATH,W
pcl_t
BCF
BCF
INTCON,GIE
STATUS,RP0
; apago interrupciones
; banco mem 0
INTCON,INTF
i_rb0
PIR1,SSPIF
i2c_ev
PIR1,TMR1IF
i_tmr1
escape
; pooling de RB0/INT
; pooling de evento en el mdulo SSP
; pooling de overflow Timer1
INTCON,INTF
INTCON,INTE
escape
; limpiamos el flag
; desenmascaramos la INT
PIR1,TMR1IF
STATUS,RP0
PIE1,TMR1IE
STATUS,RP0
;
;
;
;
MOVLW
MOVWF
MOVLW
MOVWF
h'3C'
TMR1H
h'B0'
TMR1L
; cargo 3C en TMR1H y
BSF
GOTO
mot,4
escape
;
;
;
;
;
;
;
limpiamos el flag
banco mem 1 (PIE1 est en banco 1)
desenmascaramos la INT
banco mem 0
Pgina LII
PIR1,SSPIF
STATUS,RP0
PIE1,SSPIE
STATUS,RP0
;CALL i2c_com
;
;
;
;
limpiamos el flag
banco mem 1 (PIE1 est en banco 1)
desenmascaramos la INT
banco mem 0
pcl_t,W
PCLATH
stat_t,W
STATUS
w_temp,F
w_temp,W
RETFIE
;
;
;
;
le da la vuelta al stat_t
y lo reestablece en status
reestablece W desde W_temp
dandole la vuelta 2 veces
; salgo de rutina
;-----------------------------------------END
;------------------------------------------
Pgina LIII