完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
比例部分的当前误差减去上次误差基本结果很小或直接就等于0呢。也就是比例部分没起作用,我想请教一下可能是什么原因呢?比如每次执行pid计算,PID计算函数变量都被置0了(我使用了全局变量,值应该保存到下次了)?采样频率不对,采样速度太快,两次之间的采样差值太小相减后约等于0????采样的频率有没有讲究?在程序中应该怎样体现??用定时器去定时的开合这个采样程序以控制采样周期(速度采样也是采集频率,也就是用一个定时器定时的控制另一个采样定时器的工作/停止??)????能给个思路?感激不尽!!!!!!!!!!!
这是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。 |
|
相关推荐
2个回答
|
|
|
|
帮顶!
|
|
|
|
只有小组成员才能发言,加入小组>>
请问下图大疆lightbridge2遥控器主板电源芯片型号是什么?
4475 浏览 1 评论
使用常见的二极管、三极管和mos做MCU和模组的电平转换电路,但是模组和MCU无法正常通信,为什么?
346浏览 2评论
为了提高USIM卡电路的可靠性和稳定性,在电路设计中须注意的点有哪些?
351浏览 2评论
374浏览 2评论
367浏览 2评论
417浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 03:14 , Processed in 1.978957 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号