单片机/MCUwilliam hill官网
直播中

王利祥

7年用户 1462经验值
私信 关注
[问答]

无刷直流电机PID 调速问题

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


已退回3积分

回帖(1)

Smokey

2022-4-21 14:03:17
PID得出的结果是唯一的值,所以把返回值转换得到占空比的话,需要放大或者缩小固定倍数,只要适合你PWM就行
举报

更多回帖

发帖
×
20
完善资料,
赚取积分