Explicacion programa Piccolo Tercer corte

Dependencies:   mbed

Fork of Segundo_corte by Andres Guio

Piccolo

Proyecto Piccolo.

En la presente se encuentra documentado la programacion para el funcionamiento del proyecto Piccolo.

El sistema tiene tres estados:

1. Stand by: Estado que el cual se esta en espera de un telecomando (Ejecutar o Guardar). 2. Drawing: Estado en donde el piccolo ejecuta las ordenes guardadas en el array de memoria hasta encontrar el comando CM_STOP. 3. Saving: Estado donde el sistema recibe los datos y los almacena en memoria acorde a los comandos de 0xfd, 0xfc, 0xfb,0xfa, 0xf9,0xf8, se sale de este modo cuado se recibe el comando CM_STOP.

Todo telecomando debe finalizar con el dato CM_END para poder ser ejecutado. Para el caso del comando CM_PAUSE (0xf7) y CM_PLAY (0xf6), este los recibe en cualquier momento que se este ejecutando lo que se encuentra en memoria.

Etapa de dibujo: En la etapa de dibujo del Piccolo, se implemento 1 servomotor para cada uno de los ejes X,Y y Z. Para el control se efectuo una señal PWM para cada uno de los motores. Los pines de salida elegidos son D3 (PB_3 eje Z), D5 (PB_4 eje X) y D6(PB_10 eje Y). Para el rango de movimiento del servomotor, se implemento una funcion (coord2us) la cual por medio de una ecuacion matematica calcula el limite minimo y maximo para evitar vibraciones, ademas se implementa otra funcion (put_sstime) para establecer el tiempo del PWM.

/media/uploads/DANIELOM1916/draw_1.png

Fue necesario crear dos funciones para el control del ancho de pulso y el movimiento simultaneo de los dos ejes X y Y, en este caso la funcion "vertex2d" recibe dos datos dependiendo del rango de movimiento (0 a 50) y varia el ancho de pulso de los dos ejes mencionados, y la funcion "direcmov" establece el movimiento recordando el punto anterior enviado a "vertex2d". Cabe resaltar que para la posicion de inicializacion y home se crearon dos funciones las cuales indican cuando se llaman el correcto funcionamiento de los motores y ubicando el elemento terminal en la posicion inicial de dibujo. Por ultimo la funcion "draw" y "nodraw" controlan el posicionamiento del eje Z para el control del elemento terminal (lapiz).

/media/uploads/DANIELOM1916/draw_2.png /media/uploads/DANIELOM1916/draw_3.png

Toda la programacion de la etapa de dibujo se creo como libreria para establecer un mejor orden para ser usado en el programa principal. Aqui tambien se realizo el protocolo de funciones y se definio las variables globales de la funcion.

/media/uploads/DANIELOM1916/draw_libreria.png

Etapa de memoria:

En la etapa de memoria se realizo un array por medio de un buffer, en el cual se creo una particion de memoria utilizando el sistema FIFO. El tamaño total de la memoria es de 10 espacios. Los datos se iran almacenando en comandos maximo de 32 bits, en cada espacio. En la siguiente imagenes se explica cada estado de la programacion usada para la memoria.

/media/uploads/DANIELOM1916/memory_1.png /media/uploads/DANIELOM1916/memory_2.png

Toda la programacion de la etapa de memoria se creo como libreria para establecer un mejor orden para ser usado en el programa principal. Aqui tambien se realizo el protocolo de funciones y se definio las variables globales de la funcion.

/media/uploads/DANIELOM1916/memory_libreria.png

Etapa de movimiento: En la etapa de movimiento de la estructura se implemento 2 motores bipolares paso a paso, el cual por medio de su electronica por medio de una funcion (move) realiza la activacion de los motores a travez de un switch dependiendo del grado de giro del motor. Dependiendo del numero de vueltas del motor y el sentido de giro (adelante o atras) la funcion "step" recibe dos datos, el primero indica el numero de pasos del motor y el segundo el sentido de giro.

/media/uploads/DANIELOM1916/stepmotor_1.png /media/uploads/DANIELOM1916/stepmotor_2.png

Toda la programacion de la etapa del movimiento de la estructura se creo como libreria para establecer un mejor orden para ser usado en el programa principal. Aqui tambien se realizo el protocolo de funciones y se definio las variables globales de la funcion. Cabe resaltar que en este caso se implemento esta parte del programa como una clase (stepmotor).

/media/uploads/DANIELOM1916/stepmotor_libreria.png

Programa principal: En la primera parte del programa principal se aprecia la configuracion de los pines de los motores, el uso del puerto serial (USB y Bluetooth) y se define una variable global llamada "control". Posteriormente se realiza la primera parte de la funcion principal la cual permite el acceso a los tres estados del sistema: Stand by, Drawing y Saving. Todo por medio de una variable local denominada read_command. Los comandos deben ser enviados de la siguiente manera para poder ser perimitidos por el sistema:

COMANDOS

POS_0POS_1POS_2POS_3
#Cabc
  1. C -> Indica el comando FF, FE............... a -> Es el fin de comando F0 en otros casos es el valor de la coord X............. b -> Coordenada Y ............................. c -> Fin de comando F0.

Nota: El fin de comando no se almacena.

/media/uploads/DANIELOM1916/main_1.png /media/uploads/DANIELOM1916/main_2.png

Para realizar el proceso de concatenacion, se retorna los byte recibidos concatenados en un entero, se reciben maximo 4 bytes, recibe hasta que encuetra un fin de comando "CM_END". Ejemplo: Para el comando drawing se espera un byte, por lo que al recibir 0xFF y 0xF0 la funcióm retorna el 0xff siempre y cuando se reciba el fin de dato F0 de lo contrario retorna un cero para el caso del comando vertex2d se espera recibir 3 bytes, 1 del comando y dos bytes para x y y, se retorna la concatenación de los tres bytes siempre y cuando el cuarto byte sea CM_END de lo contrario retorna un cero.

/media/uploads/DANIELOM1916/main_3.png

Antes de realizar las interrupciones, se debe inicializar y configurar los puertos de comunicacion a 9600 baudios, posteriormente se procede a cambiar el estado de la variable global control, dependiendo del comando que se este enviando. Cabe resaltar que solo funciona durante el estado de Drawing. Si en dado caso el estado de control es CM_PAUSE, se activa la funcion "pausa" la cual entra a un bucle infinito, el cual es desactivado solo hasta que el valor de la variable control sea igual a CM_PLAY.

/media/uploads/DANIELOM1916/main_4.png

Para el estado de Drawing se creo una variable la cual indica si en algun momento recibe un comando que no corresponde a los comando anteriormente establecidos, se sale del estado. Por medio de un switch se clasifica las ordenes programadas y se ejecutan segun correspondan:

CM_VERTEX2D 0xfd -> Envia los datos a la funcion vertex2d ubicada en la libreria draw............ CM_DRAW 0xfc -> Envia los datos a la funcion draw ubicada en la libreria draw.................. CM_NODRAW 0xfb -> Envia los datos a la funcion nodraw ubicada en la libreria draw CM_MOVER 0xf9 -> Envia los datos a la funcion mover ubicada en main................... CM_QUADRANT 0xf8 -> Envia los datos a la funcion cuadrante ubicada en main.

/media/uploads/DANIELOM1916/main_5.png /media/uploads/DANIELOM1916/main_6.png /media/uploads/DANIELOM1916/main_7.png

Finalmente las funciones mover y cuadrantes se encargan de realizar el movimiento de la estructura adelante o para atras. La diferencia es que en la segunda funcion dibuja los cuadrantes indicados.


All wikipages