Programación de la interfaz de control en la máquina e interfaces X y Y
65 Inicio CNC, Control
3.2.2.
Inicio CNC
Una vez enumerado y conectado el dispositivo a la computadora, se enciende la luz de fondo del display LCD y se borra. Seguidamente se colocan iniciales del diseñador y tipo de máquina, y los encabezados X y Y para las coordenadas, donde seguida de ellas se colocan los datos que se envían de la interfaz gráfica de la PC, ver el código 3-3 y la función en el diagrama 3-4.
void Ini_cnc (void) {
LED_ON(Backlite); // Led backlite del display printf(lcd_putc, "\fCNC digital"); // \f Borra LCD
lcd_gotoxy(1,2); printf(lcd_putc, " LMLL "); delay_ms (5000); printf(lcd_putc, "\fCNC_LMLL "); lcd_gotoxy(1,2); printf(lcd_putc, "X: Y: "); } Código 3-3 Inicio CNC Diagrama 3-4 Inicio CNC
3.2.3.
Control
La función control, detecta la conexión del dispositivo, recibe el paquete de los datos de las coordenadas de movimientos utilizando un contador para monitoreo de éstos. Dentro de estos datos están los indicadores, que son los que hacen el control de retroalimentación, que manejan la información que se va enviando a las interfaces X y Y, para el movimiento del taladro de perforación.
Led de fondo del display
Desplegar información del diseñador
Inicialización CNC
Desplegar encabezados X y Y para las coordenadas
66 Inicio CNC, Control
La interfaz de la máquina recibe de la interfaz gráfica de la PC, el paquete de información en un arreglo de tres datos, como lo muestra la tabla 3-1, donde la información es el número de pasos en X y Y, y dos de leds para indicación y control.
La interfaz de la máquina envía paquete de información a la PC, únicamente dos datos para los indicadores de la interfaz gráfica y el control del manejo de información, ver tabla 3-2.
Secuencia Paquete ID Control Dato
1 npapX 0 0x0B n
2 npapY 0 0x0C n
3 Led 1 color verde 0 0x0A 0x10 4 Led 2 color rojo 0 0x0A 0x20
Tabla 3-1 Recepción de paquete de información de la interfaz gráfica
Secuencia Paquete ID Dato
1 Led 1 color verde 1 0x01 2 Led 2 color rojo 1 0x00
Tabla 3-2 Envío de paquete de información de la interfaz de la máquina
Son cuatro paquetes de información que envía la interfaz gráfica, y es en la secuencia como lo muestra la tabla 3-1. En la secuencia tres, la interfaz gráfica ya envió los datos del número de pasos X y Y, junto con el indicador verde y espera respuesta de la interfaz de la máquina, para confirmación de recepción de datos.
En esta espera la interfaz de la máquina envía la información a las interfaces X y Y, y una vez realizada la operación de los movimientos y de la herramienta de perforación, devuelve el indicador de la secuencia uno de la tabla 3-2, a la interfaz gráfica, que es la confirmación de recepción de datos.
La secuencia cuatro de la tabla 3-1, como la secuencia dos de la tabla 3-2, es para mantener comunicación con indicadores de que no se han enviado datos por parte de la interfaz gráfica, y en espera por parte de la interfaz de la máquina, tal como se muestran en los códigos 3-4 a 3-7 y en los diagramas 3-5 a 3-8.
Programación de la interfaz de control en la máquina e interfaces X y Y
67 Inicio CNC, Control
Diagrama 3-5 Control de la interfaz de la máquina
Control No Si Paquete de datos Recibe paquete No Si cont = 1 cont = 2 USB enumerado
cont = 3 Indicadores e I2C
cont = 4 npapX npapY Indicadores Incrementar cont Si Si Si Si No No No No
68 Inicio CNC, Control
void Control (void) {
while (TRUE) {
if(usb_enumerated()) {
if (usb_kbhit(1)) // Paquete de datos del host y se guarda {
usb_get_packet(1, recibe, USB_CONFIG_HID_RX_SIZE); // Del buffer tomar del EP1 y guardar en recibe switch(cont) { ... } } }
Código 3-4 Control de la interfaz de la máquina
case 1:
if(recibe[0]==npapX) // Si recibimos el comando de control npapX {valorX=recibe[2];} // Tomar dato y visualizar
break; case 2:
(recibe[0]==npapY) // Si recibimos el comando de control npapY {valorY=recibe[3];} // Tomar dato y visualizar
break;
Código 3-5 Número de pasos X y Y para el control de la interfaz de la máquina
Diagrama 3-6 Número de pasos X y Y para el control de la interfaz de la máquina
npapX Dato 0x0B No Si Guardar valorX Salir npapY Dato 0x0C No Si Guardar valorY Salir
Programación de la interfaz de control en la máquina e interfaces X y Y 69 Inicio CNC, Control case 3: if(recibe[0]==Indicadores) { switch(recibe[1]) {
case LED_1: // Led verde 0x10
LED_ON(Perforando); // Indicación de perforando LED_OFF(Realizado);
break;
case LED_2: // Led rojo 0x20
LED_ON(Realizado); // Indicación de perforación realizada LED_OFF(Perforando);
break; } }
lcd_gotoxy(3,2);
if (valorX != 0){printf(lcd_putc, "%u ",valorX);} else {printf(lcd_putc, "0 ");}
delay_ms(100); lcd_gotoxy(11,2);
if (valorY != 0){printf(lcd_putc, "%u ",valorY);} else {printf(lcd_putc, "0 ");}
delay_ms(100);
envio_i2c();
envia[0]=0x01; // Envío verde para salir del bucle usb_put_packet(1, envia, USB_CONFIG_HID_TX_SIZE, USB_DTS_TOGGLE); // Envía paquete de datos por USB
break;
Código 3-6 indicadores e I2C para el control de la interfaz de la máquina
case 4:
if(recibe[0]==Indicadores) {
switch(recibe[1]) {
case LED_1: // Led verde 0x10
LED_ON(Perforando); // Indicación de perforando LED_OFF(Realizado);
break;
case LED_2: // Led rojo 0x20
LED_ON(Realizado); // Indicación de perforación realizada LED_OFF(Perforando);
break; } } cont=0;
envia[0]=0x00; // Envío rojo
usb_put_packet(1, envia, USB_CONFIG_HID_TX_SIZE, USB_DTS_TOGGLE); // Envía paquete de datos por USB
break;
70 Inicio CNC, Control
Diagrama 3-7 indicadores e I2C para el control de la interfaz de la máquina
Diagrama 3-8 Indicadores para el control de la interfaz de la máquina
Indicadores e I2C Dato 0x0A No Si Led 0x10 No Si Led 0x20 No Si
Led verde encendido Led rojo apagado
Led verde apagado Led rojo encendido
Mostrar en LCD npapX y npapY Envío I2C
Envío indicador 0x01 por USB
Indicadores Dato 0x0A No Si Led 0x10 No Si Led 0x20 No Si
Led verde encendido Led rojo apagado
Led verde apagado Led rojo encendido
Programación de la interfaz de control en la máquina e interfaces X y Y
71 Comunicación I2C
3.2.4.
Comunicación I2C
La función envio_i2c, toma los valores del número de pasos de X y Y, y envía los valores de estos a la interfaces X y Y, a través del bus de comunicación serial I2C por medio de la función envio(). Son dos paquetes de información en un arreglo de tres datos, uno para la interfaz X, y otra, para la interfaz Y, cada interfaz diferenciada por su número de dirección. Estos datos son los que finalmente mueven al taladro de perforación a la posición indicada por el archivo NC Drill, como lo muestra la tabla 3-3.
Secuencia Paquete Dirección Posición Dato
1 valorX 0xA0 1 n
2 valorY 0xB0 1 n
Tabla 3-3 Envío de paquete de información a las interfaces X y Y
El envío de información es controlada por las interfaces X y Y. Una vez realizado el movimiento de la herramienta de perforación a la posición indicada, se procede a llevar a cabo la perforación por medio de la función interfazZ y al término de esta función, se espera una señal de control lógico de las interfaces X y Y, para que pueda enviarse el siguiente paquete de información a través del bus. Ver el código 3-8 y el diagrama 3-9.
void envio_i2c () { ...
posicion = 1;
direccion = 0xA0; // Envío a PIC esclavo dirección 0xA0 bus I2C envio(direccion, posicion, datox);
posicion = 1;
direccion = 0xB0; // Envío a PIC esclavo dirección 0xB0 bus I2C envio(direccion, posicion, datoy);
while(espera==0) // Espera de drivers X y Y terminen {
if(input_state(SW1)==0x00 && input_state(SW2)==0x00) { espera = 1; } delay_ms(100); } espera = 0;
if (valorX!=0 && valorY!=0)
{interfazZ ();} // Manejo de interfaz Z }
72 Envío I2C
Diagrama 3-9 Comunicación I2C
3.2.4.1.
Envío I2C
La función envio(), es la encargada de escribir los datos al módulo MMSP (Master Synchronous Serial Port) del microcontrolador, y son los que se envían a las interfaces X y Y. El paquete de información es como se indica en la tabla 3-3, y la secuencia de envío es como se sigue en el diagrama 3-10 y el código 3-9.
Diagrama 3-10 Envío I2C
Envío
Inicializa la transmisión
Escribir por el bus dirección, posición y dato
Fin de la transmisión Envío I2C
Guardar datoX y datoY
Espera de proceso de interfaz X y Y Envío datoX y datoY E E Espera de proceso de interfaz X y Y No Interfaz Z Si Salir Valor X y Y, ≠ 0
Programación de la interfaz de control en la máquina e interfaces X y Y
73 Interfaz Z
void envio(direccion, posicion, dato) {
i2c_start(); // Inicializa la transmisión
i2c_write(direccion); // Dirección del esclavo en el bus I2C
i2c_write(posicion); // Posición donde se guardara el dato transmitido i2c_write(dato); // Dato a transmitir
i2c_stop(); // Fin de la transmisión }
Código 3-9 Envío I2C
3.2.5.
Interfaz Z
Esta función maneja dos motores, uno de corriente directa y otro de corriente alterna, hace ascender y descender el mecanismo de dirección en Z por medio del motor de cd, controla la función de perforación, con el encendido y apagado del motor de ca, monitorea con sensor la profundidad de perforación y se coloca a su posición inicial con un tiempo de retardo. Ver el código 3-10 y el diagrama 3-11.
void interfazZ () {
LED_ON(Caenable); // Enciende motor ca
LED_ON(CdSentIzq); // Selecciona sentido izquierdo motor cd ...
LED_ON(Cdenable); // Enciende motor cd
while(input_state(SW4)==0x01) // Espera sensor inferior {
delay_ms (50); }
LED_OFF(Cdenable); // Apaga motor cd
LED_OFF(CdSentIzq); // Apaga Selección sentido izquierdo motor cd
LED_ON(CdSentDer); // Selecciona sentido derecho motor cd ...
LED_ON(Cdenable); // Enciende motor cd
delay_ms (5000); // Espera subida mecanismo taladro
LED_OFF(Caenable); // Apaga motor ca LED_OFF(Cdenable); // Apaga motor cd
LED_OFF(CdSentDer); // Apaga Selección sentido derecho motor cd }
74 Directivas #include de la interfaz de la máquina
Diagrama 3-11 Interfaz Z
3.2.6.
Directivas #include de la interfaz de la máquina
Las directivas que permiten al compilador incluir un fichero en el programa, y que se organizan mediante nombres en esta aplicación del software de la interfaz de la máquina, son las que se muestra en el código 3-11.
#include <pic18_usb.h>
#include <Interfase.h> // Definición de funciones y hardware utilizado en el programa.
#include <Descriptor_easyHID.h> // Descriptores HID del proyecto. #include <USB.c>
#include <driverlcd18.c> #include <math.h>
Código 3-11 Directivas #include de la interfaz de la máquina
Giro sentido derecho motor cd Enciende motor cd
Tiempo de retardo
Apaga motor cd y ca Apaga giro sentido motor cd
Z Interfaz Z
Enciende motor de ca
Giro sentido izquierdo motor cd Enciende motor cd
Espera sensor inferior
Apaga giro sentido motor cd Apaga motor cd
Programación de la interfaz de control en la máquina e interfaces X y Y
75 Diseño y estructura del software de las interfaces X y Y
De las anteriores directivas de las cuales se hace más referencia, son:
Pic18_usb
Son los driver usados para la comunicación USB del microcontrolador pic18f4550
Interfase
Aquí se definen todas las funciones y hardware utilizado en programa, como son el uso de puertos del microcontrolador (entradas y salidas), definición de direcciones, tamaño de palabra de transmisión y recepción, y estados lógicos para el encendido de indicadores leds.
Descriptor_easyHID
Se encuentran los descriptores para trabajar con la comunicación HID, y está escrito para funcionar con la librería easyHID.dll, principalmente en la función Control vista anteriormente.
USB
Funciones que maneja las interrupciones y solicitudes de instalación USB
driverlcd18
Dispone de varias funciones para poder trabajar con el display LCD
3.3.
Diseño y estructura del software de las interfaces X y Y
La interfaces X y Y son iguales, cada una tiene una dirección que se les asigna, siendo 0xA0 para la interfaz X, y 0xB0 para la interfaz Y, y que el microcontrolador de la interface de la máquina, envía los datos al microcontrolador de la interfaz correspondiente.
El software de las interfaces X y Y de la máquina están diseñados en el microcontrolador pic16f886, la estructura y conexiones eléctricas de éste, se muestra en el capítulo 4, diseño electrónico de la interfaz de la máquina e interfaces X, Y y Z. El diagrama a bloques 3-12, muestra la secuencia de la programación del software de la interfaz X o Y.
76 Habilitación de interrupciones INTSSP y Global
Diagrama 3-12 Interfaces X y Y
3.3.1.
Habilitación de interrupciones INTSSP y Global
Las interfaces X y Y, utilizan el método por interrupción para la recepción de datos, que ayuda a que el microcontrolador responda de forma inmediata, y se actualice el dato constantemente para no perder algún dato, además de que sólo podrá recibirse el siguiente dato, después de mandar la orden de retroalimentación al microcontrolador interface de la máquina.
La directiva usada para el manejo de interrupciones es #int_xxx. La directiva para la interrupción utilizada en la interfaz es la #int_ssp, para actividades de comunicación con I2C y la #int_global, que sustituye todas las acciones que inserta el compilador al aceptarse una interrupción. Para el manejo de las directivas de interrupción se usa enable_interrupts (nivel), donde nivel, es la interrupción a activar que afecta a los registros de interrupción del microcontrolador. Ver código 3-12.
enable_interrupts(INT_SSP); enable_interrupts(GLOBAL);