答应为实验室的同学做一次简单的关于串级PID的介绍,主要从感性认识串级PID的结构与作用切入,因此笔者尽量避免引入公式及其推导,因为这些推导在各类控制类书籍与相关论文中均有介绍,我就不再班门弄斧了。
本文假设读者已有单级PID控制的基础,对于PID的原理不做描述。
假设我们需要解决这样一个问题:
控制小车从当走到红色标签位置,设小车实时位置为x0(t)
如果我们使用单级PID,运动框图应该如下图所示:
误差e来自小车当前位置与目标位置的差值,即 e = x1 - x0;
误差e经过PID算法得到输出小车给定速度v;
小车给定速度v经过建立的电机小车模型传递函数(实际上是一个积分器,对速度积分即可得到位移),得到小车的当前位置x0;
选取一组合适的PID参数,我们就可以很好的实现这个任务。根据不同的要求,我们可以找到不同的PID参数以实现快速收敛控制,或者无超调控制。
但是现在考虑这样一个情况:
小车所在的路面与水平面存在一个非零的夹角θ:
现在如果我们还拿之前的PID参数去解决这个问题,我们可能就会发现小车的运行情况没有之前那么理想了,可能会出现但不限于收敛速度变慢,无超调控制的PID参数出现超调,小车在目的地附近振荡等情况。
这是为什么呢,我们仔细看一下之前框图里的执行环节Motors-Car,把它打开看一下:
我们发现,真正的积分器环节是Car,而积分器环节Car的真正输入是v';
v恒等于v'吗?换言之,我叫小车电机以v的速度运行,他会立刻响应并保持在这一速度吗?答案显然是否定的:
v'与v不完全一致,这就是原有的单级PID控制算法出现问题的原因,我们实际供给电机的是电压,一定的电压对应一定的转速v,然而电机转速v不是关于电压的单值函数,电机转速v受到很多条件的影响,鉴于电机模型复杂且对于不同种类的电机模型也不尽相似,我们只讨论其中的另一个主要变量:负载转矩。当小车启动制动,走上坡道都会造成负载转矩的变化,从而进一步影响电机转速v。
如何解决?我们可以对电机Motors环节做一个转速闭环:
这样就可以改善这个问题(注意是改善,不是解决!)
有了这个闭环,就可以让电机的实际转速v'快速的跟踪给定速度v,至于有多快,还是要看电机模型和PID参数,但是一定比之前开环控制的效果要好。
我们将这个改良的执行环节 Improved Motors-Car 替换原先单级PID运动框图中的执行环节Motors-Car,就可以得到这样一个串级PID的结构框图了:
如此操作,在倾斜的坡道上,原来的参数也能较好的适应了。我们来看这个结构框图,里面有两个反馈箭头,也就形成了两个闭环,一个环在内,一个环在外。
其中转速闭环称为串级PID的内环,位置闭环称为串级PID的外环,现在去想象一下小车实际运行的情况,是不是能比较好的理解课本上 内环先稳定,外环后稳定的原因了?
笔者希望这篇博文能够起到抛砖引玉的作用,让各位读者在之后系统学习串级PID的推导时更好的理解串级PID的思想。如果您觉得这篇博文有帮助,请您点下右上角的点赞,谢谢!