这是我们实验室计算机控制实验台的一个简单例程(PID子程序,位置式PID算法),用TC3写的,其实很简单(位置控制的)
Sample是当前采样值,Position是目标值
int PIDPro(float Sample, float Position)
{
int DAOut;
ErrPres=Position-Sample; //E(k)=R(k)-S(k)
PPro=Kp*ErrPres; //Pp(k)=Kp*E(k)
PInt=Ki*ErrPres+PIntPrev; //Pi(k)=Ki*E(k)+Pi(k-1)
PDif=Kd*(ErrPres-ErrPrev); //Pd(k)=Kd*[E(k)-E(k-1)]
VolOut=PPro+PInt+PDif; //P(k)=Pp(k)+Pi(k)+Pd(k)
ErrPrev=ErrPres; //P(k-1)=P(k)
PIntPrev=PInt; //Pi(k-1)=Pi(k)
DAOut=(int)VolOut;
if(DAOut>UpperLimit)
DAOut=UpperLimit; //Upper Limit
if(DAOut<LowerLimit)
DAOut=LowerLimit; //Low Limit
return DAOut;
}
返回值是12位D/A的转换器的输入量
评论0