带你学习PID控制算法

#PID涉及相关知识

        开环控制系统:开环系统,无反馈系统,即系统的输入不受输出的影响,在受到外界干扰输出效果减小,此时输入也不会增加,因为输出不会对输入施加影响,像是断开的环一样称为开环,

                             

        闭环控制系统:也就是有反馈信息的控制系统,输出量通过反馈信息去影响调节输入量,从而使输出量不断接近设定期望值。当外界存在干扰时,可以通过反馈信息,调节输入,从而抵消干扰。

                             

        PID数学表达式:这个表达式是离散型数学表达式,单片机是离散的表达式,内部是一些数字量而不是连续的模拟量。

                           

        稳态误差:当P算法调节接近预定值的时候,P算法提供的力会减小,此时距离预定值还有很小的误差,但是没有办法解决这个误差叫做稳态误差。

#PID相关介绍

        PID算法是嵌入式开发中最为常用的算法,只要你想用任何一个项目都能用上PID,非常重要。PID算法由 P  I  D 三种算法组成,可以进行不同的组合来达到不同的控制效果,这三种算法分别对应上面公式的 1   2   3 位每个算法也有不同的含义,以及不同的作用。在实际使用中通常不会使用三种算法,通常是拆分。

                       

        P算法作用:在P算法里面 e是指的误差,这里可以看出误差越大,这里P的输出越大,P

算法的作用,是减小测量值和理论值之间的误差(差值),让测量值不断接近理论值。

                                               

        #但是如果只用P算法会存在一个情况,那就是过度调节出现不断靠近预定值,也就是过度调节的情况,一般P算法是跟D算法一起进行使用的,D算法可以减少P算法过度调节而出现的震荡这种情况。

        

   

        这里可以看到当Kp为10 Kd为0的时候,小球不会靠近点,会围绕着这个点运动,震荡,就是不会接近这个点,这里因为此时的KD为0,只有KP。这个实验网站链接放在文章末尾,

        D算法作用:D算法就是为P算法提供阻力,当P算法参数过大时,就会造成输入很大,这时会出现过度调节显现,D算法就是在此时为P算法提供阻力,防止P算法提供哦过冲现象,让系统刚好停留在理论值防止出现过冲现象。1

                        ​​​​​​​                       

        (ek-ek-1)-某种程度上就是代表着,系统对P算法调节的阻力响应程度,前文提到e代表着误差,(ek-ek-1)就代表着前后误差绝对值,当ek越大  ek-1越小,就代表了,此时P算法作用力,很大,也就是此时过度响应,此时(ek-ek-1)也就变大,提供的阻力也就越大,反之阻力也就越小。

        ​​​​​​​               ​​​​​        ​​​​​​​            ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                   

              这里网站实验加入KD之后,发现小球在接近目标点之后,就没有发生移动了,也就验证了D算法对P算法提供的阻力,这里如果只用D算法是没有用的,D算法是对P算法提供阻力,P算法是提供一个调节的力。

        i算法作用: 当系统很接近预定目标值的时候,p算法提供的里很小,起不到继续减小误差的作用,就会出现稳态误差,此时需要用到i算法,让误差值不断地累加,并将累加后的值,进行输出调节,所以i算法通常用于更加精准的控制。不论误差有多少,I算法会累加的越来越大。

        ​​​​​​​        ​​​​​​​        ​​​​​​​                

#代码表达PID算法

        

int PID_function(float measure ,float set)//measure 测量值  set 设定值
{   
    err = measure -set; //差值
    
    err_sum += err;//累加差值
    I_limit();//ki限制

    err_diff = err - err_last; //d算法
    err_last = err;
    
    return Kp*err +Ki*err_sum +Kd*err_diff;
}

        当在看一个PID函数的时候,看它的返回值类型,就可以知道,这个函数使用了PID里面的几种算法。

return Kp*err //P算法

return Kp*err+Kd*err_differ //PD算法组合

return Kp*err+Kd*err_sum //PI算法组合

return Kp*err+Kd*err_differ+Kd*err_sum //PID算法组合

                             希望对你所有帮助!!!

Simple PID Online Simulator | PID 在线模拟器 (longluo.me)

  • 41
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值