微机控制技术项目教程项目五 机控制算法应用.ppt

微机控制技术项目教程项目五 机控制算法应用.ppt

  1. 1、本文档共99页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
微机控制技术项目教程项目五 机控制算法应用

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 案例9 数字PID增量式程序 根据公式5-27编写数字PID增量式C程序 任务实施 1、任务分析 2、软件设计 (1)程序流程图 程序流程图如图5-13所示。 (2)程序(下一页幻灯片) 3、思考并编写程序 根据式5-26 将公式变为: 其中,KP为比例常数;KI=T/ Ti为积分常数;KD=Td/T为微分常数,试根据此公式编写PID增量式算法程序。 (5-33) 案例9 数字PID增量式程序 任务实施 /*PID增量式计算程序 */ typedef struct PID { int SetPoint;//设定目标 long SumError;//累计误差 double A;//A常数,即公式5-27中的A double B;//B常数,即公式5-27中的B double C;//C常数,即公式5-27中的C int LastError;//Error[-1] int PrevError;//Error[-2] }PID; static PID spID; static PID *sptr=spID; //指针赋值 //PID参数初始化 void InitPID(void) { sptr-SetPoint=0; sptr-SumError=0; sptr-A=0; sptr-B=0; sptr-C=0; sptr-LastError=0; sptr-PrevError=0; } 2、软件设计 (2)程序 //增量式PID计算函数 int PIDCalc(int NextPoint) { register int iError,iIncpid;//当前误差 iError=sptr-SetPoint-NextPoint;//计算增量 iIncpid=sptr-A*iError+B*sptr-LastError+C*sptr- PrevError; //A*iError 为A*e[k]项 //B*sptr-LastError 为B*e[k-1]项 //C*sptr-PrevError 为C*e[k-2]项 //存储误差,用于下次PID计算 sptr-PrevError= sptr-LastError; sptr-LastError=iError; return(iIncpid);//返回增量值 } 案例10 数字PID位置式程序 根据公式5-28编写数字PID增量式C程序 任务实施 1、任务分析 2、软件设计 (1)程序流程图 程序流程图如图5-14所示。 (2)程序(下一页幻灯片) 3、思考并编写程序(见教材) 案例9 数字PID增量式程序 任务实施 /*PID位置式计算程序 */ typedef struct PID { double SetPoint;//设定目标 double SumError;//累计误差 double A;//A常数,即公式5-28中的A double B;//B常数,即公式5-28中的B double C;//C常数,即公式5-28中的C double LastError;//Error[-1] double PrevError;//Error[-2] double ui; double last_ui; }PID; static PID ppID; static PID *sptr=ppID; //指针赋值 2、软件设计 (2)程序 //位置式PID计算函数 int Position_PIDCalc(double NextPoint) { double Error; Error=sptr-SetPoint-NextPoint;//计算增量 sptr-ui=sptr-last_ui+sptr-A*Error+B*sptr-LastError+C*sptr-PrevError ; //A*iError 为A*e[k]项 //B*sptr-LastError 为B*e[k-1]项 //C*sptr-PrevError 为C*e[k-2]项 sptr-PrevError= sptr-LastError; sptr-LastError=Error; sptr

文档评论(0)

fangsheke66 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档