#include<stdio.h>
typedef struct //定义一组结构体,设置初值,PID参数,差值等
{
float point;
float P;
float I;
float D;
float LastErr;
float PrevErr;
}PID_stu;
PID_stu Pidcon;
void InitPID (void) //初始化PID值
{
Pidcon.P = 0;
Pidcon.I = 0;
Pidcon.D = 0;
}
void setpoint(float Point) //设置比较值
{
Pidcon.point = Point;
}
void setPID(float p, float i, float d) //给PID赋值
{
Pidcon.P = p;
Pidcon.I = i;
Pidcon.D = d;
}
float PIDcontroll(float sysout) //处理差值
{
float Err, InPid;
Err = Pidcon.point - sysout;
InPid = Pidcon.P*Err + Pidcon.I*Pidcon.LastErr + Pidcon.D*Pidcon.PrevErr;
Pidcon.LastErr = Err;
Pidcon.PrevErr = Pidcon.LastErr;
return InPid;
}
int main(void)
{
float y, x=0;
InitPID (); //初始化PID值
setpoint(10);
setPID(0.1,0,0); //给PID赋值
while (1)
{
y = x*x*x;
x += PIDcontroll(y);
printf("x=%f\n", x);
}
}
评论0