关于位置式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);
}
/*************************************************************************************************/
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
培大少
1楼-- · 2019-08-22 20:35
循迹小车还用PID啊。。。
红烧螺丝钉
2楼-- · 2019-08-23 02:28
 精彩回答 2  元偷偷看……
大东
3楼-- · 2019-08-23 04:18
好厉害!
诸葛景云
4楼-- · 2019-08-23 09:58
敢问楼主是否好使

一周热门 更多>