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