- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PID最形象解释及其算法代码.doc
小明接到这样一个任务:有一个水缸点漏水(而且漏水的速度还不一定固定不变),要求水面高度维持在某个位置,一旦发现水面高度低于要求位置,就要往水缸里加水。?小明接到任务后就一直守在水缸旁边,时间长就觉得无聊,就跑到房里看小说了,每30分钟来检查一次水面高度。水漏得太快,每次小明来检查时,水都快漏完了,离要求的高度相差很远,小明改为每3分钟来检查一次,结果每次来水都没怎么漏,不需要加水,来得太频繁做的是无用功。几次试验后,确定每10分钟来检查一次。这个检查时间就称为采样周期。?开始小明用瓢加水,水龙头离水缸有十几米的距离,经常要跑好几趟才加够水,于是小明又改为用桶加,一加就是一桶,跑的次数少了,加水的速度也快了,但好几次将缸给加溢出了,不小心弄湿了几次鞋,小明又动脑筋,我不用瓢也不用桶,老子用盆,几次下来,发现刚刚好,不用跑太多次,也不会让水溢出。这个加水工具的大小就称为比例系数。?小明又发现水虽然不会加过量溢出了,有时会高过要求位置比较多,还是有打湿鞋的危险。他又想了个办法,在水缸上装一个漏斗,每次加水不直接倒进水缸,而是倒进漏斗让它慢慢加。这样溢出的问题解决了,但加水的速度又慢了,有时还赶不上漏水的速度。于是他试着变换不同大小口径的漏斗来控制加水的速度,最后终于找到了满意的漏斗。漏斗的时间就称为积分时间 。小明终于喘了一口,但任务的要求突然严了,水位控制的及时性要求大大提高,一旦水位过低,必须立即将水加到要求位置,而且不能高出太多,否则不给工钱。小明又为难了!于是他又开努脑筋,终于让它想到一个办法,常放一盆备用水在旁边,一发现水位低了,不经过漏斗就是一盆水下去,这样及时性是保证了,但水位有时会高多了。他又在要求水面位置上面一点将水凿一孔,再接一根管子到下面的备用桶里这样多出的水会从上面的孔里漏出来。这个水漏出的快慢就称为微分时间。大学时代做机器人时用的PID算法源代码:#define PID_Uint struct pid_uintPID_Uint{? ? ? ? int U_kk;? ? ? ? int ekk;? ? ? ? int ekkk;? ? ? ? int Ur;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //限幅输出值,需初始化? ? ? ? int Un;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //不灵敏区? ? ? ? //int multiple;? ? ? ? ? ? ? ? //PID系数的放大倍数,用整形数据的情况下,提高PID参数的设置精度? ? ? ?? ?固定为256? ? ? ? int Kp;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //比例,从小往大调? ? ? ? int Ti;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //积分,从大往小调? ? ? ? int Td;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //微分,用巡线板时设为0? ? ? ? int k1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //? ? ? ? int k2;? ? ? ? int k3;};/********************************************************************?函 数 名:void Init_PID_uint(PID_uint *p)功? ? 能:初始化PID参数说? ? 明:调用本函数之前,应该先对Kp,Ti,Td做设置? ? ? ? ,简化了公式入口参数:PID单元的参数结构体 地址返 回 值:无***********************************************************************/void Init_PID_uint(PID_Uint *p){? ? ? ? p-k1=(p-Kp)+(p-Kp)*1024/(p-Ti)+(p-Kp)*(p-Td)/1024;? ? ? ? p-k2=(p-Kp)+2*(p-Kp)*(p-Td)/1024;? ? ? ? p-k3=(p-Kp)*(p-Td)/1024;}/********************************************************************?函 数 名:void reset_Uk(PID_Uint *p)功? ? 能:初始化U_kk,ekk,ekkk说? ? 明:在初始化时调用,改变PID参数时有可能需要调用入
文档评论(0)