21日写文章习惯养成之每日一篇学习心得(第二天:PID误差调节)

PID原理介绍

大家在调节电机转速或者一些需要控制的程序之中,为了更好的实现自己想要的结果,PID控制就是比较好用的控制误差的一种方法。

今天为大家分享一下我暑假做智能车时对增量式PID控制和位置式PID控制的了解,分为原理讲解和代码讲解两部分。

公式:u(t)=Kp*[e(t)+\frac{\frac{1}{}}{T}\int_{t}^{0}e(t)dt+Td\frac{de(t)}{dt}]

Kp:比例系数,可以调节到里目标值相近,但是无法到达目标值,只能粗调,存在误差。

Ki:积分系数,控制系统的准确性,逐渐消除累计的误差,使输出值达到目标值。

Kd:微分控制,具有超前控制的作业,能让输出值快速到达目标值。同时防止超出。

一、增量式PID

(1)、原理

增量式PID一般用于对速度进行控制,在行进过程中,为了保持速度稳定一般采取增量式的PI控制,闭环电机的速度环,增量式PID比位置式更加敏捷,在调节速度的时候可以更快更好的反应速度输出。

(2)、代码实现

NowSpeed编码器数据

ExpectSpeed目标速度

/*
 * @brief    电机增量式PID:左轮
 * @param    NowSpeed实测速度  ExpectSpeed目标速度
 * @return   Increase 反馈增量值
 */
static int MotorPID_output(int NowSpeed, int ExpectSpeed)
{
    //当前误差,定义为寄存器变量,只能用于整型和字符型变量,提高运算速度
    int iError,                                   //当前误差
        Increase;                                 //最后得出的实际增量
    iError = ExpectSpeed - NowSpeed;                //计算当前误差
    Increase = speed_kp * (iError - LastError)+ speed_ki  * iError+speed_kd * ((iError - LastError) - PrevError);

    PrevError = iError - LastError;
    LastError = iError;
    return Increase;
}

二、位置式PID

(1)、原理

位置式是离散型的PID,会有误差,速度比较慢

(2)、代码实现

/*位置式pid
@param pid  要计算的pid
@param set_value 想要设定的值
返回 增量
*/
float position_pid(PID *pid,float set_value,float actual_value)
{
    pid->error = set_value - actual_value;
    pid->integral += pid->error;   /*误差累积*/

    if(pid->integral > +1200) pid->integral = +1200;  //积分限幅
    if(pid->integral < -1200) pid->integral = -1200;

    //比例项
    pid->P = pid->Kp*pid->error;

    //积分项
    pid->I = pid->Ki*pid->integral;

    //微分项
    pid->D =pid->Kd*(pid->error-pid->error_pre);

    pid->error_pre_pre = pid->error_pre;
    pid->error_pre = pid->error;

    float uk = pid->P + pid->I +pid->D;
    actual_value += uk;

    return uk;

}

了解的比较粗糙,不会写文章,写的不好勿喷,如有侵权可告知删除

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思成毛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值