Práctica 6. Control On-Off del ángulo de un robot de

Anuncio
Práctica 6.
Control On-Off del ángulo de un robot de par diferencial
M.I. Marco Negrete
1.
Objetivos
Diseñar un control on-off para el ángulo de un robot de par diferencial.
Implementar dicho control en la tarjeta TerasIC proporcionada a los alumnos
Implementar el control utilizando los encoders alambrados previamente
2.
Desarrollo
1. Escribir las instrucciones necesarias (hexadecimal) para controlar el ángulo del robot
de modo que gire un ángulo de 90◦ (sentido antihorario). Se puede utilizar el diseño
proporcionado por el profesor o el alumno puede hacer su propio diseño, sin embargo,
es necesario utilizar la tarjeta TerasIC que proporciona la Universidad.
2. El robot debe girar 90◦ cada vez que se presione el botón 1 de la tarjeta.
3. Si se utiliza el diseño proporcionado por el profesor, se sugiere alambrar el botón 1 al
reset de dicho diseño.
2.1.
2.1.1.
Especificaciones del diseño proporcionado por el profesor
Instrucciones en Hexadecimal
Las instrucciones del diseño proporcionado por el profesor se describen en la tabla 1.
Recuerde que todos los datos se manejan en coma flotante de 32 bits, por lo que cada dato
ocupa dos localidades de memoria. Las direcciones de datos especificadas en la tabla 1 se
refieren a la dirección de la parte alta de cada dato, esto es, si se se especifica que un
dato está en la dirección x0001 significa que el dato ocupa las localidades x0001 y x0002 de
memoria.
2.1.2.
Direcciones de memoria importantes
Existen algunas localidades de uso especı́fico:
1
x00C0: En esta dirección se almacena el incremento de ángulo medido por los encoders (en
coma flotante). Recordar que el dato es de 32 bits, es decir, la dirección x00C1 contiene
la parte baja de dicho incremento.
x00FC: Puerto de salida 1. Se puede utilizar para depurado del programa.
x00FD: Puerto de salida 2. Se puede utilizar para depurado del programa.
x00FE: Los bits 0 a 5 de esta dirección están alambrados a pines de salida como se muestra
en la tabla 2.
x00FF: El bit 0 de esta dirección está alambrado al reset de los encoders. El mismo pin
resetea los contadores tanto derecho como izquierdo.
Se sugiere la siguiente secuencia de operaciones para lograr el objetivo:
1. Escribir un cero en algún registro de propósito general. Este registro llevará el conteo
del ángulo del robot.
2. Escribir el valor necesario en el registro xFE para encender los motores en el sentido
correcto.
3. Sumar el ángulo actual del robot con el incremento de los encoders.
4. Resetear los encocers. Esto se puede hacer escribiendo un x01 al registro xFF.
5. Habilitar nuevamente el conteo de los encoders, es decir, escribir un cero al registro
anterior. Recordar que los encoders se resetean con un 1 lógico.
6. Calcular el error dé ángulo, esto es, restar el ángulo actual a 1.5708. Esta constante
debe estar almacenada en alguna localidad.
7. Revisar si el error es mayor que cero, si sı́, realizar nuevamente a partir del paso 3. Si
no, continuar con el siguiente paso.
8. Apagar los motores.
3.
3.1.
Elementos a evaluar
Obligatorios
El robot debe girar 90◦ cada vez que se presione el botón 1.
Todos los componentes deben estar montados en el robot.
Incluir en el reporte escrito la secuencia de instrucciones usadas.
3.2.
Opcionales
Con los botones de la tarjeta, decidir si el robot gira a la derecha o a la izquierda.
2
Instrucción
x0002
DIRDATO1
DIRDATO2
RESULT
x0002A
DIRDATO1
DIRDATO2
RESULT
x0069
DIRDATO1
x0072
DIRSUB
x0075
x0078
DIRDATO1
DIRSALTO
x0080
DIRDATO1
DIRSALTO
x0089
LITERAL
DIRLIT
Descripción
Multiplica el dato contenido en la dirección DIRDATO1
por el dato contenido en la dirección DIRDATO2
y almacena el resultado en la dirección
RESULT
Suma el dato contenido en la dirección DIRDATO1
al dato contenido en la dirección DIRDATO2
y almacena el resultado en la dirección
RESULT
Multiplica por (-1) el dato contenido en la
dirección DIRDATO1 y lo almacena en la misma dirección
Llamada a subrutina. Brinca a la dirección DIRSUB
y regresa al encontrar la instrucción return
Return. Regreso de subrutina
Brinca a la dirección DIRSALTO si el dato
contenido en DIRDATO1 es igual a cero.
Si no, continua con la siguiente instrucción
Brinca a la dirección DIRSALTO si el dato
contenido en DIRDATO1 es mayor o igual que cero.
Si no, continua con la siguiente instrucción
Almacena el valor LITERAL (DE 16 BITS) en la
dirección DIRLIT.
El dato a mover es de 16 bits (una localidad de memoria).
Tabla 1: Instrucciones en hexadecimal
Bit7 Bit6
NC NC
Bit5
Motor2En
Bit4
Bit3
Bit2
Motor2B Motor2A Motor1En
Tabla 2: Bits de la dirección x00FE
3
Bit1
Bit0
Motor1B Motor1A
Descargar