网站大量收购独家精品文档,联系QQ:2885784924

《PID算法深度技术帖写给参加飞思卡尔智能车大赛的朋友》.doc

《PID算法深度技术帖写给参加飞思卡尔智能车大赛的朋友》.doc

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

PID算法深度技术帖*写给参加飞思卡尔智能车大赛的朋友 最近很多朋友问我关于PID的算法。这里我就简单整理了下: PID控制算法是最经典的自动控制算法。所有《自动控制原理》教材均有大幅篇章介绍。从数学模型到传递函数,公式推导不厌其烦。很多‘童鞋’似懂非懂。下面我就从程序的角度来讲: 下面是PID控制系统的原理图 PID算法具体分两种:一种是位置式的 ,一种是增量式的。 在大多数的情况下,执行机构本身没有状态记忆功能,每时每刻都要靠控制信号驱动,如果失去控制信号,执行机构即失去功能。在这种场合必须采用位置式PID控制算法 。 也有一些执行机构具有记忆功能,即使失去驱动信号仍然可以维持原来的状态不变。例如在用步进电机作为执行机构的自动化控制系统中(数控机床最为典型) 下面主要针对位置式PID来讲, 以加温设备为例,软件采用uc/os-ii嵌入式操作系统环境 //采用位置式PID控制算法的任务函数 float Set;//设定值 float KP;//比例常数 float KI;//积分常数 float KD;//微分常数 float LE=0;//上次误差 float SE;//累计误差 void TaskSampleCtrl(void *pdata)//采样控制函数 { float now,E,DE,out;//定义临时变量 while(1) { now=SampleAdc();//传感器采样一次 E=Set-now; //计算当前误差 SE+=E; //计算当前误差的积分值 DE=E-LE; //计算当前误差的微分值 out=KP*E //计算比例项 +KI*SE //计算积分项 +KD*DE; //计算微分项 CtrlOut(out); //控制执行机构 LE=E; //保存误差值以进行下次计算 OSTimeDly(25); //心跳20ms 延时0.5s(采样周期) } } PID参数调节: 1.如果被控制对象的温度很快达到设定值,并超过设定值很多才回调(此种称为超调),则应该减小KP和KI,降低控制强度;加大KD,抑止超 调。不一定3个参数同时都要调整,可重点调整KP; 2.如果控制对象的温度很难达到设定值,或者经常低于设定值,则应该加大KP和KI。增加控制的强度。 3.如果控制对象的温度能够控制在设定值上,但上下波动较大。则应该加大KD,抑止波动。同时适当减少KI,降低积分控制对微分的控制的对 冲作用。 4.如果容易受环境影响而导致温度波动,则应该加大KD,抑止波动。 下面是用在智能车的PID上的算法实现 //飞思卡尔光电智能车大赛 光电组 //设计者:王玉鹏 //最后修改时间:2010.07. 23. 凌晨1点36 /*****************命名规则统一开始************* / 匈牙利命名法 (变量首部加上) 全局变量加g_ 有符号整型:i 无符号整型:u 布尔量:b 无符号char型:uch 宏定义 全大写 两个大写字母的单词用 ‘ _ ’字符 分开 *****************命名规则统一结束*************/ /*********统一数据类型定义开始********/ //说明:便于移植,书写 typedef unsigned int INT16U;//无符号16位整数 typedef int INT16S;//有符号16为整数 typedef unsigned char CHAR8U;//无符号8位整数 typedef char CHAR8S;//有符号8位整数 /*********统一数据类型定义结束********/ #define SPEED_PER 10 //10 SPEED 10000=pwm100% 千万别乱改 #define SPEED_TIMER 3 //速度累计采集定时 SPEED_TIMER*4 (ms) 12ms INT16U g_uSpeedTemp=0;//系统用 INT16U g_uSpTimeCnt=0;//速度采集定时用 系统用 0-60000 INT16U g_uRelSpeedNow=0;//实际速度 0-60000 INT16U g_uRelSpeedOld=0;//实际速度 0

文档评论(0)

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

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

1亿VIP精品文档

相关文档