电子设计竞赛(4)-常用的两种PID算法
扫描二维码
随时随地手机看文章
公众号关注 “大鱼机器人”
设为 “星标”,重磅干货,第一时间送达!
//pwm=Kp*e(k)+Ki*∑e(k)+Kd[e(k)-e(k-1)]typedef struct PID{float kp;float ki;float kd;float ek; //当前误差float ek_1; //上一次误差float ek_sum; //误差总和float limit; //限幅}PID;static PID pid;void PID_Init(){pid.kp = 0.1;pid.ki = 0.2;pid.kd = 0.3;pid.limit = 1000;pid.ek = 0;pid.ek_1 = 0;pid.ek_sum = 0;}// 位置式PID控制float PID_Postion(int Encoder,int Target){float pwm = 0;pid.ek = Target - Encoder; // 计算当前误差pid.ek_sum += pid.ek; //求出偏差的积分pwm = pid.kp*pid.ek + pid.ki*pid.ek_sum +pid.kd*(pid.ek - pid.ek_1); //位置式PID控制器pid.ek_1 = pid.ek; //保存上一次偏差if(pwm > pid.limit){pwm = pid.limit;}else if(pwm < -pid.limit){pwm = -pid.limit;}return pwm;}
//根据增量式离散PID公式//pwm+=Kp[e(k)-e(k-1)]+Ki*e(k)+Kd[e(k)-2e(k-1)+e(k-2)]//e(k)代表本次偏差//e(k-1)代表上一次的偏差 以此类推//e(k-2)代表上上次的偏差//pwm代表增量输出typedef struct PID{float kp;float ki;float kd;float ek; //当前误差float ek_1; //上一次误差float ek_2; //上上一次误差float limit; //限幅}PID;static PID pid;void PID_Init(){pid.kp = 0.1;pid.ki = 0.2;pid.kd = 0.3;pid.limit = 1000;pid.ek = 0;pid.ek_1 = 0;pid.ek_2 = 0;}// 增量式PID控制float PID_Increase(int Encoder,int Target){float pwm = 0;pid.ek = Target - Encoder; // 计算当前误差pid.ek_sum += pid.ek; //求出偏差的积分pwm = pid.kp*(pid.ek - pid.ek_1) + pid.ki*pid.ek +pid.kd*(pid.ek - 2*pid.ek_1 + pid.ek_2); //增量式PID控制器pid.ek_1 = pid.ek; //保存上一次偏差pid.ek_2 = pid.ek_1; //保存上上一次的偏差if(pwm > pid.limit){pwm = pid.limit;}else if(pwm < -pid.limit){pwm = -pid.limit;}return pwm;}
「第一弹」电子设计大赛应该准备什么?
「第一篇」大学生电子设计竞赛,等你来提问。
「第二篇」全国一等奖,经验帖。
「第三篇」电赛,这些你必须知道的比赛细节,文末附上近十年电赛题目下载
「第四篇」电赛控制题可以准备一些什么?
「第五篇」全国电子设计竞赛-电源题设计方案总结
「第六篇」对于电赛,我们应该看重什么?
电子设计竞赛电源题(1)-电源题简介
电子设计竞赛电源题(2)-检波与采样
电子设计竞赛(三)-SPWM与PID
全国一等奖,他的学习之路。
从0开始,三个月,获全国一等奖。
奖状是怎么炼成的—我的电赛狂魔之旅
全国一等奖的获得者,如今去当了人民教师。
【大学生电子设计竞赛分享经验贴】风力循迹小车
「重磅猜题之第二篇」2019年大学生电子设计竞赛
最 后
若觉得文章不错,转发分享,也是我们继续更新的动力。
5T资源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,PCB、FPGA、DSP、labview、单片机、等等!
在公众号内回复「
更多资源
」,即可免费获取,期待你的关注~
长按识别图中二维码关注
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!





