typedef struct MyPID
{
int Target;
int Uk;
int Udk;
int Uk_1;
int P;
int I;
u8 b;
int D;
int ek_0;
int ek_1;
int ek_2;
}PID;
PID Speed_PID;
PID *Speed_Point = &Speed_PID;
void PIDInit()
{
Speed_Point->Target = ;
Speed_Point->Uk = 0;
Speed_Point->Udk = 0;
Speed_Point->Uk_1 = ;
Speed_Point->P = 3;
Speed_Point->I = 1;
Speed_Point->b = 1;
Speed_Point->D = 1;
Speed_Point->ek_0 = 0;
Speed_Point->ek_1 = 0;
Speed_Point->ek_2 = 0;
}
int SpeedPID(int placeout,int g_Speed_Count)
{
Speed_Point->ek_0 = placeout-g_Speed_Count;
Speed_Point->Udk = Speed_Point->P*(Speed_Point->ek_0-Speed_Point->ek_1)+Speed_Point_b*Speed_Point->I*Speed_Point->ek_0;
Speed_Point->Uk = Speed_Point->Uk1+Speed_Point->Udk;
Speed_Point->ek_2 = Speed_Point->ek_1;
Speed_Point->ek_1 = Speed_Point->ek_0;
Speed_Point->Uk_1 = Speed_Point->Uk;
if(Speed_Point->Uk >= PWM_Max)
{
return PWM_Max;
}
else if(Speed_Point->Uk <= PWM_Min)
{
return PWM_Min;
}
return(Speed_Point->Uk);
}