Upload
yeison-a-castano
View
7.622
Download
12
Embed Size (px)
DESCRIPTION
Describe los pasos y la implementacion de un robot minizumo montado sobre un microcontrolador 89c52. Servomotores y codigo en ensamblador.
Citation preview
PROYECTO MICROPROCESADORES – ROBOT MINISUMO
1
Resumen----En este informe se describe el procedimiento
para cumplir con el objetivo de crear un robot mini sumo que
además tendrá características extras como ser un seguidor de
línea y evasor de obstáculos. El robot manejara para su
movimiento servomotores en dos de sus 3 llantas, para la
detección de obstáculos y medición de distancia un sensor de
ultrasonido referencia SRF02 y para el seguimiento de línea se
contara con dos sensores ópticos CNY70, el control del robot se
hará con un microcontrolador AT89c52 programado en
lenguaje ensamblador .
Palabras clave------Microcontrolador, sensor de distancia,
comunicación serial, servomotores, sensores ópticos, lenguaje
ensamblador.
I. INTRODUCTION
N el curso de microprocesadores se abarco el
estudio del lenguaje ensamblador con el cual se
hicieron algunos programas prácticos simulados
sobre el 8086, con esta experiencia y los
conocimientos posteriores sobre micro controladores
se implemento en un AT89c52 una aplicación con la
cual se manejara el PWM que controla los
servomotores que darán movimiento al robot.
Cuenta con un grupo de sensores los cuales según
requerimientos controlaran la dirección de las
rotaciones individuales de las dos llantas con
tracción con que se cuenta. El ojo del robot que
también ofrecen la posibilidad de medir distancia y
que será el que informa sobre la presencia o no de
obstáculos es un sensor de ultrasonido que hace uso
del puerto serie, para el seguimiento línea se usaran
dos sensores CNY estos también serán los
encargados de evitar que el robot se salga del área
de combate en el modo pelea del robot mini sumo.
Primero se explicaran los requerimientos del
proyecto, luego se hará una explicación de cómo se
logro cada objetivo individualmente y por último se
mostrara el resultado tanto software como hardware
del robot completo.
II. REQUERIMIENTOS
EVADIR OBSTACULOS
El robot será capaz de desplazarse por un área con
obstáculos localizándolos a medida que avanza y evitando
chocarse con ellos.
SEGUIR LINEA
Seguir una línea de color negro, su forma no tiene que
tener una forma predeterminada, el robot seguirá las
diferentes curvas o rectas que tome esta guía a lo largo del
trayecto.
ROBOT MINI SUMO
Competir contra otro robot, el objetivo es sacar al
contrincante de un círculo con un diámetro definido, esto
implica entre sus tareas el encontrar al otro participante y
luego ir en búsqueda de empujarlo, teniendo siempre
presente evitar salirse o que lo saquen de área de
competencia.
III. PROCEDIMIENTO
El robot contara con 3 modos cada uno para cumplir
con uno de los requerimientos, se vera a lo largo de la
explicacion que los modos no estan realmente
separados ya que cada uno hace uso en menor a
mayor manera de las caracteristicas usadas en los
otros.
Proyecto de Microprocesadores y
ensambladores.
Robot Mini sumo Con Servomotores Universidad del Valle, Diciembre 2008
CESAR FERNANDO NEIRA PEÑA 0325091, YEISON CASTAÑO 0330471
E
PROYECTO MICROPROCESADORES – ROBOT MINISUMO
2
1. MODO EVASION DE OBSTACULOS
El siguiente diagrama de flujo (diagrama de flujo
#1) presenta el funcionamiento de manera general:
Diagrama de flujo # 1. Modo evasión de obstáculos
Profundizando en las características de este modo se
explicara primero lo referente a las llantas y los
motores asociados a ellas y luego el sensor que se
encarga de verificar la existencia de obstáculos.
ORGANIZACIÓN DE LAS LLANTAS
Se realizo una configuración con 3 llantas (figura 1)
Figura 1.
En las cuales la dos de adelante tendrán la fuerza y
darán la dirección teniendo un control individual ya
que cada una cuenta con un servomotor que es
manejado por medio de señales de PWM que se
explicaran más adelante.
La llanta trasera será una rueda libre que solo seguirá
el movimiento de las dos delanteras dando estabilidad
no se tiene ningún control sobre ella.
SERVOMOTORES
Se adquirió un servomotor genérico, que tenia
características del servomotor Futaba referencia S3003,
Es un tipo de motor de c.c especial y la caracteristica
principal que poseen es la de poder posicionarse en
una posicion indicada dentro de un intervalo
normalmente de 180°. Para los requerimientos del
robot (el giro de las llantas) se requiere de un rango
completo 360° para lo cual se tuvo que hacer una
alteracion al motor, quitando las imitantes que le
daban ese pequeño intervalo de trabajo. Este motor es
manejado por medio de un tren de pulsos que le diran
el angulo a buscar de la siguiente manera:
Figura 2.
Estas 3 posiciones son las elementales pero con
pulsos intermedios se tendran el resto de los angulos.
Por medio de un potenciometro interno que gira junto
con el motor el servo es capaz de saber su
localizacion en grados y parar cuando llegue a la
posicion pedida, dependiendo del pulso que se le de y
que se encuentre en su rango de operación el avanzara
o retrocedera con mayor o menor velocidad
dependiendo de la posicion actual y la distancia que
lo separa de la pedida, para que el motor mantenga
una posicion y se oponga a cambios externos necesita
de una continua llegada de pulsos de un mismo valor.
PROYECTO MICROPROCESADORES – ROBOT MINISUMO
3
La primera limitante para poder lograr un giro
completo es un tope fisico en los engranajes internos
de su caja reductora (figura 3), que no deja superar los
180° de rotacion, para esto fue necesario abrir el
motor el cual viene en una pequeña caja.
Figura 3. Piñones del servomotor
El segundo problema es una realimentacion que le
indica la posicion actual, para engañar a esta
realimentacion se suprimio el potenciometro que
censaba la posicion (figura 4) al medirlo se encontro
que era un poteniometro de 5kΩ este fue cambiado
por un trimmer con el que se ajusto el valor
intermedio del potenciometro asociado a 90°, de esta
manera la unica posicion en la que la realimentacion
funcionara y le dira que pare sera cuando se le envie
el pulso para que se hubique en 90°.
Figura 5. Potenciómetro del servomotor
Para otros valores rotara para la derecha (si se le pide
un ángulo mayor a 90°) o la izquierda (si se le pide
ángulo menor) de manera indefinida mientras el pulso
este presente ya que nunca tendrá una referencia para
saber que llego y que tiene que parar. Teniendo este
control sobre la dirección de la rotación ya se puede
manejar el movimiento del robot enviándole a cada
llanta el pulso correspondiente al ángulo Φ que dará
el movimiento deseado.
MOVIMIENTO
DE ROBOT
MOTOR 1 MOTOR 2
ADELANTE Φ > 90 Φ < 90
ATRÁS Φ < 90 Φ > 90
GIRO
IZQUIERDA Φ < 90 Φ < 90
GIRO
DERECHA Φ > 90 Φ > 90
PARADO Φ = 90 Φ = 90
Para proveer la mayor velocidad se enviaran pulsos
referentes a 180° o 0°, se observa que al ir adelante o
atrás las rotaciones de los motores debe estar
invertidas esto por la forma en que se ubicaron los
motores respecto a las llantas, figura 6.
Figura 6. Posición de los motore.
Como se dijo anteriormente los motores son
controlados por un tren de pulsos con diferentes
duraciones este control también conocido como
modulación por anchura de pulso, PWM (Pulse Width
Modulation), fueron generados con ayuda de los
temporizadores T0 Y T2 del microcontrolador. Cabe
notar que se debió hacer uso del temporizador T2 ya
que el temporizador T1 se utiliza para el manejo de la
comunicación serial entre el sensor y el micro.
PWM
Respecto al manejo de los temporizadores se
manejaron los registros asociados a cada uno, para el
temporizador 0 y 1 se tiene el registro TCON Y
TMOD :
TCON:
De este registro lo único que se utilizara será los bits
TR1 Y TR0 que se usan para que los contadores
inicien la cuenta.
PROYECTO MICROPROCESADORES – ROBOT MINISUMO
4
TMOD:
En este registro se modifica los bits M0 y M1
asociados al timer 0 de manera que se escoja el modo
en el que funcionara:
M1 M0 MODO DE
OPERACIÓN
0 0 MODO 0
0 1 MODO 1
1 0 MODO 2
1 1 MODO 3
Para lograr este PWM también se requiere modificar
el registro TMOD en el cual se escoge el modo en el
cual el temporizador trabajara, se escogió para el
temporizador T0 el modo 1 en el cual trabaja como un
temporizador de 16 bits en el cual se le puede fijar un
inicio en un valor dado en sus registros TH0 y TL0.
Este temporizador producirá uno de los pwm, el otro
será producido por el temporizador T2 este de igual
manera se colocara en el modo para que sea un
temporizador de 16 bits, también cuenta con registros
en los que se carga un valor inicial:
Su registro de control
T2CON:
Para seleccionar el modo de este temporizador se
modifican los bits 5, 4, 2 y 0 del T2CON.
La forma en que se genera el PWM con cada uno de
los temporizadores es la misma. En el diagrama de
flujo #2 se observa la idea:
Diagrama de flujo # 2. Generación PWM
Cuando los temporizadores terminan la cuenta
generan una interrupción por temporizador, para que
el micro detecte las interrupciones de los
temporizadores se tienen que habilitar previamente
en el registro IE (interrupts enable).
REGISTRO IE
EA X ET2 ES ET1 EX1 ET0 EXO
Para habilitar las interrupciones de los temporizadores
T0 y T2 basta con poner en 1 el bit EA que es la
activación global y junto con ella habilitar los
PROYECTO MICROPROCESADORES – ROBOT MINISUMO
5
correspondientes ET2 y ET0 que hacen referencia a
las interrupciones de los timers 2 y 0
correspondientemente, las cuales se activan cada que
los contadores llegan a su cuenta máxima para los
modos que se están usando que es de tipo 16 bits la
cuenta máxima a la que se podrá llegar será FFFFH lo
que equivale a 32,767mseg que es suficiente para
cubrir el ciclo del PWM del servo que es de 20mseg.
SENSOR UTILIZADO
El sensor frontal del robot es de referencia SRF02
(figura 7), el cual es un medidor ultrasónico de
distancia que emplea un único transductor; es decir
con un mismo dispositivo realice la transmisión y
recepción de las señales; acepta comunicaciones I2C
y serie, esta segunda fue la elegida ya que el
microcontrolador 89c52 posee puerto serie, la
interface serie del sensor tiene un formato estándar de
a 9600 baudios 1 bit de inicio, 2 de stop y sin paridad.
Los niveles de tensión son TTL por lo que se puede
conectar directamente al microcontrolador.
Figura 7. Sensor SRF02
CARACTRERISTICAS GENERALES
Finalice
Tensión de alimentación 5Vcc
Consumo típico de 4mA
Frecuencia ultrasónica de 40KHz
Control automático de ganancia
Rango de medidas de 15 cm hasta 6 m
La comunicación serie con la que se controlo este
sensor se explica a continuación:
COMUNICACION SERIE
MODO SERIAL DEL SENSOR SRF02
Este modo de interfaz entre el SRF02 y el master es
seleccionado realizando la conexión de pines que se
muestra en la figura No 2, así se configura una
comunicación serie estándar con niveles TTL a 9600
baudios.
Figura No 8. Modo de conexión para comunicación
serial de SRF02
COMUNICACION SERIAL DEL
MICRONTROLADOR AT89C52
Características del Puerto serie del 89c52
Habilidad de comunicación full-dúplex.
Habilidad de comunicación sincrónica y
asíncrona.
Compatible con TTL.
Cuatro modos de operación.
Velocidades de transmisión y recepción
estándares RS-232.
EL 89C52 posee el registro SCON con el cual se
configura la comunicación serial y se muestra en la
figura No 3
FIGURA No 3. REGISTRO DE CONTROL DEL
PUERTO SERIE.
RI bandera de interrupción de recepción.
TI bandera de interrupción de transmisión.
RB8 es el noveno bit recibió en modo 2 y 3
TB8 es el noveno bit a transmitir en modo 2 y 3
REN habilitación de la recepción
SM2 habilitación del modo multiprocesador
SM0, SM1 especificación del modo de operación
Para el proyecto se trabajo con el puerto serie en
modo 1 el cual posee las siguientes características
Comunicación Full dúplex.
Asíncrono
PROYECTO MICROPROCESADORES – ROBOT MINISUMO
6
Baudaje programable generado por el
timer1
Compatible con RS-232
El sensor envía la distancia tomada en 16 bits, posee
un rango de medida de 15 cm a 6 mts, pero ya que el
objetivo en el modo esquiva objetos del robot es
detectar objetos cercanos el programa solo tendrá en
cuenta la información del sensor cuando este
devuelva una medida pequeña lo que significara que
hay un obstáculo, la distancia para la cual tomara la
decisión de esquivar se vio limitada a la medida
mínima del sensor que puede variar en algunos
centímetros dependiendo de la temperatura,
realizando pruebas al sensor por separado se
obtuvieron los siguientes valores reales para
diferentes medidas:
DISTANCIA REAL
DEL OBJETO
MEDIDA
ENTREGADA POR EL
SENSOR
> 18 cm, < 23 cm Tolerancia de + 3cm
> 24 cm, < 100 cm Tolerancia de ± 3cm
> 100 cm, < 550 cm Tolerancia de ± 4cm
< 18 cm Tolerancia de + 15cm
> 550 cm 0 cm
Tabla #1. Pruebas sensor de ultrasonido
De la tabla anterior se obtuvo que la medida mínima
del sensor es aproximadamente de 18 cm, por debajo
de esta medida lo datos serán erróneos y estarán entre
la medida devuelta estará entre 21cm y 33cm por lo
que se decidió que cuando el sensor encuentre una
medida igual o menor a 32 se supondrá que hay un
obstáculo y girara para evitarlo en los casos en que las
medidas sean mayores seguirá hacia adelante, el
código de evasión sigue lo mostrado en el diagrama
de flujo visto al principio de la explicación de este
modo.
Para pedir información al sensor hay que seguir con
unas reglas enviándole una secuencia de comandos
para:
Ajuste del sensor, petición de medida y toma de
resultados, como se ve en el diagrama de flujo #3,
para pasar de un comando a otro se están verificando
las banderas asociadas al envió y transmisión de datos
por el puerto serial del microcontrolador RI y TI.
Diagrama de flujo # 3. Comunicación sensor µprocesador
Al terminar la recepción los datos quedan guardados
en dos variables en la memoria interna del
microcontrolador PALTA, y PBAJA:
PROYECTO MICROPROCESADORES – ROBOT MINISUMO
7
Luego de obtener la medida el microcontrolador debe
realizar una comparación y tomar la decisión
adecuada, esto se hizo haciendo una comparación
lógica AND, como se dijo anteriormente la medida
entregada se encuentra en 16 bits y se quiere que si la
medida esta por debajo de los 32cm el robot realice
un giro, lo que significa lo mismo que si por lo
menos algún de los 6 bits menos significativos esta en
uno y los 10 mas significativos en cero se cumplirá la
comparación, de esta manera la comparación a
realizar será la siguiente:
El registro que tiene la parte alta de la medida se le
hará una and con FFH así solo en el caso en que los 8
bits sean cero la comparación dará como resultado
cero,
PARTE
ALTA X X X X X X X X
COMPARAR
CON FFH 1 1 1 1 1 1 1 1
Si alguno de sus bits estuviera en uno significaría que
la medida esta por encima de los 255 centímetros, en
este caso el robot podrá omitir la revisión de la parte
baja y seguir adelante pasando a pedir una nueva
medida, en caso de que la comparación sea cero se
podrían dar dos casos:
Que tengamos una medida por encima de los 6 mts
para esto faltaría ver si la parte baja de la medida
también es cero, o que la medida este por debajo de
los 255 cm, para saberlo se realiza una segunda AND
con la parte baja en este caso la comparación se hará
con el valor E0, de esta manera la comparación solo
cera igual a cero en caso de que se encuentren en cero
los 3 bits más significativos de este registro:
PARTE
ALTA X X X X X X X X
COMPARAR
CON C0H 1 1 1 0 0 0 0 0
Si la comparación es diferente de cero quiere decir
que el objetivo se encuentra entre los 255cm y los
32cm así que la orden para el robot será seguir
adelante. En caso contrario, si la comparación es
cero, la medida podría ser menor a los 32cm caso en
que el robot hará la maniobra para esquivar, o se
completaría la condición para decir que esta por fuera
de los 6mts si el valor del registro es 0. Las acciones
que tomara el robot al hacer las comparaciones se ven
en la siguiente tabla:
PALTA PBAJA MEDIDA ACCION
0 0 ∞ SEGUIR
ADELANTE
≠ 0 X > 255 CM SEGUIR
ADELANTE
0 ≥ 32 ≥ 32 CM < 600 CM SEGUIR
ADELANTE
0 < 32 < 32 ESQUIVAR
Tabla #2. Acciones del motor después de la medida.
Donde PALTA el el registro de 8 bits donde se
encuentra a parte alta de la medida y PBAJA es el
registro donde se encuentra la parte baja como se
había dicho anteriormente, la X hace referencia a que
no importa el valor que tome PBAJA en ese caso.
NOTA: Cabe anotar que cuando el robot toma la
decisión de girar esta esta condicionada por un
retardo de esta manera no se queda girando
eternamente, este retardo hará que el robot realice tan
solo un giro de aproximadamente 90 grados antes de
volver a mirar si hay un obstáculo y saber si debe
seguir girando o puede ir adelante.
PROYECTO MICROPROCESADORES – ROBOT MINISUMO
8
2. MODO SEGUIMIENTO DE LINEA
El siguiente diagrama de flujo (diagrama de flujo
#4) presenta el funcionamiento de este modo en
manera general:
Diagrama de flujo # 4. Seguimiento de línea.
La idea en este modo fue tener la línea a seguir en
medio de dos sensores de esta forma cuando el robot
se intente desviar hacia alguna dirección uno de los
sensores ingresara en la línea y este la detectara
enviando una señal a uno de los puertos del
microcontrolador, de esta manera se decidirá que
corrección poner en marcha haciendo girar al robot
hacia el lado contrario al que se detecto la
desviación.
Se usaron sensores CNY70 que son de tipo óptico
(Figura 9.)
Figura 9. CNY70
Tiene un emisor de luz y un receptor internamente el
circuito de prueba sigue el siguiente esquema:
Figura 10. Circuito de Test CNY70.
Estos sensores se alimentan con 5 volts, la superficie
en la cual se seguirá la línea (de color negro) es de
un fondo blanco, con estas características y las
propiedades inversas de estos dos colores de reflejar
la luz en una medida menor (color negro) o mayor
(color blanco), se configuraron los sensores de tal
manera que al encontrar la superficie mas reflactante
(blanca) entregue un nivel alto, el cual el cual le dará
la información necesaria para que el
microcontrolador tome un decisión al respecto, la
configuración que se uso fue es la mostrada en la
figura 11.
.
Figura 11. Configuración CNY70
Debido a que las superficies no son ideales se
requiere de una calibración, para esto se uso un
comparador el que ayudo a mejorar la respuesta del
PROYECTO MICROPROCESADORES – ROBOT MINISUMO
9
SNY enviando al puerto del microcontrolador el
nivel correspondiente.
Figura 12. Posición de los CNY en el carro.
3. MODO PELEA:
Este modo se diseño para realizar competencia de mini
sumos, la competencia se realiza entre dos robots sobre un
área circular de color negro y con el borde blanco como se
muestra en la figura 13:
Figura 13. Área de competencia
Al inicio de la competencia se colocan los adversarios en
direcciones opuestas (figura 14), y deben esperar 5
segundos antes de empezar la búsqueda del enemigo, el
objetivo es sacar al contrincante del campo de batalla
evitando salirse o que lo saquen.
Figura 14. Posición inicial
Para cumplir con estos requerimientos se utilizo una
combinación de las características usadas en los dos modos
anteriores, de la siguiente manera:
Antes de realizar cualquier acción se hizo un retraso 5
segundos, pasados los cuales el programa entra en la
primera fase que es la búsqueda del contrincante para esto
se envía a los servos la señal correspondiente al
movimiento girar, y se pide al sensor frontal (SRF 02)
como se hizo en el modo esquiva obstáculo informe sobre
la presencia de un objeto en la cercanía (contrincante), pero
en vez de buscar esquivarlo después de encontrado se envía
la orden ir hacia él, cabe anotar que en este modo pelea, la
velocidad de los servomotores al girar es mucho menor que
la que tiene cuando emprende una envestida, esto para
darle tiempo al sensor de ultrasonido de ubicar
correctamente al contrincante y tomar la dirección correcta.
El algoritmo que sigue el robot se resume en el diagrama
de flujo #5:
Diagrama de flujo #5
Para evitar es salirse por si solo o que el robot haga un
oposición si lo están intentando sacar se utilizo la
característica de los sensores de la parte inferior del robot
os CNY70, con los cuales en caso de detectar los bordes
blancos del área provocaran una interrupción, la cual parara
el programa sin importar la parte que este ejecutando y
atenderá el pedido de la interrupción, teniendo como orden
hacer que el robot avance en la dirección opuesta. Esta
respuesta a la interrupción durara un pequeño lapso de
tiempo, el cual fue calculado para regresar una distancia
aproximada al radio del campo de batalla, intentando
quedar en el centro antes de recomenzar la búsqueda del
enemigo nuevamente.
PROYECTO MICROPROCESADORES – ROBOT MINISUMO
10
La diferencia mas notoria entre el escaneo que realiza el
sensor de ultrasonido en el modo esquiva obstáculo y el
modo pelea es el de ampliar el rango al que responderá,
pasando de buscar objetos en una distancia menor a 32cm a
buscar objetos (contrincante) en un radio de 64 cm, esto
para cubrir casi en su totalidad el diámetro del campo de
batalla.
4. SIMULACIONES
Las simulaciones de las diferentes partes de código que al
se hicieron con la herramienta software Proteus versión 7.2
El mayor numero de simulaciones fueron las que tenían
que ver con la generación de los PWM. Para simular esta
parte se realizo el esquema sencillo de la figura 14
XTAL218
XTAL119
ALE30
EA31
PSEN29
RST9
P0.0/AD039
P0.1/AD138
P0.2/AD237
P0.3/AD336
P0.4/AD435
P0.5/AD534
P0.6/AD633
P0.7/AD732
P1.0/T21
P1.1/T2EX2
P1.23
P1.34
P1.45
P1.56
P1.67
P1.78
P3.0/RXD10
P3.1/TXD11
P3.2/INT012
P3.3/INT113
P3.4/T014
P3.7/RD17
P3.6/WR16
P3.5/T115
P2.7/A1528
P2.0/A821
P2.1/A922
P2.2/A1023
P2.3/A1124
P2.4/A1225
P2.5/A1326
P2.6/A1427
U1
AT89C52
DBG_TRACE=0
X1CRYSTAL
C1
18p
C2
18p
R18K2
C310u
33010k
A
B
C
D
Figura 14. Esquema para simulación PWM
Los PWM se están observando es su respectivo puerto de
salida con el osciloscopio del simulador entregando
satisfactoriamente luego de varias depuraciones la
secuencias de pulsos deseadas, dependiendo de cada caso
Figura 15.
Figura 15. Respuesta vista en el osciloscopio del simulador
5. HARDWARE
El diseño del circuito donde iría el microcontrolador y a
donde se conectarían los sensores se hizo con ayuda de la
herramienta software EAGLE (figura 15.1 y 15.2).
Figura 16. Diagrama esquemático robot mini sumo
Figura 15. Plaqueta robot mini sumo
Para alimentar el microcontrolador y los sensores los
cuales requerían de un voltaje de 5volts se hizo uso de un
regulador lm7805 dará el voltaje de cinco volts ante una
alimentación mayor a 7 V y resistente hasta un voltaje
cercano a los 20V, Por practicidad y para una buena
duración se alimento son una batería comercial de 9V.
Los servomotores se alimentaron con 6 volts los cuales se
sacaron de una suma de 4 pilas de 1.5 Volts en serie.
Finalmente el robot se muestra en las figuras, 16.1, 16.2,
16.3, 16.4.
PROYECTO MICROPROCESADORES – ROBOT MINISUMO
11
IMÁGENES ROBOT MINI SUMO
Figura 16.1 Robot vista frontal.
Figura 16.2 Robot vista inferior.
Figura 16.3 Robot vista superior.
Figura 16.4 Robot vista lateral.
6. SOFTWARE
Se hicieron tres programas por separado cada uno para su
respectivo modo para hacer pruebas individuales sobre el
robot , al final se unieron en uno solo código que es el
siguiente:
JMP ISR_INT_EXT0
ORG 000BH
JMP ISR_INT_CT0
ORG 0013H
JMP ISR_INT_EXT1
ORG 001BH
JMP ISR_INT_CT1
ORG 0023H
JMP ISR_INT_SERIAL
ORG 002BH
JMP ISR_INT_CT2
; DEFINICIÓN DE VARIABLES Y
CONSTANTES
TH_PWM EQU 064H
PROYECTO MICROPROCESADORES – ROBOT MINISUMO
12
TL_PWM EQU 065H
TH_PWM_B EQU 066H
TL_PWM_B EQU 067H
TH1_PWM EQU 068H
TL1_PWM EQU 069H
TH1_PWM_B EQU 070H
TL1_PWM_B EQU 071H
T2CON EQU 0C8H
TH2 EQU 0CDH
TL2 EQU 0CCH
; posiciona los registros de manejo de
temporizador 2
RCAP2L EQU 0CAH;
RCAP2H EQU 0CBH;
T2MOD EQU 0C9H;
Palta EQU 072H
Pbaja Equ 073H
EV1 EQU 074H
EV2 EQU 075H;
MAIN:
; escanea pines de seleccion de modo
setb p2.5
setb p2.6
MOV 32,#00H
MOV C,P2.5
CPL C
MOV 32.0,C
MOV C,P2.6
CPL C
MOV 32.1,C
MOV A,32
CJNE A,#00H,PELEA
AJMP EVASOR
PELEA:
CJNE A,#01H,SEGLINEA
AJMP PELION
;salto a modo pelea
SEGLINEA:
CJNE A,#03H,Linea2
AJMP MAIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
EVASOR:
SETB TR0
SETB T2CON.2
MOV TCON,#50H
;activa 2 contadores
MOV IE,#0FAH
;activa las interrupciones de los timers 0 y 1
MOV TMOD,#21H
;Modo 1 para CT0 y MODO 2 PARA CT1
mov T2MOD,#00H
CLR T2CON.1
mov T2MOD,#00H
SETB T2CON.2
CLR T2CON.0
CLR T2CON.3
CLR T2CON.4
CLR T2CON.5
CLR T2CON.7
CALL Adelante
;Cargo los valorres para generar pwm hacia
adelante.
MOV TH0,TH_PWM
MOV TL0,TL_PWM
MOV TH2,TH1_PWM
MOV TL2,TL1_PWM
SETB P2.0
SETB P2.1
; rutina de inicialización y medida de sensor
Scan1:
MOV TMOD,#21H
;CT0 y CT1temporizadores en modo 2
MOV TH1,#0f3h
;Valor de recarga para generar
MOV TL1,#0f3h
;9600 baudios con 16 MHZ
MOV TCON,#50H
;Se habilita el temporizador CT1
PROYECTO MICROPROCESADORES – ROBOT MINISUMO
13
MOV SCON,#40H
;Serial en modo 1. Recepcion deshabilitada
MOV PCON,#80H
;El bit SMOD se coloca en 1 (n=16)
CLR RI
CLR TI
sensor0:
mov SBUF,#00H
reviso0:
jb Ti,RECIVA
ajmp reviso0
LINEA2:
LJMP LINEA
RECIVA:
MOV TMOD,#21H ;CT0
y CT1 temporizadores en modo 2
MOV TH1,#0f3h ;Valor de
recarga para generar
MOV TL1,#0f3h ;9600 baudios
con 16 MHZ
MOV TCON,#50H ;Se
habilita el temporizador CT1
MOV SCON,#40H
;Serial en modo 1. Recepcion
deshabilitada
MOV PCON,#80H ;El
bit SMOD se coloca en 1 (n=16)
CLR RI
CLR TI
MOV SBUF,#54H
reviso1:
jb Ti,ENRE
ajmp reviso1
ENRE:
SETB REN
reviso2:
jb Ri,GUARDA
ajmp reviso2
GUARDA:
CLR TI
MOV R4,SBUF
CLR RI
MOV PALTA,R4
reviso3:
jb Ri,GUARDA2
ajmp reviso3
GUARDA2:
CLR TI
MOV R5,SBUF
MOV PBAJA,R5
CLR RI
CJNE R4,#00H,SCAN1
CJNE R5,#00H,siga
jmp scan1
siga:
;ANL 072H,#0FFH
ANL 073H,#0E0H
;MOV R4,PALTA
MOV R5,PBAJA
CJNE R5,#00H,SCAN1
AJMP ESQUIVAR
; si se detecta obstáculo llamo a esquivarla
cual ocasiona q el mini zumo comience a
girar esquivando el obstáculo.
Esquivar:
CALL Giro
MOV TH0,TH_PWM
MOV TL0,TL_PWM
MOV TH2,TH1_PWM
MOV TL2,TL1_PWM
MOV R2,#03H
CALL Delay
CALL Adelante
MOV TH0,TH_PWM
MOV TL0,TL_PWM
MOV TH2,TH1_PWM
MOV TL2,TL1_PWM
; retorna a escanear
AJMP Scan1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; modo seguidor de linea.
LINEA:
;configuro registros necesarios para modo
seguidor de línea
SETB TR0
PROYECTO MICROPROCESADORES – ROBOT MINISUMO
14
SETB T2CON.2
MOV TCON,#50H
;activa 2 contadores
MOV IE,#0FAH
;activa las interrupciones de los timers 0 y 1
MOV TMOD,#21H
;Modo 1 para CT0 y MODO 2 PARA CT1
mov T2MOD,#00H
CLR T2CON.1
mov T2MOD,#00H
SETB T2CON.2
CLR T2CON.0
CLR T2CON.3
CLR T2CON.4
CLR T2CON.5
CLR T2CON.7
SETB P2.0
SETB P2.1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV TCON,#10H
MOV IE,#0E2H
MOV TMOD,#21H
SETB P2.0
SETB P2.1
;Carga mis contadores para generar pwm
CALL ADELANTEL
MOV TH0,TH_PWM
MOV TL0,TL_PWM
MOV TH2,TH1_PWM
MOV TL2,TL1_PWM
Scan3:
JB P3.2,Stop1
JB P3.3,Stop2
AJMP Scan3
Stop1:
clr t2con.2
JB p3.2,Stop1
setb T2CON.2
AJMP Scan3
Stop2:
clr tr0
JB p3.3,Stop2
setb tr0
AJMP Scan3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; modo pelea minizumo
PELION:
; inicializo el minizumo para modo pelea y
espero 5 seg.
MOV R3,#00H
MOV R2,#32H
MOV R7,#00h
CALL DELAY
SETB TR0
SETB T2CON.2
MOV TCON,#55H
;activa 2 contadores
MOV IE,#0FFH
;activa las interrupciones de los timers 0 y 1
MOV TMOD,#21H
;Modo 1 para CT0 y MODO 2 PARA CT1
mov T2MOD,#00H
CLR T2CON.1
mov T2MOD,#00H
SETB T2CON.2
CLR T2CON.0
CLR T2CON.3
CLR T2CON.4
CLR T2CON.5
CLR T2CON.7
SETB P2.0
SETB P2.1
MOV R7,#00h
Inicio la exploración para encontrar enemigo
CALL GIRO1
MOV TH0,TH_PWM
MOV TL0,TL_PWM
MOV TH2,TH1_PWM
MOV TL2,TL1_PWM
; Inicializo y tomo medida de sensor:
AJMP SCAN1p
SCAN0p:
CJNE R6,#0FFH,SCAN1p
MOV R3,#00H
CALL GIRO1
PROYECTO MICROPROCESADORES – ROBOT MINISUMO
15
MOV TH0,TH_PWM
MOV TL0,TL_PWM
MOV TH2,TH1_PWM
MOV TL2,TL1_PWM
Scan1p:
CJNE R7,#02H,SCAN2p
CALL INTERRUPCION
SCAN2p:
MOV TMOD,#21H ;CT0 y CT1
temporizadores en modo 2
MOV TH1,#0f3h ;Valor de
recarga para generar
MOV TL1,#0f3h ;9600 baudios
con 16 MHZ
MOV TCON,#50H ;Se
habilita el temporizador CT1
MOV SCON,#40H
;Serial en modo 1. Recepcion
deshabilitada
MOV PCON,#80H ;El
bit SMOD se coloca en 1 (n=16)
CLR RI
CLR TI
sensor0p:
mov SBUF,#00H
reviso0p:
jb Ti,RECIVAp
ajmp reviso0p
RECIVAp:
MOV TMOD,#21H ;CT0 y CT1
temporizadores en modo 2
MOV TH1,#0f3h ;Valor de
recarga para generar
MOV TL1,#0f3h ;9600 baudios
con 16 MHZ
MOV TCON,#50H ;Se
habilita el temporizador CT1
MOV SCON,#40H
;Serial en modo 1. Recepcion
deshabilitada
MOV PCON,#80H ;El
bit SMOD se coloca en 1 (n=16)
CLR RI
CLR TI
MOV SBUF,#54H
reviso1p:
jb Ti,ENREp
ajmp reviso1p
ENREp:
SETB REN
reviso2p:
jb Ri,GUARDAp
ajmp reviso2p
GUARDAp:
CLR TI
MOV R4,SBUF
CLR RI
MOV PALTA,R4
reviso3p:
jb Ri,GUARDA2p
ajmp reviso3p
GUARDA2p:
CLR TI
MOV R5,SBUF
MOV PBAJA,R5
CLR RI
CJNE R4,#00H,SCAN1p
CJNE R5,#00H,sigap
jmp scan1p
sigap:
MOV 074H,072H
MOV 075H,073H
MOV A,075H
ORL 074H,A
PROYECTO MICROPROCESADORES – ROBOT MINISUMO
16
MOV A,EV1
CJNE A,#00H,SIGA4p
AJMP SCAN0p
SIGA4p:
ANL 072H,#0FFH
ANL 073H,#0C0H
MOV R4,PALTA
MOV R5,PBAJA
; tomo decisión dependiendo de el dato
entregado en el sensor
CJNE R5,#00H,BOBADAp
AJMP ATACARp
BOBADAp:
LJMP SCAN0p
BOBADA2p:
LJMP SCAN1p
ATACARp:
CJNE R3,#00h,BOBADA2p
ATACAR1p:
CALL ADELANTE
MOV TH0,TH_PWM
MOV TL0,TL_PWM
MOV TH2,TH1_PWM
MOV TL2,TL1_PWM
mov R3,#0FFh
AJMP Scan1p
; si detecto el borde del tatami active
interrupciones externas q me envían a esta
subrutina la cual aleja al mini zumo del borde
de la línea
INTERRUPCION:
CALL ATRAS
MOV TH0,TH_PWM
MOV TL0,TL_PWM
MOV TH2,TH1_PWM
MOV TL2,TL1_PWM
MOV R7,#00H
MOV R2,#05H
CALL DELAY
MOV IE,#0FFH
CLR IE1
CLR IE0
MOV R2,#05H
CALL DELAY
CALL GIRO1
MOV TH0,TH_PWM
MOV TL0,TL_PWM
MOV TH2,TH1_PWM
MOV TL2,TL1_PWM
AJMP SCAN1p
Finaliza el modo pelea.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; En este apartado se guardan las subrutinas q
me generan los diferentes pwm dependiendo
de cual sea la necesidad.
Giro:
MOV TH_PWM,#0FDH
MOV TL_PWM,#0A8H
MOV TH_PWM_B,#066H
MOV TL_PWM_B,#018H
MOV TH1_PWM,#0FDH
MOV TL1_PWM,#0A8H
MOV TH1_PWM_B,#066H
MOV TL1_PWM_B,#018H
RET
Giro1:
MOV TH_PWM,#0F5H
MOV TL_PWM,#073H
MOV TH_PWM_B,#06EH
MOV TL_PWM_B,#4BH
MOV TH1_PWM,#0F5H
MOV TH1_PWM,#087H
MOV TH1_PWM_B,#06EH
MOV TL1_PWM_B,#037H
PROYECTO MICROPROCESADORES – ROBOT MINISUMO
17
RET
AdelanteL:
MOV TH1_PWM,#0F5H
MOV TL1_PWM,#074H
MOV TH1_PWM_B,#06EH
MOV TL1_PWM_B,#04cH
MOV TH_PWM,#0F6H
MOV TL_PWM,#13H
MOV TH_PWM_B,#06DH
MOV TL_PWM_B,#0ABH
RET
Adelante:
MOV TH1_PWM,#0EEH
MOV TL1_PWM,#008H
MOV TH1_PWM_B,#075H
MOV TL1_PWM_B,#0B8H
MOV TH_PWM,#0FDH
MOV TL_PWM,#0A8H
MOV TH_PWM_B,#066H
MOV TL_PWM_B,#018H
MOV R6,#0FFH
RET
Atras:
MOV TH_PWM,#0EEH
MOV TL_PWM,#008H
MOV TH_PWM_B,#075H
MOV TL_PWM_B,#0B8H
MOV TH1_PWM,#0FDH
MOV TL1_PWM,#0A8H
MOV TH1_PWM_B,#066H
MOV TL1_PWM_B,#018H
RET
Delay:
MOV R0,#0FAH
MOV R1,#0C8H
Ciclo:
DEC R0
nop
CJNE R0,#00H,Ciclo
MOV R0,#0FAH
DEC R1
CJNE R1,#00H,Ciclo
MOV R1,#0C8H
DEC R2
CJNE R2,#00,Ciclo
RET
;************************************
********************
;ISR DE LA INTERRUPCION EXTERNA 0
ISR_INT_EXT0:
MOV R7,#02H
MOV IE,#0FAH
RETI
;************************************
********************
;ISR DE LA INTERRUPCION DEL
CONTADO TEMPORIZADOR 0
ISR_INT_CT0:
MOV C,P2.0
JC P_BAJA
MOV TH0,TH_PWM
MOV TL0,TL_PWM
SETB P2.0
RETI
P_BAJA:
MOV TH0,TH_PWM_B
MOV TL0,TL_PWM_B
CLR P2.0
RETI
;************************************
********************
;ISR DE LA INTERRUPCION EXTERNA 1
ISR_INT_EXT1:
MOV R7,#02H
MOV IE,#0FAH
RETI
;************************************
********************
;ISR DE LA INTERRUPCION DEL
CONTADO TEMPORIZADOR 1
ISR_INT_CT1:
RETI
;************************************
********************
PROYECTO MICROPROCESADORES – ROBOT MINISUMO
18
;ISR DE LA INTERRUPCION DEL
GENERADA POR EL PUERTO SERIAL
ISR_INT_SERIAL:
RETI
;************************************
********************
;ISR DE LA INTERRUPCION DEL
CONTADO TEMPORIZADOR 2
ISR_INT_CT2:
CLR T2CON.7
MOV C,P2.1
JC P_BAJA1
MOV TH2,TH1_PWM
MOV TL2,TL1_PWM
SETB P2.1
RETI
P_BAJA1:
MOV TH2,TH1_PWM_B
MOV TL2,TL1_PWM_B
CLR P2.1
RETI
DB
0AAH,0AAH,0AAH,0AAH,0AAH,0
AAH
END ;FIN DE TODO EL PROGRAMA
CONCLUSIONES
Se debe tener cuidado a la hora de escoger los
sensores, según los requerimientos, si bien el
sensor SFR02 provee una precisión muy buena en
su rango activo, su característica de ser de
ultrasonido puede generar problemas si se emplea
como un sensor para obstáculos móviles, o que
tengan ángulos pronunciados en sus superficies,
siendo en algunos casos invisibles al sensor.
La manera en que el sensor SFR02 entrega la
información puede parecer muy amigable en un
principio, pero el poder sincronizar la
comunicación en este caso por puerto serie, y
manejarla, puede ser un poco complicada a la hora
de implementarla, pero si es muy confiable una
vez se dominada y si se realiza en condiciones
favorables.
Respecto a los sensores ópticos se debe tener
especial cuidado ya que las condiciones del
ambiente como la luz o las superficies que no es
una constante pueden alterar la respuesta de los
mismos de un momento a otro, para esto basta con
una buena calibración dejando un rango aceptable
para evitar que sea demasiado sensible.
El realizar el proyecto en lenguaje ensamblador
significo un reto, pero nuevamente quedo claro las
múltiples ventajas que tiene y la posibilidad de
realizar cualquier aplicación una vez se tienen
claras las limitaciones tanto del lenguaje como de
el microcontrolador con el que se esta trabajando.
Proyectos como este en el que la eficiencia
depende tanto del software como del hardware
que se usa, requieren de un cuidado especial ya
que están estrechamente ligados.
Se cumplieron con los objetivos propuestos, pero
este proyecto es una base de de proyectos mucho
mas grandes ya que se le pueden hacer grandes
modificaciones mejorando sus aspectos ahora
presentes y agregando características extras.
BIBLIOGRAFIA
Notas de clase, micropocesadores y
ensambladores 2008, Ing. Henry Jiménez
Rosero, Universidad Del Valle.
MCS®51 MICROCONTROLLER
FAMILY USER’S MANUAL, INTEL,
febrero 1994, formato pdf.
Manual de ATMEL 89C52.
Ficha técnica sensor SRF02, formato pdf.
data sheet CNY70
data sheet servomotor referencia Futaba
S3003
Paginas varias en internet sobre
servomotores.
PROYECTO MICROPROCESADORES – ROBOT MINISUMO
19