Realizacion de un Robot Minisumo con un microprocesador 89c52
Short Description
Describe los pasos y la implementacion de un robot minizumo montado sobre un microcontrolador 89c52. Servomotores y codi...
Description
PROYECTO MICROPROCESADORES – ROBOT MINISUMO
1
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
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 .
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
Palabras clave------Microcontrolador, sensor de distancia, comunicación serial, servomotores, sensores ópticos, lenguaje ensamblador.
I. INTRODUCTION
E
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.
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 MICROPROCESADORES – ROBOT MINISUMO
2
1. MODO EVASION DE OBSTACULOS El siguiente diagrama de flujo (diagrama de flujo #1) presenta el funcionamiento de manera general:
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:
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.
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
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.
3
MOVIMIENTO DE ROBOT ADELANTE ATRÁS GIRO IZQUIERDA GIRO DERECHA PARADO
MOTOR 1
MOTOR 2
Φ > 90
Φ < 90
Φ < 90
Φ > 90
Φ < 90
Φ < 90
Φ > 90
Φ > 90
Φ = 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 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 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 :
Figura 5. Potenciómetro del servomotor TCON: 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.
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
flujo #2 se observa la idea:
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
0 0 1 1
0 1 0 1
MODO DE OPERACIÓN MODO 0 MODO 1 MODO 2 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.
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
La forma en que se genera el PWM con cada uno de los temporizadores es la misma. En el diagrama de
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
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.
5
comunicación serie estándar con niveles TTL a 9600 baudios.
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
Figura No 8. Modo de conexión para comunicación serial de SRF02
COMUNICACION SERIAL MICRONTROLADOR AT89C52
DEL
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
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
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
Baudaje programable timer1 Compatible con RS-232
6
generado por el
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
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 COMPARAR CON FFH
X
X
X
X
X
X
X
X
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 COMPARAR CON C0H
X
X
X
X
X
X
X
X
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:
7
PALTA
PBAJA
MEDIDA
0
0
∞
≠0
X
> 255 CM
0
≥ 32
≥ 32 CM < 600 CM
0
< 32
< 32
ACCION SEGUIR ADELANTE SEGUIR ADELANTE SEGUIR ADELANTE 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
2. MODO SEGUIMIENTO DE LINEA
8
Se usaron sensores CNY70 que son de tipo óptico (Figura 9.)
El siguiente diagrama de flujo (diagrama de flujo #4) presenta el funcionamiento de este modo en manera general:
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.
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.
. 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
SNY enviando al puerto del microcontrolador el nivel correspondiente.
9 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:
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
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 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.
10
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).
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 C1
U1 19
XTAL1
18p
X1
C2
18
XTAL2
CRYSTAL 9
18p
29 30 31
RST
PSEN ALE EA
C3 10u
1 2 3 4 5 6 7 8
R1 8K2
P1.0/T2 P1.1/T2EX P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD
39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28
Figura 16. Diagrama esquemático robot mini sumo A B C D
10 11 12 13 14 15 16 17
AT89C52 DBG_TRACE=0
330 10k
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
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 Figura 16.3 Robot vista superior.
IMÁGENES ROBOT MINI SUMO
Figura 16.4 Robot vista lateral. Figura 16.1 Robot vista frontal.
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
Figura 16.2 Robot vista inferior.
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 CONSTANTES TH_PWM
DE
VARIABLES
EQU
Y
064H
PROYECTO MICROPROCESADORES – ROBOT MINISUMO
TL_PWM TH_PWM_B EQU TL_PWM_B EQU TH1_PWM TL1_PWM TH1_PWM_B EQU TL1_PWM_B EQU T2CON EQU 0C8H TH2 EQU 0CDH TL2 EQU 0CCH
EQU 065H 066H 067H EQU 068H EQU 069H 070H 071H
12
AJMP MAIN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
EVASOR: SETB TR0 SETB T2CON.2 MOV TCON,#50H ;activa 2 contadores
; posiciona los registros de manejo de temporizador 2 RCAP2L EQU RCAP2H EQU T2MOD EQU Palta EQU Pbaja Equ EV1 EQU EV2 EQU
0CAH; 0CBH; 0C9H; 072H 073H 074H 075H;
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
MAIN: ; escanea pines de seleccion de modo
CALL Adelante 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
;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
MOV A,32 CJNE A,#00H,PELEA
; rutina de inicialización y medida de sensor
AJMP EVASOR
Scan1:
PELEA: CJNE A,#01H,SEGLINEA AJMP PELION ;salto a modo pelea SEGLINEA: CJNE A,#03H,Linea2
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
MOV SCON,#40H ;Serial en modo 1. Recepcion deshabilitada MOV PCON,#80H ;El bit SMOD se coloca en 1 (n=16)
13
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
CLR RI CLR TI sensor0: mov
SBUF,#00H
siga: ;ANL 072H,#0FFH ANL 073H,#0E0H ;MOV R4,PALTA MOV R5,PBAJA CJNE R5,#00H,SCAN1 AJMP ESQUIVAR
reviso0: jb Ti,RECIVA ajmp reviso0 LINEA2: LJMP LINEA
; si se detecta obstáculo llamo a esquivarla cual ocasiona q el mini zumo comience a girar esquivando el obstáculo.
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
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
reviso1: jb Ti,ENRE ajmp reviso1 ENRE:
; retorna a escanear AJMP Scan1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SETB REN reviso2:
; modo seguidor de linea. jb Ri,GUARDA ajmp reviso2
LINEA:
GUARDA: CLR TI MOV R4,SBUF CLR RI MOV PALTA,R4 reviso3:
;configuro registros necesarios para modo seguidor de línea
SETB TR0
PROYECTO MICROPROCESADORES – ROBOT MINISUMO
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
14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 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
Scan3: JB P3.2,Stop1 JB P3.3,Stop2 AJMP Scan3
CALL GIRO1 MOV TH0,TH_PWM MOV TL0,TL_PWM MOV TH2,TH1_PWM MOV TL2,TL1_PWM
Stop1: clr t2con.2 JB p3.2,Stop1 setb T2CON.2 AJMP Scan3
; Inicializo y tomo medida de sensor: AJMP SCAN1p
Stop2: clr tr0 JB p3.3,Stop2 setb tr0 AJMP Scan3
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
CLR RI CLR TI MOV SBUF,#54H reviso1p:
Scan1p: jb Ti,ENREp CJNE R7,#02H,SCAN2p CALL INTERRUPCION SCAN2p:
ajmp reviso1p ENREp: SETB REN
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
reviso2p: jb Ri,GUARDAp ajmp reviso2p GUARDAp: CLR TI MOV R4,SBUF CLR RI MOV PALTA,R4 reviso3p:
sensor0p: mov SBUF,#00H
jb Ri,GUARDA2p ajmp reviso3p
reviso0p: GUARDA2p: jb Ti,RECIVAp CLR TI ajmp reviso0p MOV R5,SBUF MOV PBAJA,R5 RECIVAp: CLR RI 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)
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 MOV R2,#05H CALL DELAY CJNE A,#00H,SIGA4p AJMP SCAN0p
MOV IE,#0FFH CLR IE1 CLR IE0
SIGA4p: ANL 072H,#0FFH ANL 073H,#0C0H
MOV R2,#05H CALL DELAY CALL GIRO1
MOV R4,PALTA MOV R5,PBAJA ; tomo decisión dependiendo de el dato entregado en el sensor
MOV TH0,TH_PWM MOV TL0,TL_PWM MOV TH2,TH1_PWM MOV TL2,TL1_PWM
CJNE R5,#00H,BOBADAp AJMP SCAN1p AJMP ATACARp Finaliza el modo pelea. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BOBADAp: LJMP SCAN0p BOBADA2p:
; En este apartado se guardan las subrutinas q me generan los diferentes pwm dependiendo de cual sea la necesidad.
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
Giro:
; 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
RET
INTERRUPCION:
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
Giro1: MOV TH_PWM,#0F5H MOV TL_PWM,#073H MOV TH_PWM_B,#06EH MOV TL_PWM_B,#4BH
CALL ATRAS MOV TH0,TH_PWM MOV TL0,TL_PWM MOV TH2,TH1_PWM MOV TL2,TL1_PWM MOV R7,#00H
MOV TH1_PWM,#0F5H MOV TH1_PWM,#087H MOV TH1_PWM_B,#06EH MOV TL1_PWM_B,#037H
PROYECTO MICROPROCESADORES – ROBOT MINISUMO
17
RET
DEC R2 CJNE R2,#00,Ciclo 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:
;************************************ ******************** ;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
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
;************************************ ******************** ;ISR DE LA INTERRUPCION DEL CONTADO TEMPORIZADOR 1 ISR_INT_CT1: RETI ;************************************ ********************
PROYECTO MICROPROCESADORES – ROBOT MINISUMO
;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
18 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.
DB 0AAH,0AAH,0AAH,0AAH,0AAH,0 AAH
END ;FIN DE TODO EL PROGRAMA
CONCLUSIONES
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.
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
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
View more...
Comments