CAPITULO V. DISEÑO DEL SISTEMA ELECTRÓNICO.
5.3 Los algoritmos básicos programados
Existen 3 algoritmos utilizados para generar la señal necesaria y lograr una posición angular en cada uno de los servo-motores del prototipo “MAYRA”. El primer algoritmo está relacionado con la generación de la señal de control y se le denomina “Manda Señal”. Este algoritmo es parte fundamental de los siguientes 2 algoritmos ya que es aquí donde se generan las señales de control para cada servo-motor. Este algoritmo tiene como entradas las posiciones de los 20 servo-motores y como salidas 20 señales codificadas de control individuales.
De capítulos anteriores se observó que a un ángulo de inclinación de 15°, los servo-motores seleccionados son capaces de soportar a la estructura mecánica. Por tal motivo si el ángulo máximo permitido en una articulación determinada es de 15° hacia cualquier lado (izquierda o derecha) en total se puede girar 30°. Se diseña entonces el algoritmo de PWM considerando que se desea mover las flechas de los motores entre dichos ángulos.
El algoritmo “Manda Señal” mantiene prendido (5V) cada uno de los 20 pines de los puertos del microcontrolador durante el tiempo especificado en 20 diferentes registros Vii
Figura 81. Diagrama de tiempos para el algoritmo de control de los servo-motores.
El algoritmo “Manda Señal” comienza mandando valores de 5V (uno lógico) para cada uno de los pines del microcontrolador durante 1.05ms (equivale a -15°). Después continua mandando 5V durante “n” periodos de ∆T de duración, donde n∆T = 0.3ms. La duración máxima posible del pulso con 5V es de 1.35ms (equivale a +15°). Finalmente envía 0V durante los 9.65ms restantes. El número “n” se deja por el momento libre porque dependerá de la velocidad máxima del microcontrolador.
El algoritmo para el i-esimo pin (i=1…20) se compone de los siguientes 4 pasos: 1. Sea “Vi” el valor solicitado. Este es un dato.
2. El microcontrolador manda 5V por el pin del microcontrolador durante 1.05ms. Lo que equivale a una posición angular de -15°.
3. Se realiza un ciclo desde con una variable “Vii” que varia de 1 hasta “n”
4. Si “Vii” es menor al valor solicitado “Vi” para el pin i la salida del pin es 5V. De lo contrario será 0V.
5. Una vez terminado el ciclo solamente resta mandar 0V para el i-esimo pin durante 9.65ms.
Este primer algoritmo se realiza de la misma forma para cada servo-motor de una manera independiente. La precisión que se puede lograr en la flecha de salida de cada servo-motor depende directamente de la frecuencia de oscilación a la que funciona el microcontrolador. El PIC16F877 cuenta con un cristal de 20MHz con lo cual puede ejecutar cada instrucción en 0.2µseg a excepción de las instrucciones condicionales que toman el doble de tiempo. Por ejemplo, para un periodo de tiempo de 1.8ms se pueden ejecutar 9000 instrucciones. La cantidad de instrucciones utilizadas en el código fuente de la función “Manda Señal” es:
2 instrucciones para cada uno de los 20 servo-motores, 6 instrucciones para actualizar los puertos y 2 instrucciones adicionales para revisar el fin del ciclo. Esto implica que cada ciclo de “Manda Señal” se ejecuta en un tiempo de:
∆T=(40+6+2)×0.2µseg = 9.6µs
El número máximo de particiones se determina mediante: n = 0.3ms/∆T = 31.25. Se debe redondear siempre hacia abajo y por lo tanto n = 31. Entonces se dice que la precisión angular obtenida por el circuito es de 30°/31 = 0.96°.
El segundo algoritmo “Recibe Posiciones” se utilizó en la recepción de datos provenientes desde una computadora externa por el puerto paralelo. El algoritmo se encarga de recibir 20 datos de 8 bits cada uno que son enviados por la computadora para almacenarlos como las posiciones deseadas y entonces generar los anchos de pulso correspondientes para cada uno de los 20 servo-motores utilizando el algoritmo anteriormente explicado. Este segundo algoritmo se utilizó exclusivamente para trabajar experimentalmente con la secuencia de caminado.
El tercer algoritmo “Envía Posiciones” lo corre la computadora externa dentro de un ambiente gráfico desarrollado en el lenguaje de programación Visual Basic 6.0 [4] (ver apéndice D) y cuya función es interactuar con el programador para definir posiciones y mandarlas al robot. En la siguiente figura se muestra la pantalla del programa. En la parte superior de la pantalla del programa se muestra un gráfico formado de figuras geométricas como: círculos, líneas y rectángulos que representan al robot desde una vista frontal. Junto a cada una de las articulaciones se anexa una leyenda de los posibles movimientos además de una letra que hace referencia a una lista en la parte inferior que almacena los puntos guardados para dicha articulación. También se puede encontrar una lista desplegable junto a cada articulación que le permite al usuario seleccionar el ángulo deseado para ese grado de libertad (entre -15° y 15°). Se pueden modificar todos los ángulos del robot en el gráfico y posteriormente al presionar el botón de “Ejecutar” se envían dichas posiciones al robot por el puerto paralelo.
Si el usuario considera importante almacenar posiciones angulares para todas las articulaciones del robot, lo puede hacer al presionar el botón de “Guardar Punto”. Inmediatamente aparecen en las listas que se encuentran en la parte inferior del gráfico los puntos almacenados para todas las articulaciones. Una vez almacenadas temporalmente las
n posiciones, es posible enviarlas de manera secuencial al robot para reproducir algunos movimientos presionando el botón de “Ejecutar Todos Los Puntos”. Esta ejecución se puede realizar de manera continua o con pausas de algunos segundos definidos por el usuario con en las casillas de: continuo o por tiempo.
Los puntos almacenados en las 11 listas de la parte inferior pueden ser eliminados total o parcialmente por el usuario al utilizar los botones de: “Borra Punto” o “Borra Todo”. Si el usuario desea almacenar definitivamente los puntos que se encuentran en las listas de la parte inferior de la interfaz gráfica, entonces se pueden grabar en un archivo de texto (*.txt) utilizando el menú “Archivo”.
Existen botones con la leyenda de “CLS” que se encuentran junto a cada articulación y sirven para seleccionar 0° de una determinada articulación. El botón “Reset Total (90)” selecciona 0° para todas las articulaciones. Estos dos botones ayudan a realizar una programación de posiciones de una manera más rápida.
En la interfaz gráfica se encuentra una caja de texto del lado izquierdo la cual sirve exclusivamente como indicador de los datos enviados vía puerto paralelo al microcontrolador. El recuadro de “Pasos” por el momento se encuentra inhabilitado pero se pretende que en un futuro envíe la petición al robot para que éste avance una cantidad de pasos.
Este programa ayudó a corroborar diversas posturas estáticamente estables, sin embargo no ayudó en la revisión de una secuencia de caminado debido a que la transmisión de datos entre la computadora y el PIC es lenta al igual que la transición de una postura a otra.
Este tercer algoritmo obtiene los datos almacenados en cada articulación del gráfico o en las listas según el botón seleccionado (“Ejecutar” o “Ejecutar Todos Los Puntos”) y los envía por el puerto paralelo hacia el PIC16F877. El protocolo de transmisión se construye a base de enviar y mantener un dato fijo por el puerto de comunicaciones de la computadora por un tiempo determinado con el objetivo de que el receptor (PIC) lo lea y lo almacene. Es decir, la computadora envía un dato de 8 bits por el puerto paralelo y lo mantiene fijo en el puerto paralelo por 100ms y después envía un cero lógico (00h) manteniéndolo fijo durante otros 100ms. Esto lo realiza 20 veces para trasnmitir las posiciones de todos los servo- motores correspondientes a una postura.
En este algoritmo los datos se envían en forma Half Duplex en dirección de la computadora al PIC de la siguiente manera:
1. La computadora obtiene una posición del gráfico y la envía por el puerto paralelo. 2. Espera 100ms a que el PIC almacene dicho valor.
3. La computadora envía 00h por el puerto paralelo.
4. Espera 100ms para que el PIC lea y almacene dicho valor. 5. La computadora realiza este procedimiento 20 veces.
Los pines utilizados para el protocolo de comunicación entre el puerto paralelo de la computadora y el PIC16F877 son los siguientes:
P0 (Computadora) Æ PC0 (PIC) P1 (Computadora) Æ PC1 (PIC) P2 (Computadora) Æ PC2 (PIC) P3 (Computadora) Æ PC3 (PIC) P4 (Computadora) Æ PC4 (PIC) P5 (Computadora) Æ PC5 (PIC) P6 (Computadora) Æ PC6 (PIC) P7 (Computadora) Æ PC7 (PIC) GND (Computadora) Æ GND (PIC)
La manera de conectar los pines del puerto paralelo al circuito es utilizando dos conectores, un DB25 macho para el puerto paralelo de la computadora y un DB9 hembra para el circuito. El cableado se realiza de la siguiente forma: