打印
[MCU]

无刷直流电机PID 调速问题

[复制链接]
494|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
天奕|  楼主 | 2022-3-27 23:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目前在学习直流无刷电机,在搞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;
}
//正常来说 我应该也是要把 返回值转换得到 占空比的,可是我改怎么转换呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

126

帖子

1

粉丝