- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PID源代码
电机PID控制算法// 闭环控制算法 // 功能: // 输入:*p PID控制结构体 // 输出:电机控制输出值——PWM波脉冲宽度 int count=0; unsigned intspeed_PID_Calc( struct PID *p ) { ??intek; ??inttmpValue = p-ControlValue; ??intdeltaValue = 0; ? ? ek = p-Reference - p-FeedBack; // 本次误差 = 参考值 - 反馈值 ? ???//将PID公式离散化后,采用增量式PID控制,更新电机控制输出值 ??// 遇限削弱积分法,如果进入饱和区,并且积分增加,则不进行积分运算,尽快离开饱和。 ??// 增量的范围(0~10)*(1+10+10)*256=53760)线性转换为(0~550),移位数, 在4~7之间为好 ??if??( ( p-ControlValue =550 ek0 ) || ( p-ControlValue = 0 ek0??)) ??//进入饱和区则不再进行积分运算 ??deltaValue = ((int)( p-Ka *??((ek - p-ek_1) +??p-Kc * ( (ek - p-ek_1) - (p-ek_1 - p-ek_2) ))))5 ; ??else//不在饱和区,则按正常离散的PID公式计算????deltaValue = ((int)( p-Ka *??((ek - p-ek_1) + p-Kb * ek + p-Kc * ( (ek - p-ek_1) - (p-ek_1 - p-ek_2) ))))5 ; ??// 更新前两次误差 ??p-ek_2 = p-ek_1; ??p-ek_1 = ek; ? ???tmpValue = p-ControlValue + deltaValue; ? ???// 返回值 ??if ( tmpValue = 551 )????return 550; ??else????if ( tmpValue = 0 ) ? ?? ?return 1; ? ?? ?else return tmpValue; } 主要原理是上面的,如果需要和实际应用结合起来,那就依据所留I/O口进行适当的修改参数。PID控制直流电机编程2009-04-23 19:46DMC界面:Speed1_Cmd:设置电机运转的速度Speed1_Now:电机当前反馈速度Speed1_Kp:2.5节自校正PID控制器中提到的Kp值User_R0:当前P_TMR3_TGRA寄存器的值User_R1:设置速度与电机实际转速的差值Motor 1 Start 和Motor 1 Stop 控制启停PID 调节控制做电机速度控制子程序说明PIDInit ( )原形:void PIDInit (void)描述:PID所用到的RAM清零输入参数:无输出参数:无头 文 件:Spmc75_PID.h库文 件:DigitalPID_V100注意事项:请在设置参数前使用。例 子:PIDInit ();PID 调节控制做电机速度控制PIDSetPoint ( )原形:void PIDSetPoint(int)描述:设置PID调节的目标值输入参数:期望值输出参数:无头 文 件:Spmc75_PID.h库文 件:DigitalPID_V100注意事项例 子:PIDSetPoint (2000); //期望电动机的转速为2000rpmPIDGetSetpoint ( )原形:intPIDGetSetpoint(void)描述:读取PID调节设置的目标值输入参数:无输出参数:所设置的期望值头 文 件:Spmc75_PID.h库文 件:DigitalPID_V100注意事项:得到的期望值将和数值的是同一个数值例 子:uiSpeed = PIDSetPoint (); //读取所设置的期望电动机转速PID 调节控制做电机速度控制PIDSetKp ( )原形:void PIDSetKp(double)描述:设置PID的Kp值输入参数:Kp数值输出参数:无头 文 件:Spmc75_PID.h库文 件:DigitalPID_V100注意事项:这个参数在增量PID和位置PID的计算中代表着不同的意思。(式2-4)所示位置式PID中Kp就是比例系数(式2-5)所示增量式PID中Kp相当于的系数ke)1(TTdTiTKp++例 子:PIDSetKp (0.257); //设置Kp=0.257PIDGetKp ( )原形:double PIDGetKp(void)描述:读取PID中所设置的Kp值输入参数:无输出参数:Kp数值头 文 件:Spmc75_PID.h库文 件:Di
文档评论(0)