前言:PID算法是非常常见的控制算法,广泛运用于小车平衡,与闭环控制速度的场景。利用MPU6050、编码器等反馈的数据来调整PWM输出,使得小车速度或姿态达到稳定的一个算法。
一、PID的介绍
PID算法是一种闭环的,也就是输入会受到输出影响的一种控制算法。PID算法可以使得外部由电机舵机等PWM控制的外设达到一种速度或姿态稳定,用于消除由于惯性作用产生的误差。简单来说PID算法就是一种反馈算法,由外部数据来实时调节自身PWM输出,来让单片机操控的外设稳定运作。
二、PID算法的数学表达式及含义
PID本质上就是一个修正公式,正如下图,输入信号u(t)受到输出信号的控制,且由三个环节进行修正反馈,分别为比例环节、积分环节、微分环节。分别对应PID算法里的P、I、D
它们三个分别的作用为:
1、比例环节P:简单的控制作用,使反馈量向目标值接近,但由于这只是简单的多了就少给点,少了就多给点的控制方式,结果就是会导致反馈量像弹簧一样在目标值附近震荡。
2、微分环节D:使得反馈量的变化产生阻尼效果,有效抑制比例环节产生的震荡与积分环节的超调,但会使得输出量的反馈速度变慢。
3、积分环节I:消除误差作用,解决当内部产生的控制力与外部力相平衡的情况,使得反馈量无限接近目标值。
但是由于上面的数学公式为理想的连续系统,而在单片机实际的控制当中却是离散的系统,所以在实际的调参过程中我们都使用下面的公式,上面的式子仅作为PID算法的理解PID算法的式子。
PID调参调的就是上式中的Kp、Ki、Kd三个参数,其中ek为误差即反馈量与目标量的差。 PID算法是这三个反馈调节的组合,不一定每个环节都要。Kd可以作为一个阻尼作用,削弱Kp的输出。Ki是对误差的求和进行反馈,用于消除稳态误差,进行更精确的控制。
下面给出一个网址让大家进行PID调参,更直观的理解PID算法
https://rossning92.github.io/pid-simulation/
代码部分接下来会更新