分享一个, PID算法——改版的位置式PID,不知符不符合PID的原本功能,如果有错望指导!!!
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了分享一个, PID算法——改版的位置式PID,不知符不符合PID的原本功能,如果有错望指导!!!,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1931字,纯文字阅读大概需要3分钟。
内容图文
我们常见的位置式PID算法是这样的(图一)
int Position_PID(int Feedback_value,int User_Target)
{
static float Bias,PWM_Out,Integral_bias,Last_Bias,Differntial_bias;
Bias=User_Target-Feedback_value; //计算偏差
Integral_bias+=Bias; //求出偏差的积分
Differntial_bias=Bias-Last_Bias;
PWM_Out=
PID. Position_KP * Bias
+PID. Position_KI * Integral_bias
+PID. Position_KD* Differntial_bias; //位置式PID控制器公式
Last_Bias=Bias; //保存上一次偏差
return PWM_Out; //位置式PWM输出
}
,我是拿PID算法做舵机的PWM控制,没有用到微分项,因为微分项系数为零 P=0.85,I=0.09,D=0;
在使用过程中发现(看图二)
为了解决积分项的反应缓慢,我把积分项改成了乘积的形式来进行使用,二不是用平常的累计偏差 Integral_bias=Feedback_value*11.2; //求出偏差的积分
用当前的PWM值乘以一个系数 如520PWM值的稳定时的积分值为5578 拿5578/520=11.2 求出这样一个系数后就把积分的累积改成了分配形式。。。
当Feedback_value=520是 算出来的积分值和一前累积方式的一样52011.2=5578 ,现在的目标值是520 当前值也是520 ,偏差就为零,,比例项的输出就为零。。二积分项则为 55780.09=520 PWM输出为520.。
改进积分项后的波形图(图三)
改进后的算法
int Position_PID(int Feedback_value,int User_Target)
{
static float Bias,PWM_Out,Integral_bias,Last_Bias,Differntial_bias;
Bias=User_Target-Feedback_value; //计算偏差
Integral_bias=Feedback_value*11.2; //改进的积分项
Differntial_bias=Bias-Last_Bias;
PWM_Out=
PID. Position_KP * Bias
+PID. Position_KI * Integral_bias
+PID. Position_KD * Differntial_bias; //位置式PID控制器公式
Last_Bias=Bias;
Upper_Computer_Phoenix(Feedback_value*11+520,User_Target*11+520); /*发送数据到上位机*/
return PWM_Out; //位置式PWM输出
}
第一次发帖子,可能说得不是很到位。希望能读懂其中的意思
窦元淇 发布了1 篇原创文章 · 获赞 0 · 访问量 28 私信 关注内容总结
以上是互联网集市为您收集整理的分享一个, PID算法——改版的位置式PID,不知符不符合PID的原本功能,如果有错望指导!!!全部内容,希望文章能够帮你解决分享一个, PID算法——改版的位置式PID,不知符不符合PID的原本功能,如果有错望指导!!!所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。