![5aff92be82aab649e3c181209a754e62.png](https://i-blog.csdnimg.cn/blog_migrate/d0b883facd72eb1bc2d6b11e532a84dc.jpeg)
曾经的你,我,他:
![a4f57d0796b4b931de130eeb914ce303.png](https://i-blog.csdnimg.cn/blog_migrate/0a83ac1804506be23db328e3cd95cd4d.png)
百度一下之后,找到了许多如出一辙的程序,以驱动力图为例,伪代码如下:
for 档位从最小到最大
由发动机转速范围得到该档位车速范围
通过车速得到转速
把转速带入拟合公式得到转矩
细细品之后,你会发现,你被困在三个字里了:外特性。
我之前很多文章都有提到,外特性等价于油门踩到底,但我们知道实际并非如此。
我在此前的文章:
我不是Matlab:基于Simdriveline的车辆起步、加速、换挡仿真zhuanlan.zhihu.com![0010412d8b61848a36bc542a0faa08fb.png](https://i-blog.csdnimg.cn/blog_migrate/60662746697fb4959b0fd4c58a99b2d6.jpeg)
提到过:我们需要用发动机稳态转矩输出特性来代替外特性,也可以理解为,我们应该得到发动机的map图。
正文
我亲爱的看官,今天的主题是利用李雅普诺夫方法设计控制器,以进行车速跟踪。如果你要做课程设计,或者毕业设计中有相关内容,那么,你来对了哟。
仿真,无时无地(但电脑必备)不能进行。这里,各位参看余志生老师汽车理论第一章那条汽车行驶方程式,一切故事,从这里开始.....
(我们就在平地上进行跟车哈,正余弦分别为0和1)
将上式转化为状态空间的形式,并令状态变量为
这里,有些看官可能会不知道这个1.6319怎么来的,下面列一下:
1.6319=21.15/(3.6^2)。 因为我们的单位发生了变化
假设我们的目标车速是
然后我们根据李雅普诺夫稳定性理论进行控制器的设计,进行车速跟踪:
针对我们的问题,简要概述一下:
李雅普诺夫稳定性理论认为,找到一个以包含误差e的正定的李雅普诺夫函数V,
并且能够满足该函数对时间的导数dV/dt是负定的:即当e不等于零时,V>0,dV/dt<0
恒成立,那么状态e最终将会收敛于零,也即渐进稳定。
这里我们取
由前述的状态方程,上式可以转化为:
我们要让dV/dt负定,一个非常直观的方法就是,我们如果令上式的括号内的部分等于
那么我们可以得到
那么很明显,在e不为零的点,上式的导数恒小于零,即上式负定,则,最终我们的误差会收敛到零。
最终我们得到
而,进一步思考,我们所谓的车速跟踪,在当前的模型与问题下,是通过调节我们的驱动力矩来进行车速控制,于是,我们的目的开始明了,我们需要把这个未知的
同时施加该力矩,也即控制率到我们的系统中,仿真结果如下(跟踪车速为12km/h,图示单位为m/s)
![d868f1342b8cd03a34390d19a7754a93.png](https://i-blog.csdnimg.cn/blog_migrate/d8a127f8001b55ec8648b4f1b65f3d9f.png)
其中同时改变k的值,可以影响稳定所需的时间,当前k=1.随着k值的增大,收敛所需时间变短,但控制率将增大,即我们的所需的发动机转矩也将增大。控制中也需要考虑能耗问题,因此实际中需要慎重选取合适的k值。
以下附上模型与参数:
![2d516e147e3546bff70fb211cc230902.png](https://i-blog.csdnimg.cn/blog_migrate/676ea30e1e49cad0ff52ac28688d378a.jpeg)
![fe389a98052c0f11682a59c9535b50b6.png](https://i-blog.csdnimg.cn/blog_migrate/c60aafb7e613905c052f9edcedd8d3ab.png)
m = 3880;
r = 0.367;
eta = 0.85;
f = 0.013;
g = 9.8;
CdA = 2.77;
i0 = 5.83;
ig = 5.56;
k = 1;
delta = 1.1;
新的平台:
欢迎大家关注我和我的搭档的公众号:豪杰仿真科技
公众号会有更多精彩文章、视频教程、程序模型等
本文结束,希望大家Matlab越玩越开心