- 1、本文档共25页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PID算法实例
C的PIC算法,适合带算法器的MCU或DSP。typedef struct PID { DWORD? SetPoint;???//? 设定目标 Desired Value WORD? P;???????? ???//? 比例常数 Proportional Const WORD? I;???????? ???//? 积分常数 Integral Const WORD? D;???????? ???//? 微分常数 Derivative Const long? LastError;??????? ?//? Error[-1] long? PrevError;??????? ?//? Error[-2] long? SumError;????//? Sums of Errors}PID;_PERSISTENT PID pid;long calmul(long val,WORD mul){?DWORD tmp;?bool flag;??if(val 0){?flag = true;?}else{?flag = false;??val = labs(val);??}?tmp = (DWORD)val * (DWORD)mul;?tmp /= 4096UL;??if(!flag)?return (long)(0 - (long)tmp);?else?return (long)tmp;??}long PIDCalc(long ThisPoint ){ long? dError,Error; Error = (long)pid.SetPoint - (long)ThisPoint;????????? // 偏差?//?? Error = (long)ThisPoint - (long)pid.SetPoint ;?? pid.SumError += Error;????????????????????? // 积分?? if(pid.SumError 1000000l)?pid.SumError = 1000000l; else if(pid.SumError -1000000l)?pid.SumError = -1000000l;?? dError = pid.LastError - pid.PrevError;???? // 当前微分?? pid.PrevError = pid.LastError;?? pid.LastError = Error;?? Error = calmul(Error , pid.P); Error += calmul(pid.SumError , pid.I); Error += calmul(dError , pid.D);?? return Error;???????//?? return (pid.P * Error??????????? // 比例项?//?? ?+?? pid.I * pid.SumError?????? // 积分项?//??+?? pid.D * dError???????????? // 微分项?//?);}void PIDInit (){ pid.SumError = 0; pid.LastError = 0; pid.PrevError = 0; pid.P = 2; pid.I = 1; pid.D = 3;}要注意的是,对于调节频率较低的电源来说,适宜采用位置式pid。否则可能系统较难闭环稳定,尤其是全负载范围。哎呀:李哥你忙不忙?写个PI程序清风:那个是要调试的,写容易,调试麻烦,很急?哎呀:不呀,我想看看清风:想看看的话我还是再找找,应该有的,以前写过哎呀:呵呵。就是不懂清风:一般的都不用单片机写,都是DSP,用单片机的话,要点是不用乘除法,不然没速度。清风:看见变量定义没? #define? ?P?????? e[20]??? ?// 比例项? #define?? I?????? e[21]???? // 积分项 #define?? YT????? e[22]??? ?// 调节因子 #define?? YP???????? 2????? // 比例因子 #define?? YI???????? 3????? // 积分因子 #define?? YB?????? 200??? ? // 饱和因子 #define? ?YF???????? 4????? // 调频因子 #define?? B??????? 400???? ?// 调节目标哎呀:没看见算式清风:没有啊?那可能是没写,或者没用上哎呀:哦清风:有这些变量定义,写就很容易,我口头描述一下:YT是调节因子,就是占空调整几格的意思,所有计算都归结到它这YT=PYP+IYI,就这样简单,非常简单哎呀:不懂你的意
文档评论(0)