这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 无刷直流电机PID调速问题

共2条 1/1 1 跳转至

无刷直流电机PID调速问题

工程师
2023-08-22 16:16:30     打赏

目前在学习直流无刷电机,在搞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;
}


//正常来说 我应该也是要把 返回值转换得到 占空比的,可是我改怎么转换呢?




关键词: 电机     PID    

助工
2023-08-22 16:16:50     打赏
2楼

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


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]