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!!