Proyecto de Tesis en Mecatrónica. Universidad Técnica del Norte. Ernesto Palacios <mecatronica.mid@gmail.com>

Dependencies:   EthernetNetIf HTTPServer QEI_hw RPCInterface mbed

Files at this revision

API Documentation at this revision

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