不管汽车的动力系统,底盘系统还是车身系统,在控制层面,有些零部件的特性按照理论方法(比如数学模型)来实现将会十分复杂,也会导致计算更加复杂且占用 ECU 大量的资源。因此,工程应用上基本采用标定表的方式去简化计算,并建立关键因素间的关系。比如离合器特性,采用标定表来表示离合器扭矩与滑摩转速差,油压的关系,见下图。
另外,工程上也会通过标定开关去控制是否激活某些功能,实现不同车辆配置的差异。本文主要介绍实现标定表的 Simulink 模块 Lookup table。
1. Lookup table
量产模型中,标定表最常使用的是是一维和二维的 Lookup table,如下所示:
以 TCU 模型开发为例,标定表主要应用在换挡表,离合器特性和 PI 参数设置等方面。假设 PI 控制中的 P 项参数会受温度影响,但没有准确的数学关系,从而采用标定方式来获取 P 项参数。
这时需要先对 Lookup table 进行设置,如下所示:
对于表和断点设置,方法与前面文章定义数据字典方法一样,这里定义了横轴变量为 TempValu_cx,纵轴为 PItemFctr_cy,如下图,当该表的输入为 0,则输出为 0.3。
对于算法设置,主要介绍插值方法,插值方法有很多种,比如线性插值,多项式插值和样条曲线插值等,通常选择线性插值(Interpolation)方法。
2 线性插值方法
下面将介绍线性插值原理,以便于了解如何得到了标定表的输出结果。
线性插值在数学原理上其实就是一次函数 z=kx+b 的运算,当 k 和 b 确定时,输入 x,就能得到相应的 z,具体原理示意如下:
通过上图可理解:所谓的标定,就类似于根据实际情况不断地调整 k 和 b 的数值,最终找到最优的 k 和 b, 从而对于任意数值的 x,都能得到满意的 z。
继续深挖线性插值方法,来看标定表的坐标轴的一些设定方法。了解了线性插值原理后,假如我们采用 1-D Lookup table 为标定表,即标定表包含横轴 x 和纵轴 z。
关于横轴 x,假定横轴 x 范围设置为[0,150],设置 3 个标定点:[10 60 110],此时如果表的输入 0 或 120 时,该怎么处理?
目前了解到有两种处理方法,一种是使用外插值(),如下左图;另一种使用尾值(use end value),如下右图。
另外,当前横轴标定点设置是等间距的,是否可以不这么设置?
答案是可以,但必须数据得递增才行,总的来说横轴的数据点间隔设置有两种形式,一种数据点间距相等,另一种数据点间距不相等,两者主要在消耗存储空间和算法效率方向有差异。
关于纵轴,首先纵轴必须设置与横轴数量相同的标定点,即横纵轴的标定点数量要相同。接着横轴例子,假定纵轴范围设置为[0,1000],设置纵轴 3 个点[100 900 500],注意这 3 点并不需要横轴那样必须严格递增。
这样确定了横轴和纵轴的标定点,就确定了插值关系。通常只需要根据输入和插值关系就可以得到标定表的输出,但是也有一些意外情况,比如当横轴输入 120,而插值结果为 1050,超过纵轴范围,此时只能取纵轴的最大值 1000,如下图所示:
3 小结
以上就是对标定表使用 Lookup table 的介绍,初步介绍了解需要对 Lookup table 做哪些设置,以及 Lookup table 实现线性插值的基本原理和方法。若想对 Lookup table 做更深入了解,比如在代码层面如何实现的,可参考本人知乎文章:ECU 开发基础系列--标定表插值方法 4
另外,若想对汽车软件的标定了解更多,可参考:
- 标定概述
- 如何使用 CANape 实现 XCP/CCP“Measurement 测量”和“Calibration 标定”变量
- 汽车标定工程师是如何参与整车开发的?
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于