比较简单的增量pid控制,后面要学习平衡车pid和云台pid,四轴pid。
/*
作者:hes
日期:17-11-10
功能:增量式 pi和pid控制
*/
#include "pi_control.h"
float KP=0.01; //比例
float KI=0.01; //积分
float KD=0; //微分
float bias=0; //当前差
float last_bias=0; //上次差
float last_old_bias=0; //上上次差
float out_value=0; //输出的控制变量
//pi控制,目标值,当前值
u32 PI_ctr(u32 target,u32 present)
{
bias=target-present;
out_value=KP*(bias-last_bias)+KI*bias;
last_bias=bias;
return (u32)(out_value+0.5);
}
//pid控制,目标值,当前值
u32 PID_ctr(u32 target,u32 present)
{
float ep, ei, ed;
bias=target-present;
ep = bias - last_bias;
ei = bias;
ed = bias - 2*last_bias + last_old_bias;
out_value = KP*ep + KI*ei + KD*ed;
last_old_bias = last_bias;
last_bias = bias;
return (u32)(out_value+0.5);
}