并聯混合動力汽車的工作模式可以分為六種。純電動模式、純發動機模式、混合驅動模式、充電模式、再生制動模式、怠速停車模式。
當電池SOC較高且并聯混合動力汽車處于低速或輕載等工況時,發動機停止工作,由電池提供能量驅動電機帶動整車運動;
當電池SOC維持在正常范圍內且并聯混合動力汽車處于中高速或中等負荷時,電機停止工作,發動機帶動整車運動(此時,發動機工作于高效區且排放性能好);
當并聯混合動力汽車處于高爬坡或急加速等負荷且車輛所需功率超過發動機最大功率時,電機啟動,對發動機進行助力;
當電池SOC較低且并聯混合動力汽車處于中低負荷時,發動機除了要驅動車輛外,還需額外對電池進行充電;
當并聯混合動力汽車制動或減速時,電機可回收再生制動能量;
當并聯混合動力汽車停車或怠速時,若電池SOC較低,發動機為電池充電。
1、并聯混合動力汽車仿真建模
以某型并聯混合動力汽車為例,其基本參數為:
E_max = 1.7*1000*3600; % 電池尺寸
M_battery = E_max/46/3600; % 電池質量,kg
M_passenger = 250; % 乘客+駕駛員質量, kg
M_veh = 1746 + M_passenger + M_battery; % 整車質量, kg
C_D = 0.35; % 阻力系數
C_0 = 0.015; % 滾動阻力系數
A_F = 1.93; % 迎風面積, m^2
eta_ess = 0.7; % 儲能系統效率
r_wheel = 0.2794; % 車輪半徑, m
P_min_eng = 10000.0; % 發動機最小功率, W
P_max_eng = 80000.0; % 發動機最大功率, W
G_diff = 0.25; % 差速器傳動比
G_trans_min = 0.3; % 最小傳動比
% 單位換算
m_to_mi = 1/1609; % meters to miles
g_hr_to_gal_s = 9.778e-8; % g/hr to gal/s
mph_to_mps = 0.44704; % mi/hr to m/s
% 物理常數
rho = 1.225; % 空氣密度,kg/m^3
g = 9.8; % 重力加速度,m/s^s
SOC_init = 0.5; % SOC初值
設置好參數后,基于動態工況仿真實驗,驗證并聯混合動力汽車的相關性能。我們搭建的并聯混合動力汽車模型如下圖所示:
牽引力及功率計算公式如下所示:
Ftractive= Frolling_resistance + Faero + Facceleration , assuming grade = 0. (1)
Frolling_resistance = M_veh*g*C_0 (2)
Faero = 0.5*rho*Afrontal *C_D*v_veh^2 (3)
Facceleration = M_veh*a_veh (4)
Ptractive = Ftractive*v_veh (5)
電機轉速和轉矩計算公式如下所示:
ωlow=Gtrans*ωhigh (6)
ωright.wheel=ωleft.wheel (7)
uveh=rwheel*ωwheel (8)
ωlow=Gelecmach*ωelecmach (9)
并聯混合動力汽車能量管理策略function函數如下所示:
v_min = 2.19; % 最小車速, in m/s
P_min = 10000; % 發動機最小功率 in W
P_max = 80000; % 發動機最大功率
G_trans_min = 0.3; % 最小傳動比
G_diff = 0.25; % 差速器傳動比
r_wheel = 0.2794; % 車輪半徑 in m
%% 并聯混合動力汽車工作模式
if (v_veh < v_min)
P_elecmach = P_tractive;
P_eng = 0;
fuel_rate = 0;
w_eng = 0;
G_trans = G_trans_min;
return
end
if(P_tractive < P_min)
P_elecmach = P_tractive;
fuel_rate = 0;
w_eng = 0;
P_eng = 0;
G_trans = G_trans_min;
return
end
if(P_tractive ?> P_max)
P_elecmach = P_tractive-P_max;
P_eng = P_max;
bsfc = interp1(eng_map(:,2), eng_map(:,3), P_eng/1000);
fuel_rate = bsfc*P_eng/1000; % g/hr
w_eng = interp1(eng_map(:,2), eng_map(:,1), P_eng/1000);
w_rad_p_s = w_eng*pi/30; % convert to rad/s
G_trans = v_veh/r_wheel/G_diff/w_rad_p_s;
return
end
P_elecmach = -(P_max-P_tractive)*(0.5-SOC);
P_eng = P_tractive-P_elecmach;
bsfc = interp1(eng_map(:,2), eng_map(:,3), P_eng/1000);
fuel_rate = bsfc*P_eng/1000; % g/hr
w_eng = interp1(eng_map(:,2), eng_map(:,1), P_eng/1000);
w_rad_p_s = w_eng*pi/30; % convert to rad/s
G_trans = v_veh/r_wheel/G_diff/w_rad_p_s;
if(P_eng P_min)
P_eng = 0;
P_elecmach = P_tractive;
fuel_rate = 0;
w_eng = 0;
G_trans = G_trans_min;
return
end