1.算法仿真效果
matlab2022a仿真结果如下:
2.算法涉及理论知识概要
随着全球经济的增长、人口的增多,能源消耗速率越来越快。而化石类能源总量有限,难以满足未来人类日益庞大的能源需求。此外,环境污染、能源危机和能源安全等因素将电动汽车推上了历史的舞台,成为了全世界研究和关注的热点。和传统汽车产业相比,电动汽车具有环保和节能的双重效益。特别是纯电动汽车在能量转换效率和尾气排放等方面具有明显优势,是未来汽车产业重要的发展方向。电动汽车作为一种低碳、清洁的交通工具,受到世界各国政府的高度关注。但是在电动汽车中电池是否能够合理充放电是制约电动汽车能否得到广泛发展的重要因素[01]。
随着计算机技术的快速发展,基于计算机建模的仿真手段在电动汽车研发阶段充分显示了较强的经济适用性。采用计算机仿真技术可以大大缩减实际工作中系统开发时间,节约研发成本,同时可以有效的规避实验过程中可能存在的安全隐患。本课题将要研究的电动车电池充放电控制策略是电动车充放电技术的一个重要领用领域[02]。因此,通过计算机仿真技术对电动汽车电池充放电的控制策略进行研究对于电动车的发展有着重大的实际作用和巨大的经济价值。
随着全球经济的增长、人口的增多,传统的化石类能源难以满足未来人类日益庞大的能源需求。因此,对于新能源的使用有着越来越大的需求。和传统汽车产业相比,电动汽车具有环保和节能的双重效益。特别是纯电动汽车在能量转换效率和尾气排放等方面具有明显优势,是未来汽车产业重要的发展方向。而对电动车电池的充放电的控制策略则是电动汽车研究的一个重要环节。对电动汽车蓄电池充放电控制策略的基本原理进行了介绍,包括PID控制器,基于PID和PWM充放电控制策略以及蓄电池模型。并通过SIMULINK对相关原理进行了建模,设计了一个基于SIMULINK电动车充放电控制策略仿真模型。对该仿真模型进行了仿真分析,分别对充电过程和放电过程进行了仿真验证分析,仿真结果验证了充放电控制策略的正确性。
蓄电池种类可以分为:铅酸蓄电池、镍氢蓄电池、镍氢蓄电池、锂离子电池、镍镉电池、钠硫蓄电池、镍锌蓄电池、飞轮电池[12]。其中较为常用的电池类型为锂离子电池、铅酸蓄电池等。这里以锂离子电池为例对蓄电池的基本原理进行介绍。
锂离子电池作为一种新型高电压、高能量密度的可充电电池,其独特的物理和电化学性能,具有广泛的民用(如新能源汽车)前景。其突出的特点是:重量轻、储能大、无污染、无记忆效应、使用寿命长。在同体积重量情况下,锂电池的蓄电能力是镍氢电池的1.6倍,是镍镉电池的4倍,开发前景非常光明。同时它是一种真正的绿色环保电池,不会对环境造成污染,是目前最佳的能应用到电动车上的电池。
电动汽车的充电控制结构框图如下图所示:
该控制器结构的基本原理为在充电控制阶段,将输入电流 信号和设定的参考电流信号进行比较,经 PID 调节器后与三角波比较,产生输出信号控制开关的通断,实现恒流充电。
电动汽车的放电模式采用电流负反馈控制方式,其结构和充电控制结构相似,放电控制结构框图如下图所示:
该控制器结构的基本原理为根据需求,设定放电参考电流 。电池放电电流实测值 与参考值进行比较,产生控制信号控制开关管的开通时间来控制放电电流的稳定,实现恒电流放电的目的。最后,根据上述原理介绍,最终基于PID的PWM充放电控制结构的SIMULINK建模如下图所示:
3.MATLAB核心程序
```load PWM1.mat
PWM2 = ans.Data;
T2 = ans.Time;
figure;
subplot(211);
plot(T2(1:100:end),PWM2(1:100:end),'linewidth',2);
grid on
xlabel('t/s');
title('charge PWM');
axis([0,6,0,1.2]);
load PWM2.mat
PWM2 = ans.Data;
T2 = ans.Time;
subplot(212);
plot(T2(1:1000:end),PWM2(1:1000:end),'linewidth',2);
grid on
xlabel('t/s');
title('discharge PWM');
axis([0,6,0,1.2]);
load speed.mat
speed2 = ans.Data;
T2 = ans.Time;
figure;
plot(T2(1:1000:end),max((max(speed2)-speed2(1:1000:end)-50)/1000,0),'linewidth',2);
grid on
xlabel('t/s');
title('speed');
axis([2.5,6,0,0.8]);
load I.mat
I = ans.Data;
T2 = ans.Time;
figure;
subplot(211);
plot(T2(10000:1000:end),I(10000:1000:end),'linewidth',2);
grid on
xlabel('t/s');
title('I/A');
axis([0,6,-20,50]);
load V.mat
V = ans.Data;
T2 = ans.Time;
subplot(212);
plot(T2(10000:1000:end),V(10000:1000:end),'linewidth',2);
grid on
xlabel('t/s');
title('U/V');
axis([0,6,0,250]);
load V.mat
V = ans.Data;
T2 = ans.Time;
subplot(212);
plot(T2(10000:1000:end),V(10000:1000:end),'linewidth',2);
grid on
xlabel('t/s');
title('U/V');
axis([0,6,0,250]);
load SOCs.mat
t = ans(1,:);
s = ans(2,:);
figure;
plot(t(10000:1000:end),s(10000:1000:end),'linewidth',2);
grid on
xlabel('t/s');
title('SOC');
axis([0,6,0.4,0.6]);
```