当前位置: 首页 > 科技观察

究竟什么是串级PID?

时间:2023-03-20 19:13:29 科技观察

本文转载自微信公众号“小麦大叔”,作者:菜刀与小麦。转载本文请联系小麦大叔公众号。什么是级联PID?什么是级联PID?顾名思义,就是两个串联的PID。下面是一个双闭环的例子。外环是位置环,内环是速度环,最终执行机构是电机。电机输出速度和位置产生;具体框图如下图所示;当然,执行器也可以是四轴飞行器,整体流程如下:我们在外圈给出相应的位置高度,外圈PID的输出就是内圈PID的期望值;内环PID的输出会产生相应的油门大小,最终飞行器会产生上升速度;内环反馈值为速度,控制相应的速度达到外环要求的目标速度值;最后外环到达所需位置;可能这里比较抽象,好吧,我们继续细化硬件的细节;PID算法控制实际上是一种没有系统模型的控制,可以根据参数经验对系统进行调试;但实际实物模型已经确定。现在,PID的输入输出的物理意义也会因为实际被控对象的不同而发生变化;也就是说,PID的输入基本上与系统的反馈有关,而实际的反馈是多少,从一开始就是由系统决定的;如果外圈是内圈和外圈的因,那么内圈就是果。一切发生的原因。比如伺服控制器的三环:位置环、速度环、电流环的变化,外环会直接导致内环的变化,而内环是直接导致的关键到执行器的变化。如果这里还是以飞行器为例,对于整个四轴飞行系统而言,我们通过控制电机的电流来确定电机的输出扭矩;转矩和负载共同决定电机的转速;螺旋桨的快速旋转产生飞行器的升力,也决定了上升的速度;最终它也会导致位置变化;这就是整个控制过程。如果只采用单回路PID来控制系统,能否达到系统预期的预期位置?答案是肯定的。那么像这样级联PID有什么意义吗?答案是肯定的。想象一下,如果我们简单地使用单回路PID来控制系统。让我们看一下单回路PID系统的框图;我们设置了一个高度,我们想让飞行器到达期望的位置高度,那么此时系统的反馈值就只是位置值;那么飞机的飞行速度是多少?什么样的加速启动?我们将无法有效地控制飞行器的速度,使其能够快速到达所需位置。PID运算输出的值很大,所以初速度会很高。随着飞行器越来越接近期望位置,偏差越来越小,PID输出逐渐减小,因此速度逐渐降低。实际上,在很多情况下,PID只是最底层的,称为内环PID。通过它可以先稳定某个系统,优化动态特性,然后再在外层嵌套其他算法。当然,外加几层PID的控制系统也很常见。的。即我们介绍的串级PID系统,如下图;控制器的本质是输入输出之间的函数映射关系。其实从这个角度来看,PID通常适用于低阶线性时不变系统,而在此基础上,又局限于P、I、D这三个系数。整体需要根据到具体系统。有些系统实际上只需要两个系数(如PD或PI),有些系统只需要一个(如P)。因此,在上述系统中,外圈只需要P链接即可,另外还可以规划速度曲线。假设这里使用速度曲线规划,因为可以控制飞行器的速度;所以我们期望它尽快达到最大速度,所以它从一开始就匀速加速,达到最大速度后,开始匀速上升,很快就会到达想要的位置。那时,均匀减速,最后悬停到目标位置;那么整体持仓变化曲线如下;即外环PID的输出作为内环PID的输入;以下是单回路PID的伪算法;previous_error:=0//上次偏差积分:=0//积分和//循环//采样周期为dtloop://setpoint设定值//measured_value反馈值error:=setpoint?measured_value//计算偏差积分:=integral+error×dt//计算得到积分累加和导数:=(error?previous_error)/dt//计算得到微分输出:=Kp×error+Ki×integral+Kd×derivative//计算得到getthePIDoutputprevious_error:=error//保存当前偏差作为下一次采样所需的历史偏差具体伪算法如下;previous_error:=0//lastdeviationintegral:=0//integralandprevious_error_inner:=0//内循环PIDlastdeviationintegral_inner:=0//内循环PIDintegraland//loop//采样周期为dtloop://外环计算//setpoint外环设定值//measured_value外环反馈值error:=setpoint?measured_value//计算偏差积分:=integral+error×dt//计算积分累加与微分:=(error?previous_error)/(n*dt)//计算得到微分输出:=Kp×error+Ki×积分+Kd×导数//计算得到PID输出previous_error:=error//保存当前偏置不同的是下一次采样需要的历史偏差setpoint_inner=output//外环的PID输出赋值给内环的PID输入wait(n*dt)//等待下一次采样gotolooploop_inner://setpoint_inner内环设定值//measured_value_inner内环反馈值error_inner:=setpoint_inner?measured_value_inner//计算偏差integral_inner:=integral_inner+error_inner×dt//计算积分累加和导数_inner:=(error_inner?previous_error_inner)/dt//计算微分//计算PID输出output_inner:=Kp_inner×error+Ki_inner×integral_inner+Kd_inner×derivative_innerprevious_error_inner:=error_inner//保存当前偏差作为下一次采样所需的历史偏差wait(dt)//等待下一次采样gotoloop_inner这里循环PID的相关变量后缀为_inner,loop为周期控制的外循环PID,loop_inner为peri的内循环PIDodic控制,且两者相互独立,只是将外环PID的输出赋值给内环PID的输入;当遇到干扰时,内环控制器先进行粗调,外环控制器进一步微调,因此控制效果必然优于单环PID控制系统。串级控制系统的结构只是比简易控制系统多了一个内环,但实践证明,对于相同的扰动,串级控制系统的控制质量是简易控制系统无法比拟的。PID参数串级PID的参数整定基本上按照由内到外的顺序,先设置内环PID的参数,再调整外环PID的参数;按照经验法调整参数,通常先设置内环比例参数P,然后调整积分参数I和动态特性可以整理出微分参数D。当然,还需要处理饱和;总之,可以观察输入输出曲线;那么什么样的响应曲线好呢?一般来说,没有最优,比如有的对速度和加速度有限制,有的系统不能超调等等,有的系统响应越快越好。所以同一句话,我不要你想,我要我想,最好的就是对的。小结本文简要介绍串级PID的相关概念。以四轴飞行器为例,比较简单PID和级联PID的优缺点。作者能力有限,难免有错漏之处。请不吝赐教。