Proyecto de Tesis en Mecatrónica. Universidad Técnica del Norte. Ernesto Palacios <mecatronica.mid@gmail.com>
Dependencies: EthernetNetIf HTTPServer QEI_hw RPCInterface mbed
Diff: setup.cpp
- Revision:
- 24:a1d16835201c
- Parent:
- 23:2126e38bb48c
- Child:
- 25:1910a55ff0a3
--- a/setup.cpp Fri Jul 06 17:34:16 2012 +0000 +++ b/setup.cpp Thu Apr 11 04:12:57 2013 +0000 @@ -14,24 +14,21 @@ #include "EthernetNetIf.h" #include "mbed.h" -// Salida Serial de mbed -extern Serial pc; -extern Serial RS_232; -extern I2C encoder; -extern Timer crono; -extern DigitalIn isPC; +extern Serial pc; // Salida Serial de mbed +extern Serial RS_232; // Salida Serial a MAX232 +extern I2C encoder; // Comunicacion I2C con encoder +extern Timer crono; // Cronometro interno del microcontrolador +extern DigitalIn isPC; // Bit de configuracion serial en la placa extern DigitalOut pin_son; // SON extern DigitalOut pin_dir; // SIGN+ extern InterruptIn pin_alm; // ALM extern AnalogOut aout; // +-10V extern DigitalOut led_verde; // Led verde del conector Ethernet -extern DigitalOut led_rojo; // Led naranja del conector Ethernet - +extern DigitalOut led_rojo; // Led naranja del conector Ethernet int fq_posicion = 10000; // Variable global donde se almacenara // la velocidad de posicionamiento en Hz - -float t_alto; // para el posicionamiento del motor +float t_alto; // para el posicionamiento del motor const int addres = 0x36; // Direccion del enconder en modo esclavo @@ -40,22 +37,15 @@ int count = 0; int temp = 0; - char w_1 [2]; - char w_2 [2]; - char w_3 [2]; - char w_4 [2]; + char w_1 [2], r_1 [2]; + char w_2 [2], r_2 [2]; + char w_3 [2], r_3 [2]; + char w_4 [2], r_4 [2]; - char r_1 [2]; - char r_2 [2]; - char r_3 [2]; - char r_4 [2]; - - w_1[0] = 0x10; - w_2[0] = 0x11; - w_3[0] = 0x12; - w_4[0] = 0x13; - - //pc.printf("\nEnviando dato\n"); + w_1[0] = 0x10; // Leer byte 0 del contador + w_2[0] = 0x11; // Leer byte 1 del contador + w_3[0] = 0x12; // Leer byte 2 del contador + w_4[0] = 0x13; // Leer byte 3 del contador encoder.write( addres, w_1,1 ); encoder.read( addres, r_1, 1 ); @@ -69,27 +59,21 @@ encoder.write( addres, w_4,1 ); encoder.read( addres, r_4, 1 ); - count = r_1[0]; - - temp = r_2[0]; - count |= temp << 8; - + count = r_1[0]; // Asignar el byte 0 + temp = r_2[0]; + count |= temp << 8; // Asignar el byte 1 temp = r_3[0]; - count |= temp << 16; - - temp = r_4[0]; - count |= temp << 24; + count |= temp << 16; // Asignarl el byte 2 + temp = r_4[0]; + count |= temp << 24; // Asignar el byte 3 return count; } void clear_encoder() { - char buffer[2]; buffer[0] = 0x01; //Comando para borrar el contador - buffer[1] = 0x02; // Comando para cambiar estado de led - encoder.write( addres, buffer, 1 ); encoder.stop(); } @@ -139,7 +123,8 @@ switch( command ) { - case 'R': + case 'R': // Leer la velocidad en RPMs del encoder + { int ang = 0; float rpm; @@ -152,41 +137,47 @@ crono.stop(); // detener cronometro rpm = ( ang * 500 ) / (crono.read_ms() * 3 ); - // grados 1000 ms 60 s 1 Rev 500 Rev - // ------ = -------- * ------ * ---------- = -------- - // ms 1s 1min 360 grad 3 Min + // grados 1000 ms 60 s 1 Rev 500 Rev + // ------ * -------- * ------ * ---------- = -------- + // ms 1s 1min 360 grad 3 Min if( isPC ) pc.printf("%f", rpm); else RS_232.printf("%f", rpm); break; - + } case 'H': // Establecer nueva frecuencia + { setPTO( value ); break; - + } case 'K': + { setPTO( value * 1000 ); break; - + } case 'A': // Cambiar voltaje de salida + { aout = (float)( value + 10000.0 ) / 20000.0; break; - + } case 'D': // Cambiar la direccion + { stopTimer2(); pin_dir = value; wait_us( 2 ); startTimer2(); break; - + } case 'V': //Setear la velocidad de Posicionamiento + { fq_posicion = value; break; - + } // Generar un numero definido de pulsos a la velocidad de posicionamiento case 'G': + { int pulsos = value; //Numero de pulsos a generar t_alto = pulsos / fq_posicion; //Tiempo que debe ser generado el tren de pulsos. @@ -196,14 +187,15 @@ wait( t_alto ); //Espera hasta llegar a la posicion stopTimer2(); //Posicion alcanzada ALTO. break; - - case 'E': //Leer encoder + } + case 'E': //Leer posicion angular relativa del encoder + { if( isPC ) pc.printf( "%d",read_encoder() ); else RS_232.printf( "%d",read_encoder() ); break; - + } case 'Z': //Limpiar contador encoder clear_encoder(); break;