首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Simulink建模:PID控制-串级PID

  • 23-09-22 01:03
  • 4375
  • 6921
blog.csdn.net

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

文章目录

  • 1 问题引入
  • 2 串级PID控制
  • 3 Simulink建模
    • 3.1 建模前的理解
    • 3.2 建模过程
    • 3.3 代码生成
  • 4 总结

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

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

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

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

3.3 代码生成

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

4 总结

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

>>返回个人博客总目录

注:本文转载自blog.csdn.net的chhttty的文章"https://blog.csdn.net/u013288925/article/details/129459460"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top