KP为什么要乘(Keep_Bias - Last_Keep_bias)
时间: 2023-09-13 19:03:55 浏览: 51
KP乘以`(Keep_Bias - Last_Keep_bias)`是为了引入比例控制项。比例控制器(P控制器)根据当前偏差的大小来调整输出量,可以使得输出与偏差成正比关系。
在这段代码中,`(Keep_Bias - Last_Keep_bias)`表示当前偏差与上一次偏差的差值,也可以理解为偏差的变化率。将其乘以KP,可以得到比例控制项的输出量,用于根据偏差的大小调整转向控制量。
通过乘以`(Keep_Bias - Last_Keep_bias)`,可以使得转向控制量对于较大的偏差有更大的响应,从而加快系统的调节速度。因此,这个乘法项在PD控制器中起到了增强比例控制作用的作用。
需要注意的是,比例控制项只是PD控制器中的一部分,还有其他项如微分和积分控制项。这些项的权重和参数设置需要根据具体的应用和系统特性进行调整,以获得最佳的控制效果。
相关问题
/************************************************************************** 函数功能:角度环PD控制 入口参数:目标偏航角 返回值:转向控制PWM **************************************************************************/ void Keep_Angle_PD(float Tar_angle_Z) { static float Last_Keep_bias=0,Last_last_Keep_bias=0,Turn=0; uint8 turn_error=1;//可接受的角度误差 //当前角度和目标角度相差绝对值在这个范围内是 认转向成功 Keep_Bias = Tar_angle_Z-Angle_Z;//当前偏差 if(abs((int)Keep_Bias)<turn_error) { Vz=0; } else { Turn = Turn_KP[0]*(Keep_Bias-Last_Keep_bias) + Turn_KD[0]*Keep_Bias+Turn_KI[0]*(Keep_Bias-2*Last_Keep_bias+Last_last_Keep_bias); if(Turn>Turn_limiting) Turn=Turn_limiting; if(Turn<-Turn_limiting) Turn=-Turn_limiting; Vz=Turn; Last_Keep_bias=Keep_Bias; Last_last_Keep_bias=Last_Keep_bias; } Speed_Control(Vx,Vy,Vz); }
这段代码是一个角度环PD控制的函数,用于调整角度以实现转向控制。函数的输入参数是目标偏航角,返回值是转向控制PWM。
函数中使用了PD控制器来调整角度,代码中的注释也给出了相应的说明。下面对代码进行解释:
1. 首先定义了一些静态变量,用于存储上一次和上上次的偏差(Last_Keep_bias和Last_last_Keep_bias)以及转向控制量(Turn)。
2. 计算当前偏差(Keep_Bias),即目标偏航角与当前角度的差值。
3. 判断当前偏差是否在可接受的角度误差范围内。如果在范围内,将转向控制PWM设置为0,表示转向成功。
4. 如果偏差不在范围内,使用PD控制器计算转向控制量(Turn)。其中,KP、KD和KI分别表示比例、微分和积分系数,用于调节控制器的响应特性。Turn_limiting是一个限制输出幅值的参数。
5. 将转向控制量赋值给Vz,即转向控制PWM。
6. 最后调用Speed_Control函数,将Vx、Vy和Vz作为参数传入,实现速度控制。
根据您的问题,如果误差较小时电机输出值太小,您可以考虑调整PD控制器的参数,增大比例系数KP或者微分系数KD,以增加控制器的响应速度。另外,您也可以尝试使用增量式控制器来替代PD控制器,以解决误差较小时电机输出值过小的问题。
int Servo_Position_PID (int Encoder,int Target) { float Position_KP=45,Position_KI=0,Position_KD=35; //angle=KP*Position_error*0.135 static float Bias,Pwm,Integral_bias,Last_Bias; Bias=Encoder-Target; Integral_bias+=Bias; Pwm=Position_KP*Bias+Position_KI*Integral_bias+Position_KD*(Bias-Last_Bias); Last_Bias=Bias; return Pwm; }
这是一个舵机位置PID控制函数,输入参数为当前的编码器读数和目标位置,输出为计算得到的PWM值。其中,KP、KI、KD分别为位置误差的比例、积分、微分系数,Bias为当前位置误差,Integral_bias为位置误差的积分项,Last_Bias为上一次的位置误差。该函数会根据当前位置误差和历史误差进行PID控制计算,得到PWM输出值,从而控制舵机转动到目标位置。