控制环节与控制量
整个系统的控制器就是偏差处理函数,方向环多为离散的PD控制器(PD控制器会在后面PID的文章中做介绍)
这里就理解为一个公式吧,而控制量就是偏差处理函数计算出的结果,还是以电磁为例;下面是电磁偏差处理代码片。
/*******************************************************************************
* 函数名 :Direction_out
* 描述 :方向环
* 参数 :void
* 返回 :void
* 编写者 : 小向是个Der
* 编写日期 : 2021-12-19
*******************************************************************************/
void Direction_Out(void)
{
My_Direction.KP=10.0;
My_Direction.KD=2.5;
//转向PD控制//电感差比和算出的偏差做位置式PD计算
My_Direction.SumError=My_Direction.KP*My_Direction.NowError+
My_Direction.KD*(My_Direction.NowError-My_Direction.PrevError);
My_Direction.PrevError=My_Direction.NowError;
//中心偏差滤波、加权滑动平均滤波
My_Direction.Pre1_Error[3]= My_Direction.Pre1_Error[2];
My_Direction.Pre1_Error[2]= My_Direction.Pre1_Error[1];
My_Direction.Pre1_Error[1]= My_Direction.Pre1_Error[0];
My_Direction.Pre1_Error[0]=My_Direction.SumError;
My_Direction.Direct_Parameter=My_Direction.Pre1_Error[0]*0.8+My_Direction.Pre1_Error[1]*0.1+
My_Direction.Pre1_Error[2]*0.06+My_Direction.Pre1_Error[3]*0.04 ;
//此处Price_PWM就是控制量
Price_PWM=(int16)(My_Direction.Direct_Parameter);
}
执行机构
执行机构在此系统中主要是电机驱动和舵机,其中电机驱动已经在硬件篇介绍过,也有大佬们的文章作为参考
原理就是利用控制器输出的控制量这里就是上述代码中的Price_PWM,分别加减到两个电机的PWM占空比上,实现内外轮速度差,进而使小车转向差速代码片如下,这里对于电机驱动不在做过多赘述,重点介绍一下舵机。
//差速处理
dutyL=200+Price_PWM/5+2*error;
dutyR=200-Price_PWM/5-2*error;
//电机动作 单极控制
pwm_duty(PWMA_CH2P_P62, 0);
pwm_duty(PWMA_CH1P_P60, dutyL*12);
pwm_duty(PWMA_CH4P_P66, 0);
pwm_duty(PWMA_CH3P_P64, dutyR*12);
全部0条评论
快来发表一下你的评论吧 !