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:
- 32:4483d6c225e5
- Parent:
- 31:7e2cdd547cb2
- Child:
- 33:e6ff02c3e0f5
--- a/setup.cpp Sat May 03 00:14:17 2014 +0000 +++ b/setup.cpp Wed May 07 01:05:05 2014 +0000 @@ -37,9 +37,11 @@ int fq_actual = 0; // Ultimo valor seteado para el tren de pulsos +int bandera_inicio = 0; + int velocidad_rpm() { - return encoder.GetPosition(); + return encoder.CalculateRPM( encoder.GetVelocityCap(), 360 ); } void clear_encoder() @@ -108,6 +110,7 @@ { setPTO( value ); fq_actual = value; + bandera_inicio = 0; //En caso que haya estado yendo a HOME, cancelar // Envia un OK de comando recibido if( isPC ) @@ -121,6 +124,8 @@ { setPTO( value * 1000 ); fq_actual = value; + bandera_inicio = 0; //En caso que haya estado yendo a HOME, cancelar + // Envia un OK de comando recibido if( isPC ) pc.printf("OK\r\n"); @@ -147,6 +152,7 @@ stopTimer2(); pin_dir = value; wait_us( 2 ); + bandera_inicio = 0; //En caso que haya estado yendo a HOME, cancelar if ( fq_actual != 0 ) { @@ -180,8 +186,10 @@ float pulsos = value; //Numero de pulsos a generar t_alto = (float)(pulsos / fq_posicion); //Tiempo que debe ser generado el tren de pulsos. + bandera_inicio = 0; //En caso que haya estado yendo a HOME, cancelar + //DEBUG - pc.printf("Tiempo en timer en seg = %f", t_alto); + //pc.printf("Tiempo en timer en seg = %f", t_alto); stopTimer2(); //Deten el tren de pulsos setPTO( fq_posicion ); //Nueva frecuencia de salida @@ -205,9 +213,10 @@ { float pulsos = value * 1000; //Numero de pulsos a generar t_alto = (float)(pulsos / fq_posicion); //Tiempo que debe ser generado el tren de pulsos. - + bandera_inicio = 0; //En caso que haya estado yendo a HOME, cancelar + //DEBUG - pc.printf("Tiempo en timer en seg = %f", t_alto); + //pc.printf("Tiempo en timer en seg = %f", t_alto); stopTimer2(); //Deten el tren de pulsos setPTO( fq_posicion ); //Nueva frecuencia de salida @@ -231,9 +240,10 @@ { float pulsos = value * 1000000; //Numero de pulsos a generar t_alto = (float)(pulsos / fq_posicion); //Tiempo que debe ser generado el tren de pulsos. - + bandera_inicio = 0; //En caso que haya estado yendo a HOME, cancelar + //DEBUG - pc.printf("Tiempo en timer en seg = %f", t_alto); + //pc.printf("Tiempo en timer en seg = %f", t_alto); stopTimer2(); //Deten el tren de pulsos setPTO( fq_posicion ); //Nueva frecuencia de salida @@ -277,6 +287,21 @@ case 'S': //Encender el Servo pin_son = value; + bandera_inicio = 0; //En caso que haya estado yendo a HOME, cancelar + + // Envia un OK de comando recibido + if( isPC ) + pc.printf("OK\r\n"); + else + RS_232.printf("OK\r\n"); + + break; + + case 'I': //Ir al inicio del recorrido + + pin_dir = 1; //Mover hacia el motor + bandera_inicio = 1; // Informar a ISR_Adv_motor() acerca del Homing + setPTO( value ); // a la velocidad seteada // Envia un OK de comando recibido if( isPC ) @@ -295,6 +320,7 @@ RS_232.printf("NA\r\n"); break; + } } @@ -340,9 +366,9 @@ void ISR_Alm_encoder() { if( isPC ) - pc.printf("A0\r\n"); + pc.printf("A3\r\n"); else - RS_232.printf("A0\r\n"); + RS_232.printf("A3\r\n"); } @@ -351,10 +377,14 @@ */ void ISR_Alm_motor() { - if( isPC ) - pc.printf("A0\r\n"); - else - RS_232.printf("A0\r\n"); + wait_us( 50 ); + if ( limite_4 == 1) + { + if( isPC ) + pc.printf("A0\r\n"); + else + RS_232.printf("A0\r\n"); + } } @@ -363,11 +393,15 @@ */ void ISR_Adv_encoder() { + wait_ms( 50 ); + if ( limite_2 == 1) + { - if( isPC ) - pc.printf("A2\r\n"); - else - RS_232.printf("A2\r\n"); + if( isPC ) + pc.printf("A2\r\n"); + else + RS_232.printf("A2\r\n"); + } } @@ -377,10 +411,41 @@ */ void ISR_Adv_motor() { - if( isPC ) - pc.printf("A1\r\n"); - else - RS_232.printf("A1\r\n"); + if ( bandera_inicio == 1 ) + { + setPTO( 0 ); //detener el carro + pin_dir = 0; //hacer que se aleje del motor + + + stopTimer2(); //Deten el tren de pulsos + setPTO( 20000 ); //Nueva frecuencia de salida + startTimer2(); //Inicia el tren de pulsos + wait_ms( 100 ); //Espera hasta llegar a la posicion + stopTimer2(); //Posicion alcanzada ALTO. + + setPTO (0); // Detener el carro cuando este en posición valida + wait_ms(100); + //Encerar el contador de encoder y de velocidad + encoder.Reset(QEI_RESET_POS); + encoder.Reset(QEI_RESET_VEL); + + bandera_inicio = 0; //Limpiar la bandera + + // Envia un IN de proceso terminado + if( isPC ) + pc.printf("IN\r\n"); + else + RS_232.printf("IN\r\n"); + } + + else{ + + if( isPC ) + pc.printf("A1\r\n"); + else + RS_232.printf("A1\r\n"); + } + } @@ -754,6 +819,42 @@ } +void setHOME_eth( char * input, char * output ) +{ + int value = atoi( input ); + pin_dir = 1; //Mover hacia el motor + bandera_inicio = 1; // Informar a ISR_Adv_motor() acerca del Homing + setPTO( value * 1000 ); // a la velocidad seteada en KiloHertzios + + if( pin_alm == 0 ) + { + if ( limite_2 == 1 ) // Alarma muy cerca al encoder + { + sprintf( output,"A2\r\n" ); + } + + if ( limite_3 == 1 ) // Alarma muy cerca al encoder + { + if (bandera_inicio == 1) + { + sprintf( output,"IN\r\n" ); + } + sprintf( output,"A1\r\n" ); + } + if ( limite_1 == 1 || limite_4 == 1 ) // ERROR DE POSICION + { + sprintf( output,"A0\r\n" ); + } + + else + sprintf( output,"OK\r\n" ); + } + else + sprintf( output,"AL" ); + + +} +