Project 1
Forward Energy Based Fuel Consumption Model Of A Conventional Vehicle
Aim :
To create a forward based fuel consumption model of a conventional vehicle with the given file and data.
Objective :
By using the given inbuilt data it is required to run and check the given file and have to fill the required data fields to get output. The attached file in the question part has a bunch of files with different drive cycles and inbuilt models.
Theory and Procedure :
In this project, a typical midsize car with a 1.9L engine and a 4-speed automatic transmission is considered. Data is taken from ADVISOR data base developed by NREL, USA. Transmission shift map and controller is taken from Matlab/Simulink example database.
Here it is required to run the “Project1_InitFile.m” a Matlab script used to load all the variables required for running the Simulink model and for post-processing. “Project1_VehicleModel.slx” is the Simulink model of the vehicle.
These inputs are fed to the ‘Powertrain’ block which represents the drivetrain of the vehicle.“Project1_ProcessingFile.m” is a Matlab script used to analyze this data and to generate plots. This script needs to be executed after the Simulink model data has been loaded into the workspace.
Matlab code :
Project1_InitFile.m
This matlab code contains of inital values for the required variables like vehicle parameters, powertrain parameters and driver parameters.
%% Skill-Lync -> Hybrid Drives Development
% Project 1 - Conventional Vehicle Model
% By - Ullekh Gambhira
% Description:
%% Initialization File
% Initialization file for loading the variables for the Conventional vehicle simulation model
%% Vehicle Parameters
M = 1500; % Vehicle weight [kg]
Cr = 0.015; % Rolling resistance coefficient
Rw = 0.35; % Rolling radius [m]
Cd = 0.33; % Drag coefficient
Af = 2; % Frontal area [m2]
rhoa = 1.225; % Air density [kg/m3]
Vwind = 0; % Wind velocity [kmph]
g = 9.81; % Gravitational acceleration [m/s2]
theta = 0; % Slope [deg]
myu_road_tire = 1; % Coefficient of friction between tire - road interface
%% Powertrain Parameters
FDR = 3.73; % Final Drive Ratio / Diff Ratio
DiffEff = 0.99; % Differential efficiency (assumed independent of operating conditions)
NumGear = 4; % Number of gears in transmission
TransGear = [1:NumGear]; % Transmission Gears
TransRatio = [3.06, 1.62, 1, 0.7]; % Corresponding Transmission ratios
TransEff = 0.90; % Transmission efficiency (assumed independent of operating conditions)
TC_SR = [0, .5, .6, .7, .8, .87, .92, .94, .96, .97, 1]; % Torque Converter Speed Ratio (Matlab default) -> TurbSpd/PumpSpd
TC_TR = [2.232, 1.5462, 1.4058, 1.2746, 1.1528, 1.0732, 1.0192, 1, 1, 1, 1]; % Torque Converter Torque Ratio (Matlab default) -> TurbTrq/PumpTrq
TC_Cf = 1e-4 * [.72558, .66322, .63463, .59042, .51331, .4144, .29287, .22444, .12186, .04386, 0]; % Torque Converter Capacity Factor (Matlab default) -> PumpTrq/PumpSpd^2 [Nm/rpm^2]
load Vehicle_Data/Engine_data_1_9L_Saturn_95kW
load Vehicle_Data/Trans_Shift_map
%% Driver Parameters
Kp = 10; % P gain for driver PI model
Ki = 1; % I gain for driver PI model
Drive_Cycle_Select = 1; % Drive cycle selection
% Drive cycle values in m/s
if Drive_Cycle_Select == 1
load DriveCycles/UDDS;
elseif Drive_Cycle_Select == 2
load DriveCycles/HWFET;
elseif Drive_Cycle_Select == 3
load DriveCycles/FTP;
elseif Drive_Cycle_Select == 4
load DriveCycles/US06;
elseif Drive_Cycle_Select == 5
load DriveCycles/NEDC;
elseif Drive_Cycle_Select == 6
load DriveCycles/WLTP;
end
time_end = cyc_time(end);
vel_end = cyc_vel(end);
Simulink model representation:
Project1_VehicleModel.slx
This contains the block representation and links between different blocks. we have driver block, controller block and powertrain block below. Project1_VehicleModel.slx is modeled using a ‘Driver’ block, which is a basic PI controller that generates accelerator and brake pedal outputs to match the desired and actual vehicle speeds. The ‘Controller’ block is the brains of the vehicle, representing the electronic controls units. Based on the driver inputs, it generates desired engine torque, desired transmission gear and desired brake torque.

Powertrain block :
Powertrain blockconsists of an ‘Engine’ connected to the ‘Automatic Transmission’ through a ‘Torque Converter’. The output of the transmission is connected to the ’Differential’, which powers the ‘Wheels’, that provides the tractive force for vehicle acceleration. The longitudinal dynamics of the vehicle along with the road load is represented in the ‘Vehicle Dynamics’ block.

Engine block :

Transmission block :

Differential block :

Wheel block :

Vehicle dynamics :

Driver block is used to decide the the vehicle drive cycle, controller block is used to convert the driver signals and pass the signals to the powertrain block.
The powertrain block has a bunch of blocks connected together with signals passing from one block to another and the major input is signals from the controller block.
Engine block has engine speed and process the values theough dynanic saturation block to provide engine torque, fuel rate, engine fuel consuption and we take the output values to the workspace using To workspace block.
Transmission block gets the engine torque from engine block as input and also has automated gear selection signals from controller as input, here we get the values of transmission input torque and transmission output torque. The gear command is automated and changes the gear as per the selected drive cycle.
Differential block gets the transmission output torque from the transmission block and passes it to the differential ratio and creates axle torque. Through this the drive line gets the power to rotate the wheels.
wheel block gets two inputs as axle torque and brake torque axle torque and velocity helps to move the vechile and brake torque to control the speed of the vechile. we get the wheel speed here to the workspace.
Vehicle dynamics gets the tractive foce from the wheel block as input and by using velocity and angle value theta we get vehicle speed and vehicle distance tavelled to the workspace. the velocity is taken out and attached to the driver block for the contineous process for a period of time.
Matlab code :
Project1_ProcessingFile.m
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Skill-Lync -> Hybrid Drives Development
% Project 1 - Conventional Vehicle Model
% By - Ullekh Gambhira
% Description:
% The following file is to used with the Initialization file and Simulink
% results for post-processing of the data.
% The file is incomplete, has some examples of how the data is imported
% into a readable format, data analysis and plotting examples.
% Based on the project task, use commands in a similar format as given
% below, to analyse the data and generate required plots.
% You can change variable names if desired
%% Post-Processing File
% File for post-processing the Conventional vehicle simulation model data
%% Renaming variables
Time = out.tout;
Acc_Pdl = out.Acc_Pdl; % Accelerator pedal [%]
Brk_Pdl = out.Brk_Pdl; % Brake pedal [%]
Gear_Cmd = out.Gear_Cmd; % Transmission gear
Trans_In_Spd = out.Trans_In_Spd*30/pi; % Transmission input speed [rpm]
Trans_Out_Spd = out.Trans_Out_Spd*30/pi;% Transmission output speed [rpm]
Eng_Trq = out.Eng_Trq; % Engine brake torque [Nm]
Eng_Spd = out.Eng_Spd.*30/pi; % Engine speed [rpm]
Eng_Fuel_Consump = out.Eng_Fuel_Consumption; % Engine fuel consumption [g]
Veh_Dist = out.Veh_Dist/1000; % Distance traveled by vehicle [km]
Veh_Spd = out.Veh_Spd*18/5; % Vehicle speed [kmph]
Wheel_Spd = out.WheelSpd; %Wheelspd [kmph]
Eng_Fuel_Rate = out.Eng_Fuel_Rate; %Engine fuel rate [%]
%% Data Analysis
Eng_Pwr = Eng_Spd.*pi/30.*Eng_Trq/1000; % Engine brake power [kW]
rho_petrol = 0.7197; % Density of petrol [kg/L]
kmpl = Veh_Dist(end)/(Eng_Fuel_Consump(end)/1000/rho_petrol); % Fuel economy [kmpl]
%% Plotting Vehicle characteristics time trace transmission IN/OUT and Wheel speed
figure(1)
subplot(3,1,1)
hold on
grid on
plot(Time, Trans_In_Spd, 'linewidth', 1,'color', 'k')
xlabel('Time [s]')
ylabel('Speed [rpm]')
xlim([0, Time(end)]);
ylim([0,6000]);
legend('Trans Input');
title('Trans input wrt Time');
subplot(3,1,2)
hold on
grid on
plot(Time, Trans_Out_Spd, 'linewidth', 1, 'color', 'r')
xlabel('Time [s]')
ylabel('Speed [rpm]')
xlim([0, Time(end)]);
ylim([0,6000]);
legend('Trans Output');
title('Trans output wrt Time');
subplot(3,1,3)
hold on
grid on
plot(Time, Wheel_Spd, 'linewidth', 1, 'color', 'b')
xlabel('Time [s]')
ylabel('speed [m]')
xlim([0, Time(end)]);
legend('Wheel Speed')
title('Wheel speed wrt Time');
% Plotting Engine speed, Engine Torque, Engine Power, Engine fuel rate, Engine fuel consumption wrt time
figure(2)
grid on
subplot(2,2,1)
plot(Time, Eng_Trq, 'linewidth', 1, 'color', 'k')
xlabel('Time [s]')
ylabel('Toque [Nm]')
legend('Engine Torque')
title('Engine torque wrt Time');
grid on
subplot(2,2,2)
plot(Time, Eng_Pwr, 'linewidth', 1, 'color', 'b')
xlabel('Time [s]')
ylabel('Power [kW]')
legend('Engine Power')
title('Engine power wrt Time');
grid on
subplot(2,2,3)
plot(Time, Eng_Fuel_Rate, 'linewidth', 1, 'color', 'r')
xlabel('Time [s]')
ylabel('Fuel Rate [%]')
legend('Engine Fuel Rate')
title('Fuel rate wrt Time');
grid on
subplot(2,2,4)
plot(Time, Eng_Fuel_Consump, 'linewidth', 1, 'color', 'g')
xlabel('Time [s]')
ylabel('Fuel Consumption')
legend('Engine Fuel Consumption')
title('Fuel consumption wrt Time');
%% Plotting Acceleration pedal, Brake pedal and gear command wrt time
figure(3)
subplot(4,1,1)
hold on
plot(Time, Acc_Pdl, 'linewidth', 1, 'color', 'k')
plot(Time, Brk_Pdl, 'linewidth', 1, 'color', 'r')
xlabel('Time [s]')
ylabel('Pedal [%]')
xlim([0, Time(end)]);
grid on
legend('Accel', 'Brake')
title('Acceleration & Brake pedal wrt Time')
subplot(4,1,2)
hold on
plot(Time, Trans_In_Spd, 'linewidth', 1, 'color', 'k')
plot(Time, Trans_Out_Spd, 'linewidth', 1, 'color', 'r')
xlabel('Time [s]')
ylabel('speed [rpm]')
xlim([0, Time(end)]);
ylim([0,6000]);
grid on
legend('Desired', 'Actual')
title('Disered speed & Actual speed wrt Time')
subplot(4,1,3)
plot(Time, Gear_Cmd, 'linewidth', 1, 'color', 'b')
xlim([0, Time(end)]);
xlabel('Time [s]')
ylabel('Gear')
grid on
title('Gear command wrt Time')
legend('Gear command')
subplot(4,1,4)
hold on
grid on
plot(Time, Veh_Dist, 'linewidth', 1, 'color', 'r')
xlabel('Time [s]')
ylabel('Distance [Km]')
xlim([0, Time(end)]);
legend('Vehicle distance')
title('Vehicle dist wrt Time');
%% Plotting engine operating points on engine fuel map
figure('Name','Engine Operating Points');
hold on
grid on
title('Engine Operating Points','fontsize',12);
p1=plot(Eng_map_spd*30/pi,Eng_max_trq,'linewidth',2,'color','r');
p2=line([Eng_map_spd(end)*30/pi Eng_map_spd(end)*30/pi],[0 Eng_max_trq(end)]);
set(p2,'linewidth',1,'linestyle','--','color','k');
p3=line([Eng_map_spd(1)*30/pi Eng_map_spd(1)*30/pi],[0 Eng_max_trq(1)]);
set(p3,'linewidth',1,'linestyle','--','color','k');
[c,h] = contour(Eng_map_spd'*30/pi,Eng_map_trq,Eng_fuel_map');
clabel(c,h);
xlabel('Engine Speed [rpm]');
ylabel('Engine Torque [Nm]');
title('Engine Fuel Consumption Map [g/s]');
p4 = plot(Eng_Spd,Eng_Trq,'.','color','k');
legend([p1 p4],{'Max Curve','Operating Points'});
axis([Eng_map_spd(1)*30/pi Eng_map_spd(end)*30/pi 0 Eng_map_trq(end)]);
Drive cycle selection :
The model developed has the capability to simulate the vehicle on different drive cycles like UDDS, HWFET, FTP, NEDC, US06, WLTP. Here it is asked to find the values and plot for UDDS and HWFET.
We have selected drive cycle as 1 to get the values and plots for the udds cycle.
Fuel economy of UDDS cycle = 17 kmpl.
%% Driver Parameters
Kp = 10; % P gain for driver PI model
Ki = 1; % I gain for driver PI model
Drive_Cycle_Select = 1; % Drive cycle selection
% Drive cycle values in m/s
if Drive_Cycle_Select == 1
load DriveCycles/UDDS;
elseif Drive_Cycle_Select == 2
load DriveCycles/HWFET;
elseif Drive_Cycle_Select == 3
load DriveCycles/FTP;
elseif Drive_Cycle_Select == 4
load DriveCycles/US06;
elseif Drive_Cycle_Select == 5
load DriveCycles/NEDC;
elseif Drive_Cycle_Select == 6
load DriveCycles/WLTP;
end
time_end = cyc_time(end);
vel_end = cyc_vel(end);
UDDS cycle plots :




Drive cycle selection :
We have selected drive cycle as 2 to get the values and plots for the HWFET cycle.
Fuel economy of HWFET cycle = 21 kmpl.
%% Driver Parameters
Kp = 10; % P gain for driver PI model
Ki = 1; % I gain for driver PI model
Drive_Cycle_Select = 2; % Drive cycle selection
% Drive cycle values in m/s
if Drive_Cycle_Select == 1
load DriveCycles/UDDS;
elseif Drive_Cycle_Select == 2
load DriveCycles/HWFET;
elseif Drive_Cycle_Select == 3
load DriveCycles/FTP;
elseif Drive_Cycle_Select == 4
load DriveCycles/US06;
elseif Drive_Cycle_Select == 5
load DriveCycles/NEDC;
elseif Drive_Cycle_Select == 6
load DriveCycles/WLTP;
end
time_end = cyc_time(end);
vel_end = cyc_vel(end);
HWFET cycle plots :




Result :
With the help of given inbulit files and datas we have created the missing things which is required to complete the total process and done the simulation and got the results and values. The values are plotted as per the requirements of this project and attached for reference.
By comparing the values and plots of the UDDS and HWFET drive cycles we clearly get an idea about the fuel efficiency of HWFET cycle is higher than UDDS cycle.
Coclusion :
By comparing the values and different plots of two different cycles we saw that the vechile experience smooth operation with good fuel economy in the HWFET drive cycle.
This conclusion is only between the two cycles which we have plotted above Successfully by using Matlab and simulink