Simulink建模:PID控制-串级PID

本文研究串级PID控制的概念、应用场景以及Simulink模型实现。

1 问题引入

在之前的博客《Simulink建模:PID控制模型》一文中,举了一个汽车加速到期望车速的例子,来解释单极PID控制的原理。实际上,这个场景对应了辅助驾驶系统中的定速巡航功能。ADAS中还有一个功能为自适应巡航,就需要自车和前车保持一个固定的距离,并且保持一个相同的车速。这就要求控制器不仅能够控制速度,还要能控制相对距离。

从执行器的角度来看,加速踏板对应改变发动机扭矩值,从而为汽车产生一个加速度。制动踏板对应改变制动主缸压力,从而为汽车产生一个减速度。加速度、减速度是改变物体速度大小的原因,但是无法直接改变物体的位置,因为改变物体的位置需要通过速度来改变。

由于执行器只能产生加速度,如果还是以单极PID来控制距离(控制自车与前车的相对位置),就只能设计为,PID的输入是距离偏差,输出是加速度。示意图就是如下所示。
在这里插入图片描述
因为不能直接控制距离,就需要先控制速度,再因为速度的变化改变距离。这样会导致一个问题,当期望距离和实际距离已经相等时,即err偏差为0时,速度是未知的(系统中没有速度的期望值)。速度可能和前车速度相差很多,导致了位置只是短暂地达到了期望,紧接着又偏离了很多。偏离了才会再次控制加速度或减速度,影响速度大小,从而影响位置大小。这样系统会导致实际距离在目标距离附近来回的震荡。其本质原因是由于设计的问题,而不是参数的问题,一直无法稳定下来。

2 串级PID控制

驾驶员开车的时候就不会出现上述问题,就能很好地控制位置和速度。当自车跟随前车运动,速度相同,保持相同的距离。假如这时驾驶员希望减小车距,并且达到预期的距离后继续以相同车速跟车行驶,会先提速减小车距,接着快要达到预期的距离时减速到原来的车速。为了先提速到预期的车速,就通过加速踏板产生加速度;后半段为了减速达到原先的车速,就通过制动踏板产生减速度。

上述过程中可以看出,并不是直接用加速度或减速度控制距离,而是先通过速度控制距离,再通过加速度控制速度。这一点很重要,是串级PID的核心思想。那么,按照这个思想可以设计串级PID控制框架。
在这里插入图片描述
首先,一级PID根据期望距离和实际距离输出期望速度,期望速度作为二级PID的输入。这里的期望速度是相对速度,因为如果实际距离大于期望距离,就需要减速,所以输出一个负的相对速度。所以期望速度还需要加上毫米波雷达探测的前车速度加上相对速度。

二级PID控制的参考速度是一级输出的参考绝对速度,减去轮速传感器自车实际速度得到一个速度的偏差值,再由二级PID计算输出的加速度控制量,然后查表得出扭矩值或制动压力发送至CAN信号。

在产品级的ADAS控制器设计中,跟车的控制是非常复杂的,这里只是以此为例讲解串级PID的原理。

3 Simulink建模

3.1 建模前的理解

串级PID建模和单极PID建模在PID算法方面没什么区别,只不过从一个变成两个。不过还是有一些注意点。

  • 两级PID输出的是不同的控制量,所以应该将两部分分别定义在子系统内,这样显得架构清晰,有较好的可读性;
  • 两个PID用的两套参数,在命名上体现出来;
  • 对于输出的控制量和一些中间变量定义观测变量,以便在实车调试的时候可以观测;

3.2 建模过程

根据上一节的理解,进行建模;

1)在外层模型应该是两个子系统,分别对应一、二级PID控制;

在这里插入图片描述
图中,一级的输出是二级的一个输入。另外,两个子系统都配置成原子子系统,这样在生成代码的时候就可以封装成两个函数,调用更加清晰。

2)在一级PID控制子系统内,如下图所示;
在这里插入图片描述
参考值减实际值后又乘以-1,可以这样理解。当驾驶员请求的跟车距离更近时,Ref_Dis<Act_Dis,相减得出负值,再乘以-1后偏差就转为正值,对应了输出正的相对参考速度。

每个系数又加上了一个后缀_Spd,表明他们是一级控制的PID参数。

3)二级PID控制子系统内,如下图所示;

在这里插入图片描述
偏差计算用了一级输出的相对速度、毫米波雷达探测到的前车速度和自车当前速度运算得到。同样的,系数也是用名称区分开。

3.3 代码生成

生成的代码中,主函数分别调用了两个PID函数,对应模型中的两个子系统。
在这里插入图片描述
函数没有传参和返回值,因为输出输出和参数都是以全局变量的形式在函数内运算。

4 总结

本文研究串级PID控制的概念、应用场景以及Simulink模型实现。

>>返回个人博客总目录

猜你喜欢

转载自blog.csdn.net/u013288925/article/details/129459460