You are on page 1of 68

Diseo y Construccin de un Robot Autnomo.

Memoria
Control Central y Sensores.

NDICE

! CAPTULOS

1 Introduccin pag. 2
2 Circuito de alimentacin pag. 6
3 Sensores pag. 9
4 Microcontrolador 68HC11 pag. 27
5 FPGA pag. 34
6 Comunicaciones pag. 46
7 Software de Aplicacin pag. 52
8 Mecnica pag. 64

! CONCLUSIONES Y TRABAJOS FUTUROS

1
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

1 INTRODUCCIN

La realizacin del proyecto Diseo y construccin de un Robot


Autnomo se ha llevado a cabo con el resultado, entre otras cosas, de
desarrollar y unir los dos mdulos fundamentales que lo componen. El primero
para un interfaz de sensores y control central, Mdulo I: Control Central y
Sensores, y un segundo mdulo para el interfaz de motores y control del
movimiento denominado Mdulo II: Control de Motores y Movimiento.
Estos dos mdulos han sido desarrollados como dos proyectos de fin de carrera,
el Mdulo I es del que trata este documento, y el Mdulo II que ha sido
desarrollado por Bartolom Navarro Ruiz los objetivos de este proyecto
conjunto son los siguientes.

Originalmente se plante el proyecto con el fin de construir un robot


autnomo diseado para participar en competiciones de Robots Luchadores de
Sumo, y con este propsito se eligieron unas especificaciones de diseo que se
ajustaran a los requerimientos de este tipo de eventos. As, los distintos
elementos que completan el Sistema han sido seleccionados para ese fin, razn
sta de la decisin de disear al robot con las caractersticas que lo definen y no
con otras.

Se ha completado una plataforma a partir de la que se puede continuar


desarrollando nuevos sistemas. Por razones de dimensiones y peso, no ha podido
realizar competicin alguna. La versatilidad que se ha logrado es debida a que se
trata de un diseo robusto en la mecnica, potente en el hardware y muy
flexible en lo que se refiere a su programacin.

A continuacin se describen a grandes rasgos las partes principales del


robot para tener as una primera visin general del funcionamiento del conjunto.

La estructura mecnica sobre la que se apoya todo lo dems fue pensada


robusta para poder soportar las condiciones de la prueba. En segundo lugar el

2
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

diseo se ha realizado buscando una adherencia mxima a la superficie del suelo


para evitar ser empujado y para poder aprovechar la fuerza motriz al enfrentarse
al oponente sin perder traccin. Como ltimo objetivo en el aspecto mecnico
hay que comentar el carcter simtrico que se ide en un principio,el cual
permite al robot andar sobre las bases superior e inferior y que ha dado como
resultado un sistema ms gil y potente a la hora de realizar cualquier tarea ya
que, tericamente, se comporta de forma similar en ambos sentidos del
movimiento. Una vista general del prototipo se observa en la siguiente figura.

Para generar esa fuerza motriz se cuenta con motores tipo Paso a Paso
que ofrecen unas buenas prestaciones y bajo consumo. Se caracterizan por ser
unos motores de alto rendimiento en comparacin con los motores de DC,
habitualmente utilizado por otros desarrolladores. En total es dos el nmero de
motores empleados, uno a cada lado, para de esta forma variar la direccin del
movimiento con la relacin de velocidades que exista entre ambos.

3
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

El control de estos motores es posible gracias a la tarjeta de motores que


hace de interfaz entre el microcontrolador y los motores. Esta tarjeta se compone
de dos etapas. En la primera se incluye un driver para motor de paso que recibe
las seales del microcontrolador y genera una secuencia de pulsos. sta es la
secuencia que entra en la segunda etapa donde se ve amplificada para dar la
corriente que los motores consumen.

Las seales que el microcontrolador enva al driver, que son las que
hacen que se produzca uno u otro movimiento, son el resultado de aplicar unos
determinados algoritmos cuya entrada es la informacin que enva el Mdulo I
despus de haber hecho un procesamiento de los datos del entorno que posee
gracias a los sensores.

Se han implantado tres tipos de sensores para un mejor y ms completo


anlisis del medio que rodea al robot. Para empezar se citan los de largo alcance,
que miden la distancia en un rango de entre 10cm y 80cm. A continuacin se
cuenta con sensores de proximidad que detectan objetos cercanos, por debajo de
10cm y que son imprescindibles para cubrir esa zona ciega que dejan los
primeros. Por otro lado es necesario un tercer tipo que sea capaz de detectar el
borde externo de la zona de lucha.

En la eleccin del microcontrolador 68HC11A1 de Motorola han tenido


principal importancia dos aspectos. En primer lugar, es un modelo muy utilizado
en estas aplicaciones, existen numerosas herramientas de desarrollo y amplia
experiencia al respecto. Por otra parte, queda solucionado el problema de
implantar un hardware para el microcontrolador al adquirir la tarjeta CT6811 de
Microbtica, que cuenta con todo lo necesario para completar el desarrollo sin
atender a fallos debidos al montaje de la supuesta placa.

Se ha obviado anteriormente la arquitectura hardware empleada en


ambos sistemas microcontroladores y sus respectivos interfaces, pero no est de
ms hacer aqu una referencia a ello. Dada la complejidad de los algoritmos que
se requieren para el correcto funcionamiento del conjunto ha sido labor obligada

4
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

olvidarse de la programacin en ensamblador y desarrollarlo en lenguaje C, que


conlleva necesariamente una ampliacin de memoria del sistema. Esto implica
que dos de los puertos del microcontrolador hayan de ser usados para cablear el
bus de direcciones y el bus de datos a la memoria externa. As, para ampliar el
nmero de puertos, se ha tenido que realizar un mapeo en memoria de puertos
por medio de un decodificador y de una serie de puertos de entrada salida.
Todo ello ha sido programado y cargado en una FPGA.

Para poder establecer una comunicacin y que sea posible el intercambio


de informacin entre ambos mdulos, se ha utilizado el puerto de
comunicaciones serie sncronas, que permite una tasa de transmisin de hasta 1
Mbit/s. Esta conexin se realiza a travs de un programa Maestro Esclavo,
en donde el Mdulo I: Control Central y Sensores se comporta como
Maestro, procesa la informacin sensorial y decide la accin a realizar. En el
otro extremo de este enlace se encuentra el Mdulo II: Control de Motores y
Movimiento que hace las veces de Esclavo, esto es, su funcin ser la de
obedecer las rdenes que el Maestro le enva y seleccionar un determinado
movimiento ya programado y que est en consonancia con los datos que el
Maestro ha procesado. A la hora de asegurarse que los errores en la
transmisin (o ruido) no afecten al entendimiento de ambos bloques se ha
implementado un control de flujo que detecta cundo se ha producido un error y
hace que el Maestro repita el envo del ltimo paquete hasta que el Esclavo
confirme un envo correcto. .

Todo esto se conecta a una batera de 24V que, por un lado, alimenta
directamente los motores a esa tensin y, por otro, alimenta la electrnica
obteniendo 5V a travs de un convertidor continua continua conmutado que
requiere una tensin continua a la entrada de entre 7 y 40V. Esta configuracin
de la fuente de alimentacin hace que sea posible cambiar con facilidad entre
distintas tensiones de alimentacin o entre motores que trabajen a diferentes
tensiones.

5
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

2 CIRCUITO DE ALIMENTACIN

Este mdulo tiene una nica lnea de alimentacin de 5V a la que estn


conectados todos los circuitos de lgica y los sensores.

La alimentacin de todo el sistema se realiza a base de una batera formada por


dos pilas de 12V y 1.2Ah cada una, conectadas en serie para as conseguir una
tensin de 24V. La idea era disear un robot autnomo, de esta forma no se ha
tenido ms remedio que hacer uso de bateras y no de una posible alimentacin de la
red.

La tensin de alimentacin de la lgica se obtiene por medio de un regulador


reductor conmutado, el LM2825-5.0. Se trata de un circuito integrado con
encapsulado MDIP de 24 pines que lleva incorporados todos los elementos de un
regulador de estas caractersticas. Los nicos componentes externos que hay que
aadir son dos condensadores y un diodo. El primer condensador es para filtrar la
tensin de entrada al regulador, el otro es para configurar un arranque suave (soft-
start). Esta caracterstica hace que se encienda el regulador de una forma suave
presentando a la salida una rampa inicial hasta llegar a la tensin de 5V, en vez de
producirse un escaln. Esto ayuda a que no se produzca un exceso de corriente en el
encendido, debido a que de esta manera la tensin aplicada a los condensadores de
filtrado de la alimentacin de la lgica se vaya incrementando suavemente. Y por
ltimo, el diodo sirve para el circuito de arranque del regulador.

Figura 2.1 Esquema de conexin del regulador

6
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

Cabe destacar ciertas caractersticas de este regulador; La tensin de


entrada puede variar entre 7 y 40V. Suministra una corriente mxima de 1A a la
salida con un rendimiento aproximado del 85%. A continuacin se exponen los
resultados de un ensayo realizado con el convertidor para comprobar algunas de sus
caractersticas. El ensayo se ha realizado a media carga (500 mA) a la salida del
convertidor, variando la tensin de entrada y midiendo el rendimiento para
comprobar los valores que asegura el fabricante;

VARIABLES MEDIDAS:

VENTRADA: tensin de entrada [V]


IENTRADA: intensidad de entrada [mA]
VSALIDA: tensin de salida [V]
ISALIDA: intensidad de salida [mA]
: rendimiento

Vin Iin Vout Iout


5 410 mA 4 384mA 74%
5,5 460 mA 4,48 446mA 78%
6 520 mA 5 502mA 80%
6,5 490 mA 5 504mA 80%
7 450 mA 5 504mA 80,7%
7,5 420 mA 5 504mA 80,7%
8 390 mA 5 504mA 81,5%
8,5 370 mA 5 504mA 80,9%
9 340 mA 5 504mA 85%
9,5 330 mA 5 504mA 81%
10 310 mA 5 504mA 82%
10,5 300 mA 5 504mA 80,7%
11 280 mA 5 504mA 82%
11,5 270 mA 5 504mA 82%
12 260 mA 5 504mA 81,5%

7
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

Este regulador brinda una gran flexibilidad a la hora de escoger las bateras
debido a su amplio rango de la tensin de entrada y su elevado rendimiento. Adems
no necesita ningn tipo de disipadores, reduciendo el tamao de la fuente de
alimentacin, y permitiendo una total libertad en la ubicacin de la misma.

8
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

3 SENSORES.

Antes de comenzar a explicar en detalle cada uno de los sensores hay que
hablar sobre la especificacin que hemos asumido. En las competiciones de
sumo el tamao del tatami es de 175 cm de dimetro, y hay que mantener una
zona vaca de 100 cm alrededor de dicho tatami. El suelo del interior del tatami
es de color negro y en el extremo hay una franja de color blanco que hay que
cruzar para que se considere que se ha salido de dicho tatami.

Estas especificaciones simplifican enormemente la labor de reconocer el


otro robot, ya que tenemos asegurada un rea vaca de 375 cm de dimetro, por
tanto, el nico objeto que podemos detectar es el otro robot. De no ser as,
tendramos que recurrir a complejas tcnicas de visin artificial para reconocer
el robot contrario entre otros muchos obstculos. Hay que aadir que en el
diseo mecnico se ha previsto la posibilidad de que el robot contrario intente
volcar al robot para que pierda la traccin y poder echarlo fuera del tatami. Para
evitar esto, se ha hecho un diseo en el cual la traccin se lleva a cabo por medio
de orugas que sobresalen por arriba y por debajo de tal manera que el robot
pueda funcionar en ambas posiciones.

Teniendo esto en cuenta, los principales elementos dentro del sistema


sensorial del robot son los siguientes:

Sensores para detectar el robot contrario:


.- Sensores de medida de distancia por Infrarrojos.
.- Sensores de proximidad por Infrarrojos.

Sensor para detectar el final del tatami:


.- Sensor sensible al color.

Sensor para detectar la base sobre la que apoya el robot:


.- Interruptor de mercurio.

9
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

3.1 Principio de funcionamiento de los sensores de Infrarrojos

Se han escogido sensores de infrarrojos debido a su sencillez de uso y su amplia


disponibilidad, como efecto de sus numerosas aplicaciones. Adems, el alcance
necesario no es muy grande ya que el dimetro del tatami es de 175cm, y si se desease
usar el robot para otras tareas, el rango de deteccin que brindan los sensores de largo
alcance es suficiente para la mayora de las aplicaciones.

Bsicamente, el principio de operacin de los sensores de infrarrojos es el


siguiente:

Figura 3.1 Principio de funcionamiento de los sensores de IR

Como se puede apreciar en la figura 3.1, estos sensores funcionan con un emisor
y un receptor de luz infrarroja en paralelo y sin contacto visual directo entre ellos. De tal
modo que cuando se aproxima un objeto a la pareja emisor-receptor la luz emitida se ve
reflejada y es entonces cuando el receptor puede verla.

10
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

Obviamente, este es el principio terico y no es directamente aplicable a un


dispositivo que funcione en la practica. Hay varias perturbaciones que se deben evitar:

1.- Interferencia por luz ambiental:


Este es el primer problema que se presenta a la hora de desarrollar un sensor de
infrarrojos. Debido a este fenmeno, el receptor no solamente podr recibir luz del
emisor, sino tambin luz infrarroja procedente de otras fuentes. Quiz la ms importante
de ellas sea la luz solar, seguida por la luz artificial emitida por bombillas
incandescentes y fluorescentes, e incluso por el calor producido por personas y otros
elementos.

Para solucionar esto hay que modular la seal de luz emitida a una frecuencia
distinta de la de otras fuentes de luz, la luz emitida por el sol es prcticamente continua
y por tanto casi cualquier modulacin har el sistema inmune a esta perturbacin. Pero
las fuentes de luz artificiales suelen emitir a 50Hz y mltiplos cercanos a esta
frecuencia. La frecuencia optima de modulacin esta en torno a los 40kHz. La seal
recibida en el receptor tendr que ser demodulada para su correcta interpretacin.

Otra posible solucin es aislar de las interferencias a la pareja, alojndolas en


compartimentos cerrados a las emisiones de luz que provengan de otras fuentes. Sin
embargo esto no es siempre posible, y en esos casos habr que recurrir a la solucin
mencionada en el prrafo anterior.

2.- Interferencias causadas intencionadamente:

Dentro de este tipo de perturbaciones se encuentran las que perturban la medida


del sensor por causas no naturales y de manera intencionada.

Algunos ejemplos pueden ser la luz de los mandos de TV que en su mayora


funcionan por IR modulados, o la emisin de los sensores de otros robots que se
encuentren en las cercanas. Hay que sealar que este tipo de perturbacin es
especialmente importante, ya que debido al principio de funcionamiento de estos
sensores la luz recibida directamente por otro emisor se recibe con mucha mas

11
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

intensidad que la recibida a travs de la reflexin del objeto detectado. Y por tanto si el
alcance de deteccin del sensor es de 10cm la luz proveniente directamente de un
emisor externo puede causar efectos a partir de los 50cm.

La solucin es mandar algn tipo de cdigo generado internamente que el


receptor pueda reconocer o que luego pueda ser interpretado por el microprocesador
como correcto. Incluso, en el caso de que se mande siempre el mismo cdigo, podra
ocurrir que un robot externo que quisiera perturbar la medida aprendiese el cdigo y
seguidamente lo emitiese, consiguiendo su objetivo. En este ultimo caso es
recomendable la generacin de un cdigo distinto para cada emisin siendo parte de su
contenido aleatorio. Esto ultimo reduce drsticamente las posibilidades de perturbacin
de la medida. Y en ultimo caso, ser posible conocer cuando se esta intentando
perturbar el sensor y donde esta situada la fuente de la perturbacin.

3.- Influencia del color del objeto a detectar sobre la medida:

Este es un factor que influye en gran medida en sistemas sin modulacin que se
basan en la intensidad de la seal recibida para detectar la distancia al objeto detectado.
As, en el ejemplo de la figura 3.1 si se usase el fototransistor en la zona lineal y el
emisor sin modulacin, habra grandes desviaciones en la medida obtenida en funcin
del color del objeto detectado.

Esto no siempre es un efecto perjudicial, y ms adelante se vera como


aprovechamos este efecto para detectar el color del suelo y detectar el final del tatami.

Una solucin muy eficaz contra esto son los sistemas que usan triangulacin
para obtener la distancia del objeto detectado. Tambin haremos una breve descripcin
ms delante de cmo se puede usar esta tcnica.

12
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

3.2 Sensores de medida de distancia por Infrarrojos.

Estos constituyen el principal elemento de deteccin del robot, cubriendo el


rango de los 10 a 80 cm del robot. Se han usado 4 sensores GP2D12 de Sharp. Estos
sensores han demostrado una alta inmunidad a interferencias externas, y unas medidas
excepcionales en situaciones criticas.

El modulo de medida de distancia GP2D12 funciona por un principio similar al


descrito en el apartado 3.1. Pero en vez de detectar simplemente si llega la luz del
emisor o la intensidad de la misma para determinar la distancia del objeto, lo que hace
es ver de donde llega la luz.


GP2D12

R E

Figura 3.2 Funcionamiento del sensor GP2D12

Como se puede ver en la figura 3.2 el emisor siempre emite la mayor parte de la
luz con un ngulo constante, dependiendo de la distancia al objeto el ngulo variara.
Este ngulo es lo que realmente mide el sensor y es lo que hace que este sensor sea
totalmente inmune al color, entre otras caractersticas del medio reflectante, puesto que,
con que llegue un poco de intensidad luminosa ya es suficiente para determinar el
ngulo del haz recibido.

Estos sensores tienen una resolucin terica de 0.27 cm., para esta aplicacin no
es necesaria dicha resolucin, y se ha comprobado que mide perfectamente con
resoluciones de 1 cm.

13
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

A continuacin se exponen algunas grficas en las que se puede apreciar el


excelente comportamiento de este sensor;

Prueba de inclinacin de la superficie a detectar:


Se coloca la superficie a detectar a un ngulo que se va desviando de la
perpendicular con respecto al sensor. La superficie estar a 40cm del sensor.

Angulo Medida
0 40
20 39
40 39
60 40

Valores del sensor:


Se presentan los valores devueltos por el sensor una vez han sido digitalizados
por el conversor A/D del microprocesador, en funcin de la distancia a la que se
encontraba el objeto a detectar;

Distancia Valor digital


10 143
20 77
30 52
40 39
50 31

Estos valores adems coinciden con los aportados por el fabricante, en la hoja de
caractersticas se puede ver que esto es as.

14
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

Test de sensibilidad al material a detectar:


Se colocan distintos materiales a una distancia fija del sensor, en este caso 30cm.
y medimos con el sensor, se comparan el valor devuelto por el sensor y la distancia real
a la que se encuentra el objeto.

Material Valor digital


Cartn 52
marrn
Plstico 51
Azul
Cuero 50
Negro
Papel 51
Blanco

Vistos estos ensayos, se puede confirmar la idoneidad de este sensor en


aplicaciones de este tipo. A continuacin se ver como se han utilizado para este
proyecto:

Desde el punto de vista electrnico, este sensor consta nicamente de tres


conexiones, dos para alimentacin y una para devolver la seal de la medida. Se puede
alimentar con diferentes tensiones, en este proyecto la alimentacin ha sido de 5V. En
cuanto a la seal devuelta se puede decir que es una seal analgica que guarda una
relacin no lineal con la distancia a medir. Hay otros modelos de este sensor que dan el
valor de la medida en formato digital en serie (GP2D02), pero el valor digital que
devuelven tambin es no lineal. La relacin entre la medida y la distancia al objeto se
puede ver en la grfica que se presenta en la pagina siguiente, la cual pertenece a la hoja
de caractersticas del sensor:

15
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

Figura 3.3 Relacin tensin de salida del sensor y distancia al objeto

Se puede apreciar perfectamente que la relacin no es lineal. La forma de la


grfica se debe precisamente a que lo que el sensor mide es el ngulo con que llega el
haz de luz reflejado. Sin embargo si se cambia el eje de abscisas y en vez de representar
la distancia se representa el inverso de la distancia se obtiene la siguiente grfica;

16
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

Figura 3.4 Relacin tensin de salida del sensor y la inversa de la distancia


al objeto

Se ha aadido una lnea en color verde uniendo las observaciones de 10cm y de


70cm para poder ver la linealidad. La curva sigue sin ser exactamente lineal, pero
podemos hacer una aproximacin y suponer que lo es. Con esto se puede hallar una
funcin fcilmente calculable para determinar la distancia al objeto a partir de la tensin
obtenida del sensor, la funcin es la siguiente:

17
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

1
= 0.04 val 0.00437
d
Donde val es el valor de tensin que da el sensor
y d es la distancia al objeto en cm.

Sin embargo, si se observa la figura 3.3 se puede ver que si el objeto esta situado
a una distancia menor de 10cm del sensor, ste da las mismas lecturas que si el objeto
estuviese situado a mas distancia. Es por esto por lo que ser necesario el uso de unos
sensores de proximidad que detecten si hay un objeto a 10cm del sensor. Otra manera de
evitar esto es colocando los sensores de tal manera que nunca pueda haber nada ms
cerca de 10cm del sensor. Sin embargo esto no ha sido posible y ha habido que usar los
sensores de proximidad complementarios.

La lectura de los sensores se ha tomado a travs de los cuatro conversores A/D


de 8 bits que estn integrados en el microcontrolador, a partir del valor obtenido del
conversor A/D se calcula la distancia mediante la funcin descrita anteriormente.

18
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

3.3 Sensores de proximidad por Infrarrojos.

Ha sido necesario usar seis de estos sensores de proximidad. 4 para cubrir la


zona ciega de los GP2D12 que esta por debajo de los 10 cm y otros dos para vigilar los
costados del robot. Para el diseo de estos sensores se han empleado gran parte de los
principios descritos en el apartado 3.1.

3.3.1 Principio de funcionamiento de los sensores de proximidad.

Los sensores utilizan modulacin de la luz emitida a una frecuencia cercana a los
38 kHz. Con esto se evitan totalmente las interferencias producidas por la luz solar y
artificial. Se ha implementado a nivel de software un sistema mediante el cual emitimos
un cdigo con el emisor, y se comprueba que se reciba el mismo cdigo. Hay tres tipos
de cdigos(el estado 1 es aquel en el que el emisor emite luz y el 0 es el estado en el que
no emite luz);
El primero es el menos seguro de todos pero el ms rpido, es un cdigo
de 2 bits, el primero a 1 y el segundo a 0. Este cdigo es muy vulnerable a
interferencias intencionadas causadas por otros emisores de luz infrarroja
modulada.
El segundo es ms seguro y mantiene el tiempo de calculo requerido a
un nivel bajo debido a que el cdigo emitido es fijo. El tamao del cdigo es de
8 bits y su valor es "10101010". Este cdigo es muy inmune a las interferencias
causadas intencionadamente que no se adapten al cdigo emitido. De esta
manera un robot externo podra aprender el cdigo, emitirlo y no se podra
diferenciar si realmente hay un objeto delante del sensor o si esta siendo
perturbado.
El tercer cdigo es el ms seguro de todos aunque el tiempo de calculo
requerido para generar el cdigo es mas grande. Se trata de un cdigo de 8 bits
en el cual 4 bits tienen siempre el valor '1' y los otros 4 bits son aleatorios. De
esta manera el mensaje emitido siempre es distinto y no se puede establecer una
relacin entre los distintos mensajes. Es prcticamente inmune a todo tipo de
interferencias.

19
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

3.3.2 Diseo hardware de los sensores de proximidad.

En la emisin, se usa simplemente un LED de infrarrojos con su correspondiente


resistencia en serie para limitar la corriente. La tensin aplicada al LED proviene
directamente de la FPGA. Esta tensin tiene que ser una seal digital modulada. El
circuito que genera dicha seal se ver ms adelante, en el apartado 4 (FPGA). Para
explicar el funcionamiento del sensor es necesario aclarar que en dicha seal se puede
variar la frecuencia de la portadora con el microcontrolador, y tambin se puede
cambiar el estado de la seal a '0', estado en el cual la tensin aplicada al emisor es una
continua de valor 0V, o a '1' donde la tensin aplicada ser una onda cuadrada de
frecuencia la de la portadora.

De este modo, el LED de infrarrojos o bien no emitir luz alguna, o bien emitir
luz intermitente a la frecuencia de la portadora especificada por el microcontrolador.

En la recepcin se ha usado el circuito integrado IS1U60, el cual se trata de un


receptor de control remoto por Infrarrojos para equipos de Televisin. Este circuito nos
aporta las siguientes ventajas:

Incluye un filtro pasa-banda con frecuencia de mxima ganancia de


38 kHz. Podremos ajustar la sensibilidad del sensor variando la
frecuencia de la portadora, ya que el circuito receptor ser menos sensible
segn la frecuencia de la luz emitida se aleje de los 38 kHz.

El propio circuito integrado realiza la demodulacin de la seal


luminosa recibida, dando a la salida un valor constante '0' o '1' segn
reciba o no reciba luz respectivamente.

El receptor tiene una ganancia muy alta y es posible obtener un rango de


deteccin medio (15 cm aproximadamente) con menos de 7 mW (3.4
mA) de potencia aplicada al LED.

20
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

El circuito solo requiere de dos componentes externos, una resistencia


de 47 y un condensador de 47F, que forman un filtro para estabilizar
la tensin de alimentacin.

Sin embargo no se puede estar emitiendo continuamente, pues el circuito


receptor esta hecho para recibir cdigos, que son trenes de pulsos que tengan una
duracin mnima de 600 s, por lo que se ha comprobado en este proyecto si los pulsos
tienen una duracin mayor de 10ms el receptor da lecturas incorrectas a la salida. Por
tanto la forma de onda de la tensin que habra que aplicar al LED sera parecida a la
siguiente;

Figura 3.5 Formas de onda de la seal de luz recibida y de la salida del IS1U60

La seal de salida del receptor es leda por medio de un pin de uno de los puertos
creados con la FPGA.

Todas estas caractersticas hacen que a nivel de hardware se pueda construir un


sensor barato y con unas dimensiones muy reducidas. A continuacin se muestran
algunas fotografas de uno de los prototipos:

21
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

Es necesario colocar algn elemento que haga que la luz emitida por el LED sea
ms direccional, de no ser as, el reflejo de la luz sobre elementos propios del sensor y
del robot hara que se tomasen lecturas falsas. En este prototipo se ha usado un trozo de
aislante termoretractil colocado alrededor del LED.

Como se puede apreciar en las fotografas, todos los componentes van soldados
a una placa pretaladrada la cual tiene dos perforaciones de 3mm de dimetro para fijar
el sensor a la estructura del robot. La conexin de los sensores a la tarjeta de la FPGA se
realiza de cuatro cables por los cuales van las siguientes seales:

Negro: Gnd.
Rojo: Vcc.
Verde: Seal modulada de emisin
Azul: Seal del receptor

Estos cables estn soldados al sensor y se conectan a la tarjeta de la FPGA con


una tira de pines macho-macho de cinco pines. Como se ve en la siguiente fotografa el
conector esta hecho de tal manera que tiene polaridad y no puede ser conectado al revs.

Por ultimo hay que mencionar el calibrado de los sensores. Hay dos opciones, la
primera es usar un pequeo potencimetro que regule la luz emitida por el LED, pero
esto aumentara considerablemente el tamao de los sensores, y adems no podra ser
calibrado por el propio microcontrolador. La segunda es variar la frecuencia de la
portadora de la tensin aplicada al LED, de tal manera que el receptor sea ms o menos
sensible a la seal reflejada segn la frecuencia de la portadora de esta seal este ms o
menos cerca de los 38 kHz ideales. Esto adems de brindar la posibilidad de una
autocalibracin por el microprocesador tambin permite que se puedan medir distancias
con este sensor, como se explica en el siguiente apartado.

22
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

3.3.3 Otras consideraciones sobre los sensores de proximidad

Se ha querido realizar un sensor muy verstil. En este sentido hay que aadir que
aunque en principio solo se trate de un sensor de proximidad es posible tambin realizar
medidas de distancia debido a las caractersticas de la respuesta en frecuencia del
receptor y a que podemos cambiar la frecuencia de la portadora con el
microcontrolador.

La manera de medir distancias seria la siguiente; Habr que tener previamente


almacenada una tabla con la distancia limite de deteccin del sensor para cada
frecuencia posible de la portadora. Una vez se tenga esto se emite a la frecuencia de
mxima sensibilidad (38 kHz), si en algn momento se quiere medir una distancia a un
obstculo se variara la frecuencia de la portadora alejndose, por debajo, de los 38 kHz
hasta encontrar la frecuencia limite a partir de la cual se deja de detectar el objeto. Una
vez se tenga esta tabla y dicha frecuencia limite de la medida tomada, podemos
consultar la tabla y ver cual es la distancia de deteccin para dicha frecuencia de la
medida. El objeto se encontrar seguramente a la distancia obtenida.

Otro uso que se ha querido dejar abierto para este tipo de sensores es el de
comunicarse con otros robots o con otros dispositivos por medio de los infrarrojos, ya
que dispone de un emisor y un receptor completos de infrarrojos. As, sera posible
comunicarse con el televisor a travs de un mando a distancia de un televisor de manera
unidireccional, o de manera bidireccional a travs del puerto de infrarrojos de un
ordenador o de una calculadora HP 48G.

23
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

3.4 Sensor Sensible al Color

Como se explic en el apartado 3.1 hay sensores que son especialmente


sensibles al color, debido principalmente al mtodo empleado para la deteccin del
objeto. De tal manera que los sensores que se basen en el nivel de luz recibida para
determinar la distancia al objeto sern especialmente sensibles al color del objeto, pues
este reflejara mas o menos luz segn su color.

En este caso se ha encontrado a la pareja emisor-receptor CNY-70 especialmente


sensible al color del objeto reflectante.

Estos sensores son necesarios para acogerse a las especificaciones impuestas por
las competiciones de sumo, en las que el tatami se compone de una zona circular negra
de 175 cm de dimetro, rodeado por una franja blanca para que el robot pueda detectar
el final del tatami. Estos sensores estaran destinados a detectar esa franja blanca, y por
tanto el final del tatami. Aunque tambin podran usarse para detectar el suelo. Esto
podra ser til para detectar escaleras o simplemente el final de una plataforma donde se
esta moviendo el robot. Pero es importante que se acerquen los sensores ms al suelo y
aumentar la corriente que pasa por el LED emisor para disminuir la sensibilidad al color
del suelo, de tal manera que siempre que haya un suelo, sea del color que sea el receptor
reciba luz y si no hay suelo por debajo no la reciba. Aun as, es ms recomendable usar
unos sensores de proximidad para detectar la prdida del suelo en caso de que fuese
necesario.

Los sensores para detectar la lnea de fin de tatami no utilizan ningn tipo de
modulacin pues se ha optado por aislarlos fsicamente del resto del entorno, excepto
del suelo. Los sensores llevan un aislante termoretractil que evita que la luz proveniente
de otras fuentes que no sea la del propio emisor de la pareja CNY-70 pueda incidir
sobre el fototransistor de dicha pareja optoacopladora.

24
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

En la siguiente figura se puede observar el esquema de conexin del sensor;

Figura 3.6 Esquema de conexin y polarizacin del CNY-70

El LED de infrarrojos esta polarizado de tal manera que circula una intensidad
de 11 mA de corriente continua. En el receptor, el fototransistor permanecer en corte
mientras no reciba luz y segn el nivel de luz aumente pasara al estado de activa y
finalmente a saturacin. Si el color de la superficie bajo el sensor es blanco, la luz se
vera reflejada, el fototransistor recibir luz y entrar en saturacin y Vout valdr
aproximadamente 0V, por el contrario, si el color es negro, el fototransistor entrara en
corte y el valor de Vout ser de 5V aproximadamente.

El optoacoplador CNY-70 estar cubierto como se ha mencionado antes por un


aislante termoretractil que mantendr la superficie del LED y fototransistor a una
distancia mnima de 3.5 mm, el final del aislante podr estar situado a una distancia
mxima del suelo de 1mm.

Por ltimo queda sealar que la conexin a la tarjeta de la FPGA se realizara de


la misma forma que con los sensores de proximidad. Vout se conectar a un pin de uno
de los puertos de entrada creados con la FPGA, el cual nos dar un valor digital del
estado de la seal Vout.

25
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

3.5 Sensor de inclinacin mediante Interruptor de Mercurio

Como se mencion al comienzo del apartado 3, se ha previsto la posibilidad de


que el robot vuelque. Al sobresalir las orugas que proporcionan la traccin por arriba y
por debajo no es necesario un mecanismo para que el robot recupere su posicin inicial,
ya que este podr moverse cuando vuelque. Sin embargo, es necesario conocer en cual
de las dos posiciones esta colocado el robot, puesto que el sentido de movimiento de las
orugas ser el contrario para realizar los mismos movimientos. Es por esto por lo que se
ha usado este sensor.

El principio de operacin del sensor es muy sencillo, consta de un interruptor de


mercurio y una resistencia. El interruptor de mercurio cierra o abre el contacto entre dos
terminales segn estos estn o no mojados por el mercurio que hay encerrado en una
cpsula. En la figura de abajo se puede ver el esquema de conexin del sensor;

Figura 3.7 Esquema de conexin del interruptor de mercurio

Como se puede apreciar Vout solo tendr dos posibles valores 0 y 5V, este valor
se lee con uno de los puertos de entrada creados con la FPGA y se decide en que
posicin esta colocado el robot en funcin de dicho valor.

26
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

4 MICROCONTROLADOR 68HC11

4.1 Introduccin.
Se ha elegido el microcontrolador MC68HC11-A1 de Motorola fundamentalmente
debido a dos aspectos. En primer lugar, es un modelo muy utilizado en estas
aplicaciones, existen numerosas herramientas de desarrollo y amplia experiencia al
respecto. Por otra parte, queda solucionado el problema de implantar un hardware para
el microcontrolador al adquirir la tarjeta CT6811 de Microbtica, que cuenta con todo
lo necesario para completar el desarrollo sin atender a fallos debidos al montaje de la
tarjeta del microcontrolador.

Se trata de un microcontrolador de 8 bits con un bus de direcciones de 16 bits, lo


que le permite direccionar hasta 64Kbytes de memoria externa y con una frecuencia de
reloj de 3MHz como mximo, aunque en la CT6811 viene preparado para trabajar a una
velocidad de 2MHz.

A continuacin se muestra un esquema con los principales recursos del


microcontrolador 68HC11, extrado de un documento de Microbtica;

Figura 4.1 Diagrama interno del microcontrolador MC68HC11

27
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

Cuenta con cinco puertos a saber, puertos A,B,C,D y E. El puerto A puede usarse
como puerto de E/S de uso general, en cuyo caso dispone de 4 pines de salidas, 3 de
entradas, y uno configurable. Tambin tiene asociadas las salidas de los comparadores y
las entradas de los capturadores, dispositivos que estn asociados al timer principal.

El puerto B se puede usar como un puerto de salidas de uso general y en modo


extendido, en el cual esta disponible el acceso a memoria externa, sirve como parte alta
del bus de datos.

El puerto C tambin es utilizable como entradas/salidas de uso general, y en modo


expandido este puerto lleva la parte baja del bus de direcciones y el bus de datos de
manera multiplexada.

El puerto D tiene solamente seis bits que pueden ser usados como entradas/salidas,
pero hay que tener en cuenta que es este puerto el que lleva las seales necesarias para
llevar a cabo las funciones de comunicaciones del microcontrolador, usando dos pines
para las seales Tx y Rx de las comunicaciones asncronas, y los otros cuatro pines para
las seales MISO, MOSI, SCK y SS pertenecientes al sistema de comunicaciones serie
sncrono de alta velocidad.

El puerto E puede ser usado como ocho entradas digitales o bien como ocho
entradas al sistema del conversor analgico/digital.

El microprocesador dispone de una UART para comunicaciones serie asncronas, un


mdulo de comunicaciones serie sncronas, 5 comparadores con salida hardware, 3
capturadores de entrada, un temporizador principal de 16 bits, interrupciones en tiempo
real, 2 entradas de interrupciones externas, 256 bytes de RAM y 512 bytes de
EEPROM.

Se ha optado por programar el microprocesador en lenguaje C debido a la


potencia de dicho lenguaje y a que es el lenguaje de alto nivel ms extendido para estas
aplicaciones. Como inconveniente se puede citar el hecho de que los programas en C
estn menos optimizados y ocupan ms memoria. Por tanto, no son suficientes los 512

28
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

bytes de memoria EEPROM para almacenar el programa y se ha tenido que usar el


microcontrolador en modo expandido con memoria externa. Hay que hacer referencia al
hecho de que se pierden dos puertos de E/S para poder llevar los buses de direcciones y
datos al exterior. Debido a esto tambin ha sido necesario implementar un expansor de
puertos para recuperar los dos puertos que eran necesarios para esta aplicacin. Por todo
esto, en un futuro proyecto de este tipo sera ms recomendable un microcontrolador
ms potente.

4.2 Hardware del microcontrolador. Tarjeta CT6811

Un microcontrolador posee una arquitectura interna que facilita la comunicacin


con los perifricos o sistemas externos. Aun as, siempre es necesario un hardware
adicional. Este problema se soluciona gracias a la tarjeta CT6811 de Microbtica
S.L.. En la figura 4.2 se muestra una foto de la tarjeta CT6811.

Figura 4.2 Vista superior de la tarjeta de desarrollo CT6811

Se trata de una tarjeta para el desarrollo de aplicaciones hardware y software


basadas en el microcontrolador 68HC11. No slo sirve para el desarrollo de
prototipos, sino que tambin est pensada para funcionar en sistema terminados. Se
puede emplear como:

29
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

Tarjeta entrenadora: Conectndose a ordenadores PC a travs del puerto


serie. Es posible enviar programas desde el PC a la CT6811 para que los
ejecute. De esta forma, la tarjeta es muy til para la depuracin de
programas en fase de pruebas y para aprender a programar el 68HC11
desde un punto de vista prctico.
Tarjeta autnoma de control: La CT6811 funciona en modo autnomo, es
decir, sin conectarse al PC. Cada vez que se encienda la tarjeta, se
ejecutar el programa que previamente se habr cargado en la memoria
EEPROM del 68HC11 o en algn tipo de memoria externa no voltil que
se conecte a la tarjeta.
Perifrico inteligente del PC: Tambin es posible utilizar la tarjeta para
comunicar la tarjeta con el mundo exterior. La CT6811 actuara como un
perifrico conectado al PC a travs del puerto serie. Este perifrico
inteligente puede recibir rdenes del PC y actuar en consecuencia.

La tarjeta cuenta con los siguientes componentes.


El microcontrolador MC68HC11.
Un bus de expansin dividido en 6 puertos de 10 bits cada uno ( Puerto A,
Puerto B, Puerto C, Puerto D, Puerto E y CONTROL ). Desde estos
puertos se tiene acceso a todos los pines del micro.
Switches de configuracin: 2 de modo de arranque para seleccionar entre
bootstrap, single chip, expandido y special test. Otros 2 para aplicaciones
del usuario.
Led de pruebas, conectable o desconectable con el jumper JP3.
Pulsador de reset para inicializar la tarjeta o de propsito general
conectado a la entrada de interrupciones IRQ. La eleccin se realiza con
el jumper JP4.
Alimentacin a travs de clemas o conector tipo Jack.
Conector tipo telfono para comunicacin serie directa con el PC.
Reset software y hardware de la placa. Con el jumper JP7 se anula el
reset software.

30
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

4.3 Expansin de memoria. Tarjeta CT256

El microcontrolador dispone de escasa capacidad de memoria interna. Adems se


decidi programar el sistema en lenguaje C con lo que se hace obligada la expansin
de memoria. Para este propsito se ha adquirido la tarjeta CT256 de Microbtica.

La tarjeta CT256 es una ampliacin de memoria diseada para conectarse a la


tarjeta CT6811, con las siguientes caractersticas:
Tiene capacidad para cubrir todo el espacio de direccionamiento del
68HC11, en total 64 kBytes.
Posee el espacio de direccionamiento dividido en dos bancos: El Banco 0,
en las direcciones 8000 FFFF, y el Banco 1 entre las direcciones 0000
7FFF.
Cada banco puede funcionar con memoria RAM o con EEPROM segn el
estado de los jumpers JP2 y JP3.
Conexin elctrica a la CT6811 por medio de tres cables planos de tipo
bus.
La alimentacin se toma directamente de los cables de bus, es decir, la
alimentacin es la misma que la de la CT6811.
La CT256 junto con la CT6811 forman la base del sistema tower al que se
le aaden luego la tarjeta CTFPGA y la CTMOTOR.

La conexin elctrica se realiza por medio de tres cables planos de tipo bus, de
10 hilos. Estor cables se conectan a los puertos B, C y CONTROL de ambas tarjetas.
Se han utilizado dos circuitos integrados de memoria. En el Banco 0 est ocupado
por la memoria DS1230Y SRAM no-voltil, de DALLAS para almacenar el programa
principal. En el Banco 1, hay una memoria SRAM voltil de la familia 65256.

En este proyecto se ha optado por utilizar la RAM no voltil DS1230AB del


fabricante Dallas Semiconductor en el banco 0. Esta memoria esta destinada a albergar
los programas, ya que es la zona de memoria libre ms grande, solo hay un dispositivo
mapeado en este rango de memoria que es la EEPROM interna del microcontrolador.

31
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

Para evitar que esto divida dicho intervalo de memoria en dos partes lo que se ha
hecho es desactivar la memoria EEPROM escribiendo el valor 0x0C en el registro
config, as tenemos 32Kbytes totalmente libres. Por otra parte en un segundo banco, el
banco 1, se ha usado RAM voltil para almacenar datos y variables que no sean
constantes pues el contenido se borra cada vez que se desconecta la alimentacin, estas
variables se almacenan a partir de la direccin $3000h para dejar espacio por debajo
para mapear otros dispositivos en este rea de memoria, en este caso la FPGA.

4.4 Software de desarrollo.

En cuanto al sistema de desarrollo, se ha utilizado el compilador ICC6811 de IAR


SYSTEMS, se trata de un entorno de desarrollo basado en Ms-Dos y que genera los
archivos binarios casi listos para cargar en el 68HC11 a partir de las fuentes escritas en
lenguaje C.

Para cargar el programa en el microcontrolador se han empleado los programas


desarrollados por Microbtica, en concreto el twb2.exe el cual contiene dentro todos los
programas de Microbtica entre ellos el ctdialog que es un programa cargador muy til
para acceder directamente a la memoria y para cargar programas en ella.

Ha sido necesario realizar unos archivos de proceso por lotes para poder configurar
el uso del compilador y del linkador de una manera cmoda(c11.bat y lnk11.bat).
Tambin ha habido que realizar un archivo de proceso por lotes para adaptar el fichero
de salida del compilador ya que este no se puede cargar en el microcontrolador
directamente con los programas de Microbtica (s19.bat).

Tambin ha sido necesario el uso directo del programa ensamblador de Motorola


(as11) para realizar algunas pruebas y depurar algunos programas.

32
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

Hay que citar el hecho de que no se ha dispuesto de un sistema de emulacin o de


simulacin por lo que para depurar los programas ha sido de gran ayuda el uso de la
comunicaciones serie asncronas. Gracias a este sistema se ha podido hacer una
depuracin de los programas teniendo el microprocesador conectado a un PC por medio
del puerto serie con un terminal de comunicaciones cargado en dicho PC. Mediante este
mtodo es posible saber que bucles del programa se estn ejecutando, si el programa se
queda bloqueado en algn punto de ste, aadir watches a ciertas variables mandando su
valor por el puerto serie, etc. Se ver ms adelante, en el capitulo correspondiente a las
comunicaciones que las rutinas utilizadas para estas labores son muy sencillas y directas
de implementar.

33
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

5 FPGA

5.1 Introduccin.

Como ya se menciono en el captulo 4, ha sido necesaria la implantacin de un


expansor de puertos debido a que dos de los puertos del microcontrolador han de ser
usados para llevar los buses de datos y direcciones a la memoria externa. Se ha
optado por usar una FPGA por ser un sistema muy flexible en el que adems del
expansor de puertos es posible crear otros sistemas que liberen al microcontrolador.

En este caso adems del expansor de puertos que ser expuesto mas adelante, se
ha implementado un divisor de frecuencia programable de 16 bits, cuya entrada es la
seal de reloj del microcontrolador (2 MHz), este dispositivo se usa para generar la
seal de la portadora de los sensores de proximidad por infrarrojos. Hay que insistir
en el hecho de que el divisor de frecuencia sea programable, ya que esto permite
calibrar los sensores de infrarrojos adems de poder realizar medidas de distancia
con los sensores de proximidad.

La FPGA elegida ha sido la MAX7128SLC84-15, de Altera. Esta eleccin se


debe principalmente a que ya existan a nuestra disposicin las herramientas de
desarrollo y a que exista una experiencia previa con estas FPGAs, estos, por
supuesto, fueron los motivos una vez que se comprob que dicha FPGA tenia
capacidad suficiente para lo que se quera hacer.

34
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

5.2 Esquema del expansor de puertos y divisor de frecuencia.

Figura 5.1 Esquema del expansor de puertos y divisor de frecuencia programable

35
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

En este esquema se pueden ver los dos sistemas que se han implementado en la
FPGA. En la parte superior del esquema se puede ver a la izquierda un latch que es
usado para demultiplexar el bus de direcciones del de datos, para que al siguiente
bloque, que es el decodificador de direcciones solo le lleguen las direcciones y pueda
determinar qu dispositivo ha sido seleccionado. Ms a la derecha, todava en la parte
superior del esquema se pueden ver dos mdulos de entradas correspondientes a los
puertos 1 y 2, lo que hacen es dejar o no que las seales de el puerto en cuestin
gobierne el bus de datos, en funcin de si la seal de seleccin que les manda el
decodificador de direcciones esta a nivel alto o bajo. Con esto prcticamente concluye a
rasgos generales lo que es el sistema del expansor de puertos.

En la parte inferior aparece el sistema del divisor de frecuencia programable, que


consta de los siguientes elementos; el primero por la izquierda es el propio divisor
programable, el bloque que se encuentra a la derecha de este es un modulo de salida, el
cual es un latch que mantiene la salida del puerto 4 que es el puerto de salida creado con
la FPGA. a su izquierda hay un bloque cuya funcin es multiplicar las seales de salida
del puerto 4 por la portadora que es generada mediante el divisor de frecuencia, as es
como se genera la seal modulada que se aplica a los LEDs para ser emitida en forma
de luz infrarroja.
Es tambin apreciable el hacho de que se introduzca el bus de datos por dos
lugares simultneamente, esto es debido a que para esta aplicacin sobran pines de la
FPGA, y no sobran conexiones internas del PIA para llevar dicho bus a todos los
dispositivos.

5.2.1 Decodificador de direcciones

A continuacin se muestra el contenido del decodificador de direcciones, el cual


ha sido descrito usando VHDL;

36
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

Figura 5.2 Descripcin VHDL del decodificador de direcciones

Se puede ver que consta sencillamente de un atabla de verdad, mediante la cual


se decide que valores se asignan a cada lnea de seleccin de cada dispositivo. As, si se
selecciona la posicin 2000h en el bus de direcciones, se activa la seal del puerto 1, el
cual escribira en el bus de datos el valor ledo mientras su lnea de seleccin
permanezca activa, las lneas de seleccin de todos los dems dispositivos permanecen
inactivos, pues no pueden usar el bus de datos dos dispositivos simultneamente. As
con los dems dispositivos hasta la direccin 2004h, donde se encuentra mapeado el
registro alto del divisor de frecuencia. Para estos cinco casos se puede ver que al final
de la lnea se asigna el valor '1' a la seal CSout , esta seal es la seal de chip select que
se enva a la memoria que antes estaba usando estas posiciones de memoria,
anlogamente, la seal CSin es la seal proveniente del microcontrolador, y que antes
estaba conectada a la seal chip select de dicha memoria.

Lo que se hace con las lneas CSout y CSin es evitar que la memoria y la FPGA
escriban al mismo tiempo en el bus de datos. De este modo, la FPGA "intercepta" la
lnea del chip select que va a la memoria, y en caso de que se seleccione un dispositivo
perteneciente a la FPGA, esta har que la lnea de chip select de la memoria se ponga a
'1', haciendo que se deseleccione dicha RAM, y quedando el bus de datos libre para que
pueda escribir la FPGA.

37
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

5.2.2 Modulo de entrada

Figura 5.3 Esquema del mdulo de entrada

Este bloque hace de interfaz entre las entradas y el bus de datos escribiendo en el
nicamente cuando ha sido seleccionado y permaneciendo sus salidas en tercer estado
cuando no esta siendo seleccionado. Las seales que determinan su estado son las
siguientes:
R/W ! ha de estar a '1' pues este modulo solo es de lectura.
E ! tambin ha de valer '1', esta seal es el reloj del
microcontrolador, en este caso la utilizamos para demultiplexar los dos
buses. Cuando su valor es '1', se presenta el bus de datos, cuando su valor
es '0', se esta presentando el bus de direcciones.
Px ! es la seal de seleccin del dispositivo, su valor ha de ser
tambin '1', para indicar que es este dispositivo el que ha sido
seleccionado por el bus de direcciones.
Las seales DATA son las lneas que se conectaran al bus de datos. Y las seales
Px0-Px7 son las que se conectan a las entradas de la FPGA.

38
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

5.2.3 Esquema del mdulo de salida.

Figura 5.4 Esquema del mdulo de salida

De manera similar que el mdulo anterior, ste hace de interfaz entre el bus de
datos y las salidas digitales de la FPGA. Este mdulo lee el bus de datos cuando se le
indica y actualiza las salidas digitales con los valores correspondientes y se mantienen
hasta nueva escritura gracias al latch. Las seales necesarias para su habilitacin son las
siguientes;
R/W ! Ha de valer '0' para poder escribir.
E ! Al igual que en el mdulo anterior ha de valer '1'.
Px ! Igual que en el mdulo anterior, esta es la lnea de seleccin que
proviene del decodificador de direcciones. Su valor tiene que ser '1'.
PxZ ! Esta seal se ha creado por si existiese la necesidad de mantener el
puerto en tercer estado

Las seales DATA son las lneas que se conectaran al bus de datos. Y las seales
Px0-Px7 son las que se conectan a las salidas de la FPGA.

39
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

5.2.4 Divisor de frecuencia programable.

Figura 5.5 Esquema del divisor de frecuencia programable.

40
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

Este bloque es el encargado de generar una seal cuadrada de frecuencia igual a


la del reloj dividida por un numero de 16 bits que ser programado en dos registros de
8 bits por el propio microcontrolador. Como se ha citado anteriormente esta seal ser
la portadora de la tensin aplicada a los LEDs infrarrojos de los sensores de proximidad.

El circuito consta de dos contadores en cascada, el superior lleva los 8 bits bajos
de la cuenta y el que esta debajo lleva los 8 bits altos. Como se puede observar el diseo
es totalmente sncrono y los dos contadores comparten el mismo reloj. Los contadores
estn realimentados de tal manera que cuando se produce el final de la cuenta estos se
resetean y vuelven a comenzar la cuenta desde cero.

Los siguientes dos bloques que se pueden apreciar justo a la derecha de los
contadores son los registros que almacenan el valor por el cual hay que dividir la
frecuencia de reloj. Una vez ms, el registro que esta arriba almacena la parte baja del
valor de la divisin mientras que el inferior lleva la parte alta.

Ms a la derecha estn conectados dos comparadores cuya funcin es comparar


el valor de la cuenta con el valor previamente almacenado en los registros. En caso de
que la cuenta supere o iguale al valor final de la cuenta, se produce una seal que durara
un ciclo de reloj que ser la que resetee los contadores, esta seal tambin esta
conectada a la entrada de un Flip-Flop tipo D y la salida de este a un Flip-Flop tipo T, la
misin de estos dos Flip-Flops es la de capturar la seal de fin de cuenta y cambiar de
valor la salida.

Para que se produzca todo esto hay varias seales que tienen que ser usadas
adecuadamente;

B0-B7 ! Es el bus de datos, se usara para programar los dos registros


que almacenan el fin de cuenta.
nEnable ! Es la seal de enable de los contadores, si se quiere parar el
divisor de frecuencia tendr que valer '1', si por el contrario se quiere que
funcione su valor ser '0'.

41
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

resetn ! Seal de reset externa, resetea los contadores y pone el divisor


en el estado inicial.
CLK ! Es la seal de reloj que marca la frecuencia a dividir.
R/W ! Lectura-Escritura, para poder programar los registros valdr '0'
E ! Al igual que en los mdulos anteriores se usa para
demultiplexar el bus de datos del de direcciones.
regfrecB ! Es una seal proveniente del decodificador de direcciones e
indica que el valor presente en el bus de datos ha de ser almacenado en el
registro que contiene la parte baja de la divisin.
regfrecM ! Es una seal proveniente del decodificador de direcciones e
indica que el valor presente en el bus de datos ha de ser almacenado en el
registro que contiene la parte alta de la divisin.
Fout ! Se trata de la onda cuadrada de salida cuya frecuencia sera la
de CLK dividida por el valor programado.

De este modo para que se produzca un cambio en "Fout" tienen que haber
transcurrido el numero de ciclos de la seal "CLK" indicados por los dos registros que
almacenan el fin de cuenta, as es como se realiza la divisin de frecuencia.

42
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

5.2.5 Esquema del modulador

Figura 5.6 Esquema del modulador

Como se trata de una modulacin digital muy sencilla, el circuito tambin lo es.
Px0 a Px7 son las moduladoras de cada uno de los LEDs, y CLK1 es la portadora.
Como se puede ver la modulacin se realiza usando una simple puerta AND entre cada
moduladora y la portadora.

5.3 Esquema de conexin de la tarjeta de la FPGA.

Esta es la tarjeta en la que esta conectada la FPGA, los conectores de las seales
del microcontrolador usadas por la FPGA, y tambin estn los conectores de los
sensores. En esta caso, aunque no se ha incluido en dicho esquema tambin se ha
montado en la misma tarjeta el circuito de alimentacin debido a que se dispona de
espacio suficiente y se ahorra una tarjeta adicional que hubiera sido necesaria en caso de
no haber montado dicho circuito en esta tarjeta.

Hay que mencionar el hecho de que la FPGA se puede programar desde la


propia tarjeta conectando el cable ByteBlaster MV a un conector destinado a programar
la FPGA que hay en la tarjeta. Esto se puede hacer sin necesidad de quitar la FPGA del
zcalo y sin tener que desconectar absolutamente ninguna seal de la FPGA. Es lo que
Altera denomina ISP (In-System Programmability).

En la pagina siguiente se presenta el esquema completo;

43
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

Figura 5.7 Esquema de conexin de la tarjeta de la FPGA

44
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

A continuacin se muestran dos fotografas de esta tarjeta;

En estas fotografas se pueden ver ambas caras de la tarjeta de la FPGA. En la


fotografa superior se ve el regulador en la esquina superior izquierda, en la esquina
inferior izquierda las tiras de pines para conectar los sensores, a su derecha esta el
conector para programar la FPGA. El chip de Altera es la FPGA, y los dems
conectores son para llevar las conexiones de la FPGA al microcontrolador.

45
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

6 Comunicaciones

6.1 Introduccin.

Como ya se mencion en la introduccin este proyecto es parte de un proyecto


conjunto. Para unir los dos mdulos desarrollados en ambos proyectos hace falta que se
comuniquen. Adems es conveniente que el enlace sea seguro y de alta velocidad,
puesto que si el intercambio de informacin se produce con retardos largos no se podrn
unir los dos mdulos de manera eficiente. El microcontrolador 68HC11 dispone de un
sistema de comunicaciones sncrono destinado precisamente a este fin, fusionar varios
microcontroladores y dispositivos externos para implementar sistemas multiprocesador
de manera eficaz.

6.2 Comunicaciones Serie Sncronas (SPI)

Este mdulo de comunicaciones sncronas tiene capacidad para establecer


comunicaciones con velocidades de hasta 1 Mbit/s de manera sncrona. En estas
comunicaciones existir siempre un microcontrolador Maestro y uno o varios
microcontroladores o dispositivos Esclavos. Las seales que componen este sistema son
las siguientes;

MISO ! Es la lnea por la cual se transfieren los datos del esclavo al


maestro.
MOSI ! Por esta lnea se transfieren los datos del maestro al esclavo.
SCK ! Es el reloj de las comunicaciones, lo gobierna el maestro.
SS' ! Lnea de seleccin de esclavo, se utiliza para que el maestro
seleccione al esclavo al que se quiere dirigir y para dar comienzo a las
comunicaciones.

El maestro decide cuando quiere que se establezca la comunicacin, de tal


manera que para mandar un dato a un esclavo lo hace de manera directa. Sin embargo el
esclavo solo podr enviar informacin cuando el maestro lo decida, por tanto este tiene
que tener preparado el dato a mandar para que este disponible cuando el maestro solicite

46
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

la informacin. En este caso, es el mdulo de Control Central y Sensores el que acta


como maestro y el mdulo de Control de Motores y Movimiento el que acta como
esclavo ya que la informacin se intercambia de manera unidireccional. Para esto se ha
elaborado un protocolo muy elemental para asegurar que llegan los datos, este sencillo
protocolo funciona de la siguiente manera, el maestro permanece enviando un dato
continuamente y leyendo el carcter recibido, sigue haciendo esto mientras que este
carcter sea distinto del carcter '@'. En el lado del esclavo, este lee el dato recibido y
enva dicho carcter ('@') para confirmar que ha recibido el dato. De esta manera no se
sobreescriben los datos enviados por el SPI, puesto que no se puede enviar un dato hasta
que el anterior haya sido recibido. Esto se poda haber resuelto de una manera ms
eficiente mediante el uso de interrupciones, pero hubiese complicado las rutinas del SPI.

Este modulo contiene tres registros que lo caracterizan;

SPCR ($1028) ! Registro de configuracin


SPSR ($1029) ! Registro de estado del SPI
SPDR ($102A) ! Registro de datos

6.2.1 Registro SPCR

El bit 6 (SPE) activa el sistema de comunicaciones serie sncrono si su valor


es '1'.
El bit 4 (MSTR) determina si el microcontrolador es maestro o esclavo, en
este caso se selecciona como maestro, y por tanto su valor es '1'.
Los bits 1 y 0 seleccionan la velocidad de las comunicaciones, se les ha
asignado el valor '0' a ambos bits para obtener la velocidad mxima que es de 1Mbit/s

6.2.2 Registro SPSR

El bit 7 (SPIF) se pone a 1 cuando ha finalizado una transmisin entre el


maestro y otro dispositivo.
Los dems bits no son importantes.

47
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

6.2.3 Registro SPDR

Es el registro utilizado para transmitir y recibir datos por el SPI, al igual que
en el SCI. Hay dos registros mapeados en esta direccin, uno de escritura y uno de
lectura, cuando se escribe en este registro los datos escritos sern enviados por el SPI y
cuando se accede a esta direccin como lectura se leen los datos recibidos por el SPI.

6.3 Comunicaciones Serie Asncronas (SCI)

Por otra parte tambin es necesario el uso de las comunicaciones serie


asncronas para que se pueda establecer comunicacin con el PC. En este proyecto esto
ha sido necesario para poder probar ciertos sistemas sensores y depurar algunos
programas. En el primer caso se han elaborado algunos programas de prueba de los
sensores que muestran el estado de los sensores por pantalla. Y en el segundo, como se
coment en el apartado del Microcontrolador, se ha usado para comprobar el flujo del
programa y el estado de ciertas variables para fines de depuracin.

El microcontrolador empleado en este proyecto dispone de una UART completa


mediante la cual se pueden establecer comunicaciones serie asncronas a distintas
velocidades y con paquetes de 8 o 9 bits adems del bit de start y el bit de stop. El
nombre de este sistema del microcontrolador es el SCI y consta de una unidad de
recepcin y una unidad de transmisin totalmente independientes, por lo que las
comunicaciones son Full Duplex. Sin embargo hay que aadir que el nivel de las
seales de transmisin y recepcin es de 0 y 5V, por tanto es necesario usar un
conversor de niveles TTL-RS232 para poder comunicar el microcontrolador con el PC.
Este circuito esta ya incorporado dentro de la propia tarjeta CT6811 de Microbtica.

Los registros asociados a este sistema y sus correspondientes direcciones son los
siguientes;

48
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

BAUD ($102B) ! Registro que configura la velocidad de la


comunicacin.
SCCR1 ($102C) ! Registro de control 1.
SCCR2 ($102D) ! Registro de control 2.
SCSR ($102E) ! Registro de estado de las comunicaciones.
SCDR ($102F) ! Registro de datos de las comunicaciones.
6.3.1 Registro BAUD

Mediante este registro se selecciona la velocidad mxima de la comunicacin


mediante los bits 4 y 5 (SCP0 y SCP1), usando un cristal de 8 MHz, como se ha
empleado en este proyecto las posibles velocidades mximas en funcin de dichos bits
son las siguientes;

SCP1 SCP0 Baudios


0 0 125000
0 1 41667
1 0 31250
1 1 9600

Se ha usado la velocidad de 9600 por ser estndar. Una vez determinada la


velocidad mxima se puede dividir esta por un valor, siendo este potencia de 2 y
comprendido entre 1 y 128 mediante los bits 0,1 y 2. Se han puesto estos bits a '0' para
que se divida la velocidad mxima por 1, y por tanto la velocidad de la comunicacin
sea de 9600 baudios.

6.3.2 Registro SCCR1

En este registro solo se ha utilizado el bit 4 (M) este bit determina si se usaran 8
o 9 bits de datos. Se ha puesto a 0 para usar 8 bits de datos. Los dems bits de este
registro no se usan y no importa su valor.

49
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

6.3.3 Registro SCCR2

Este registro es el principal dentro de la configuracin de estas comunicaciones.


Mediante los bits 3 y 2 se selecciona si los bits 0 y 1 del puerto D se usaran para
comunicaciones o como bits de entrada y salida respectivamente. El valor asignado a
estos bits es '1', para habilitar dichos bits del puerto D como los pines Rx y Tx de las
comunicaciones.

Con los bits 4,5,6 y 7 de este registro se activan ciertas interrupciones asociadas
a este sistema de comunicaciones. En este proyecto las comunicaciones serie se han
realizado por polling y por tanto las interrupciones han permanecido desactivadas.

El bit 1 (RWU) se usa para activar el modo especial Wake-Up de la UART, se


ha desactivado poniendo este bit a 0.

El bit 0 (SBK) se usa para mandar seales de BREAK indefinidamente por el


puerto serie.

6.3.4 Registro SCSR

El bit 6 (TC) se pone a '1' cada vez que se ha enviado un carcter y la lnea de
transmisin se halla vaca . Este bit te ofrece mayores garantas cuando se quiere saber
si la transmisin ha terminado completamente.
El bit 5 (RDRF) se pone a 1 cuando se ha recibido un dato nuevo en el registro
de recepcin. Por tanto, cuando se reciben datos hay que esperar a que este bit se ponga
a 1.
El bit 4 (IDLE) se pone a 1 cuando detecta que la lnea de recepcin se ha
quedado vaca .
El bit 3 (OR) se pone a 1 cuando se ha recibido un carcter por el puerto serie y
el anterior dato recibido todava no se ha ledo. Cuando ocurre este error el dato que se
pierde es el que se acaba de recibir.
El bit 2 (NF=Noise Flag) se activa cuando se ha detectado un error en el dato
que se acaba de recibir.

50
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

El bit 1 (FE) se activa cuando se ha detectado un error en la trama enviada. Al


recibir un dato se comprueba que el bit de stop este a nivel alto. Si esto no se cumple se
pone este bit a nivel alto '1'.
El bit 0 no se utiliza.

6.3.5 Registro SCDR

Es el registro de datos del SCI, en realidad hay dos registros mapeados en esta
direccin, uno de lectura y otro de escritura. Cuando se accede como escritura se escribe
el valor en el registro de transmisin. Y cuando se accede como lectura se lee el valor
del registro de recepcin.

51
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

7 Software de Aplicacin

7.1 Introduccin.

En este capitulo se pretende explicar como funciona el software que se ha usado


hasta el momento con el robot. Para probar el robot se ha decidido programarlo de tal
manera que ande evitando los obstculos que se encuentre a su camino. Hay que
destacar que el diseo del robot no se ha hecho teniendo como fin este tipo de actividad,
pero se ha encontrado que para probar los sensores y para poder hacer demostraciones
es lo ms sencillo, ya que el lugar de la demostracin no requiere preparativos
especiales tales como la creacin de un tatami o tener el espacio libre caracterstico de
las pruebas de sumo actuales, que es de un circulo de 3.75m de dimetro. De todas
formas, la programacin cambiara muy poco, vindose modificado nicamente el
programa principal, en el que habra que cambiar las acciones a tomar para una
determinada situacin y aadir algunas situaciones y reacciones ms.

Los distintos mdulos software que se han programado son los siguientes;

fpga.h
sci.h
sens.h
spi.h

Todos ellos se usan en el programa principal, cuyo nombre es defp.c .

52
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

7.2 Descripcin de los programas.

7.2.1 fpga.h

Este mdulo contiene las definiciones de los puertos creados con la FPGA y
los registros necesarios para programar el divisor de frecuencia.

/* - FPGA.H -

This file #defines the fpga register addresses.

Version: 1.0

Author: Pedro Perez de Ayala


*/
#ifndef FPGA_H
#define FPGA_H

#ifndef FP_REG_OFFSET
#define FP_REG_OFFSET 0x2000 /* Direccin base de la fpga */
#endif

/*======================*/
/* I/O Port Definitions */
/*======================*/

/* I/O port 1 */
#define PORT1 (* (unsigned char *) (FP_REG_OFFSET + 0))

/* I/O port 2 */
#define PORT2 (* (unsigned char *) (FP_REG_OFFSET + 1))

/* I/O Port 4 */
#define PORT4 (* (unsigned char *) (FP_REG_OFFSET + 2))

/* I/O Regfrec A */
#define REGFRECB (* (unsigned char *) (FP_REG_OFFSET + 3))

/* I/O Regfrec B */
#define REGFRECA (* (unsigned char *) (FP_REG_OFFSET + 4))

#endif
Se pueden apreciar los tres puertos expandidos, PORT1 y PORT2 que son
los de entrada y PORT4 que es el de salida. Tambin se han definido los registros
REGFRECA y REGFRECB. El tipo asignado a esto registros es el unsigned char puesto
que son registros de 8 bits. Y se han definido las direcciones de estos recursos como un
incremento sobre una direccin base, esto es debido a que as el compilador genera

53
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

direccionamientos indexados que son ms rpidos que los direccionamientos


extendidos.

Los registros se han definido como el valor de la direccin a la que apunta un


puntero de tipo unsigned char, siendo el valor del puntero "(FP_REG_OFFSET + X)"
donde X es el incremento en la direccin base de la FPGA. Esta direccin base es la
direccin $2000h, como se apunto en el apartado del microprocesador, en esta zona de
memoria esta la RAM voltil que contiene datos a partir de la direccin $3000h, es por
tanto una rea libre de memoria que se puede usar libremente.

7.2.2 sci.h
/*

SCI.H

Rutinas de manejo del SCI mediante polling.

leer_car() -----> Leer el caracter que venga por el SCI.
enviar_car(c) --> Enviar un caracter por el SCI
enviar(cad) ----> Enviar una cadena de caracteres por el SCI

*/

#include <io6811.h>

#ifndef _sci_
#define _sci_

extern void init_sci(void);


extern void itoa(int ival,char *cad);
extern char leer_car(void);
extern void enviar_car(char c);
extern void enviar(char *cad);

#endif

En este mdulo existen las siguientes funciones;

extern void init_sci(void);

Se encarga de iniciar el dispositivo de comunicaciones asncronas a 9600bps


8N1 sin interrupciones.
extern void itoa(int ival,char *cad);

Esta funcin convierte un numero entero en una cadena de caracteres para


poder ser enviada por el SCI.

extern char leer_car(void);

54
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

Esta funcin lee un carcter del SCI por polling.

extern void enviar_car(char c);

Esta funcin enva un carcter al SCI por polling.

extern void enviar(char *cad);

Esta funcin enva una cadena de caracteres al SCI por polling.

Estas funciones son bastante sencillas de utilizar y el cdigo es bastante


comprensible por tanto no se explicarn en detalle. Los cdigos completos se pueden
encontrar en el apndice LISTADOS EN C.

7.2.3 spi.h

/*

SPI.H

Rutinas de manejo del SPI mediante polling.

car=spi(c) -----> Envia el caracter c y lee el caracter car del SPI.
envia_spi(c) --> Enviar un caracter por el SPI
car=recibe_spi() ----> Recibe un caracter por el SPI

*/

#ifndef _spi_
#define _spi_

#define spi_maestro() DDRD=0x38; SPCR=0x54; PORTD = 0x00


#define spi_esclavo() DDRD=0x04; SPCR=0x44

extern char spi(char c);


extern char recibe_spi(void);
extern envia_spi(char c);

#endif

Se puede observar que hay dos defines para spi_maestro() y spi_esclavo()


de esta forma cuando en el cdigo se incluyan alguna de estas dos cadenas, se

55
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

sustituirn por las instrucciones que inician el SPI en modo maestro o esclavo
respectivamente.

Adems, hay tres funciones que se encargan del manejo del SPI;

extern char spi(char c);

Esta funcin se utiliza tanto en modo maestro como esclavo para acceder al
SPI enviando y leyendo un carcter de manera simultanea, la nica diferencia entre
usarla en modo esclavo o maestro es que cuando el maestro llama a esta funcin hace
que se produzca la comunicacin, mientras que cuando es utilizada por un esclavo este
ha de esperar a que el maestro la utilice para que se produzca el intercambio de datos.

extern char recibe_spi(void);

Esta otra funcin recibe un dato por el SPI, solamente puede ser llamada por
un esclavo y al igual que la siguiente funcin contiene un pequeo protocolo para
asegurar que los datos llegan correctamente. El cdigo de la funcin es el siguiente;

char recibe_spi(void)
{
return spi('@');
}

Permanece esperando a que el maestro quiera establecer una comunicacin,


cuando esta se produzca enviara el carcter '@' para confirmar que el dato ha sido
recibido. Devuelve el valor recibido por el puerto.

56
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

extern envia_spi(char c);

Esta funcin, complementaria a la anterior es usada exclusivamente por el


maestro para mandar datos al esclavo, el cdigo es el siguiente;

envia_spi(char c)
{
char cspi;

do{
cspi=spi(c);
}while(cspi != '@');
}

Lo que hace es mandar el dato al esclavo hasta recibir confirmacin de que el


dato ha sido recibido, por medio del carcter '@' que mandara el esclavo al maestro con
la funcin recibe_spi().

7.2.4 sens.h

#ifndef _sens_
#define _sens_

#ifndef FP_REG_OFFSET
#define FP_REG_OFFSET 0x2000 /* Direccion base de la fpga */
#endif

/* sensor de proximidad 1 */
#define PROX1 (* (unsigned char *) (FP_REG_OFFSET + 0x10))

/* sensor de proximidad 2 */
#define PROX2 (* (unsigned char *) (FP_REG_OFFSET + 0x11))

/* sensor de proximidad 3 */
#define PROX3 (* (unsigned char *) (FP_REG_OFFSET + 0x12))

/* sensor de proximidad 4 */
#define PROX4 (* (unsigned char *) (FP_REG_OFFSET + 0x13))

/* sensor de proximidad 5 */
#define PROX5 (* (unsigned char *) (FP_REG_OFFSET + 0x14))

/* sensor de proximidad 6 */
#define PROX6 (* (unsigned char *) (FP_REG_OFFSET + 0x15))

/* sensor GP2D12 1 */
#define GP1 (* (unsigned char *) (FP_REG_OFFSET + 0x20))

/* sensor GP2D12 2 */
#define GP2 (* (unsigned char *) (FP_REG_OFFSET + 0x21))

57
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

/* sensor GP2D12 3 */
#define GP3 (* (unsigned char *) (FP_REG_OFFSET + 0x22))

/* sensor GP2D12 4 */
#define GP4 (* (unsigned char *) (FP_REG_OFFSET + 0x23))

/* sensores de color de linea */


#define SENSLIN (* (unsigned char *) (FP_REG_OFFSET + 0x24))

#define TAM_CODIGO 8
#define UMBRAL_GP 35
#define SENS1 0x40
#define SENS2 0x20
#define SENS3 0x10
#define SENS4 0x08
#define SENS5 0x04
#define SENS6 0x02
#define INTHG 0x01
#define LIN1 0x01
#define LIN2 0x02
#define LIN3 0x04
#define LIN4 0x08
#define LIN5 0x10
#define LIN6 0x20
#define LIN7 0x40
#define LIN8 0x80
#define T1_MS 250

/* Funcion sprox
segun el valor de modo efectua las siguientes lecturas en los
sensores de proximidad, el valor devuelto contiene los sensores
que hay que revisar:

modo=0 -> lectura rapida no segura


modo=1 -> lectura segura con codigo fijo
modo=2 -> lectura segura con codigo aleatorio
*/
extern char lee_sprox(char modo, unsigned int divi);
extern char lee_gp2(void);
extern char lee_slin(void);
extern void init_ad(void);
extern void delay(unsigned int time);

#endif

Este es el mdulo ms complejo y hay que entrar en detalle en algunas


cuestiones sobre l. Antes que nada se han definido una serie de direcciones donde
estarn contenidos los valores de los sensores, as PROX1 a PROX6 sern posiciones de
memoria que contendrn cierta informacin sobre el estado de cada uno de los sensores
de proximidad. GP1 a GP4 sern posiciones de memoria que contienen el valor de
distancia en cm que ha medido cada uno de los sensores GP2D12, y por ltimo
SENSLIN contiene la informacin de los sensores de color de la lnea que han detectado
alguna lnea. Por otra parte tambin se han definido el tamao del cdigo a enviar por
los sensores de proximidad ("TAM_CODIGO"), el umbral de deteccin de los sensores
GP2D12 ("UMBRAL_GP") y mscaras para cada uno de los sensores que corresponden

58
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

al bit que ocupa cada sensor en su puerto. Hay que recordar que los sensores de color de
la lnea ocupan el puerto 2 entero, los sensores de proximidad ocupan 6 bits del puerto 1
para la recepcin y 6 bits del puerto 4 para la transmisin, el sensor de inclinacin
ocupa 1 bit del puerto 1.
En las definiciones de las funciones se encuentran las siguientes funciones;

extern char lee_sprox(char modo, unsigned int divi);

Esta funcin hace una medida con los sensores de proximidad por
infrarrojos. Los argumentos son char modo que define el modo de la lectura, su valor
puede ser 0,1 o 2 como se indica en el comentario que hay antes de los prototipos de las
funciones, para una lectura rpida, una lectura segura con cdigo fijo y una lectura
segura con cdigo aleatorio. El segundo argumento, unsigned int divi indica cual es
el valor de divisin del divisor de frecuencia que se encarga de generar la portadora para
estos sensores.

La manera de funcionar de esta funcin es la siguiente;

Se inicializan los valores necesarios


Se determina que tipo de lectura se quiere hacer en funcin del argumento
modo, y se genera el cdigo aleatorio si as fuese especificado; a
continuacin se expone el cdigo que hace esto:

tcod=TAM_CODIGO;
if(modo==2){
codigo=(char)(abs((rand()/128)-1) | 0xAA);
}else if(modo==1){
codigo=0xAA;
}else if(modo==0){
codigo=0xAA;
tcod=2;
}

Si modo es igual a 2 se genera el cdigo aleatorio. La funcin rand


devuelve un entero con signo el cual se divide entre 128 y se le elimina el
signo con la funcin abs(), ahora ser un numero aleatorio comprendido
entre el 0 y el 255, se ponen a 1 cuatro bits alternados para garantizar que se
esta emitiendo un cdigo que no sea todo ceros y que sea fcilmente

59
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

identificable por el receptor y finalmente forzamos la conversin a char, as


se obtiene un char generado aleatoriamente, que ser el cdigo a enviar.

Se enva y se comprueba la recepcin de cada uno de los bits del cdigo.


Se escriben los datos obtenidos a cada una de las posiciones de memoria
designadas y se devuelve un char con la informacin de las lecturas de los
sensores.

extern char lee_gp2(void);

Esta funcin lee los sensores GP2D12, las distancias medidas se almacenan
en las posiciones de memoria indicadas anteriormente, y el valor que se devuelve es un
char en el que esta puestos a 1 los bits correspondientes a los sensores que han dado una
medida por debajo del umbral. Las posiciones de estos bits se corresponden con las de
las mascaras creadas para dichos sensores. Para poder usar esta funcin correctamente
el sistema de conversin A/D ha de estar activado.

Funciona de la siguiente manera;


Se obtienen las medidas del conversor A/D
Se comprueban que sensores han dado medidas por debajo del umbral
Se calculan las distancias medidas por cada uno de los sensores y se
escriben en su correspondiente registro.
Se devuelve un char que contiene la informacin de que sensores han dado
medidas por debajo del umbral.

extern char lee_slin(void);

Esta funcin lee el estado del sensor de inclinacin, y en funcin del


resultado analiza los primeros cuatro sensores de color de la lnea y los ltimos cuatro,
pues hay cuatro sensores en la cara inferior del robot y otros cuatro en la cara superior.
Si alguno de los cuatro sensores han encontrado la lnea se escribe el resultado de los
cuatro sensores en SENSLIN para que pueda ser analizado por el programa principal o
por una funcin de ms alto nivel.

extern void init_ad(void);

Se encarga de iniciar el sistema del conversor A/D de tal manera que pueda
ser usado por la funcin que lee los sensores GP2D12.

60
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

extern void delay(unsigned int time);

Esta funcin es un retardo, el argumento es valor del retardo en milisegundos


y pueden producirse retardos de hasta 65 segundos.

7.2.5 Programa principal defp.c

Este programa ha sido desarrollado para realizar demostraciones y lo que hace


es detectar los obstculos e intentar evitarlos. No tiene un objetivo a largo plazo y su
nica funcin es demostrar el funcionamiento del sistema completo integrando los
sensores, motores los dos microcontroladores y sus respectivas FPGAs a travs de las
comunicaciones serie sncronas.

El programa aqu descrito utiliza las comunicaciones serie sncronas y los


sensores de proximidad y los de distancia (GP2D12). Se ha definido una tabla de
situaciones posibles en funcin de el estado de algunos sensores. Se ha aadido un
filtrado de las acciones para que el comportamiento del robot sea suave y no tome
decisiones bruscamente, lo que se hace es registrar la decisin tomada un numero
definible de veces, solo cuando siempre se decida tomar la misma accin esta ser
llevada a cabo. Hay algunas acciones que llevan un retardo asociado, este retardo se
aade en una condicion if que comprueba si se ha tomado dicha decisin y se aade el
retardo necesario.

El listado del programa es el siguiente;


#include <io6811.h>
#include <sens.h>
#include <fpga.h>
#include <sci.h>
#include <spi.h>
#include <stdlib.h>

#define N_MUES 3 /*numero de repeticiones de la decision tomada para que sea


valida */

void main(void)
{
char lec,gp,cspi,ultorden,irprox=0,gpd=0x00;
int div=0x001A,i,j;
char ato[10];
char ordenes[N_MUES],ordenact;

spi_maestro(); /* Se inicia el SPI como maestro*/

61
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

init_ad(); /* Se inicia el sistema de conversion A/D*/


init_sci();

div=0x0014; /* Valor del divisor de frecuencia */

while(1){
while(1){

/* Tabla con los codigos de los mensajes:


'0' -> Parado.
'1' -> Via libre, anda hacia adelante.
'2' -> objeto acercandose, gira suavemente hacia izqda
'3' -> objeto acercandose, gira suavemente hacia dcha
'4' -> objeto proximo, gira a dcha
'5' -> objeto proximo, gira a izda
'6' -> objeto en frente, da media vuelta
'7' -> Robot en un callejon, anda hacia atras.
*/

/* enviar("\n\rOrden Actual= "); /*solo para depuracion


enviar_car(ordenact);
*/
/* comienza el codigo de filtrado de decisiones */
for(i=0;i<N_MUES-1;i++){
ordenes[i]=ordenes[i+1];
}
ordenes[N_MUES-1]=ordenact;
for(i=0;i<N_MUES-1;i++){
if(ordenes[i]==ordenes[i+1])
j=1;
else{
j=0;
break;
}
}
if(j==1 && (ultorden != ordenact)){
envia_spi(ordenact);
/*enviar_car(ordenact); solo para depuracion */
ultorden=ordenact;
/* acaba el codigo de filtrado y comienza el if de retardo*/
if (ordenact == '7'){
delay(4000);
ordenact='6';
envia_spi(ordenact);
/*enviar_car(ordenact); solo para depuracion*/
ultorden='6';
delay(1500);
}else if(ordenact == '6'){
delay(1500);
}
}
/* acaba el if de retardo */

/* lee los sensores de proximidad y los GP2D12 */


lec=lee_sprox(2,div);
irprox=(lec & (SENS4 + SENS3 + SENS2 +SENS1));
gp=lee_gp2();
gpd = gp & (0x01+0x02);

/* comienzan las decisiones en funcion de los sensores


de proximidad, estos son los que tienen prioridad */

if(irprox!=0){
if(irprox == (SENS1 + SENS2)){
ordenact='6';
continue;
}else if(irprox == SENS1){

62
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

ordenact='4';
continue;
}else if(irprox == SENS2){
ordenact='5';
continue;
}else if(irprox == SENS3){
ordenact='4';
continue;
}else if(irprox == SENS4){
ordenact='5';

continue;
}else if(irprox == (SENS3 + SENS4)){
ordenact='7';
continue;
}
}

/* comienzan las decisiones en funcion de los sensores


GP2D12*/

if(gpd != 0){
if(gpd == (0x01 +0x02)){
if(abs(GP1-GP2)<4){
ordenact='3';
continue;
}else if(GP1<GP2){
ordenact='3';
continue;
}else{
ordenact='2';
continue;
}
}else if(gpd==0x01){
ordenact='3';
continue;
}else if(gpd==0x02){
ordenact='2';
continue;
}
}

/* si se ha llegado a este punto es que no hay obstaculos


y habra que seguir recto*/

ordenact='1';
continue;
}
}
}

63
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

8 Mecnica

8.1 Introduccin.

El diseo mecnico del robot se ha pensado de tal manera que mantenga la


mxima simetra posible, esto se ve reflejado en el hecho de haber escogido una
traccin por orugas sobresaliendo estas por arriba y por debajo, de tal manera que
siempre estn en contacto con el suelo, y en caso de vuelco del robot este pueda seguir
movindose . Tambin afecta esta simetra a la distribucin de los sensores los cuales se
han colocado idnticamente en las dos caras de delante y detrs del robot, as como en
los laterales tambin estn colocados simtricamente. Esto aporta varias ventajas; La
primera de todas es que el robot puede seguir operativo tras sufrir un golpe, sea
intencionado o no, que haga que vuelque. La segunda es que se ahorran muchas
maniobras ya que en muchos casos no ser necesario dar la vuelta, pues el robot no
tiene parte de delante y detrs diferenciales ya que son idnticas, adems, es capaz de
detectar objetos aproximndose por todos los flancos, lo cual es de agradecer para
combates de sumo donde no se sabe por donde se puede aproximar el adversario.

Se han hecho unos diseos de poleas y algunas piezas para dar una traccin
rgida al conjunto y una estructura robusta que pueda soportar ambientes adversos.
Estos se presentan en el Anexo correspondiente a este captulo.

8.2 Poleas

Hay varias poleas, las primeras, de un dimetro de 12cm aproximadamente se


usan acopladas al eje del motor para transmitir la traccin a las orugas. Estas poleas se
fijan al eje del motor mediante una unidad de fijacin cnica autocentrante que
garantiza la unin mecnica de dicha polea con el eje del motor. Estas poleas son de
aluminio y estn mecanizadas para poder colocar la unidad de fijacin.

Las segundas son unas poleas algo ms pequeas que sirven para mantener la
estructura de las orugas y para tensar la correa. Estas tambin han sido fabricadas en

64
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

aluminio y han sido mecanizadas para poder embutir un rodamiento que har de
elemento de sujecin de la polea al eje.

8.3 Ejes

Para unir las poleas ms pequeas a la estructura ha sido necesaria la fabricacin


de unos ejes. Se ha diseado un eje en acero que une dos poleas de ambos lados, estas
poleas estn fijas y su nica funcin es la de soportar las orugas. Por otro lado hay dos
ejes que nicamente unen una polea a la estructura y estos son los que se mueven para
tensar cada una de las dos correas. Estos ejes tambin son de acero.

8.4 Correa Dentada

Como oruga se utiliza una correa dentada del mismo paso que las poleas, esta
correa se ve tensada por una de las poleas pequeas y se asegura que no se salga de las
poleas por medio de unas guas que estas llevan incorporadas. Sin embargo la superficie
exterior de esta correa no es lo suficientemente adherente como para garantizar la
traccin necesaria, es por ello necesario revestir el exterior de la correa con un material
adherente que tenga un coeficiente de rozamiento lo ms elevado posible.

65
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

CONCLUSIONES Y TRABAJOS FUTUROS

Como primera conclusin que el autor ha obtenido de este proyecto es que el


campo de la robtica, y ms concretamente el de los robots autnomos es
sumamente amplio e interesante, y muy aplicable tanto para resolver problemas de
la vida cotidiana como para desarrollar tareas propias de las iniciativas ms
ambiciosas como por ejemplo la exploracin espacial. Es un campo muy amplio
pues requiere de la coordinacin de mltiples disciplinas, desde las ms ingenieriles
como por ejemplo la mecnica, hasta disciplinas tales como la inteligencia artificial,
etc.

Como conclusiones ms tcnicas, sobre todo en lo que se refiere a los sensores y


al procesamiento de stos para conocer el ambiente, el autor esta convencido de que
es imposible tomar decisiones de manera eficaz sin tener un aparato sensorial que
ofrezca una informacin muy rica. De este modo est tambin convencido que los
sistemas de sensores normalmente utilizados actualmente (ultrasonidos, infrarrojos,
etc.) ofrecen una informacin cualitativamente pobre y su funcin quedara relegada
a la de servir como sistema redundante de apoyo para otros ms complejos y que
ofrecen una informacin mucho ms amplia desde el punto de vista cualitativo,
como por ejemplo sistemas de visin artificial. Aun as, para llevar a cabo tareas
sencillas en entornos definidos estos sensores dan unos resultados muy aceptables.

El autor de este proyecto ha tenido la ocasin de comprobar que este tipo de


proyectos goza de gran aceptacin entre los estudiantes de ingeniera, ofreciendo un
amplio abanico de posibilidades para nuevos proyectos, pues se pueden integrar
muchas de las especializaciones de la electrnica, como las comunicaciones,
sistemas digitales, instrumentacin electrnica, control, electrnica de potencia, etc.
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

Como trabajos futuros, pueden citarse los siguientes;

Desarrollo de un programa para poder recibir y enviar datos con los sensores de
proximidad por infrarrojos. Una vez desarrollado este sistema se podra construir un
sistema sencillo de balizas que enven datos al robot sobre el lugar en el que esta.

Desarrollo de un programa para poder usar los sensores de proximidad de


infrarrojos como sensores de medida de distancia a corto rango. Dentro de este
desarrollo se puede incluir tambin un programa para tomar lecturas alternadas con
varios sensores midiendo la distancia para obtener la posicin del objeto por
triangulacin.

Aadir comunicaciones al robot para poder darle ordenes por diversos medios,
radio, Internet, GSM. Permitiendo a su vez que el robot pueda mandar informacin.
Como un paso ms avanzado se podra crear otro robot con capacidades para las
comunicaciones, que cooperase, o por lo menos interactuase con este.

Desarrollar un sistema de carga de las bateras plenamente integrado en el


robot, y una estacin de carga que suministre la corriente necesaria para la carga del
robot. Esta estacin tendra capacidad para comunicarse con el robot, de tala manera
que cuando el robot detecte que la carga de las bateras es baja, pueda ir a la estacin
a recargarse. Esto es un avance muy grande en la autonoma del robot, pues nadie
tiene que vigilar su carga y recargarlo.

Creacin de un programa que se comunique con el mdulo de Control de


Motores y Movimiento para obtener informacin de la posicin y poder hacer un
mapa de la localizacin del robot. Dentro de este desarrollo se podran incluir varios
sistemas redundantes para hacer una mejor descripcin del mapa. Otros sistemas que
se pueden aadir son brjulas, un sistema basado en dos o tres acelermetros que
registren la cinemtica del robot, girscopos, etc.

Modificacin de la estructura mecnica para poder desarrollar otras tareas.


Algunas de las capacidades podran ser subir y bajar escaleras, moverse en campo
Diseo y Construccin de un Robot Autnomo. Memoria
Control Central y Sensores.

abierto, aumentar la velocidad, moverse por tuberas o por tendidos elctricos para
detectar averas, etc.

Otra modificacin, y quiz esta sea la ms grande de todas, sea aumentar las
capacidades sensoriales del robot aadiendo un sistema de visin artificial con una
cmara digital. Este sistema tiene el inconveniente de que habra que sustituir la
unidad de procesamiento por una mucho ms potente, pero podra aprovecharse la
estructura creada y el mdulo de Control de Motores y Movimientos.

You might also like