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:
- 25:1910a55ff0a3
- Parent:
- 24:a1d16835201c
- Child:
- 26:dad0b2031173
--- a/setup.cpp Thu Apr 11 04:12:57 2013 +0000 +++ b/setup.cpp Thu Apr 11 04:31:37 2013 +0000 @@ -9,14 +9,16 @@ * http://www.gnu.org/licenses/gpl-3.0.html */ - +#include "mbed.h" +#include "qeihw.h" #include "setup.h" #include "EthernetNetIf.h" -#include "mbed.h" + extern Serial pc; // Salida Serial de mbed extern Serial RS_232; // Salida Serial a MAX232 -extern I2C encoder; // Comunicacion I2C con encoder +//extern I2C encoder; // Comunicacion I2C con encoder +extern QEIHW encoder; extern Timer crono; // Cronometro interno del microcontrolador extern DigitalIn isPC; // Bit de configuracion serial en la placa extern DigitalOut pin_son; // SON @@ -34,48 +36,12 @@ int read_encoder() { - int count = 0; - int temp = 0; - - 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]; - - 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 ); - - encoder.write( addres, w_2,1 ); - encoder.read ( addres, r_2, 1 ); - - encoder.write( addres, w_3,1 ); - encoder.read ( addres, r_3, 1 ); - - encoder.write( addres, w_4,1 ); - encoder.read( addres, r_4, 1 ); - - 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; // Asignarl el byte 2 - temp = r_4[0]; - count |= temp << 24; // Asignar el byte 3 - - return count; + return encoder.GetPosition(); } void clear_encoder() { - char buffer[2]; - buffer[0] = 0x01; //Comando para borrar el contador - encoder.write( addres, buffer, 1 ); - encoder.stop(); + encoder.Reset( QEI_RESET_POS ); // reset position } void setTimer2() @@ -434,18 +400,10 @@ int ang = 0; float rpm; - clear_encoder(); // Encerar encoder - crono.reset(); // Encerar el cronometro; - - while( ang == 0 ) // Esperar hasta q exista lectura del encoder - ang = read_encoder(); // Leer nueva posicion - - 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 + rpm = encoder.CalculateRPM( encoder.GetVelocityCap() , // ultima velocidad leida desde el encoder + 360 // numero de revoluciones por vuelta del encoder + ); + if( pin_alm == 0 ) sprintf( output,"Ok" );