Autor Tema: Contolador PI problemas con floats  (Leído 1280 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado woofer

  • PIC10
  • *
  • Mensajes: 5
Contolador PI problemas con floats
« en: 07 de Octubre de 2008, 16:09:59 »
  Hola. Estoy implementando un regulador PI en C18 para manejar unos motores de continua y el caso eske cuando la señal de error (declarada como float)  me da negativa, es decir, ke debe decelerar el motor, el valor de la salida de la accion de control se va al maximo...vamos, ke no ha exo caso del valor de la float "ek" que deberia ser negativo.....y por lo visto toma un valor alto positivo.


Os dejo el codigo por si alguien le puede exar un vistazo:



   struct{
      int           Ref;
      float         Duty;
      unsigned char Pulso;            // ponemos salida a 1
      unsigned int  Periodo;          // frecuencia PWM
      unsigned int  Ton;               // duracion del pulso
      unsigned int  Velocidad;      // en mm/seg.
      unsigned int  Vel_Filtrada;
      float         w;                     //en rad.seg
      unsigned int  rpm;             //revoluciones por minuto
  } Motor_Izkierdo;


void Controlador_MI(void){
     static unsigned char Ini=false;
     static float   ek,ek_1=0;
     static float uk,uk_1=0;
     

     if(!Ini){
       Motor_Izkierdo.Velocidad = 0;
       Motor_Izkierdo.Vel_Filtrada = 0;
       Motor_Izkierdo.rpm = 0;
       Motor_Izkierdo.w=0; 
       Motor_Izkierdo.Ref=0;
       Ini=true;
     }

     ek = Motor_Izkierdo.Ref - Motor_Izkierdo.Vel_Filtrada;
     uk = uk_1 + 17.5067*ek - 15.3639*ek_1;                    //--->'te' = 2 seg

    WriteMI_Duty(  (uk/ReadVBat_Voltios())*100.0  );
     
     ek_1 = ek;
     uk_1 = ( ReadMI_Duty()*ReadVBat_Voltios()/100.0 );

}






   sin embargo, cuando cambio el tipo de variable "float" por una "int" solamente para las variables "ek"  y  "ek_1" el controlador funciona a la perfeccion...como si el compilador no tubiese en cuenta ke el valor de la float es negativo y siempre lo tomara como positivo.


Gracias de ante mano!...un saludo!!


 

anything