当前位置:   article > 正文

无人机项目跟踪记录四十八---角度pid控制模块详解(2)_pid角度控制

pid角度控制

角度pid控制模块中函数:static void PID_Postion_Cal(PID_Typedef * PID,float target,float measure,int32_t dertT),为PID自整定函数:

首先初始化临时变量

  1. float termI=0; //积分临时变量
  2. float dt= dertT/1000000.0; //两次间隔时间换算成秒

然后做常规的PID运算计算:公式是:PID:比例环节+积分环节+微分环节。PID控制的所有环节都是对误差进行运算的,参数是根据实际情况自行调节。积分运算是误差乘以dt,微分运算是误差的变化除以dt(即当前误差值减去上一拍的误差值),乘积运算是误差乘以比例参数。PID的各个环控制的功能不同,比例运算是对系统做大角度调整。积分运算是做细调,微分运算是制动。因此调参时要根据具体情况对不同参数进行调整。

  1. //误差=期望值-测量值
  2. PID->Error=target-measure; //期望误差减去测量误差
  3. PID->Deriv= (PID->Error-PID->PreError)/dt; //进行微分运算
  4. PID->Output=(PID->P * PID->Error) + (PID->I * PID->Integ) + (PID->D * PID->Deriv); //PID:比例环节+积分环节+微分环节
  5. PID->PreError=PID->Error; //当前误差付给上次误差 为做微分运算做准备
  6. //仅用于角度环和角速度环的

由于对细节调节用到的积分较多,但这里是串行控制的外环控制,主要做大调解,因此不太需要用到积分。只有在着陆时候用到,而且还有对它进行一下限制,限制的范围根据不同飞机,实际做调整。这里主要用到的是微分和比例环。

  1. if(FLY_ENABLE && offLandFlag) { //在使能或者是着陆模式时进行积分运算
  2. if(fabs(PID->Output) < Thro ) //比油门还大时不积分
  3. {
  4. termI=(PID->Integ) + (PID->Error) * dt; //积分环节
  5. if(termI > - PID->iLimit && termI < PID->iLimit && PID->Output > - PID->iLimit && PID->Output < PID->iLimit) //在-300~300时才进行积分环节
  6. PID->Integ=termI;
  7. }
  8. } else {
  9. PID->Integ= 0;//否则积分不参与运算
  10. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/956596
推荐阅读
相关标签
  

闽ICP备14008679号