动漫做h在线观看网站,爱网站搭建,微网站微网站,做网页难不难PID控制的概念
生活中的一些小电器#xff0c;比如恒温热水器、平衡车#xff0c;无人机的飞行姿态和飞行速度控制#xff0c;自动驾驶等等#xff0c;都有应用到 PID——PID 控制在自动控制原理中是一套比较经典的算法。
为什么需要 PID 控制器呢#xff1f;
你一定用…PID控制的概念
生活中的一些小电器比如恒温热水器、平衡车无人机的飞行姿态和飞行速度控制自动驾驶等等都有应用到 PID——PID 控制在自动控制原理中是一套比较经典的算法。
为什么需要 PID 控制器呢
你一定用过恒温热水壶想让热水壶的水保持在一个恒定的温度这时候就需要一种算法先将水温加热到目标位置附近能够“预见”这个水温的变化趋势自动控制加热功率然后还能根据各种环境影响因素去调节以维持设定目标。
PID算法就是“比例proportional、积分integral、微分derivative”是一种常见的“保持稳定”控制算法。
常见的PID控制系统框图
框图可以看出e(t)和u(t)的关系式 其中 Kp比例增益 Ki积分增益 Kd微分增益 e误差设定值 - 回授值 t时间。
简单讲根据给定值和实际输出值构成控制偏差将偏差按比例、积分和微分通过线性组合构成控制量对被控对象进行控制。
公式
PID原始公式 把Kp乘进去得 令 即可得到简化公式 对于这个式子其实涵盖了三种控制算法每一种都可以单独拿出来。 PID算法其实就是三个算法的组合而且在数学上面就是简单的代数和
原理
1.比例控制算法
我们先说PID中最简单的比例控制抛开其他两个不谈。假设我有一个水缸最终的控制目的是要保证水缸里的水位永远的维持在1米的高度。假设初始时刻水缸里的水位是0.2米那么当前时刻的水位和目标水位之间是存在一个误差的error且error为0.8。假设一个人通过往缸里加水的方式来控制水位。如果单纯的用比例控制算法就是指加入的水量u和误差error是成正比的。即 ukp*error 假设kp取0.5 那么t1时表示第1次加水u0.5*0.80.4所以这一次加入的水量会使水位在0.2的基础上上升0.4达到0.6。 接着t2时刻第2次加水当前水位是0.6所以error是0.4。u0.5*0.40.2会使水位再次上升0.2达到0.8。 如此这么循环下去就是比例控制算法的运行方法。 可以预见最终水位会无限接近我们需要的1米。 但是单单的比例控制存在着一些不足其中一点就是稳态误差。 像上述的例子根据kp取值不同系统最后都会达到1米只不过kp大了到达的快kp小了到达的慢一些。不会有稳态误差。但是考虑另外一种情况假设这个水缸在加水的过程中存在漏水的情况假设每次加水的过程都会漏掉0.1米高度的水。仍然假设kp取0.5那么会存在着某种情况假设经过几次加水水缸中的水位到0.8时水位将不会再变换因为水位为0.8则误差error0.2。所以每次往水缸中加水的量为u0.5*0.20.1。同时每次加水缸里又会流出去0.1米的水加入的水和流出的水相抵消水位将不再变化 也就是说我的目标是1米但是最后系统达到0.8米的水位就不再变化了且系统已经达到稳定。由此产生的误差就是稳态误差了。
在实际情况中这种类似水缸漏水的情况往往更加常见比如控制汽车运动摩擦阻力就相当于是“漏水”控制机械臂、无人机的飞行各类阻力和消耗都可以理解为本例中的“漏水” 所以单独的比例控制在很多时候并不能满足要求。
2.积分控制算法
接着说上面的例子如果仅仅用比例可以发现存在暂态误差最后的水位就卡在0.8了。于是在控制中我们再引入一个分量该分量和误差的积分是正比关系。所以比例积分控制算法为 ukp*error ki∗∫ error 还是用上面的例子来说明第一次的误差error是0.8第二次的误差是0.4第三次的误差是0.2至此误差的积分离散情况下积分其实就是做累加∫error0.80.40.21.4。先假设它积分系数为0.1已知比例控制算法的输入和漏掉的相等那么这时整个算法只需要看积分控制算法的输出就行了故积分控制输出1.4*0.10.14很显然积分控制的加入打破了之前的稳定状态之前会卡在0.8现在至少会是0.80.14。计算很随意不要较真这个时候的控制量除了比例的那一部分还有一部分就是一个系数ki乘以这个积分项。由于这个积分项会将前面若干次的误差进行累计所以可以很好的消除稳态误差假设在仅有比例项的情况下系统卡在稳态误差了即上例中的0.8由于加入了积分项的存在会让输入增大从而使得水缸的水位可以大于0.8渐渐到达目标的1.0。这就是积分项的作用。另一方面积分项也加快了整体控制算法的响应速度。 稳态误差又叫静差:被控量的稳定值和给定值之差一般用于衡量系统的准确性静差很难被消除但是通过积分控制可以尽量去减小而且积分系数不可太大太大静差反而更大。
3.微分控制算法
换一个另外的例子平稳的驾驶车辆当发现前面有红灯时为了使得行车平稳基本上提前几十米就放松油门并踩刹车了。当车辆离停车线非常近的时候则使劲踩刹车使车辆停下来。整个过程可以看做一个加入微分的控制策略。 微分说白了在离散情况下就是error的差值就是t时刻和t-1时刻error的差即ukd *(error(t)-error(t-1))其中的kd是一个系数项。可以看到在刹车过程中因为error是越来越小的所以这个微分控制项一定是负数在控制中加入一个负数项他存在的作用就是为了防止汽车由于刹车不及时而闯过了线。从常识上可以理解越是靠近停车线越是应该注意踩刹车不能让车过线所以这个微分项的作用就可以理解为刹车当车离停车线很近并且车速还很快时这个微分项的绝对值实际上是一个负数就会很大从而表示应该用力踩刹车才能让车停下来。 换到上面给水缸加水的例子就是当发现水缸里的水快要接近1的时候加入微分项可以防止给水缸里的水加到超过1米的高度说白了就是减少控制过程中的震荡。
从公式上看微分控制算法如下 离散情况下微分就是error的差值就是当前时刻和上一时刻error的差error指的是目标值和当前值的差值 ①当 当前值目标值 时一般在该调节过程中误差是越来越小的(正实数运算)这也就可以得 对于主要的比例控制而言此时e(t)0二者符号相反换言之这里微分控制起到了削减比例控制力度的作用 ②当 当前值目标值 时 输出过大需要减小对于比例控制e(t)0反观微分控制: 符号还是和比例控制相反 最终结论就是微分起到阻尼作用减小震荡提高稳定减小变化趋势但是也会降低响应速度。
通过下面的动图再直观看一下PID三个控制参数的影响 从上面的动图可以看出 1、Kp越大越能快速接近目标值1.0 2、只调整Kp可能会存在稳定误差 3、加入Ki可以减小稳定误差但同时也使得系统震荡加剧 4、加入Ki加快了整体的响应速度 5、加入Kd可以减小震荡但也降低了响应速度(可以通过观察图像什么时间t首次碰到目标1.0)
参考及扩展推荐 https://blog.csdn.net/m0_38106923/article/details/109545445 https://zhuanlan.zhihu.com/p/32264695 https://www.zhihu.com/question/402289932 https://zhuanlan.zhihu.com/p/39573490 https://blog.csdn.net/kevinshift/article/details/124753170 https://www.woshipm.com/pd/4206858.html