• No results found

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);

Related documents