欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

分享一个, PID算法——改版的位置式PID,不知符不符合PID的原本功能,如果有错望指导!!!

程序员文章站 2022-07-10 11:15:27
...

我们常见的位置式PID算法是这样的(图一)分享一个, PID算法——改版的位置式PID,不知符不符合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;
在使用过程中发现(看图二)分享一个, PID算法——改版的位置式PID,不知符不符合PID的原本功能,如果有错望指导!!!
为了解决积分项的反应缓慢,我把积分项改成了乘积的形式来进行使用,二不是用平常的累计偏差 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.。
改进积分项后的波形图(图三)分享一个, PID算法——改版的位置式PID,不知符不符合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=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输出

}

第一次发帖子,可能说得不是很到位。希望能读懂其中的意思

相关标签: 算法 机器学习