目前在学习直流无刷电机,在搞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; } //正常来说 我应该也是要把 返回值转换得到 占空比的,可是我改怎么转换呢? |
更多回帖