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:
- 7:d9aca501126f
- Parent:
- 6:b4dae934e1ea
- Child:
- 8:958dfe5052b9
- Child:
- 10:0ebc4955cbe7
--- a/setup.cpp Sun Apr 01 20:03:42 2012 +0000 +++ b/setup.cpp Mon Apr 02 19:47:49 2012 +0000 @@ -15,10 +15,10 @@ // Salida Serial de mbed extern Serial pc; -extern DigitalOut pin_son; // SON -extern DigitalOut pin_dir; // SIGN+ -extern DigitalIn pin_alm; // ALM -extern AnalogOut aout; // +-10V +extern DigitalOut pin_son; // SON +extern DigitalOut pin_dir; // SIGN+ +extern InterruptIn pin_alm; // ALM +extern AnalogOut aout; // +-10V @@ -50,66 +50,71 @@ LPC_PINCON->PINSEL0 |= 15UL << 16; //Activar MAT2.2 // y MAT2.3 como salidas - -} - - -void setSON( int onOff ) -{ - pin_son = onOff; -} - - -void setDir( int dir ) -{ - pin_dir = dir; -} - - -void setAout( float value ) -{ - aout = value; -} - - -void ISR_Alarm() -{ - pc.printf( "\n\n ERROR: ALARMA \n\n " ); - - setSON( 0 ); - stopTimer2(); - setAout( 0.5 ); - } void ISR_Serial() { - int freq; //Frecuencia del PTO - char command; //Comando a ejecutar - char scale; //Escala de la frecuencia + int value; // Nuevo Valor + char command; // Comando al que aplicar el nuevo valor - pc.scanf( "%c%d%c", &command, &freq, &scale ) ; - LPC_UART0->FCR = 0x06; - pc.printf("\n %c%d%c \n", command, freq, scale ); + pc.scanf( "%d-%c", &value, &command ) ; + pc.printf("\n %d-%c \n", value, command ); // Establecer nueva frecuencia - if( command == 'F') - { - if( scale == 'H' ) - setMR2( getMRvalue( freq ) ); - else if( scale == 'K' ) - setMR2( getMRvalue( freq * 1000 ) ); - } + if( command == 'H') + setPTO( value ); + + else if( command == 'K' ) + setPTO( value * 1000 ); + + + + // Nuevo voltaje de salida + // Alguna formula para calcular el Vout necesario + // -100% a +100% + else if( command == 'A') + aout = ( value + 100 ) / 200; + + + // Cambiar la direccion + else if( command == 'D') + pin_dir = value; + + + //Encender el Servo + else if( command == 'S') + pin_son = value; + + //else if( command == 'E') + // setDir( value ); - // INICIAR Timer - else if( command == 'I') - startTimer2( ); +} + + +void setPTO( int freq ) +{ + if( freq != 0 ) + { + LPC_TIM2->TC = 0x00; //Resetear Timer + setMR2( getMRvalue( freq ) ); + startTimer2(); + + }else{ - // PARAR Timer - else if( command == 'P') - stopTimer2( ); - + stopTimer2(); + LPC_TIM2->TC = 0x00; //Resetear Timer + } +} + +void ISR_Alarm() +{ + pin_son = 0 ; + stopTimer2(); + aout = 0.5 ; + + pc.printf( "\n\n ERROR: ALARMA \n\n " ); + } int getMRvalue( int fout ) @@ -119,9 +124,9 @@ exact = (24000000 /(fout*2) ) -1; toRegister = exact; // Valor redondeado; - error = exact - toRegister; + //error = exact - toRegister; - pc.printf( "\n\n MR value: %d\n error: %f\n" ,toRegister ,error ); + //pc.printf( "\n\n MR value: %d\n error: %f\n" ,toRegister ,error ); return toRegister; } @@ -137,7 +142,7 @@ void startTimer2() { - // Arrancer el Timer 2 + // Arrancar el Timer 2 LPC_TIM2->TCR = 1; }