Proyecto de Tesis en Mecatrónica. Universidad Técnica del Norte. Ernesto Palacios <mecatronica.mid@gmail.com>
Dependencies: EthernetNetIf HTTPServer QEI_hw RPCInterface mbed
Revision 35:92b0f1b75a51, committed 2014-07-07
- Comitter:
- Yo_Robot
- Date:
- Mon Jul 07 15:41:20 2014 +0000
- Parent:
- 34:bdf918bc9b59
- Commit message:
- Intento de que el mbed devuelva los pulsos... no funciona, mejor implementar la misma funcionalidad en LabVIEW, pero aun se debe poder detener la generaci?n de pulsos.
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
setup.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Sat Jul 05 04:11:35 2014 +0000 +++ b/main.cpp Mon Jul 07 15:41:20 2014 +0000 @@ -33,7 +33,8 @@ QEI_INVINX_NONE // Not inverted index ); -Timer crono; // Reloj Interno de mbed +Timer cronometro; // Reloj Interno de mbed +Timeout temporizador; // Temporizador del generador de pulsos. DigitalOut pin_son( p7 ); // SON DigitalOut pin_dir( p26 ); // SIGN+ @@ -78,6 +79,9 @@ RPCFunction GoHome(&setHOME_eth, "INI"); RPCFunction GetAlm( &getALM_eth, "ALM"); +// Funciones Globales +int bandera_pulsos = 0; +int num_pulsos = 0; int main() { @@ -183,5 +187,16 @@ Net::poll(); // Revisa la red solo si la coneccion es HTTP led_verde = led_verde ^ 1; // Toggle Led Verde... esperando transmicion } + + if ( bandera_pulsos == 1 ) //Se ha detenido la generación de pulsos + { + + if( isPC ) + pc.printf("%d-OK\r\n", num_pulsos ); + else + RS_232.printf("%d-OK\r\n", num_pulsos ); + + bandera_pulsos = 0; + } } }
--- a/setup.cpp Sat Jul 05 04:11:35 2014 +0000 +++ b/setup.cpp Mon Jul 07 15:41:20 2014 +0000 @@ -18,7 +18,8 @@ extern Serial pc; // Salida Serial de mbed extern Serial RS_232; // Salida Serial a MAX232 extern QEIHW encoder; -extern Timer crono; // Cronometro interno del microcontrolador +extern Timer cronometro; // Cronometro interno del microcontrolador +extern Timeout temporizador; // temporizador para extern DigitalIn isPC; // Bit de configuracion serial en la placa extern DigitalOut pin_son; // SON extern DigitalOut pin_dir; // SIGN+ @@ -31,14 +32,31 @@ extern InterruptIn limite_3; extern InterruptIn limite_4; +extern int bandera_pulsos; //bandera del contador de PULSOS GENERADOS +extern int num_pulsos; // Numero de pulsos generados + + int fq_posicion = 10000; // Variable global donde se almacenara // la velocidad de posicionamiento en Hz float t_alto; // para el posicionamiento del motor int fq_actual = 0; // Ultimo valor seteado para el tren de pulsos -int bandera_inicio = 0; +int bandera_inicio = 0; //bandera de ir a inicio HOME + + +void posicion_ok() +{ + cronometro.stop(); + stopTimer2(); //Detener tren de pulsos + float tiempo_pulsos_generados = cronometro.read_ms(); + int num_pulsos = (int) (fq_posicion * tiempo_pulsos_generados) / 1000; + + bandera_pulsos = 1; // En la funcion main() se imprimiran los resultados; + +} + int velocidad_rpm() { return encoder.GetVelocityCap(); @@ -188,22 +206,18 @@ bandera_inicio = 0; //En caso que haya estado yendo a HOME, cancelar - //DEBUG - //pc.printf("Tiempo en timer en seg = %f", t_alto); - stopTimer2(); //Deten el tren de pulsos setPTO( fq_posicion ); //Nueva frecuencia de salida - startTimer2(); //Inicia el tren de pulsos - wait( t_alto ); //Espera hasta llegar a la posicion - stopTimer2(); //Posicion alcanzada ALTO. + pc.printf("\n\nattach funcion: %f ", t_alto); - // Envia un OK de comando recibido - if( isPC ) - pc.printf("OK\r\n"); - else - RS_232.printf("OK\r\n"); + temporizador.attach( &posicion_ok, t_alto ); + cronometro.start(); + startTimer2(); //Inicia el tren de pulsos + // termina cuando el timeout detiene + + pc.printf("\n\nCorriendo "); break; }