PID算法的C语言实现四 增量型PID的C语言实现

有位置型编程可以知道这个编程也很简单,戒指接贴出代码了:

#include "stdio.h"

struct _pid{
float SetSpeed;
float ActualSpeed;
float Err;
float Err_Last;
float Err_Next;
    float Kp,Ki,Kd;
}pid;


void PID_Init(void)
{
printf("PID_Init begin! \n");


pid.SetSpeed      = 0;
pid.ActualSpeed   = 0;
pid.Err           = 0;
pid.Err_Last      = 0;
        pid.Err_Next      = 0;
pid.Kp            = 0.2;
pid.Ki            = 0.015;
pid.Kd            = 0.2;


printf("PID_Init end! \n");
}


float PID_Cal(float Speed)
{
float incrementSpeed;
pid.SetSpeed         =  Speed;                                                      
pid.Err              =  pid.SetSpeed - pid.ActualSpeed;                     
        incrementSpeed =  pid.Kp*(pid.Err-pid.Err_Next)+pid.Ki*pid.Err+pid.Kd*(pid.Err-2*pid.Err_Next+pid.Err_Last);
        pid.ActualSpeed      += incrementSpeed;
pid.Err_Last         =  pid.Err_Next;
pid.Err_Next         =  pid.Err;
            
return pid.ActualSpeed;  
}


int main(void)
{
int count = 0 ;
printf("SYSTEM BEGIN! \n");
PID_Init();

while(count<1000) 
{
float speed = PID_Cal(200.0);
printf("-%d-%f-",count,speed);
count++;
}
   return 0;
}

运行结果:

PID算法的C语言实现四 增量型PID的C语言实现