关于位置式pid控制直流电机

2019-08-22 14:52发布

下面这段对位置式pid的定义是借鉴某大神的 ,然后关于  int pid_proc(pid_s *p, float current, float differential)中的current和differential我理解得感觉不是很到位,current为当前值,用的是TIM4->CCR3,然后motor1-ex1为微分float differential,不知道我这样写有没什么问题?求指教。。


/*********************************主函数我是这么写的***********************************************************/
while (1)
  { 
   ex1=motor1;
   motor1 = pid_proc(&sPID, motor1, motor1-ex1); //TIM4->CCR3为当前值,即定义中的float current,motor1-ex1为微分float differential
   ex2=motor2;
   motor2 = pid_proc(&sPID, motor2, motor2-ex2);
  
  //循迹部分未定义
  // if(follow1==1&&follow2==1) pwm_control(0,0); //两个红外都检测到黑线,停
  // if(follow1==0&&follow2==1) pwm_control(motor1,motor2);   //  右
  // if(follow1==1&&follow2==0) pwm_control(motor1,motor2);   //  左
  // if(follow1==0&&follow2==0) pwm_control(motor1,motor2);  //前   }
/******************************************************************************************************************/ /*************************************************以下为pid配置******************************************************/ void pid_init(pid_t pid, float Kp, float Ki, float Kd)
{
 pid->target = 0;
 pid->integral = 0; // 累计积分值
 pid->Kp = Kp;
 pid->Ki = Ki;
 pid->Kd = Kd; } int pid_proc(pid_s *p, float current, float differential)
{
 float offset;  offset = p->target - current;
 p->integral += offset;  return (int)(p->Kp*offset + p->Ki*p->integral + p->Kd*differential);
}
/*************************************************************************************************/
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。