EV模型——控制器详细讲
1. 打开
在MATLAB的命令行输入:autoblkEvExample
2. 整体
先定义了一个驾驶工况,驾驶循环模块输出车速和时间的信息,驾驶员模型接收到来自驾驶循环的理想车速与从车身过来的实际车速做差值,经过PI控制器算出制动/驱动时的踏板开度,传到控制器,控制器经过能量管理等操作输出电机扭矩,车辆模型中电机扭矩经过传动系统传到轮胎,轮胎算出纵向力传到车身,再由车身算出车速并反馈给驾驶员模型,构成一个闭环反馈模型。
3. 循环工况模块
此模块可以选择不同的循环工况,并根据所选择的工况输出目标车速和循环工况时间。
3.1 Drive cycle source
3.1.1 FTP75
由图可以看出,整个运转循环分为三个部分,第一部分为冷启动阶段,耗时505s;第二部分为瞬态阶段,耗时864s ;随后熄火浸车9~11min,再进行进行第三部分,热启动阶段,耗时505s,全程时长约为2474s。
冷启动是在发动机水温较低时启动发动机。
热启动是在发动机水温高的时候启动发动机。
区别只是冷却水的温度。
我们可以点击Install additional drive cycles下载其他的Drive cycle source
3.1.2 Wide open throttle (WOT) 节气门全开
通过设置参数可以重置时间-速度关系曲线
3.1.3 Workspace variables
例:
在命令行输入,这里定义时间及其对应的速度和档位
gears=[0, 1, 2, 3, 3, 4, 4, 4, 4, 4, 4];
t=0:1:10;
xdot=[0,5,10,15,20,25,30,30,30,30,30];
myCycleS.time=t';
myCycleS.signals.values=[xdot',gears'];
工作区如下所示
在From workspace填myCycleS变量,然后点击Specify variable,此时可以点击Plot drive cycle查看曲线,若要**显示档位的曲线,点击Output gear shift data,**此时曲线图如下所示。
mgh:mile-per-hour
1英里(mi)=1.609344公里(km)
具体其他例子参见Help文档
3.1.4 .mat
, .xls
, .xlsx
, or .txt
files.
可以自定义速度和时间曲线
例子:
- 新建一个.xlsx文件,输入数据,第一列是时间,第二列是对应的速度,第三列是档位,并保存
- 点击Select file找到对应的文件,并点击Plot drive cycle查看曲线(不知道怎么显示档位的图)
- 若输入的档位是
P R N L D
对应是80 -1 0 1 2
- 若是OD
- For example, the block converts the gear schedule
P P N L D 3 4 5 6 5 4 5 6 7 OD 7
to80 80 0 1 2 3 4 5 6 5 4 5 6 7 8 7
.
3.2 Repeat cyclically
如果模拟运行时间超过驱动循环的时间长度,则重复驱动循环
3.3 Output acceleration
输出加速度与时间的曲线
4. 驾驶员模型
4.1 模块描述
由PI控制器根据驾驶员的期望车速和当前的实际车速偏差,进行油门踏板或刹车踏板的控制。
4.2 闭环控制系统
-
我们可以把驾驶员模型理解为一个反馈闭环控制系统;
-
上面输入端口1输入的是期望车速,输入端口2输入的是反馈过来的实际车速,期望车速-理想车速就是误差值,误差值再经由纵向驱动模型里的PI控制器快速实现驾驶员的踏板请求计算:
-
当期望车速大于实际车速时,PI控制器输出0~1之间的一个数值,代表油门踏板开度请求;
-
当期望车速小于实际车速时,PI控制器输出-1~0之间的一个数值,代表刹车踏板开度请求。
-
4.3 Longitudinal Driver Model
纵向驱动模型
4.3.1 Control type:PI
在这里可以选用不同的闭环控制器,这里使用的是PI控制器。什么是PI控制器?首先介绍一下PID。
1)PID
-
公式
- 连续 : C = K p ⋅ e + K i ⋅ ∫ 0 t e d t + K d ⋅ d e d x C=K_p·e+K_i·\int_{0}^{t}{e}{\rm d}t+K_d·\frac{ {\rm d}e}{ {\rm d}x} C=Kp⋅e+Ki⋅∫0tedt+Kd⋅dxde
- 离散: C = K p ⋅ e i + K i ⋅ ∑ i = 1 N e i + K d ⋅ ( e i − e i − 1 ) C=K_p·e_i+K_i·\sum_{i=1}^N{e_i}+K_d·(e_i-e_{i-1}) C=Kp⋅ei+Ki⋅∑i=1Nei+Kd⋅(ei−ei−1)
- 比例系数 × \times ×当前误差值+积分系数 × \times ×误差的累积值+微分系数 × \times ×误差的变化值
-
P:比例;I:积分;D:微分
2)该模型使用的是PI控制器,即仅使用了比例、积分环节,微分环节未使用。
3)结合实际简单介绍一下(自己理解)
-
就是如果你的理想车速是60Km/h,P为1,还不使用I,开始的车速为0,那么此时的误差e为理想车速-实际车速也就是60,乘比例系数,此时脚踩油门的系数也就是60;
-
那么为什么要有I呢?因为假设你现在车速已经加到了59,那么误差就为1,乘比例系数,油门系数为1,也不会再加速;有人说那么我就不要把P设为1,设为2,但是车速也会加到59.5,此时误差为0.5,再乘还是1,这样车速还是无限接近理想车速,没有到达理想车速;也就是说单单只用P只会无限接近理想车速,这时候加上I就能解决这一问题
-
那么什么是I呢?对误差积分,根据我们学的数学知识,就是误差的累积;还是当P为1的时候,当实际速度为59,如果只有P的时候油门系数为1,不加速,但此时我们再加上积分系数乘积分值这一项,肯定大于1,那么还可以加速,这时就可以到达理想车速了
-
那么D的作用是什么?PI控制器有个缺点,就是震荡太厉害,D的作用就是可以平缓震荡。D是误差e的导数,也就是斜率;我们可以这样理解,刚开始车速还比较小的时候,误差肯定很大,那么此时经由PI,油门系数会比较大,加速很猛,但是因为随着速度加大,误差是越来越小的,意味着什么,意味着开始D是负的,那么PI加上D,值就不会太大,也可以使油门系数没那么大,加速不会过于猛。
-
为什么这里不用D呢?电机控制为什么用pi不用pid
在电机控制中,一般不会引入D项,是因为电机的绕组传递函数,只有一个真正的极点,本质上来说,它是一个R/L时间常数。因此,其具有90°的相移,就不需要任何像D项为系统提供的相位超前。因此,PI控制器就能很好地控制。并且我们知道微分项在系统稳定时产生一定的抖动。所以一般在传统的电机控制中,常常采用PI控制。
-
这是一个很好可以表达P,I,D各自作用的gif(下面的gif是从知乎上的一篇文章截的,写的时候忘记把网址记下来了)
4.3.2 Output
Info — Bus signal
Signal | Variable | Description |
---|---|---|
Accel | y a c c y_{acc} yacc | Commanded vehicle acceleration, normalized from 0 through 1 |
Decel | y d e c y_{dec} ydec | Commanded vehicle deceleration, normalized from 0 through 1 |
还有其他的输出信号,这里只介绍这两种。
前面有介绍闭环反馈系统的时候介绍到输出值是-1~1,而这里根据Help文档对该模型的介绍,会发现输出值是0-1原因在于:模块自己会进行的一些计算