#include <PID.H>
#include <P18F4620.H>
#include <MATH.H>
float Kp,Ti,Td,T,Rs;
static int ADC;
static float ERROR[3];
float PID(void)
{
float A,B,C; //声明系数
ADC = (ADRESH << 8) + ADRESL; //获得反馈采样
ERROR[0] = ERROR[1]; //移位旧偏差
ERROR[1] = ERROR[2];
ERROR[2] = Rs - (ADC * 0.00489);//更新偏差
A = Kp * (1 + (T*pow(Ti,-1)) + (Td*pow(T,-1)));//计算系数
B = Kp * (1 + (2*Td*pow(T,-1)));
C = Kp*Td*pow(T,-1);
return A*ERROR[2] - B*ERROR[1] + C*ERROR[0]; //完成PID算法
}