天奕 发表于 2022-3-27 23:25

无刷直流电机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之间


下面是我看野火代码里面的,
/**
* @briefPID算法实现
* @paramval                目标值
        *        @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;
}
//正常来说 我应该也是要把 返回值转换得到 占空比的,可是我改怎么转换呢?
页: [1]
查看完整版本: 无刷直流电机PID 调速问题