初级会员

- 积分
- 113
- 金钱
- 113
- 注册时间
- 2014-8-17
- 在线时间
- 5 小时
|

楼主 |
发表于 2016-12-23 21:42:27
|
显示全部楼层
本帖最后由 wc3100502037 于 2016-12-23 21:50 编辑
这是PID的代码片段,传递的参数第一个是设定的转速,第二个是测得的转速。采用的是增量式PID。主函数中获取设定的转速以及测得的即时转速,调用这个函数计算出增量。转速的测量采用定时器采集频率,这个采集程序没做什么处理,就是让它不停的采集,50次后平均一下,通过全局变量将转速传出。所以这样会不会耽误主程序的效率以及这样还有没有采样周期的概念了??毕竟只是不停的工作???求解??
u16 PID_realize(u16 setSpeed,u16 measuredSpeed)
{
float incSpeed=0.0;
float Local_PID_pErr,Local_PID_dErr,Local_PID_iErr;
mypid.SetSpeed=setSpeed;
mypid.ActualSpeed=measuredSpeed;
mypid.err=mypid.SetSpeed-mypid.ActualSpeed;
Local_PID_pErr = mypid.err-mypid.err_next;
Local_PID_dErr = mypid.err-2*mypid.err_next+mypid.err_last;
Local_PID_iErr = mypid.err;
incSpeed=mypid.Kp*Local_PID_pErr+mypid.Ki*Local_PID_iErr+mypid.Kd*Local_PID_dErr;
mypid.err_last=mypid.err_next;
mypid.err_next=mypid.err;
return (int)(incSpeed);
}
传递的参数第一个是设定的转速,第二个是测得的转速。采用的是增量式PID。 |
|