Challenge

Project 2

Aim:

The task of this project is to quantify the improvement in fuel economy numbers for the hybrid vehicle (kmph), compared to the conventional vehicle, on the urban cycle (UDDS) and highway cycle (HWFET). Also, to analyze and understand the vehicle operating points in terms of engine and motor speed, torque, transmission speeds, pedal positions, gear, distance traveled, battery voltage, current, SoC, etc.

Solution:

MATLAB Code:

Here we are running the code to load the values and variables so that we can use these values in the Simulink model. This script defines the input values that are required for the calculation.
if else loop is used so that when we change the drive cycle selection values between (1-6) the data of that drive cycle will be loaded.

% Initializing Variable Parameters for 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 Engine_data_1_9L_Saturn_95kW
load Trans_Shift_map
load EM_Honda_Insight_10kW
load ESS_NiMH6
ESS_init_SOC = 0.8;
ESS_SOC_max = 0.9;
ESS_SOC_min = 0.6;
%% 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 UDDS.mat;
elseif Drive_Cycle_Select == 2
load HWFET.mat;
elseif Drive_Cycle_Select == 3
load FTP.mat;
elseif Drive_Cycle_Select == 4
load US06.mat;
elseif Drive_Cycle_Select == 5
load NEDC.mat;
elseif Drive_Cycle_Select == 6
load WLTP.mat;
end
time_end = cyc_time(end);
vel_end = cyc_vel(end);

Simulink model:

THE SCOPES SHOWN BELOW ARE FOR UDDS DRIVE CYCLES ONLY.

This model consists of 3 main subsystems

  • The ‘Driver’ block, 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 control units. Based on the driver inputs, it generates desired engine torque, desired transmission gear, and desired brake torque. These inputs are fed to the ‘Powertrain’.
  • The ‘Powertrain’ block represents the drivetrain of the vehicle. It consists 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’, which 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 which finally gives the velocity, this velocity is given back to the driver block as feedback to check the difference between actual vs desired vehicle speed.

DRIVER BLOCK:

1-D Lookup Table:


The driver block works on a PI controller. PI controller takes the error and integrates it with a constant and gives the output. Here we have a drive cycle (desired) and velocity (actual) which is vehicle speed for calculating an error. For the drive cycle, we are providing time as input and the output of the PI controller is divided into 2 parts and saturated as a positive value for Acceleration and negative values for Brake negative
Besides this, a gain block with a -1 value is used to convert the negative sign of the brake into a positive value.

This graph compares the desired and actual velocities. In this case, it is overlapping which means the desired velocity is equal to the actual velocity.

CONTROLLER BLOCK

controller block takes acceleration and brake as input and provides Engine Torque, Gear, and Brake Torque as Output. This output is given to Bus Controller to combine all signals into 1 single signal and then by using Bus Selector we can separate all signals present in Bus Controller.

1] Engine Control Unit: First Subsystem of Controller Block

The ideal controller is given so that it does not exceed the ideal speed. The output of the Idle speed controller is then added to the throttle that is received from the driver and based on the maximum and minimum torque curve we calculate the engine torque required.

Idle Speed Controller: Subsystem of Engine Control Unit

The idle Speed Controller consists of a PI controller where it takes the error of engine ideal speed values (constant) and engine speed value and then calculates the throttle idle by saturating positive values from 0 to 100.

Here, in the question itself, the Ideal engine speed is given as 650 and we can confirm it in the scope block, the engine's ideal speed is coming out as 650 and is constant throughout the simulation time. Whereas the throttle is varying as we have selected the drive cycle to be UDDS, the stop-and-go movement is much more frequent in the UDDS cycle as compared to the HWFET cycle.

2] Transmission Control Unit: Second Subsystem of Controller Block

The transmission Control Unit works on State-flow Chart where the inputs given are Throttle and Velocity Speed, giving output as Gear.

In the Gear Logic system,

gear state consists of 4 gears which change upon UP and DOWN conditions. These conditions are computed from another state called the selection state, which calls the function which is present in the Simulink function block.

And

While calculating the Threshold value we give Throttle and Gear as input to the lookup table and get the gear position values as an output of this block.

3] Brake Control Unit: Third Subsystem of Controller Block

The product of brake and max friction depended on the tire-to-road interface and the weight of the vehicle is calculated for brake torque.

This is the final output of what engine torque is required, the gear selected, and the brake torque. As we can see, the engine torque is fluctuating a lot which means the vehicle is not moving at a constant speed, we can also confirm it by looking at the gear selection graph here which shows fluctuation, the gear shifts are noticeable moving from 1st gear to the highest which is 4th gear. The brake torque is also fluctuating accordingly.

Electric Motor Control Unit

The Electric motor throttle which is required to accelerate the vehicle matches the one which is provided as we can see in the graph.

Brake Control Unit

Chart

Power Train Block

The power train block consists of the engine, transmission, differential, wheel, and vehicle dynamic which are calculated on the basis of torque requirement, Gear ratio, and Break torque.

Engine Subsystem

This block is designed to calculate the fuel consumption in the engine at a specific fuel rate on the basis of the torque required. The torque required is checked whether the torque is between the max or min torque curve and then pass it to the fuel consumption map. Based on the speed and torque fuel consumption is calculated and provide the fuel consumption in grams/sec. we are using the To Work-space block to send the values to the MATLAB workspace so that we can use those values for plotting. A saturation block is used to filter the values between the given limit which is 5 to 0. The integrator is used to convert fuel rate into fuel consumption.

Motor

This block takes Engine Speed as an input and provides Motor Speed and Motor torque as outputs.

Fuel consumption can be noticed in the 2D lookup table from which we get power output.

CRANKHUB

It takes electric motor torque and engine torque as inputs and provides crank torque as an output.

TRANSMISSION

This block takes Engine torque and Gear selector and provides torque output on the basis of gear selector by the driver the gear ratio is filtered from the look-up table.


Scope output:

torque converter

Integrator limit block:

Saturation limits

The torque converter is used to connect the engine to the transmission. It also converts the output torque into transmission torque which is multiplied by the gear ratio and given to the switch which on the basis of eff(positive) and loss(negative) provides the output transmission torque.

We are using a torque converter as a fluid coupling device because this system consists of an automatic transmission.

the figure shows the output pump and turbine torque analysis.

the figure shows the output pump and turbine speed analysis.

DIFFERENTIAL

Here we are providing transmission output torque to the differential ratio which gets multiplied and gives the positive and negative values (eff and loss) and passes to the switch which according to the condition gives the output as axle torque. We are using the To Work-space block to send the values to the MATLAB workspace so that we can use those values for plotting.

WHEEL

The wheel receives axle torque and subtracts break torque from it and we will get net wheel torque which is divided by the rolling radius to give tractive force. We are assuming here that we have no traction loss for simple calculation.

VEHICLE DYNAMICS

This block is used to calculate the acceleration of the vehicle which is integrated to find velocity followed by distance. Where the input is given as tractive force subtracted by the sum of drag resistance, grading resistance, and rolling resistance.

This shows various forces acting in the graph.

Post-Processing File

%% Postprocessing File

% Variables
% Storing Time
Time = out.tout;
% Storing Acceleration pedal percentage
Acc_pedal = out.Acc_Pdl;
% Storing Brake pedal percentage
Brk_pedal = out.Brk_Pdl;
% Storing Transmission Gear command
Gear = out.Gear_Cmd;
% Storing Transmission Input Speed in rpm
Tis = out.Trans_In_Spd*30/pi;
% Storing Transmission Output Speed in rpm
Tos = out.Trans_Out_Spd*30/pi;
% Storing Engine Brake Torque in Nm
EngTrq = out.Eng_Trq;
% Storing Engine Speed in rpm
EngSpd = out.Eng_Spd;
% Engine Brake Power is equal to, in kW
EP = EngSpd.*pi./30.*EngTrq./1000;
% Storing Engine Fuel Consumption in grams
EFC = out.Eng_Fuel_Consumption;
% Storing Engine Fuel Rate
EFR = out.Eng_Fuel_Rate;
% Storing Wheel speed in rpm
WheelSpeed = out.WheelSpd;
% Storing Distance Covered by the vehicle in km
Vd = out.Veh_Dist/1000;
% Storing Speed of the vehicle in rpm
Vs = out.Veh_Spd*18/5;
% Storing Motor Speed
MS = out.EM_spd;
% Storing Motor Torque
MT = out.Motortrq;
% Storing Motor Power
MP = out.Motorpower;
% Storing Current
Current = out.current;
% Storing Voltage
Voltage = out.Voltage;
% Storing Vehicle's State of Charge
SOC = out.SOC;
% Density of Petrol in kg\L
rho_petrol = 0.7197;
% Fuel Economy in kmpl
kmpl = Vd(end)/(EFC(end)/1000/rho_petrol);
%% Plotting vehicle characteristics time trace to Engine speed, Engine Torque, Engine Power, And Engine fuel rate, Engine fuel consumption
%% Plotting engine operating points on engine fuel map
figure(1)
hold on; grid on;
plot(Time,Tis, 'linewidth', 1, 'Color', 'black')
plot(Time,Tos, 'linewidth', 1, 'Color', 'red')
plot(Time,WheelSpeed, 'linewidth', 1, 'Color', 'green')
xlabel('time [s]'); ylabel('speed [rpm]');
xlim([0, Time(end)]); ylim([0, 6000]); legend('Trans In Spd','Trans Out Spd','WheelSpd');
%% Plotting torque ,power,fuel rate,fuel consumption
figure(2)
subplot(4,1,1)
grid on;
plot(Time, EngTrq, 'linewidth', 1, 'Color', 'black');
xlabel('time [s]'); ylabel('engine torque [Nm]');
xlim([0, Time(end)]);
subplot(4,1,2)
grid on;
plot(Time, EP, 'linewidth', 1, 'Color', 'blue');
xlabel('time [s]'); ylabel('engine power [Nm]');
xlim([0, Time(end)]);
subplot(4,1,3)
grid on;
plot(Time, EFR, 'linewidth', 1, 'Color', 'green');
xlim([0, Time(end)]);
xlabel('Time [s]'); ylabel('engine fuel rate');
subplot(4,1,4)
grid on;
plot(Time, EFC, 'linewidth', 1, 'Color', 'red');
xlim([0, Time(end)]);
xlabel('Time [s]'); ylabel('engine fuel consumption');
%% Plotting vehicle characteristics time trace
figure(3)
subplot(4,1,1)
hold on; grid on;
plot(Time, Acc_pedal, 'linewidth', 1, 'Color', 'black');
plot(Time, Brk_pedal, 'linewidth', 1, 'Color', 'red'); ylabel('Pedal [%]');
xlim([0, Time(end)]);
legend('Accel','Brake');
subplot(4,1,2)
hold on; grid on;
plot(Time, Gear, 'linewidth', 1, 'Color', 'black');
xlim([0, Time(end)]);
xlabel('Time [s]'); ylabel('Gear');
subplot(4,1,3)
hold on; grid on;
plot(cyc_time,(cyc_vel.*(18./5)), 'linewidth', 1, 'Color', 'black');
plot(Time, Vs, 'linewidth', 1, 'Color', 'red');
ylabel('velocity'); xlabel('Time [s]');
xlim([0, Time(end)]);
legend('desired speed','Actual speed');
subplot(4,1,4)
hold on; grid on;
plot(Time, Vd, 'linewidth', 1, 'Color', 'black');
xlim([0, Time(end)]);
xlabel('Time [s]'); ylabel('distance [km]');
%% 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(EngSpd,EngTrq,'.','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)]);
%% Plot motor speed, torque, motor input power using subplots.
figure(5)
subplot(3,1,1)
grid on
plot(Time,MS,'linewidth', 1, 'Color', 'black')
xlabel('time [s]')
ylabel('MOTOR SPEED [rpm]')
xlim([0, Time(end)]);
subplot(3,1,2)
grid on
plot(Time,MT,'linewidth', 1, 'Color', 'blue')
xlabel('time [s]')
ylabel('MOTOR TORQUE [Nm]')
xlim([0, Time(end)]);
subplot(3,1,3)
grid on
plot(Time,MP,'linewidth', 1, 'Color', 'red')
xlabel('time [s]')
ylabel('motorpower ')
xlim([0, Time(end)]);
%% Plot pack voltage, current and SoC using subplots.
figure(6)
subplot(3,1,1)
grid on
plot(Time,Voltage,'linewidth', 1, 'Color', 'black')
xlabel('time [s]')
ylabel('VOLTAGE [V]')
xlim([0, Time(end)]);
subplot(3,1,2)
grid on
plot(Time,Current,'linewidth', 1, 'Color', 'blue')
xlabel('time [s]')
ylabel('CURRENT [A]')
xlim([0, Time(end)]);
subplot(3,1,3)
grid on
plot(Time,SOC,'linewidth', 1, 'Color', 'red')
xlabel('time [s]')
ylabel('SOC [%] ')
xlim([0, Time(end)]);
%% Plotting motor operating points
figure('Name','motor operating points');
hold on
grid on
title('motor operating points','fontsize',12);
p1=plot(EM_map_spd*30/pi,EM_max_trq,'linewidth',2,'color','r');
p2=line([EM_map_spd(end)*30/pi EM_map_spd(end)*30/pi],[0 EM_map_trq(end)]);
set(p2,'linewidth',1,'linestyle','--','color','k');
p3=line([EM_map_spd(1)*30/pi EM_map_spd(1)*30/pi],[0 EM_max_trq(1)]);
set(p3,'linewidth',1,'linestyle','--','color','k');
[c,h] = contour(EM_map_spd'*30/pi,EM_map_trq,EM_inpwr_map');
clabel(c,h);
xlabel('motor Speed [rpm]');
ylabel('motor Torque [Nm]');
title('motor input power Map [g/s]');
p4 = plot(MS,MT,'.','color','k');
legend([p1 p4],{'Max Curve','Operating Points'});
axis([EM_map_spd(1)*30/pi EM_map_spd(end)*30/pi 0 EM_map_trq(end)]);

In this code, we will plot the values that are extracted from the Simulink model and compare it with {UDDS CYCLE VS HWFET CYCLE}

  1. Tabulate the fuel economy numbers (kmpl) for UDDS and HWFET cycles.

fuel economy numbers (kmpl) for the UDDS cycle = 16.8534 (Project-1)

fuel economy numbers (kmpl) for the UDDS cycle =

(Project-2)

fuel economy numbers (kmpl) for HWFET cycle = 21.2041 (Project-1)

fuel economy numbers (kmpl) for HWFET cycle =

(Project-2)

fuel economic number is high in the HWFET cycle since there is low pedaling which causes low energy loss hence less fuel consumption whereas as we see in the UDDS cycle there are more pedaling means more energy loss due to loss which causes more fuel consumption.

  1. Plot the time trace for the engine, transmission input, transmission output, and wheel speed on one plot.


In the below figure1 we can see there is more fluctuation in speed which means transmission speed is decreasing near zero with time which generates less energy. But if we compare this in figure 2, we can see that there is less fluctuation in speed which means transmission speed is minimal or almost equal to zero for a long period of time which generates more energy. we can see this in figure5 and 6.

Figure 1: Engine, transmission input, transmission output, and wheel speed for UDDS cycle.

Figure 2: Engine, transmission input, transmission output, and wheel speed for HWFET cycle.

3. Plot engine torque, engine power, fuel rate, and fuel consumption using subplots.

In Figures 3 and 4 we can see the engine torque, engine power, and fuel rate is directly proportional to each other, which means as engine power increases, the torque also increases, and the fuel rate is also increased. The main difference between figures 3 and 4 is fluctuation due to instant increase and decrease in power, torque, and fuel rate it is mainly due to the driving condition.

Figure 3: Engine torque, engine power, fuel rate, and fuel consumption for the UDDS cycle.

Figure 4: Engine torque, engine power, fuel rate, and fuel consumption for the HWFET cycle.

  1. Plot accelerator and brake pedal, gear command, vehicle desired and actual speed, and vehicle distance using subplots.


In figure5 we can see that if the gear is not constant for long period, we will receive less velocity whereas in figure6 the gear is stable for a long period which results in increasing velocity due to which there is less pedaling hence there is minimal power loss. By looking at graph5 and 6 we can identify that vehicle is making stop-and-go motions multiple times in a given distance due to zero velocity UDDS cycle whereas in the HWFET cycle there is no motion of stop and go, the vehicle’s velocity fluctuates because the input velocity is such that the vehicle never stops but it reduces speed after a certain period of time and increases its velocity again. This cycle continues as we see in the HWFET cycle.

Figure 5: Accelerator and brake pedal, gear command, vehicle desired and actual speed, vehicle distance for UDDS cycle.

Figure 6: Accelerator and brake pedal, gear command, vehicle desired and actual speed, vehicle distance for HWFET cycle.

  1. Plot the engine operating points on the engine fuel map.

    From the below figures, we can see that in the UDDS cycle engine operating points are exceeding the max curve whereas in the HWFET cycle the engine operating points are low. In both the figures we can see that there is a much higher RPM available that is not used.

    Figure 7: Engine operating points for the UDDS cycle.

Figure 8: Engine operating points for the HWFET cycle.

5. Plot motor speed, torque, and motor input power using subplots.

Here, we can see that as the motor speed increases, the motor torque is high, and as soon as the motor speed decreases the torque value gives a tiny negative value which indicates regenerative braking. As the torque approaches zero and crosses that point to negative values, the battery starts charging and we can observe it in the soc graph.


Figure 9: Motor speed, Torque, and Power for the UDDS cycle.

Figure 10: Motor speed, Torque, and Power for the HWFET cycle.

6. Plot pack voltage, current, and SoC using subplots.

In the UDDS drive cycle, we can see when the voltage is dropping current is increasing and when the current is increasing voltage is dropping because they are proportional to each other. SOC is dropping in the UDDS drive cycle because there are Stop-and-Go motions that lead to multiple on-off states of SOC, resulting in a minor charge state, whereas in the HWFET drive cycle SOC can be charged up easily due to the fact of fewer Stop-and-Go motions.

Figure 11: Voltage, current, and SOC for the UDDS cycle.

Figure 12: Voltage, current, and SOC for the HWFET cycle.

7. Plot the motor operating points on the motor input power map, with the motor max motoring and generating torque curves.

Figure 13: Engine operating points for the UDDS cycle.

Figure 14: Engine operating points for the HWFET cycle.

CONCLUSION:

Hence, we have studied how the Conventional Vehicle Model is designed and simulated by using MATLAB coding and Simulink. Also, I learned how to plot the graphs for different drive cycles.

Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.