高级会员
- 积分
- 919
- 威望
- 487
- 贡献
- 284
- 兑换币
- 0
- 注册时间
- 2009-11-4
- 在线时间
- 74 小时
|
//位置式 PID 控制设计
unsigned int LocPIDCalc(int NextPoint)
{
register int iError,dError;
iError = sptr->SetPoint - NextPoint; //偏差
sptr->SumError += iError; //积分
dError = iError - sptr->LastError; //微分
sptr->LastError = iError;
return(sptr->Proportion * iError //比例项
+ sptr->Integral * sptr->SumError //积分项
+ sptr->Derivative * dError); //微分项
}
第一:以上的是位置式PID 算法,输入的是从CCD中读取过来的黑线的中点,setpoint的值是舵机位置。按照凌阳公司的PID解说,好像这个函数的返回值是具体的位置,而不是增量。其实PID的程序,比如说要偏差啦,积分了,微分了,这些设置我是懂的,我也看了好多大学的报告,也包括他们的程序,程序也很少。感觉还是有点云里雾里的。这个返回值到底是什么东西,是舵机角度的增量吗??还是PWM的增量,还是直接是具体位置(比如采集40个点,正中是20)?我知道增量式PID算出来是增量的,最后要实现控制的话还得加上原来的PWM数值。这个位置式是什么情况。
看过whut_wj的一个回答,输出的是PWM的增量。但是,他回答的是增量式的,而不是位置式的。 |
|