目前在学习直流无刷电机,在搞PID 调试时候,没看懂,代码如下--》这个是在21上面看到的
计算出 目标速度与当前速度的差值
speed_error_current = target_speed - actual_speed ;
计算比例增量
proportional_term=(KP*(speed_error_current-speed_error_last));
计算积分增量
integral_term =(speed_error_current*KI);
将当前的速度差赋给上一次的速度差 以便下一次计算时用
speed_error_last = speed_error_current;
增量的PID输出
pid_out=proportional_term+integral_term;
根据增量来调节PWM 占空比
pwm_adjust=(pid_out/800);
pwm_duty = current_pwm_duty + pwm_adjust;
上面这些 这个地方我没看懂pwm_adjust=(pid_out/800); 这里除以800,这个800是怎么计算来的,我程序里面PWM 的占空比是 0-100之间
下面是我看野火代码里面的,
/**
* @brief PID算法实现
* @param val 目标值
* @NOTE 无
* @retval 通过PID计算后的输出
*/
float PID_realize(float temp_val)
{
/*计算目标值与实际值的误差*/
pid.err = pid.target_val - temp_val;
/*PID算法实现*/
pid.actual_val += pid.Kp * (pid.err - pid.err_next)
+ pid.Ki * pid.err
+ pid.Kd * (pid.err - 2 * pid.err_next + pid.err_last);//kd的值实际是0
/*传递误差*/
pid.err_last = pid.err_next;
pid.err_next = pid.err;
/*返回当前实际值*/
return pid.actual_val;
}
//正常来说 我应该也是要把 返回值转换得到 占空比的,可是我改怎么转换呢? |