该代码是基于msp430f149的pid算法
PID.h
#include "PID.h"
PID pid;//存放PID算法所需要的数据,即结构体
//**********************************************************************************
// PID算法
// PID公式out=(Kp*Ek)+(Kp*(T/Ti)∑(0--n)Ek)+(Kp*(Td/T)(Ek-Ek_1))+out0
//**********************************************************************************
void PID_Calc(void)//PID的计算
{
float DelEk;//相邻两次偏差值
float TI,KI;//(T/Ti),(Kp*(T/Ti))
float Iout;
float Pout;
float Dout;
float TD; //(Td/T)
float KD; //(Kp*(Td/T))
float out; //用来暂时存储pid的脉宽
if(pid.C10ms<pid.T/10) //计算周期未到
{
return ;
}
pid.Ek = pid.Sv - pid.Pv;//当前的偏差值=设定值-实际值
pid.SEk += pid.Ek; //历史偏差总和 ,偏差值有正负不会无穷大
DelEk = pid.Ek - pid.Ek_1;//最近两次的偏差
TI = pid.T/pid.Ti;
KI = TI*pid.Kp; //即是(Kp*(T/Ti))
TD = pid.Td/pid.T;
KD = TD * pid.Kp; //即是(Kp*(Td/T))
Pout = pid