0% found this document useful (0 votes)
179 views737 pages

Advanced MBSD - Notes

This document outlines a course on modeling hybrid electric vehicles. It introduces modeling vehicle components like engines, motors and batteries in Simulink. It discusses developing vehicle controllers and performing hardware-in-the-loop simulations. It also covers topics like real-time simulations, introduction to CAN networks and MotoTune tools.

Uploaded by

Tom Kigezi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
179 views737 pages

Advanced MBSD - Notes

This document outlines a course on modeling hybrid electric vehicles. It introduces modeling vehicle components like engines, motors and batteries in Simulink. It discusses developing vehicle controllers and performing hardware-in-the-loop simulations. It also covers topics like real-time simulations, introduction to CAN networks and MotoTune tools.

Uploaded by

Tom Kigezi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 737

Advanced Model-BasedSystem Design

Marc Herniter
EE - Rose-Hulman Institute of Technology
Zac Chambers
ME - Rose-Hulman Institute of Technology

Course Outline

Modeling a series hybrid-electric vehicle


Introduction to Simulink and SimDriveline
Models for the Driver
Driver, Battery
Battery, and Electric
Motors.
Creating and Running Drive Cycles
Models for Engines.
Developing the hybrid-electric vehicle
controller.
t ll
Measuring and predicting vehicle
performance.

1
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Course Outline

Real-Time Simulations (xPC)

Stand-Alone Simulations
Verify logical operation
Give user feel of controls and vehicle operation
Plant and controller on same target

Introduction to CAN

Message IDs
Scaling and Offset
Big Endian and Little Endian
CAN Message Database
Cabling, isolation, and termination

Course Outline

Introduction to MotoHawk MotoTune tools.


HIL Simulations (Real-Time)

Separate
p
the Plant from the Controller.
Controller on real-time target.
Plant on real-time target.
V&V Using HIL RT Model

Set up a standard set of tests for the series controller.


Run standard set of tests, record and report results, indicate faults.
Verify communications interfaces and A/D inputs and outputs
outputs.
Verify that controller can execute control algorithm in specified time
step.
Verify Communication data rates.

2
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Advanced Model-Based-System
Design
Building a Large System Model

Part 1
1

Develop a basic model for a series hybrid


electric vehicle with models for
Engine
Motor/Generator
Battery
Driver
Powertrain

Develop a controller for the vehicle

3
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Part 1 Outline
3

Powertrain
Battery Model

Almost
Final Model

4
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Electric Vehicle

We will begin by creating a model for a


rear-wheel vehicle.
In this model
model, an electric motor is coupled
directly to the rear wheels through a
differential. assume no transmission
supply DC power to inverter, which runs an AC
The specs of the vehicle are: Batteries
motor whose torque is transmitted to the wheels through
Vehicle Mass: 3600 lbs
Tire Radius: 16 inches
Rear-Differential Ratio 3.73

a differential.

aka final drive

Drive Train

10

The drive train we will create is shown


below:

5
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Longitudinal Vehicle Dynamics

11

The Longitudinal Vehicle Dynamics block


solves for the speed of the vehicle given:
An input force Fxr.
Fxr traction force at the wheels
A specified road grade (beta) in degrees.

The calculation includes aerodynamic


drag. i.e. requires a drag coefficient, velocity of car and vehicle frontal area
The block also calculates the normal force
on each wheel of the vehicle, which is
needed by the tire model.

Longitudinal Vehicle Dynamics


Input force applied
by the front tires.

12

Calculated speed of
the vehicle

based on integrating the


vehicle acceleration
Input force applied
by the rear tires.

Road grade in
percent.

Calculated normal
force on the front
tires.

needed by the tyre


model to produce
a tractive force
at the wheels

Calculated normal
force on the rear
tires.

6
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Longitudinal Vehicle Dynamics

13

The Longitudinal Vehicle Dynamics block


is located in the Simscape / SimDriveline
/ Vehicle Components library.
library
Place a block in your model and then
double-click on it to set its parameters.
We would like to understand how this
block works and what is inside this block.
Set the parameters as shown next:

14

We have set:
the mass of the vehicle
to 1000 kg.
The frontal area to
zero.
The drag coefficient to
0.

With this model, the


model reduces to a
force accelerating a
mass.

7
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Create the following model

15

Longitudinal Vehicle Dynamics

16

All we are doing applying a 100 N force to


a 1000 kg mass.
F=ma
The drag was set to zero
zero.
The road elevation was set to zero.
Thus, if we divide the applied force by the
vehicle mass and integrate, we should be
able to calculate the vehicle
vehicles
s speed.
to produce an acceleration

8
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Lecture 1 Exercise 1

17

Calculate by hand the speed of the vehicle


after 100 seconds assuming a vehicle mass
of 100 kg and an applied force of 100 N
Use basic Simulink blocks to make the same
calculation.
Compare the vehicle speed using all three
methods:
Longitudinal Vehicle Dynamics Block_______
Simulink Basic Blocks _____
Demo___________
Hand Calculations ____

Longitudinal Vehicle Dynamics

18

Next, we would like to look inside the


block. We will do this in two steps:
First look at the mask to see how parameters
are passed to the underlying model.
Second, look under the mask to see the
Simulink used to implement this block.

Right-click on the Longitudinal Dynamics


Bl k and
Block
d select
l t View
Vi
M
Mask
k from
f
the
th
menu:

9
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

19

20
Icon tab is selected.

The Icon tab is used to create port


labels and add a graphic to the block.

10
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

21
Parameters tab is selected.

Variable names used in the


underlying model.
The Parameters tab is used to create
parameters in the blocks dialog box
and associate variables to those
parameters that can be used by the
model.

22
Initialization tab is selected.

Constants used in the


underlying model.
The Initialization tab is used to create constants or make onetime calculations that can be used by the underlying model.
Here, a number of constants are created. Or example gravity
(g) is set to 9.81.

11
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

23
Documentation tab is selected.

When you click the help button,


this information will be
displayed.
This block is used to specify the documentation for the block.

24

12
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Longitudinal Vehicle Dynamics

25

We will not change the mask, so click the


Cancel button.
Next,
Next right
right-click
click on the Longitudinal
Dynamics Block and select Look Under
Mask from the menu:
You will see the underlying Simulink
model:

26

We will examine this model a little more


closely. I will make some of the gain
blocks larger so that we can see how
they are defined.

13
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

The forces on the front and


rear tires are added
together.

27

The gravitational force is subtracted from the two forces


applied by the front and rear tires.

The sine of the road grade times the gravitational force is


the component of force that decelerates the vehicle (or
accelerates the vehicle if the grade is negative).

Integrator to calculated the


vehicle speed.

28

The total force is divided by the vehicle mass and then


integrated to calculate the vehicle speed.

14
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

The drag force is proportional to velocity squared times


the vehicle drag coefficient times the vehicle frontal area.

29

The drag force goes as the velocity of


the vehicle squared.

30
This block calculates the normal force on the frontg and
rear tires. We wont go there.

15
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Subsystems Blocks and Masks

31

We kind of understand what is inside the


Longitudinal Vehicle Dynamics block.
We know how to mask a subsystem.
subsystem
We know how to look under a mask.
Many blocks in Simulink are actually
Simulink subsystems that have been
masked.

Drive Train and Solver

32

We will now create our the rear drive train and


vehicle solver for our system.
We will begin creating the system below:

16
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Initialization File

33

The model that we will be creating will contain


hundreds of blocks.
Most blocks will have numerical values.
To give these numerical values meanings, we
will define them in a MATLAB scrip file, and add
documentation to the script file.
We will define a number of MATLAB variables in
p
y the
this m-file,, use the variables to specify
values of various blocks, and then run the m-file
before every simulation.
Name the file vehicle_Init_File.m

Vehicle Init File

34

The numerical values of the blocks are


defined in the following few slides:

17
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

35

Simscape / SimDriveline / Vehicle


Components / Tire

Given the vehicle speed and normal force on a


tire, the tire model converts an input torque to a
force in the x-direction. (This force is in the
direction that accelerates or decelerates the
vehicle.) We will only specify the tire radius. All
other parameters will be left at their default
value.

36

We will onlyy
specify the
vehicle mass.
All other
parameters will
be left at their
default value.

The normal force on the


rear axle is divided by two.
One half the normal force
on the rear axle goes to
the left rear tire and the
other half goes to the right
rear tire.

18
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

37

Library Simscape / SimDriveline /


Gears / Differential

38

Library Simscape / SimDriveline /


Solver & Inertias/ Inertia

19
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

39

This drive line represents the half-shaft


that connects the rear differential to the
wheel (tire). The half-shaft is a rotating
element. Every rotating element must
have an inertia specified.

40

Library Simscape / SimDriveline / Solver


& Inertias/ Driveline Environment

You must have one driveline environment


blocked connected to a drive line in your
model. This is required by the solver.

20
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Powertrain and Vehicle Solver

41

We have now created a model of a rearwheel drive vehicle that requires a torque
input
input.
We will test the system with a motor that
outputs a constant torque.
The motor on the next slide was created
with a Constant and a Torque Actuator
(library Simscape / SimDriveline /
Sensors and Actuators.)

Constant Torque Source Model

42

Constant torque source.

21
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

43

System Testing
To verify that all of our models work are
the same, we will simulate the models for
200 seconds.
seconds
Calculate the vehicles velocity at 200
seconds and generate a plot of the
vehicles speed versus time.
Remember to remove the limitation on the
number of points a scope can display.
(Continued on next slide)

44

Lecture 1 Exercise 2
System Testing
Vehicle Terminal Velocity
Plot
Pl t off vehicle
hi l speed
d versus time.
ti

Demo___________

22
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

45

Lecture 1 Exercise 3
Most motors and engines have torque
curves.
Implement a motor that has the following
torque curve:
From 0 to 2000 rpm, the torque is constant at
200 Nm
From 2000 to 7000 rpm, the torque decreases
li
linearly
l to
t zero.

The torque is in Nm and the speed is in


rpm.

46

Lecture 1 Exercise 3
You will need to sense the motor speed and
convert it to rpm.
You can do this using a 1-D lookup table.
Plot
Pl t the
th vehicle
hi l velocity
l it and
d determine
d t
i the
th
vehicles velocity after 200 seconds.

Demo___________

23
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Model Hierarchy
Battery Model

Model Hierarchy

48

Although the model we have developed is


still fairly simple, as we add models for the
b tt
battery,
engine,
i
and
d motors,
t
the
th model
d l will
ill
become quite large and cumbersome.
We will break the model into subsystems
that represent specific vehicle
components.
Our present model has blocks that
represent the motor, the rear differential,
and body.

24
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

49

Motor

Rear Diff and


Body

Model Hierarchy

50

We will make a subsystem out of the


powertrain.
Select all of the components you wish to
place in the subsystem by dragging a
selection box around the components.
Right-click on the selected components
and select the Create Subsystem menu
selection.

25
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

51

All parts but the motor


selected because only the
powertrain model
components will go in the
subsystem.

52

Right click on one of the


selected components and
select Create Subsystem
from the menu
menu.

26
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

53

After creating the subsystem we have the top level block


diagram as shown:

Click on the text Subsystem and change the text to Rear


Diff and Body

Double-click on the Rear Diff and Body subsystem block to


open it:

54
Scope
was here.

SimDriveline
port.

Clean up the model by rearranging the


SimDriveline port and deleting the scope
(if it is in your model).
Rename the SimDriveline port as Diff
Input.

27
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

55

Rear Diff and Body Subsystem

56

This block models the physics in which we


are interested.
e would
ou d like
e to
o ccreate
ea e a sstatus
a us bus that
a
We
contains the vehicle speed, and tire
speeds.
We need to convert the tire speed from r/s
to mph.
We need to convert the vehicle speed
from m/s to mph.

28
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

57

Conversions
3600 sec 1 mile

Speed
p (mph
p ) = speed
p (m / s )
1
H
Hour
1609
meters

Linear Speed = angular speed (rad/sec)


times Tire Radius

58

The constant Tire_Radius is


defined in the init file.

Gain blocks are shown


enlarged on the next slide.

29
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

59

Rear Diff and Body Diagnostics

60

The last thing we need to do is create the


diagnostics bus for this block.
Use the bus creator part
(Simulink/Commonly Used Blocks)
Add the following signals
Passenger_Tire_Speed_mph
Driver_Tire_Speed
p
_mph
p
Vehicle_Speed_mph

30
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

61
Double-click here.

Change to 3.

Bus creator after making


change.

62

An enlargement of the changes are shown on the next slide.

31
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

63

Diagnostic Bus

64

We need to make the information available


on this diagnostic bus available outside
this block
block.
Add an Out1 port
(Simulink/Commonly Used Blocks) to
the diagram and label it as Powertrain
Diagnostics.

32
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

65

When we close this subsystem and return to the top level, we


see the following model:

66

We will be developing a new motor model, so we


can remove the simple constant torque source
that we initially used for the motor.
The top level block diagram will only contain one
subsystem after deleting the motor:

Next, we will create a model for the battery.

33
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

67

Battery Model
We will now create a battery model that
g and
calculates the batteryy terminal voltage
battery state of charge (SOC).
The inputs to the model are the two motor
currents that we will have in the vehicle.
(You can also add an input for the vehicle
hotel loads.))
The outputs of this block are the battery
voltage and a diagnostic bus that contains
battery signals of interest.

68

Battery Terminal Voltage


We will use the first order model below:
RSeries

+
IBAT
VOC

VBAT

VBAT = VOC + IBAT*RSeries

34
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Battery Terminal Voltage


RSeries

69

IBAT
VOC

VBAT

C
Currentt iis d
defined
fi d as positive
iti into
i t the
th battery.
b tt
Positive current charges the battery and
increases the battery SOC.

Battery Model

70

For now, the open circuit voltage (VOC) and the


battery series resistance (RSeries) are a constant.
As our understanding of the model increases,
we can make the battery model less ideal by:
Making VOC a function of SOC and Temperature
Making RSeries a function of the SOC and temperature.
Having a different charge and discharge series
resistances.

35
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Battery Model

71

We will now create a subsystem and


implement the equation for the battery
voltage
voltage.
Place a Subsystem block in the top level
of your model (Simulink\Commonly
Used Blocks)

72

Highlight the text Subsystem and change it to


Battery. This will name the subsystem.

36
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Double-click
here.

73

Subsystem name
changed.

Next, double-click on the subsystem to


open it.

74

This subsystem has a single input and a single output.


The output is just equal to the input.
Delete the connection between the input and output.
(Click on the wire and press the delete key.)
Duplicate In1 by
Holding down the control key and then dragging In1
to a new location.
Right-click on In1 and drag it to a new location.

37
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

75

In1 and In2 will be the motor and generator currents. The
total battery current will be the sum of these two inputs.
Click on the text In1 and change it to Motor_Current_A.
Click on the text In2 and change it to Generator_Current_A.

76

Next, we would like to form the battery current as the sum of the motor
and generator currents.
Place the sum part (Simulink/Commonly Used Blocks) in your model
and connect the two inputs as shown:

38
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

77

We would like to use the battery current in a few places


so we will add a Goto part to our model. This part is
located in the Simulink/Signal Routing library.

Double-click
here.

Double-click
D bl li k on the
th Goto
G t partt to
t change
h
the
th label.
l b l

78

Si
Since the
th text
t t A is
i highlighted,
hi hli ht d we can jjustt ttype iin a new ttag ffor th
the
Goto part.
Enter the text, Battery_Current_A and click the OK button.
You may need to change the size of the Goto part to see the label.

39
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

79

Right-click here.

Right-click on the Battery_Current_A Goto part and select Format/Hide


Name from the menus to hide the text Goto.

Battery Model

80

Next, we will calculate the battery terminal


voltage as VBAT = VOC + IBAT*RSeries
VOC a
and
d RSeries a
are
e co
constants
s a s de
defined
ed with
the init file and read from the workspace.
Create the model shown next.
Use Parts:
Constant (Simulink/Commonly Used Blocks)
Sum (Simulink/Commonly Used Blocks)
Product (Simulink/Commonly Used Blocks)
From (Simulink/Signal Routing)

40
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

81

82

Right click on all of the components and


select Format/Hide Name to clean up the
model.

41
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Battery Constants

83

The battery open circuit voltage and series


resistance are defined in the init file that
will be run before every simulation
simulation.
The numerical values for these constants
should be documented by your battery
manufacturer.
We will use typical values for a 336 V
NiMH battery pack.

84

42
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Battery State of Charge

85

The unit of an Amp-Hour is an amount of


charge in coulombs.
1 Amp = 1 coulomb / 1 second
second.
1 Hour = 3600 seconds.
1 Amp-Hour = 1 amp * 1 Hour = 3600
coulombs.

Battery State of Charge (SOC)

86

The battery amp-hour rating is a measure


of how much charge the battery stores.
The battery SOC is a measure in percent
(0% to 100%, or 0 to 1)of how much
charge is stored in the battery relative to
the full AH rating.

43
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Battery SOC

87

To calculate the SOC, we need to know


the initial SOC and then calculate how
much charge has been added or removed
from the battery.
The charge added or removed is
calculated by integrating the battery
current.
We then divide the battery charge by the
amp-hour rating of the battery to obtain the
SOC.

Battery SOC

88

The initial SOC is a constant defined in the


vehicle model init file, and read from the
workspace.
Use an integrator
to integrate the
battery current. (Simulink/Commonly
Used Blocks)
Scale the integrated current by 3600 to
convert charge to amp-hours.
amp hours. (Use the
gain block. Simulink/Commonly Used
Blocks)

44
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

89

Amps
Amp-Seconds

Amp-Hours
(Added or Removed)

Next, divide the Amp-Hours added or removed by the battery AmpHour Rating to calculate the SOC added or removed.
Use the Divide part (Simulink/Math Operations).
The battery Amp-Hour rating is a constant defined in the init file.

90

We could also
do this with a
gain block.

SOC
(Added or
Removed)

Next,
N t we add
dd the
th SOC added
dd d or removed
d to
t the
th b
battery
tt
initial SOC to calculate the batterys current SOC.
Use the Sum part (Simulink/Commonly Used Blocks).
The battery initial SOC is a constant defined in the init file.

45
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

91

The battery SOC will not be used by other components in


the model but it will be used by our supervisory controller.
We do not need an output port for this parameter.
We will add a Goto port to this parameter.
Later, we will add this signal to our status bus.

92

We will clean up the model slightly.


The entire model is shown on the next slide.

46
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

93

Battery Diagnostics

94

The last thing we need to do is create the


battery diagnostics bus.
Use the bus creator part
(Simulink/Commonly Used Blocks)
Add the following signals
Battery Voltage
Battery
y Current
Battery SOC

47
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

95
Double-click here.

Change to 3.

Bus creator after making


change.

Complete the model as shown below.

96

48
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Initialization File Changes

97

When we go to the top level block diagram,


th b
the
battery
tt
subsystem
b t
should
h ld show
h
the
th
inputs and outputs that we defined.

Top Level Block Diagram

98

The top level block diagram now contains


two blocks.

49
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

99

Lecture 1 Exercise 4
Show your completed Battery and Rear Diff
and Body subsystems.
Run a simulation that shows that your
Battery:
Produces the correct output voltage for a given
input current.
Calculates the correct battery state of charge for
a given
i
iinputt current.
t
Demo___________

50
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Advanced Model-Based-System
Design
Lecture 2: Motor Model and
Display Subsystem

Electric Motor Model

Create an ideal motor that converts


electrical power to mechanical power with
100 percent efficiency.
efficiency
This model will work for both regen and
motoring modes. The conversion equation
is:

I MotorVBattery = Motor Motor

1
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Electric Motor Model


The battery voltage is always positive.
When the motor torque is in the same
direction as the motor shaft velocity, the
motor accelerates the vehicle. (Motoring
mode.)
In this mode, the motor will draw current
f
from
the
h b
battery. The
Th motor current
should be negative to discharge the
battery.
I
V
=

Motor

Battery

Motor

Motor

Electric Motor Model

When the motor torque is in the opposite


di ti off th
direction
the motor
t shaft
h ft velocity,
l it th
the
motor is decelerating the vehicle.
(Regenerative braking mode).
In this mode, the motor will force current
into the battery. The motor current
should be positive to charge the battery.

I MotorVBattery = Motor Motor

2
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Electric Motor Model

This motor model has a flat torque curve.


The motor has the same available torque
at any rpm.
rpm
The motor is 100% efficient.
This is a simple model to get started. We
can always make the model more
complicated as our understanding of the
system increases.

Electric Motor Model

Model Inputs (Simulink):


Battery Voltage
Torque Request (-1 to 1);

Model
M d lO
Outputs (Simulink
(Si li k Si
Signals):
l )
Motor Current
Motor Diagnostics
Motor rpm
Motor Torque
Motor Current

Model
M d lO
Outputs
t t (Si
(SimDriveline):
D i li )
Motor Torque

3
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Place a new subsystem part (Simulink/Commonly


Used Blocks) in your circuit and change the name
to Electric_Motor.

Double-click on the subsystem block to open it:

Motor Model

We have two Simulink inputs and two


Simulink outputs.
Delete the line between the input
p and output
p
ports.
Duplicate the input and output ports
Rename the ports:

Battery_Voltage
Torque_Request
M t C
Motor_Current
t
Motor_Diagnostics

4
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

We also have one SimDriveline connection port


(SimDriveline/Utilities).

Place this part in your model and rename it as


Motor_Port.

10

We now have all of the input and output ports for


our motor model. All that is left is for us to build
the actual model.

5
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

11

We will assume that the motor output torque can


range from 0 to the maximum output torque.
The maximum torque is a constant defined in the
init file.
Remember that the torque request signal is a
number from -1 to 1.
The Torque Actuator part is located in the
SimDriveline/Sensors & Actuators library.
The inertia part is located in the
SimDriveline/Solver & Inertias library.

12

The inertia part specifies the inertia for all rotating parts of the motor. We
will define this inertia in the init file. Double-click on the inertia part and
change the value to Motor_Inertia.

6
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

13

We should find the inertia from the motor specifications or


measure the inertia. Once a value is obtained, we will specify
it in the init file:

Next, we can calculate the motor current as

I Motor =

Motor Motor
VBattery

Use a Motion Sensor (SimDriveline/Sensors &


Actuators) to measure the motor shaft speed in r/s.

14

7
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Motor Diagnostics

15

The last thing we need to do is create the


motor diagnostics bus.
Use the BUS Creator part
(Simulink/Commonly Used Blocks)
Add the following signals
Motor_rpm
Motor_torque
q _Nm
Motor_Current_A

Motor Diagnostics

16

The Motor torque and motor current are


already available.
Motor speed is available
available, but is in radians
per second. To convert r/s to rpm, multiply
by 60/(2*pi).
To change the number of bus inputs,
double-click on the bus creator part and
change the number from 2 to 3.

8
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

17
Double-click here.

Change to 3.

Bus creator after making


change.

18

Complete the model as shown below.

9
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Vehicle Model

19

When you close the motor model, the


motor model subsystem should have the
input and outputs as shown:

Top Level Block Diagram

20

10
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

21

Vehicle System
We now have enough subsystem
components to create a simple vehicle.
We will create the beginning of a series
hybrid electric vehicle by using
The electric motor drive the rear diff.
The electric motor draw power from the
battery.

Connect the blocks as shown:

22

The motor port is not in a convenient location to connect it to the rear


diff. We can fix this problem by:
Double-clicking on the Electric_Motor subsystem to open it.
Double-clicking on the Motor_Port part to open its dialog box.
You will see the dialog box shown next:

11
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

23
Double-click here.

Change this to right.

After making this change, we can easily connect the motor and rear diff.

24

12
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Vehicle System Diagnostic Bus

25

Before continuing, we would like to create


the system diagnostic bus that contains
every diagnostic signal in the model.
Each subsystem block already has its own
diagnostic bus.
Creating the vehicle system diagnostic bus
is just a matter of merging the individual
busses using the bus creator part
(Simulink/Commonly Used Blocks).

26

First, use the Goto part (Simulink/Signal Routing)


to make connections to the subsystem busses.

13
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

27

Create the Vehicle System Diagnostic Bus using the


From part (Simulink/Signal Routing) and the Bus
Creator part (Simulink/Commonly Used Blocks)

28

Top Level Block Diagram

14
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

29

Vehicle Driver Block


This block allows us to follow a drive cycle.
The input
p to this block is the vehicles p
present
speed.
The output is a torque request (-1 to +1) that
tells the car to speed up or slow down.
Note that the driver block is not part of the
physical system. It is for simulation purposes
only and generates a torque request that would
normally come from the vehicles accelerator
and brake pedals.

Vehicle Driver Block

30

This is a classic feedback system where:


we compare the desired speed to the actual
speed
create an error signal
amplify the error signal,
pass that signal to the plant (which is our
vehicle).

The desired speed will be stored in a


variable.

15
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Vehicle Driver Block

31

Create a subsystem with one input and


one output by placing the Subsystem
bl k iin your ttop llevell bl
block
block
k di
diagram.
The input to this block will be the Vehicle
System Diagnostics bus which will contain
the speed of the vehicle.
Rename the subsystem Driver
Driver.

Driver Block

32

Open the driver block.


Rename the input port to
Vehicle
Vehicle_System_Diagnostics.
System Diagnostics
Use the Bus Selector part
(Simulink/Commonly Used Blocks) to
extract the Vehicle_Speed_mph signal.

16
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Driver Block

33

We will now create the feedback system


that compares the actual vehicle speed to
the desired speed and creates an error
signal.
For the moment, the desired speed will be
a constant of 60 mph.

34

Driver Block
The output of the error amplifier
determines the torque.
Depending on the gain and how far off the
speed is, the torque signal can be from
(big number) to +(big number).
We would like to limit the torque signal to
1.
Use the Saturation part located in the
Simulink/Commonly Used Blocks
library.

17
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

A driver torque request of -1 means full braking.


A driver torque request of +1 means full
acceleration.
Specify the limits of the saturation part as +1
and -1.
1
Rename the output terminal to Driver Torque
Request.

35

36

The saturation limits are specified as


shown:

18
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

37

Driver Block
The top-level view of the driver block looks
as shown:

Top Level Block Diagram

38

19
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Display Subsystem

39

We are now ready to run a simulation.


The current driver block uses a constant
for the vehicle speed
speed, so the vehicle
should accelerate up to a constant speed
of 60 mph and hold the speed constant.
For diagnostic purposes, we may want to
create several plots to display various
signals in different configurations.
We will also use this subsystem to log
data.

Display and Logging Subsystem

40

We will create a subsystem with a single


input (the vehicle system diagnostic bus)
and no outputs:

We will show two methods of creating a


display The first method will use a Scope
display.
block. The seconds will be shown later
and use the Signal and Scope Manager.

20
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Display Subsystem

41

Inside the display subsystem, we will use


the Bus Selector part
(Simulink/Commonly Used Blocks) and
the Scope (Simulink/Commonly Used
Blocks) to create a display of the
important signals.

Display Subsystem

42

Creating the previous model took several


steps.
When you place the bus selector and
scope parts, the two parts do not have the
desired number of inputs and outputs:

21
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Creating the Display

43

Double-click on the Bus Selector part

44

Creating the Display


Remove the signals ??? Signal1 and ???
Signal2.
Click on the +
signs in the
Signals in the
Bus window
to view the
available
il bl
signals.

22
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

45

Creating the Display


Select the signal you want to extract and
then click the Select button.
Select the signals in the order you want
them to appear on the bus extractor.

46

Creating the Display


Click the OK button and resize the Bus
Selector part.

Next, double-click on the Scope part:


Double-click here.

23
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

47

Click on this button.

Click on the Parameters button

Change this to 5.

48

Click on the Data history


Tab.

Click here to uncheck this


box. Deselecting this box
will display all data in our
simulation.

24
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

49

Box unchecked.

Click the OK Button.

Close the scope


window and return
to the model.
Resize the scope
part and connect
the signals.

50

25
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Running a Simulation

51

We are now ready to set up and run a


simulation.
Select Simulation and then Configuration
P
Parameters
t
f
from
the
th Simulink
Si li k menus.
Specify the Stop time as 60 (seconds).
Specify ode23tb as the Solver.

52

Set to 60.

Select ode23tb

26
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Simulation Diagnostics

53

We would like to enable some diagnostics


to help us identify potential errors or
problems in our model
model.
Select Diagnostics and specify Algebraic
Loops to generate an error.

Set to error.

54

Diagnostics selected.

Set to error.

These selections will highlight an algebraic


if one is detected.

27
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Running the Simulation

55

Click the OK button.


Select Simulation and then Start from the
Simulink menus or click the play button
button.
It appears that we have an error.

Algebraic Loop

56

The top-level block diagram shows that


there is an algebraic loop formed between
two of our subsystems
subsystems. The Algebraic loop
is highlighted in red:

28
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Algebraic Loop

57

If you look inside the Electric_Motor Subsystem, you


will see the offending components in that subsystem:

In order for Simulink to calculate the motor current, it


needs to know the battery voltage.

Algebraic Loop

58

If you look inside the Battery Subsystem, you will see


the offending components in that subsystem:

In order to calculate the battery voltage, Simulink


needs to know the motor current?

29
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Algebraic Loop The Loop

59

In the motor model, to calculate the motor


current, Simulink needs to know the
battery voltage.
In the battery model, to calculate the
battery voltage, Simulink needs to know
the motor current?
Thus, Simulink does not have the
information it needs to make this
calculation.

Aglebraic Loop

60

We can break this loop by adding a


Memory part
(Simulink/Discrete)
to
either the Battery model or the motor
model.
We will add it to the Electric_
Electric Motor model
as shown:

30
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

61

The memory block is a one time step delay. In the division


calculation, Simulink will use the battery voltage from the
previous time step. Thus the battery voltage is know, and
Simulink can calculate the motor current.
Rerun the simulation and see if this fixes the problem.

62

The problem is fixed, but we get another


error.

Click on the link to jump to the error.

31
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

63

According to the error


message, this signal must
be Infinite, or Nan.

Error

64

How can the battery current become


Infinite?
Looking at the motor model,
model we calculate
the motor current (which becomes the
battery current) as the requested motor
power divided by the battery voltage.

32
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

65

For
For the first time step
step, what is the input to the Divide block?
The Memory block outputs the value from the previous time step.
For the first time step, what is the previous value.
If the block outputs a 0, we get a divide by zero, and the Divide block either outputs
Inf or Nan.
We need to move the Memory block somewhere else to eliminate the algebraic loop.

66

Memory block removed.

33
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

67

Memory block added to the


battery model.

Rerun the Simulation

68

34
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

69

Lecture 2 Exercise 1
The Simulation Runs!
There appear to be some problems with
our physical model
model.
Demonstrate the operation of your model.
The Speed Approaches 60 mph, but there
are problems in the rpm signal.

Demo___________

Advanced Model-Based-System
Design
Debugging the Model

35
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

71

Debugging the Model


The previous slide had a problem with the
motor rpm, battery voltage, and battery
current:

72
Vehicle speed
OK.

Motor rpm spike.


spike

36
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Model Debugging

73

With a direct drive system, how can the


vehicle speed follow a different curve than
the motor speed?
The wheels must be skidding.
We will verify this with another plot which
we will add to the Display subsystem.

74

If there is no skidding, the tire speeds should be the same as the vehicle
speed.
Run the simulation

37
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

75

Zoom in here.

76

Tire speed
different than
vehicle speed.

Tire speed same


as vehicle speed.

38
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Debugging the Model

77

Lets look at the torque request coming


from the driver request block.
Open the driver block and add a scope to
the driver torque request signal.

Rerun the simulation and view the scope.

78

Max torque (1).

Tire skidding
happens here.

Vehicle cruising
g
at 60 mph here.

39
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

79

Model Debugging
It looks like the tire skidding occurs when
we have a large change in the driver
torque request.
request
We can fix this by adding a Rate Limiter
to the driver torque request.
(Simulink/Discontinuities)

80

The rate limiter places a limit on how fast


a signal can increase or decrease.
The default rising and falling rates are
1/second.
We will use the default values.
Since the driver torque request signal is
between -1 and +1
Our motor will go from no torque (0)
to full torque (1) in one second.
Our motor will go from full forward
torque (1) to full reverse torque (-1) in
two seconds.
Run a simulation with the rate limiter.

40
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

81
Things are
worse!

82

Motor rpm going


negative.

What do you
notice about
this?

41
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Model Debugging

83

Lets remove the rate limiter since it made


things worse.
Let
Lets
s plot the motor torque using a scope.
scope

Rate limiter
removed.

84

Scope added.

42
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

85

Tire skidding
h
happens
h
here.
Zoom in on this
section.

86

Traces in nature
are very rarely
straight. Usually
things are curved.
Zoom in some
more.

43
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

87

Simulation point.
Simulation p
point.

Looks like a
straight
t i ht liline
connecting two
simulation points.

Model Debugging

88

Another hint comes from the MATLAB


command window.

What is this?

44
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

89

Warning: Using a default value of 1.2 for maximum


step size. The simulation step size will be equal
to or less than this value.
You can disable this diagnostic by setting
'Automatic solver parameter selection' diagnostic
g
p
page
g of
to 'none' in the Diagnostics
the configuration parameters dialog.

It looks like Simulink can take a step size as large as 1.2 seconds between
simulation points.
This is a large time step for our simulation. From the previous slides, it looked
like we had a step
p of 0.35 seconds that was too large.
g
Lets try a smaller step size.
Select Simulation and then Configuration Parameters from the Simulink
menus.
Change the Max Step size from Auto to 0.01 (seconds)

90

Changed to 0.01.

This parameter specifies that the maximum time


between simulation points will be 0
0.01
01 seconds
seconds. (It
can be smaller if necessary.)
Rerun the simulation with this change.

45
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

91

Model Debugging

92

Everything looks great.


Our error was numerical rather than
something nonphysical or too ideal in our
model.
Later we will have problems because our
system is too ideal, such as torque spikes
and negative battery voltages.

46
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

93

Lecture 2 Exercise 2
We would like our vehicle to be able to
accelerate from 0 to 60 mph in 9 seconds.
Determine:
Required motor torque________ (Nm)
Required battery current __________ (A)
The peak motor power __________ (kW)

How does our model breakdown if the


motor current is too large?
Demo___________

47
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Advanced Model-Based-System
Design
Lecture 2: Drive Cycles and
Advanced Models

Following a Drive Cycle


Next, we will have the vehicle follow a
simple drive cycle.
We
W will
ill use a partt called
ll d From
F
Workspace (Simulink/Sources) to read in a
2-D variable.
Using the init file, define a variable called
Sch_Cycle.
y
This is two dimensional matrix.
The first column contains the time values
and the second column contains the
speed values:

1
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Following a Drive Cycle

Sch_Cycle =

0
10
15
20
30
40
55
70
80
90
100
120

0
0
30
30
40
40
70
70
30
30
0
0

>> Your init file should look like the following:

Following a Drive Cycle

2
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Following a Drive Cycle

Run the init file to load the variables into


memory.
In the Driver block
block, add the From
Workspace part which is located in the
Simulink/Sources library.

Constant block replaced


p
with From Workspace
block.

Double-click on
the From
Workspace block
and modify as
shown:
Changed to Sch_Cycle.

3
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Following a Drive Cycle

Click the OK button to save the changes.


Set the simulation time to run for 120
seconds
seconds.
Run the simulation and view the plot:

4
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Following a Drive Cycle

We see that the vehicle does follow the


specified profile.
S
Since
ce there
eea
are
e no
o mechanical
ec a ca b
brakes,
a es, the
e
motor is responsible for slowing the
vehicle. Regen braking is working.
We see the battery discharge as the
vehicle accelerates.
We see the battery charge as the vehicle
decelerates.

Following a Drive Cycle

10

One question we have is how close does


the vehicle follow the drive cycle.
e need
eed to
o add a d
diagnostic
ag os c ou
output
pu to
o the
e
We
driver block to display the Sch_Cycle
signal.
We need to add this signal to the Vehicle
System Diagnostic bus.
We need to display this signal on the
same plot as the vehicle speed.

5
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Modified Driver Block

11

Top Level Block Diagram

12

This part added.

6
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

13

Top Level Vehicle System


Diagnostic Bus

This part added.

Display Modifications

14

When we run the simulation, we see that the


vehicle has a little trouble following the drive
cycle.

7
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

15

Advanced Model-Based-System
Design
Reading Drive Cycles in Excel

8
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Drive Cycles

17

Drive Cycles are available from several


sources and in several different formats.
We will use Excel to store our drive cycles
since Excel can be used to easily modify
the cycles.

18

Drive Cycles
Create a directory called Drive_Cycles in
your current working directory.
We will keep all off our drive cycles in this
directory.
Copy the drive cycles that were provided
for this class to this directory

9
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

19

AVL Drive Cycle


The Sch_Cycle tab contains the time
and speed coordinates for the cycle.

Sch Cycle Tab.

Time
(seconds)

Speed
(mph)

Drive Cycles

20

The speed in the Sch_Cycle worksheet is


in mph.
For the moment
moment, all we will use is the
Sch_Cycle information for vehicle speed.
The Excel file contains information for the
brake pedal, gear selection, grade, and
key on.

10
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Drive Cycles

21

As your model progresses, you may use


some of the other signals.
For now
now, we will read in all of the
information, but we will only use the
vehicle speed information.
We will place the following code in our init
file to read in the excel drive cycle file and
store it in MATLAB variables.

22

%Read a drive cycle contained in an excel spreadsheet.


if (exist('fn') == 0)|(fn==0)
fn='Drive_Cycles\sch_fu505.xls';
else
fn=['Drive_Cycles\',fn];
end
[fn,pn]=uigetfile('Drive_Cycles\sch*.xls','Specify an Excel Schedule File Name',fn);

name=[pn,fn];
Sch_Cycle = xlsread(name, 'Sch Cycle');
Sch_Brake_on = xlsread(name, 'Sch Brake On');
Sch Gear on = xlsread(name,
Sch_Gear_on
xlsread(name 'Sch
Sch Gear On
On');
);
Sch_Grade = xlsread(name, 'Sch Grade');
Sch_Key_on = xlsread(name, 'Sch Key On');
%Convert the grade from percent to radians.
Sch_Grade(:,2)=atan(Sch_Grade(:,2)/100);

11
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

23

if (exist('fn') == 0)|(fn==0)
fn='Drive_Cycles\sch_fu505.xls';
else
fn=['Drive_Cycles\',fn];
end

If variable fn exists (the file name was


previous selected), use the old name as the
default file name.

If variable fn has not yet been defined, use


file name sch_fu505.xls as the default file
name.

24

[fn,pn]=uigetfile('Drive_Cycles\sch*.xls','Specify an Excel
Schedule File Name',fn);
name=[pn,fn];

Open a Windows style file name selection


box. This function returns the file name and
the path.

Concatenate the path and file name into one


string.

12
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

25

Sch_Cycle = xlsread(name, 'Sch Cycle');


Sch_Brake_on = xlsread(name, 'Sch Brake On');
Sch_Gear_on = xlsread(name,'Sch Gear On');
Sch_Grade = xlsread(name, 'Sch Grade');
Sch_Key_on = xlsread(name, 'Sch Key On');

Read individual worksheets into separate


variables.

Drive Cycles

26

Run this section of code.


Select the AVL drive cycle.
Display
Di l contents
t t off variable
i bl S
Sch_Cycle.
h C l

13
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

27

28

Contents of Variable Sch_Cycle


>> Sch_Cycle
Sch_Cycle =
0
5
15
35
37
57
72
92
107
127
148
167
180
>>

0
0
25
25
18
18
46
46
56
56
32
0
0

14
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

29

Drive Cycles
If you remember, the Driver block uses the
contents of variable Sch_Cycle as the
drive cycle.
cycle
We can now easily run predefined drive
cycles.

Drive Cycles

30

Lets plot the drive cycles to see what they


look like.
Use the code below to plot the drive cycle
cycle.

plot(Sch_Cycle(:,1),Sch_Cycle(:,2));
xlabel('Time(s)');
l b l('Ti ( )')
ylabel('Speed (mph)');

15
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

31

AVL Drive Cycle

32

FU505 Drive Cycle

16
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

33

Consumer Reports City

Drive Cycles

34

Each cycle runs for a different length of


time.
We would like to automatically specify that
a simulation runs for the length of the
cycle.
Use the command below to obtain the last
time point in the cycle:
Sch_Cycle(end,1);

17
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Drive Cycles

35

This command can be used as the stop


time in the Configuration Parameters
dialog box
box.
Select Simulation and then
Configuration Parameters from the
menus, and enter the command as shown:

36
The last time point in the drive
cycle will be used as the ending
time for the simulation.

18
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Automatically Run Init File

37

We want to run the init file every time we


run our model.
We can do this in Simulink using a Call
Back function.
Open the model and right-click on some
empty space in the model and select
Model Properties from the menu:

38

In the dialog box that


appears, select the
Callbacks tab and
select InitFcn:

19
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

39

Enter the name of


the initialization
file here and then
click the OK
button

With this setting, our init file will run each


time we run a simulation.

Running a Simulation

40

When we run a simulation, it will


automatically run the init file which will
Define all of our model parameters
parameters.
Read in a drive cycle.

Run a simulation and make sure that


everything works

20
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

AVL Drive Cycle Results

FU505 Drive Cycle Results

41

42

21
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Lecture 3 Exercise 1

43

You may notice that it takes a long time to


read Excel files.
To shorten the time it takes to run the
initialization file, we would like to store and
read drive cycles as MATLAB .mat files.
Part 1
Write an .m file that asks the user to select an
excel drive cycle, reads the variables from
that file, and saves the variables in a .mat file
with the same name.

Lecture 3 Exercise 1

44

Part 1: Write an .m file that:


Clears all variables from the MATLAB workspace.
Asks the user to select an excel drive cycle and reads
information in the file and stores the data with the
same names as used when reading drive cycles with
Excel.
Clears variables fn and pn from the workspace.
Saves the drive cycle variables in a .mat file with the
p with a .mat
same name as the excel file except
extension..

22
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

45

Lecture 3 Exercise 1
Part 2:
Create a new init file that is the same as the original
init file except that the drive cycle is read as a .mat file
rather
th th
than an excell fil
file.
Using drive cycle sch_fu505 ten times.xls, compare
the time it takes MATLAB to complete each of your
init files.
Use the tic and toc functions to see how long it haves
to run each script file.
Demo___________

Vehicle Modeling

46

At this point we have


An electric vehicle model.
The structure to make a more complicated,
complicated
detailed, and accurate model.

We could head off in several directions


Add an engine.
Charge the battery.
Other

23
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Model Based Design

47

The important thing is to add detail slowly


and verify the accuracy of our models as
we add detail
detail.
We will do the following:
Add detail to the motor model.
Add detail to the battery model.

Electric Motor

48

Add a torque curve.


Make the motor less than 100% efficient.

24
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Torque Curve

49

Obtain the torque versus rpm curve for


your motor from the manufacturer or use
measured data
data.
Place the data in an excel file.
Read the excel files into the MATLAB
workspace.
Use a table lookup to use the data in your
model.

Vendor Supplied Torque Curve


Rpm

50

Torque (Nm)

370

1200

361

1400

319

1600

260

1700

242

2000

190

2200

170

2400

128

2600

120

3000

79

3500

60

4000

51

4500

40

5000

30

6000

10

7000

25
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

51

Component Data
We will place this data in an excel file and
read it using the xlsread function.
We will place all component data files in a
directory called Component Data.

Motor rpm Data

52

We will place the rpm data and the torque


data in separate worksheets.
This is not required.
required It just makes it easier
to split up the two parts of the table.
The two worksheets are shown next:

26
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

53

Rpm data. This worksheet was named Max_Torque_rpm_Axis.

Torque data. This worksheet was named Max_Torque.

We will read this data using the xlsread function in the init file.
Add the following lines to you init file.

54
Motor_Name = 'Fantasy Motor_Data.xls';
Motor_PN = ['Component Data\',Motor_Name];
motor_max_torque = xlsread(Motor_PN,'Max_Torque');
motor_max_torque_rpm_axis =xlsread(Motor_PN,'Max_Torque_rpm_Axis');

You can plot the torque curve using the command


plot(motor_max_torque_rpm_axis, motor_max_torque)

Generate this plot


to verify that you
can read your
excel file.

27
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Motor Model

55

Now that we have our motor torque curve


available as workspace variables, we can
use that data in our model
model.
We will use a 1-D look up table.
Our motor model presently has a constant
torque curve:

56

Replace this constant with a lookup table


(Simulink/Lookup Tables).

28
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

57

Double-click on the lookup table and specify


the parameters as shown:

58

The output of the part (Table data) is the motor torque.


The input to this part is the motor rpm. We already
calculate the rpm in the model, so the connection is easy to
make.

29
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

59

60

Lecture 3 Exercise 2
The motor model has a problem in that the
effective torque we request changes as the
available torque goes down. The effectively
changes the loop gain of our system and the
motor rpm changes.
We want to modify the model so that the torque
request is always the maximum motor torque
times the driver torque request. If the available
motor torque is less than the torque request
request,
then the available motor torque is used. If the
available motor torque is greater than the torque
request, then the torque requested is used.
Demo___________

30
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Advanced Model-Based-System
Design
Lecture 4: Advanced Models

Vehicle Modeling

At this point we have


An electric vehicle model.
The structure to make a more complicated,
complicated
detailed, and accurate model.

We could head off in several directions


Add an engine.
Charge the battery.
Other

1
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Model Based Design

The important thing is to add detail slowly


and verify the accuracy of our models as
we add detail
detail.
We will do the following:
Add detail to the motor model.
Add detail to the battery model.

Electric Motor

Add a torque curve.


Make the motor less than 100% efficient.

2
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Torque Curve

Obtain the torque versus rpm curve for


your motor from the manufacturer or use
measured data
data.
Place the data in an excel file.
Read the excel files into the MATLAB
workspace.
Use a table lookup to use the data in your
model.

Vendor Supplied Torque Curve


Rpm

Torque (Nm)

370

1200

361

1400

319

1600

260

1700

242

2000

190

2200

170

2400

128

2600

120

3000

79

3500

60

4000

51

4500

40

5000

30

6000

10

7000

3
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Component Data
We will place this data in an excel file and
read it using the xlsread function.
We will place all component data files in a
directory called Component Data.

Motor rpm Data

We will place the rpm data and the torque


data in separate worksheets.
This is not required.
required It just makes it easier
to split up the two parts of the table.
The two worksheets are shown next:

4
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Rpm data. This worksheet was named Max_Torque_rpm_Axis.

Torque data. This worksheet was named Max_Torque.

We will read this data using the xlsread function in the init file.
Add the following lines to you init file.

10
Motor_Name = 'Fantasy Motor_Data.xls';
Motor_PN = ['Component Data\',Motor_Name];
motor_max_torque = xlsread(Motor_PN,'Max_Torque');
motor_max_torque_rpm_axis =xlsread(Motor_PN,'Max_Torque_rpm_Axis');

You can plot the torque curve using the command


plot(motor_max_torque_rpm_axis, motor_max_torque)

Generate this plot


to verify that you
can read your
excel file.

5
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Motor Model

11

Now that we have our motor torque curve


available as workspace variables, we can
use that data in our model
model.
We will use a 1-D look up table.
Our motor model presently has a constant
torque curve:

12

Replace this constant with a lookup table


(Simulink/Lookup Tables).
Tables)

6
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

13

Double-click on the lookup table and specify


the parameters as shown:

14

The output of the part (Table data) is the motor torque.


The input to this part is the motor rpm. We already
calculate the rpm in the model, so the connection is easy to
make.

7
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

15

16

Lecture 4 Exercise 1
The motor model has a problem in that the
effective torque we request changes as the
available torque goes down. The effectively
changes the loop gain of our system and the
motor rpm changes.
We want to modify the model so that the torque
request is always the maximum motor torque
times the driver torque request. If the available
motor torque is less than the torque request
request,
then the available motor torque is used. If the
available motor torque is greater than the torque
request, then the torque requested is used.
Demo___________

8
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Lecture 4 Exercise 2

17

This motor has other problems:


What happens if the motor rpm is negative? Surely
we want to use the vehicle in reverse.
What happens if the motor rpm exceeds the max rpm
specified in the table?

Fix the model so that the model works for


negative values of rpm and that nothing
catastrophic happens if the input rpm exceeds
the ma
max specified in the data file
file.

You are not allowed to modify the data in


Demo___________
the Excel file.

Motor Efficiency

18

Next we will add efficiency to the motor.


When acting as a motor, the mechanical power
p is less than the electrical p
power input.
p
output
When acting as a generator, the electrical power
output is less than the mechanical power input.
In our implementation, the output torque will be
specified, and the corresponding electrical
power will be calculated including
p
g efficiency.
y
We will start with a constant efficiency of 85%.

9
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

19

20

The part of the model that was modified to


add the efficiency is shown enlarged below.

10
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Model Verification

21

To see that this model behaves the way


we think it should, we need to add a few
diagnostic signals
signals.
Create signals for the mechanical and
electrical power. These two signals should
be related by the efficiency.
Add the electrical and mechanical power
signals to the diagnostic bus.
Modify the model as shown.

22

11
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Model Verification

23

Run a simulation and plot


Vehicle Speed
Mechanical Power
Electrical Power

Verify that when


The vehicle speeds up, the mechanical power
is less than the electrical power.
When the vehicle slows down, the electrical
power is less than the mechanical power.
We will create this plot using the signal and
scope manager.

Scope

24

We need to create a viewer and attach the


signals we wish to display.
e want
a the
e vehicle
e c e speed to
o be displayed
d sp ayed
We
on the top plot.
Open the driver block and right click on the
Desired_Vehicle_Speed signal line:
Right click on the Desired_rpm signal line.

12
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Scope

25

Scope

26

Select Create & Connect Viewer,


Simulink, and then Scope from the
menus:

13
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Scope

27

A scope will be created with a single plot:

Scope

28

Now we need to display the actual rpm on


the same scope and on the same axis.
Right click on the Vehicle_Speed_mph
Vehicle Speed mph
signal line:

14
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Scope

29

Select Connect to Existing Viewer, then


select Scope, then select Axis1.

Scope

30

You will notice little glasses on your


model.
These glasses indicate that the associated
signal is being display on a scope.

15
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Scope

31

If you hover the mouse pointer over the


glasses, a box will appear and display the
name of the viewer and the axis to which
the signal is connected:

In this case, the name of the viewer is


Scope.

Scope

32

Next, we want to display two plots on the


scope window.
Left-click
Left click on the Parameters
button in
the scope menus:

Click here.

16
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

33

Scope

Change this to 2 to
display 2 plots in the
Scope window.

Scope

34

Typically a scope will only display the last


7500 points of a simulation.
We are not sure how many points our
simulation will have, so we will change this
setting.
Select the History tab and uncheck the
option as shown.

17
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Scope

35
History tab selected.

Option not selected.

Click OK when done.

Scope

36

Next, we would like to name this scope.


From the Simulink menus, select Tools
and then Signal and Scope Manager:

18
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Signal & Scope Manager

37

The Signal and Scope Manager allows us to:


Rename scopes
Change the number of plots on a scope
scope.
Add and delete signals displayed on a scope.
Delete Scopes

Right-click on the text Scope to see the options


you have in manipulating scopes

38

Right-click here!

Open parameters opens the scope window.


Edit signal connects allows you to select
signals to display on the scope.

19
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Signals & Scope Manager

39

We just want to rename the scope, so


select Rename and change the name to
Power
Power and Efficiency.
Efficiency
This is all we
will do wit the
Signal and
Scope
Manager, so
click the Close
button.

40

Scope

Next, we want to display the electrical and mechanical


power signals from the motor.
p the Electric_Motor subsystem.
y
Open
Right-click on the Motor_Mechanical_Power signal:

Right-click here.

20
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Scope

41

Select Connect to Existing Viewer, then


Power and Efficency, and then Axis 2:

Scope

42

The Motor_Mechanical_Power will now be


displayed on the second plot in the Power
and Efficiency viewer
viewer.
Repeat the process to display the
Electrical power on the same axis as the
mechanical power.
Run the FU505 drive cycle and display the
results.

21
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

43

44

During accel, mechanical


power input is greater than
electrical power output
output.

During accel, electrical


power input is greater than
mechanical power output.

22
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Lecture 4 Exercise 3

45

In our plot, we see that the label for the


electrical and mechanical power are not
displayed in the Scope window
window.
Fix this problem.

Demo___________

Model Verification

46

The model appears to behave correctly for


motoring and regen.
Next,
Next instead of having a constant
efficiency, we will make the efficiency a
function of motor rpm and motor current.
We will do this with a 2-D look up table.
First, obtain the efficiency data from the
manufacturer or measure the efficiency.

23
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

47

Manufacturer Supplied Efficiency Data


Current (Amps)
0

r
p
m

50

94

138

182

226

270

314

358

402

0.86

0.91

0.88

0.85

0.82

0.79

0.76

0.74

0.72

0.69
0.69

500

0.86

0.91

0.88

0.85

0.82

0.79

0.76

0.74

0.72

1000

0.82

0.92

0.91

0.89

0.88

0.86

0.84

0.83

0.81

0.80

1500

0.78

0.92

0.92

0.91

0.90

0.89

0.87

0.86

0.85

0.84

2000

0.78

0.92

0.92

0.91

0.90

0.89

0.87

0.86

0.85

0.84

2500

0.78

0.92

0.92

0.91

0.90

0.89

0.87

0.86

0.85

0.84

3000

0.78

0.92

0.92

0.91

0.90

0.89

0.87

0.86

0.85

0.84

3500

0.78

0.92

0.92

0.91

0.90

0.89

0.87

0.86

0.85

0.84

4000

0.78

0.92

0.92

0.91

0.90

0.89

0.87

0.86

0.85

0.84

4500

0.78

0.92

0.92

0.91

0.90

0.89

0.87

0.86

0.85

0.84

5000

0.78

0.92

0.92

0.91

0.90

0.89

0.87

0.86

0.85

0.84

5500

0.78

0.92

0.92

0.91

0.90

0.89

0.87

0.86

0.85

0.84

6000

0.78

0.92

0.92

0.91

0.90

0.89

0.87

0.86

0.85

0.84

6500

0.78

0.92

0.92

0.91

0.90

0.89

0.87

0.86

0.85

0.84

7000

0.78

0.92

0.92

0.91

0.90

0.89

0.87

0.86

0.85

0.84

7500

0.78

0.92

0.92

0.91

0.90

0.89

0.87

0.86

0.85

0.84

8000

0.74

0.92

0.92

0.92

0.91

0.90

0.89

0.88

0.87

0.86

8500

0.71

0.92

0.92

0.92

0.91

0.90

0.90

0.89

0.88

0.87

9000

0.68

0.92

0.92

0.92

0.91

0.91

0.90

0.89

0.88

0.88

9500

0.65

0.91

0.92

0.92

0.91

0.91

0.90

0.89

0.89

0.88

10000

0.63

0.91

0.92

0.92

0.91

0.91

0.90

0.89

0.89

0.88

Save Data in Excel

48

One worksheet for the rpm axis.


One worksheet for the current axis.
One
O worksheet
k h t for
f the
th efficiency
ffi i
ttable.
bl

24
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

49

Worksheet named
Motor_RPM_Axis.

50

Worksheet named
Current_Axis.

25
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

51

Worksheet named
Eff_Data.

Excel

52

Next, we will read this data using the xlsread


function in MATLAB. Place these commands in
your init file.
motor_eff_map = xlsread(Motor_PN,'Eff_Data');
motor_eff_rpm_axis = xlsread(Motor_PN,'Motor_RPM_Axis');
motor_eff_current_axis = xlsread(Motor_PN,'Current_Axis');

In our motor model, we will replace the constant


efficiency
y with a Lookup
p Table ((2-D))
(Simulink/Lookup Tables)
Before continuing, run your init file to read in the
table data.

26
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Constant block
replaced with 2-D
lookup table.

53

Double-click
D
bl li k on the
h llookup
k table
bl and
d fill
in the parameters as shown:

54

If you
o ran the init file
file, and the data for this
table is loaded into the MATLAB workspace,
we can view the table by clicking the Edit
button.

27
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

55

This editor shows us that we have defined the table


correctly.

If you select Plot and then Mesh from the menus, you can view a plot of the table.

56

28
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

57
This text description is
important!

This dialog box also tells us:


That the top input on the icon is the rpm axis
The bottom input is the current axis.
Click the OK button and connect the part as shown:

58

Note that the motor current depends on the efficiency, and the efficiency depends on
the motor current, so we probably have an algebraic loop.

29
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

59

When we run the simulation, we are told that we do indeed


have an algebraic loop.

Eliminate the algebraic loop by adding a memory part


(Simulink/Discrete) to the model as shown.

60

30
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

61

Run the FU505 Cycle

Drive cycle OK.

Voltage spikes.

Current spikes.

62

Voltage spike.

Current spike.

31
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

63

Problems
What causes the voltage spike?
Look at the battery model:

+
IBAT
VBAT

VBAT = VOC + IBAT*RSeries

Problems

64

From our model, we realize that current


spikes cause the battery voltage spikes.
If we can control the current,
current we can
control the voltage fluctuations.
Future needs:
Current limits (hard).
Over/under voltage
g detection.

32
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

What Caused The Current Spikes?

65

66

Basic Math
If we divide by a small number, we get a
big number.
When we calculate the current in our
model, we divide in two places.
Divide by battery
voltage here.

Divide by
efficiency here.

33
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

67

Problems
The only time the battery voltage will become
small is when there is a large current spike.
So the current spike causes the low battery
voltage.
Without the current spike, the battery voltage
would remain high, and would not cause the
current spike.
This sounds like an algebraic loop of reasoning.

68

Problems
Focus on the other division.

Look at this
division.

34
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

69

Can the Efficiency Ever Become 0?

Can the Efficiency Ever Become 0?

70

35
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Table-Lookup

71

What happens when the current is zero?


What happens when the current is greater
than 402 A?
What happens when the rpm is greater
than 10000?
We specify this in the lookup table
dialog box:

72

So, what happens when the index is outside of the range of the
table?
Im not sure, but you better make sure that you know, or limit the
inputs to be within a specific range defined in the table.

36
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Lookup Tables

73

To fix one problem, select Interpolation Use End


Values as the Lookup method.
g outside of the range
g of
With this method,, when we go
data specified in the table, the values at the ends are
used.

Interpolation Use End


V l
Values
selected.
l
d

Problem

74

Looking at the table of data reminds me of


a problem.
Hmm.
Hmm I remember something a while
ago
Cant remember exactly what it was, but
something I saw before doesn't quite jive
with the table data
What was it.

37
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

75

Battery current
negative.

The battery current is negative.


Is this OK? Yes our motor normally acts as a motor or as
a generator during regen braking.
Our table is only defined for positive currents, but we are
using it for both motoring and regen modes.
The table does apply when the motor is used as a
generator,
t but
b t we did nott accountt for
f the
th negative
ti currentt
values in our model.
Also note that the table applies for both positive and
negative motor speed.
Add the abs part (Simulink/Math Operators) as shown.

76

Rerunning the simulation shows that the


problem has been fixed.
Question How would you limit the table inputs
to be within specified limits?

38
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

77

78

Look at the efficiency plot to verify our model. How can we


improve this plot to make it more useful?

39
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

79

Motor Model
We could add much more detail to the
model, and you should as you make it
more realistic
realistic. We could add:
Different regen and motoring efficiencies.
Add separate current limits for regenerative
braking and motoring. These limits are usually
different due to battery limits.
Add a torque map that is based on battery
voltage and motor rpm.

Lecture 4 Exercise 4

80

Demo of model working with motor


efficiency and motor torque curve.

Demo___________

40
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

81

Lecture 4 Exercise 5
Battery Model Improvements
Different charge and discharge Demo___________
resistances.
Resistance a function of battery SOC and
temperature.
Batteryy open
p circuit voltage
g is a function of
battery SOC and temperature.
Data contained in file Battery Data.xls.

82

41
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Advanced Model-Based-System
Design
Lecture 5: Engine Modeling

Outline

Reasons for an IC Engine


Intro to SimDriveline Engine Block
F l Consumption
Fuel
C
ti
Torque Curve
Defueling
Braking Torque

1
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

The Need

Thus far our vehicle has been able to


follow various drive cycles using the motor
and battery
The battery SOC has decreased, but
never too much

The Need

Eventually, however, the battery will reach


a SOC where it needs to be recharged.
e e is
sa
also
so a ccritical
ca low
o SOC which,
c , if
There
exceeded, will decrease the battery
lifetime or cause unsafe operation.
We can pull the vehicle over and plug it in
Or

Have an on
on-board
board power generation
system using an internal combustion
engine and a generator.

2
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

The Need
For this module we will develop our own
model of a Diesel engine.
First,
First lets
let s see take a look at the
SimDriveline Diesel engine.
Open a new empty model and place a
Diesel Engine block in your model (library
Simscape / SimDriveline / Vehicle
Components).

The Need
Right-click on the
Diesel Engine
block.

Select Look Under


Mask.

3
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

SimDriveline Engine
What does this
do?

What happens
here?

What does this


do?

What does this


do?

Lecture 5 Exercise 1
What is the purpose of the switch?
Answers___________

What is the purpose of the compare to


constant block?
Answers___________
What is the value of speed
p
_max and
where does it come from?
Answers___________

4
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

SimDriveline Engine
Question
Does an engine produce torque at RPMs
BELOW idle?

Problem
Double-click on the Peak torque lookup table.

Click This

10

SimDriveline Engine
This model has some problems

The model
produces
d
ttorque
below idle and
at zero rpm.
What happens
above 4500 rpm
and below 0
rpm?

5
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

SimDriveline Engine

11

Looking at the model we notice a few other


things are missing that we need for our model.

SimDriveline Model

12

We see that the model does not have an


inertia for the engine.
The model does not calculate fuel
consumption. (Necessary since we are
building a hybrid vehicle and our main
motivation is reduced petroleum
consumption.)
The SimDriveline engine gives us insight as
to how to build our own model. We shall use
it as a starting point and then enhance the
model.

6
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Fuel Curve

13

At a given RPM we can inject various


amounts of fuel, resulting at various
consumption rates
Check out the FantasyEngine_Data.xls file
for the engine RPM and throttle axes as
well as the fuel consumption data
Using the skill gained with the motor,
update the Vehicle_Init file accordingly

Engine Model

14

We will create our own model.


We will start by looking at the fuel
consumption of a Diesel engine
engine.
We will assume that you have measured
or obtained the fuel map for your engine.
Fuel consumption and torque maps for our
fictitious engine have been measured and
saved in an excel file in the Component
Data directory.

7
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Fuel Curve

15

We can read this data with the xlsread


function

Fuel Curve

16

Create a new
model and
add a 2-D
look up table.
Awesome!

8
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Torque Curve

17

By burning fuel, a Diesel engine produces


torque.
The torque is a function of RPM and
throttle.
Read in the torque data from the
FantasyEngine_Data.xls file
call it engine_torque_data
g _ q _

Torque Curve

18

Pretty Cool!
At a given
RPM we
can adjust
the throttle
to get a
desired
torque

9
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Engine Model

19

Create the model below with the following parts:


Constant, Saturation, Transfer Fnc, Torque Actuator,
Driveline Environment, Inertia

Engine Model

20

The Laplace (continuous) transfer function


delays the engine response with a time constant
of 100 ms
The
Th limits
li it on the
th saturation
t ti partt are 0 and
d1
1.
The engine inertia is specified in the init file as
engine_inertia.

10
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Engine Model

21

Now add an RPM feedback loop to the


data table
Why is this not an
algebraic loop?

Engine Model

22

Next we will add fuel consumption to the


model
model.
First, we will clean up the model by adding
some signal routing From and Goto parts.
Note that in our model, the fuel
consumption
p
data is in g
grams of fuel
consumed per second.

11
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Engine Model

23

Engine Model - Defuel

24

Next, we will build an emergency defuel if


we exceed the max engine speed
This sets the throttle to zero
zero, shuts off fuel
and kills the torque
Add the constant engine_max_rpm
= 4500 to the init file
Use a switch to set the throttle to zero if
the engine speed exceeds 4500 rpm

12
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Engine Model - Defuel

25

Engine Model - Jake

26

If the engine throttle is zero, engine


braking will occur until idle is reached
A constant torque will be applied opposite
the direction of crankshaft rotation
Well estimate the engine braking torque to
be 10 Nm add this to the init file
engine_brake_torque
g _
_ q

13
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Engine Model - Jake

27

Now, we could do some fancy stuff with switches


in our model
Or

Modify our torque data by changing the zero


throttle column from 0 Nm to -10 Nm for rows
two through the last one
Uncomment the last line in the engine section of
the init file

Engine Model - Jake

This line
uncommented.

28

When the throttle is zero, the torque will be equal to


engine_brake_torque.

14
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Engine Model - Jake

29

The torque
definitely goes
negative
The output
torque will be
zero for a
throttle slightly
greater than 0.
g

30

Engine Model - Testing


Lets test our model by forcing the engine to spin
using a motion actuator.
Add in a

Motion actuator
Ramp
Gain
Constant

Put scopes on the rpm, fuel consumption rate


and the torque output from the look-up table

15
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

31

Engine Model - Testing


We will use a ramp to sweep
the rpm signal from 0 to
5000 rpm.

With the acceleration set to zero, we are


specifying that the engine shaft spins at the
speed specified by the ramp signal.

Engine Model - Testing

32

The properties of the


ramp specify a slope
of 1
1.
If we run the
simulation for 5000
seconds, the rpm will
ramp from 0 to 5000.

16
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Engine Model - Testing

33

Since we are asking for maximum torque,


and the rpm is swept from 0 to 5000, we
can generate a plot of maximum torque
versus rpm.

Throttle specified a 1. We are asking for


maximum torque.

Engine Model - Testing

34

We will generate plots of the fuel rate and


the torque output:
This signal plotted on the
top plot of the window.

This signal plotted on the


bottom plot of the window.

17
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

35

Engine Model - Testing


Run the model for 5000 seconds of
simulation time.

36

Engine Testing

Torque goes to zero at


850 rpm and below. This
engine produces no
torque at idle.
Torque goes to -10 Nm at
4500 rpm because at over
p
we cut the fuel and
speed
apply the engine braking
torque.

18
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

37

Engine Testing
Fuel consumption goes to
zero at 4500 rpm because
we cut the fuel.
In the fuel consumption
table is 0.4 g/s when the
throttle is 1 and the rpm is
850 or less.

Engine Testing

38

We see that the fuel consumption is non


zero even when the engine rpm is less
than 800
800.
We will need to fix this later when we
make an engine starting algorithm.
We will have an engine on signal that
turns on or off fuel consumption below 800
rpm when the engine is off and at low rpm.

19
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

39

Engine Testing
Next, we will generate the same plot with
the throttle set to 0 rather than 1:

40

Engine Testing
When the throttle is 0, the engine
provides a negative braking torque.

For low rpm, no braking torque is


applied.

The fuel consumption is


always zero.

20
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Engine Testing

41

We do notice a few issues that we need to fix


later.
The engine uses no fuel when the throttle is
zero. This is because we are spinning the
engine with an external source. Normally to spin
the engine at this speed, a throttle will be
required, and fuel will be consumed. Also, we
may add in an idle controller that holds the
throttle slightly above zero to keep the engine
moving.

Engine Testing

42

We also notice that the for an engine rpm


less than 850, the torque is zero.
We assume that the engine is off for this
range of rpm.
Later, when we add an engine on signal,
we will also add an engine off torque, that
will oppose the starter when we need to
start the engine.

21
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

43

Lecture 5 Demo 1
Engine demo at full throttle.

Demo___________

Engine demo at zero throttle.

Demo___________

Engine Model

44

We now wish to make a subsystem model


out of our engine
Add in an engine diagnostics bus and
connect it to an output port.

22
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

45

Engine Model
Get rid of the Env block. (We already have
an Env block in our vehicle model. We
onlyy need one.))
Replace the motion actuator, and
associated ramp, constant, and gain block
with an SimDriveline Connection Port.
Replace the constant block used to specify
the throttle with an inport:

46

Engine Model
Env part removed.

Connection port
added here.

23
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Engine Model

47

In port added here.

Complete Engine Model

48

24
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Engine Subsystem Model

49

Type ctrl-A to select all of the components.


Right-click on one of the components and
select Create Subsystem from the menus
menus.
Go up one level to view the subsystem:

Engine Subsystem Model

50

Delete all of the ports and rename the


subsystem as Engine.

25
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

51

Lecture 5 Exercise 1
Engine Model Improvements
Add an Engine on signal to the engine model.
Wh the
When
th engine
i is
i on, the
th fuel
f l rate
t and
d th
the
torque are determined by the lookup tables of
the throttle cutoff.
When the engine if off, the fuel rate is zero and
the engine torque is a negative constant equal to
Demo
Demo___________
15 Nm
Nm.
Prove that your design works.
Abrupt step changes in the output torque is not
allowed.

Advanced Model-Based-System
Design
Elementary Control using
Stateflow

26
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Presentation Outline

53

Simple charging logic


Introduction to Stateflow
Completing
C
l ti th
the model
d l

The Need

54

Thus far our vehicle has been able to


follow various drive cycles using the motor
and battery.
The battery SOC has decreased, but
never too much.

27
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

55

The Need
Lets follow the 505 cycle a few times and
see what happens.
pp
Negative battery
state of charge.
Either we need a
larger battery of we
need a was to put
charge into the
battery.

The Need

56

We need some way to recharge the


battery and some logic to determine when
we do itit.
Our battery block has two motor ports
one for the motor and one for a generator.
The motor does charge the battery, but
since we have aerodynamic drag and the
motor is less that 100% efficient, charging
through the motor only delays the time at
whicg the battery will run out of energy.

28
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Simple Model

57

Eventually we will create a genset where an


engine will drive a generator that charges the
battery.
For now, we will model the genset as a current
source that charges the battery.
Open your latest vehicle model and rename it
Lecture5_Model1.

Vehicle Model

58

29
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Simple Model

59

We want to keep the SOC in a specified


range.
No over-charging.
No over-discharging.

This will require some logic to switch


between a No_Charge state and a
Charge state.
Well build a Stateflow Controller in a new
subsystem called Controller.

Controller Subsystem

60

We will add a new block to our Model


called Controller.
Eventually,
Eventually all of the functions contained in
the Controller subsystem will be
implemented on a real-time target.
This target will be the supervisory
controller for our vehicle.

30
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Controller Subsystem

61

Inputs to the control subsystem are status


signals from the various vehicle
subsystems (motor
(motor, battery
battery, engine
engine,
vehicle body, etc.)
Outputs of the control subsystem tell each
subsystem what to do.
Inputs come over the vehicle system
diagnostics bus (which will be the CAN
bus in a vehicle).

Control Subsystem

62

Add a subsystem to your model called


Controller.
The input to this system is the vehicle
system diagnostics bus.
Hint: You may want to copy and paste the
Display subsystem and rename it
Controller.

31
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Controller Subsystem

63

Inside the Controller subsystem, use a


Bus Selector to extract battery SOC signal
on the Vehicle System Diagnostic bus
bus.
(If you copied the Display subsystem, you
already have a head start.)
The contents of the Controller subsystem
are:

Introduction to Stateflow

64

We will add a Stateflow chart to the


Controller subsystem.
This chart will be used to turn on and off
charging current for our system.
Initially, the Controller output will be a
fictitious current that magically charges the
battery.
Later, the controller output will turn on an
Engine/Generator genset that charges the
battery.

32
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

65

Stateflow
From the Stateflow library,
drag in a Chart.
Then double click on it to
open.

Stateflow

66

Click on the State


button
to add a new
state that we will call the
No_Charge state.

33
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

67

Stateflow

Click here to enter


text.

Stateflow

The en: means that upon entering


this state, execute the following
command. In this case, when we
enter this state, simulink output
charge_current will be set to zero.

68
The first line is the name of the
state. Name it No_Charge.
Note that no spaces are allowed
in the name.

This is going to be a Simulink


output of the Stateflow chart.
This output will specify the
charging current for the battery.

34
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

69

Stateflow
Add in the Charge
state . Set Simulink
output
t t
charge_current to
15 amps upon
entering the state.

Stateflow

70
Click and hold the left mouse
button here.

To create the transition


transition,
drag the mouse pointer
here and then release the
mouse button when you are
at the edge of this state.

This is called a
state transition.
ii

35
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

71

Stateflow
We need to specify the guard for the
transition. Click the left mouse button on
the transition:

Click here! A
question
i mark
k should
h ld
appear and the
transition should turn
red.

72

Stateflow
Click on the ? To edit the
guard. The ? will be replaced
by a cursor. Enter the text
[SOC< SOC_Charge_On]

Transition selected.

36
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Stateflow

Stateflow

73
SOC is a Simulink input to the
chart. SOC_Charge_On is
called a parameter and must
be defined in the MATLAB
workspace.

74
Add the guard and transition
to turn off charging when the
state of charge becomes high
enough.

37
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Stateflow

75

The last thing we need to do is to specify


in which state the chart wakes up when we
first start the model
model.
This is done by clicking on the Default
Transition button and connecting the
transition to the desired initial state.
When you place the Default Transition
part, it will be connected to a circle.
Delete the circuit and connect the
transition to the No_Charge state:

Stateflow

76

Default transition
added here.

Click here to
place the default
transition.

38
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

77

Stateflow
Next, we need to specify SOC as an input from
Simulink
Select Add, Data, and then Input from
Simulink from the Stateflow menus
Name of the data is
SOC.

SOC specified as a
Simulink input.

Stateflow

78

We need to specify charge_current as a


Simulink output
Select Add, Data, and then Output to
Simulink from the Stateflow menus:

39
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Stateflow

79

We need to specify SOC_Charge_On and


SOC_Charge_Off as parameters (which will
be read in from the MATLAB workspace).
Select Add, Data, Parameter from the
Simulink menus twice:

Stateflow

80

Use the Model Explorer to check your work:

40
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Stateflow

81

Stateflow will only check guards and follow


transitions when an event occurs.
We will use the zero-crossing
g of a sinec
wave source as the event and call it a
Clock.
Select Add, Event, Input From Simulink
from the Stateflow menus to add an event
i
input
t tto your chart.
h t
This input will come from Simulink.

Stateflow

82

Name the event clock:

41
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

83

Stateflow
When you close the chart, you will see the
Simulink inputs and outputs that we
specified
specified.
Clock.

Output.

Input.

Stateflow

Use a sine wave for the clock with an


amplitude of 1 and a frequency of
100*(2*pi) to get a 10 ms frequency.

Tie into the


Battery_SOC signal.

84

Create an Out Port.

42
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Stateflow

85
Connect the charge_current to
the Generator_Current port.

Stateflow

86

Update the Init file with the guard values of


0 6 to start charging and 0.7
0.6
0 7 to stop
stop.

Run the FU505 five times:

43
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

87

88

Lecture 5 Demo 2
Demo of Stateflow controller charging the
battery.
Demo___________

44
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Advanced Model-Based-System
Design
Lecture 6: Creating a Genset and
Building a Formal Controller

Building a Formal Controller


Create a Engine/Generator genset to
charge the battery.
Add engine speed control.
Engine starting and stopping.
Start with the previous model.

1
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Complete Model

Copy the electric motor model and rename


it Generator.
We will use the same model for the motor
and generator.
If we want different properties for the
motor and generator, we can use the
same motor block but use different
lookup tables to give the motor different
properties.

Complete Model

Copy the engine model subsystem we


created earlier and place it in the model.
Make connections as shown.
shown
Connect the drive lines with the shared
environment block.

2
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Modify the Generator Subsystem


Change the names of ports from Motor to
Generator.
Change
C
the name off signals on the bus
from Motor to Generator.

3
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

7
Changed.

Changed.

Changed.

Changed.

Model Connections

Connect the Generator to the Battery


voltage.
Connect Generator
Generator current on the
Battery to the Generator Current
Connect the Engine and Generator
Diagnostic Ports to the
Vehicle_System_Diagnostics bus.

4
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Model Connections

10

Vehicle System
Bus Changes

5
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Control System Design

11

We now have the system to a point where


we can start to build our control system.
The electric motor drives the vehicle
vehicle.
When necessary, the engine can be
started with the generator and then charge
the battery.

Engine Speed Control

12

We will first develop a method to start the engine


and control the engine speed.
generator directly
y connected to the
We have a g
engine. This generator can act either as a motor
or as a generator.
We can use motor/generator to spin up the
engine to start the engine.
g
to apply
pp y a
We can use the motor/generator
torque in the opposite direction to the engine
torque to regulate the engine speed.

6
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Engine Speed Control

13

We will use classical feedback control with


proportional feedback.
The engine throttle will be held constant
constant.
Monitor the engine speed.
If the engine speed is to slow, reduce the
opposing M/G torque.
If the engine speed is too high, increase the
opposing M/G torque.

Engine Speed Control

14

This is a classical feedback system.

In our case, the plant is the system


comprised of the Engine coupled to the
Motor/Generator.

7
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Engine Speed Control

15

Modify the controller as shown next.


For the moment, we will not use the
Stateflow
S
a e o cchart.
a
Note that our torque request to the M/G is
constrained between -1 and +1.
We will pick an arbitrary value for the
engine throttle.
Charging_Engine_rpm
Charging Engine rpm is a constant
defined in the init file and is 1800 rpm.

16

8
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Engine Speed Control Top Level

17

Modify the top level block diagram as


shown.

Engine Speed Control

18

When we run a simulation


The engine should speed up to 1800 rpm
y and as fast as p
possible.
immediately
The generator should charge the battery at some
current determined by the engine throttle.

Run a simulation
and plot the engine
speed and M/G
current.

9
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

19

Battery Current
Mostly
M
l P
Positive.
ii

SOC Increasing.

RPM constant at
~1860.

Engine Speed Control

20

We see that the feedback loop does


control the engine rpm very well, and that
the generator charges that battery
battery.
If we zoon in on the engine rpm at the
beginning of the simulation, we see that
the rpm ramps up from 0 to 1800 rpm very
quickly.

10
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

21

Here the generator acts as


a motor. Energy is
removed from the battery
to overcome compression
and spin
p up
p the engine.
g

Engine rpm goes from 0 to


1800 in about 140 ms. This
isquite fast.

Engine Speed Control

22

There are a few issues with the controller


that we must fix.
We need to modify our control scheme to:
Turn on the engine only when necessary.
Ramp up engine speed in a controlled ramp.
Turn on the engine when it reaches the
appropriate speed.
Ramp down the engine when we no longer
need to charge.

11
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Stateflow Engine Control

23

Read Charging_Engine_rpm from the


workspace. From Stateflow select Add,
Data and then Parameter
Data,

Stateflow Engine Control

24

We will need to know the measured


Engine rpm from the Simulink model.
From Stateflow select Add,
Add Data,
Data and
then Input from Simulink

12
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Stateflow Engine Control

25

Stateflow will need to output the Engine


Throttle and Desired Engine rpm to our
Simulink controller.
controller From Stateflow,
Stateflow select
Add, Data, and then Output to Simulink

26

Stateflow Engine Control


Next, modify the Stateflow chart.
When we need to charge
Enable Motor/Generator.
Change the Desired Engine rpm to the value of
constant Charging_Engine_rpm.
When the engine reaches this rpm, change the
throttle from 0 to a specified value.

When we need to stop charging


Change the throttle to 0.
Change the Desired Engine rpm to 0.
When rpm reaches 10 rpm, disable motor/generator.

13
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Stateflow Engine Control

27

Oops, we need another output to enable the


Motor/Generator. From Stateflow select Add,
D t and
Data,
d th
then Output
O t t to
t Si
Simulink.
li k

28

Create The Stateflow Chart Below

14
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

29

Controller Modifications

30

Rate Limiter

The rate limiter in the previous slide is used to


generate a ramp from the stepped signal coming
from Stateflow.
A rate limiter specifies the maximum positive and
maximum negative rates at which a signal can
change.
Specifying rates of 900 will cause the engine
rpm to ramp up from 0 to 1800 or down from
1800 to zero in 2 seconds
seconds.
Our engine turn-on time will be 2 seconds.
Part located in the Simulink/Discontinuities
library.

15
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

31

Rate Limiter Settings


Dont forget this.

Run a simulation first for the AVL drive cycle, then the FU505.
Plot both the Engine rpm and the M/G current.

32

Zoom in here.

16
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

33

Engine is up to speed,
but the generator is
using
gp
power,, not
generating power.
The generator is not
charging the battery.

Here, the g
generator is
charging the battery.

Engine appears to be
up to speed here.

Lecture 6 Exercise 1

Demo___________

34

The generator appears to spin up the


engine to the appropriate speed, the
generator does not immediately start
charging the battery. Instead there is a
long delay before charging starts. This is
an error.
Fix the error so that charging starts as
soon as the generators is up to speed.
Your fixed model should have a plot as
shown next.

17
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

35

Zoom in here.

36

Negative current
speeds up
engine while off.

Controlled start.

Generator current
charges battery.

Controlled stop.

18
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

37

Throttle turns off before


ramp down.
Throttle turns on
after engine
reaches speed.

Lecture 6 Demo 1

38

Demo the working controller.

Demo___________

19
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Advanced Model-Based-System
Design
Lecture 7: Multi
Multi-Loop
Loop Control
Post Processing

2
Results from previous model.

Generator current not controlled


and changes with battery
voltage (which changed with
motor torque request).

1
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

More Control Fun

Form the last simulation, we notice that the


generator current is whatever it is, and it
changes as the battery voltage changes.
Lets add another feedback loop to control the
current.
Note that the throttle increases or decreases the
engine power.
g
p
power produces
p
more g
generator
More engine
current.
Less engine power produces less generator
current.

Classic Feedback - Again

We can think of the result of the system


created in lecture 6 as a plant where the
input signal is the engine throttle and the
output is the generator current.
By changing the throttle signal, we can
control the generator current.

2
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Charging Current Control

Modify the Stateflow chart as shown next.


Note that the Engine Throttle output has
been deleted from Stateflow.
To
T d
delete
l t a Stateflow
St t fl
output,
t t you will
ill need
d
to use the Model Explorer. (Tools and
then Explore from the Stateflow menus.)

Line added.

Line added.

3
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Engine Off No charge

Start engine.

Line added.

Start charging when the


engine has reached the
appropriate speed.

Controller Modifications

Modifications to the Simulink portion controller


are shown on the next slide.
p g the proportional
p p
Note that we are keeping
feedback loop that holds the engine speed
constant at 1800 rpm.
We are adding a second proportional feedback
loop that holds the generator current constant.
p assumes that the two loops
p
This second loop
are independent and that the first loop does hold
the engine speed constant.

4
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

9
Enlargements of various
parts are shown on the
next two slides.

10

5
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

11

Charging Current

12

The signal for the charging current coming out of the


Stateflow chart is a step function.
To produce a controlled rate of change, the desired
current signal is passed through a rate limiter that
has a slew rate 50.
The signal out of Stateflow is a steep that goes from
0 to 50 A.
The signal out of the rate limiter is a signal that goes
from 0 to 50 A in 1 second
second.
We will use the rate limiter to control the rate at
which the desired charging current changes.

6
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Saturation Block

13

The output of the error amplifier can be a


large signal and either positive or
negative
negative.
We have defined our throttle signal to be
between 0 (no throttle) and 1 (full throttle).
The saturation block is used to limit the
throttle signal to appropriate values.
The properties of the saturation and rate
limiter block are shown on the next slide.

Component Settings

14

Run the simulation and observe the


throttle and generator current signals.

7
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

15

Constant charging
current.

Oscillation in
throttle control.

Constant engine
rpm.

Current Control

16

We see a lot of problems with the engine throttle


signal.
We will address them one at a time and see if
we can fix the problems, or if a change is
required in the design of the physical system.
First, we will address problems in the throttle
signal. The generator current is constant, but we
notice noise and oscillations on the engine
throttle signal.
We will reduce the gain of the current control
feedback loop.

8
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

17

Reduce the Gain

Changed to 0.1.
(Just guessing.)

18

Oscillation
reduced.
What is going on
here?

9
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

19

Current Control
We have reduced the oscillations in the
throttle signal a little bit. We will call it good
for now and fix a few other problems first.
first
If the problem still persists, we will address
it later.
We will zoom in on the spike in the throttle
signal that occurs when we first start the
engine and commence charging.

20

The current ramps


up after the engine
speed has reached
1800. This is
correct.

The throttle is wrong


here. There should
nott b
be a throttle
th ttl signal
i
l
when the engine rpm
is too low.
Want the throttle to
ramp up here, after the
engine has reached a
certain speed.

10
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

21

(2) Generator current is


negative because it
uses battery power to
speed up and start the
engine.

(3) Since actual current


is less than desired
current of zero,
zero the
control loop increases
the throttle.

(1) During this time,


Stateflow sets the
desired current to zero.

22

Charging Current Control


We see that the desired generator current is zero but
the actual generator current is negative.
Because the actual current is less than desired,, the
current control feedback loop increases the throttle.
This is incorrect because the engine is not yet on.
We need to disable the throttle until the engine
reaches the desired speed.
p called
Create another Stateflow output
Throttle_Enable.
Modify the Stateflow diagram as shown next.
Modify the Controller as shown next.

11
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

23
Line added.
Line added. Disable the
feedback when we want
to stop charging
charging.

Line added. Enable the feedback


loop once the engine has reached
the desired operating speed.

24

Modified.

Modified.

Modified.

Modified.

12
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

25

Big spike.
This cant be
good.

Zoom in.

26

The problem where the


throttle was non-zero
before the engine was up
to speed has been fixed.

This big spike is a


new problem. Zoom
in further.

13
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

27

Lots of
problems!

(2) The generator current is negative


because it is the generator was
using battery energy to keep the
engine at 1790 rpm (the throttle is
not yet non-zero).

(3) Because the gen


current is less than the
desired current and the
feedback loop is
enabled, the throttle
signal goes to the max
limit.

(1) Speed huts 1790 rpm


so current feedback
loop is enabled.

Current Control

28

Since the generator uses power to speed


up the engine, when we close the loop the
throttle signal maxes out because it tries to
change the generator current from a
negative current to the desired current,
which is zero or positive.
We can fix this problem by using the
throttle to assist the generator in speeding
up the engine.
We are not yet using the engine on signal.

14
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

29

Current Control
We will modify the control to do the following.
For engine speeds below 800 rpm, the engine is
off.
When the engine speed hits 800 rpm, turn on
the engine.
Apply a constant throttle to speed up the engine.
We will determine this constant experimentally.
We will need to add Engine
Engine_On
On and
Throttle_Offset Signals to the Stateflow chart.
Modify the Stateflow chart as shown:

30
(1) Initialize Values.
(4) We do not have an
idle circuit yet.
However, with no
external throttle
applied the speed will
applied,
return to the idle speed.
Turn off the engine
once it is just slightly
above the idle speed.

(3) When we disable


the current feedback
loop, remove the
offset to allow the
engine to slow down
to idle.
(2) When the engine speed reaches 800
rpm, turn on the engine and apply a
throttle of 0.2.

15
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Controller Modifications

31

The current feedback loop has been


modified as shown:

Controller Modifications

32

The Stateflow chart has been modified as


shown:

16
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Top-Level Model Changes

33

The opt level model has been modified to add


the connection for the Engine_On signal.

34

Looks good. Zoom


in here.

Still a bit of hash.

17
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

35

What is this spike?


p
Look at this later.

Looks good. Zoom


in here.

This looks good and is acceptable. But


there are a few interesting glitches that we
wish to understand or examine.

36

Zoom in here

Step change in
throttle. May want to
slow this down. Step
changes break things.

18
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

37
(1) Because the throttle is
too big, the engine speed
is larger than needed, so
the generator applies a
negative torque to slow it
down. The result is a small
amount of charging. Note
th t th
that
the engine
i speed
d lloop
is closed here.

(2) What is this? This


is where the current
feedback loop kicks in.

(3) Do not understand this.


Future work.

The engine turnoff transient is shown below.


There is a slight bump in charging current when
we turn off the engine.

38

What is this bump? Lets


Zoom in.

19
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

39

Not sure what this bump


is in generator current.

40

20
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Controller

41

Overall the current feedback and engine speed


lops are working well.
There are a few things that we do not
understand, and need to understand.
Even though this is appears to be a fairly simple
system, we see that it does require a bit of
attention to control even a simple system.
We will add more later in the course.

Controller

42

The last thing we will do is add a rate


limiter to the throttle signal.
At the moment
moment, this does not appear to
cause a problem. However, step changes
ion any power or energy source can cause
problems, in this case a torque spike.
So, we will eliminate this step change with
a rate limiter.

21
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

43

Current Control Problems


Add a rate limiter to the throttle signal.
This will add delayy to our current control
circuit that may cause an instability.
Specify the rate as 1 per second. (Guess)
Too fast of a slew rate will pass the spike.
Too slow of a rate will cause instabilities.

44

Looks
Good!

22
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

45

Engine
Turn On

This used to be a
step.

This used to be a
step.

46

Engine
Turn Off

This bump is still


here.

This used to be a
step.

23
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Run Simulations and Verify

47

You might want to use the accelerator or


rapid accelerator to speed up the longer runs.

This is where we
specify using an
accelerator or not.

Run Simulations and Verify

48

For simulations with long runs and short


sample times, the scope plots will display a
large amount of data,
data and on occasion,
occasion
MATLAB will run out of memory.
To prevent this problem, we can add a sample
time to the scopes.
Note that this will not work for scopes set up
with Signal & Scope Manager.

24
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

49

Sample Time
In the Init File, define a variable

Open a scope and click on the parameters icon:

Click here.

50

Sample Time

Set the Sample Time to variable Sample_Time


as shown:

Specify sample
time here.

Enter variable
Sample_Time here,
which we define in
the init file as 0.1
seconds.
seconds

25
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

51

Sample Time

By setting the sample time to 0.1 seconds, we


greatly limit the amount of data required to
display a plot
plot.
Without this setting, the plot will use a huge
amount of data, especially if step sizes
become very small.
Set the sample time for all scopes in your
system.

52

Lecture 7 Demo 1
Demo of System running the FU505 drive
cycle five times
Demo___________
Demo of model running the Consumer
Reports drive cycle
Demo___________
Demo of model running the Trip EPA
Combined drive cycle.
Demo___________

26
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

53

FU505 Five Times

54

Voltage
S ik
Spike

Voltage
g
Spike

Consumer
Reports
y
City

27
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

55

Trip EPA Combined

Lecture 7 Exercise 1
In the consumer reports drive cycle, we noticed
large voltage spikes. The spikes we observed in
the previous Consumer Reports slide are
reduced because we used a large sample time
and since the spikes were so fast.
The next slide sets the Sample_Time to 0.01,
and we see huge voltage spikes.
Figure out the reason for the battery voltage
spikes and update the model to prevent the
problem, and show the drive cycle with the
Demo___________
problem eliminated.

28
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

57
150,000 V

Voltage
Spike

Consumer
p
Reports
City

29
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Advanced Model-Based-System
Design
Lecture 8: Post Processing

Post Processing

Now that we have a model for the entire


car, and a simple controller, we would like
to make some efficiency calculations for
the vehicle.
These calculations will be done after the
model runs.
We will need to collect data from the
simulation, and then use MATLAB to
perform calculations on the data.

1
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Post Processing

We would like to calculate the fuel efficiency of


our vehicle.
g
used g
gas,, this would be easy:
y
If our engine
efficiency (mile per gallon) is the distance
travelled divided by the amount of fuel used in
gallons.
You might then ask, what about the electrical
energy used to move the car? If we ran off the
battery only, does the car get an infinite value of
efficiency (mpg) since no gas is used?

Post Processing

Furthermore, we will be using a fuel other than


gasoline.
In the future, vehicles will run off of a variety of
diff
different
t fuels,
f l and
d we would
ld lik
like to
t be
b able
bl tto
compare the efficiency of all of these vehicle in an
apples-to-apples comparison.
We will use a method called miles per gallon, gas
equivalent (mpgge) where the mileage of our vehicle
is converted to the equivalent miles per gallon had
reformulated gasoline (RFG) been the fuel stock.
We will also use state of charge correction to include
the energy used from the battery.

2
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Post Processing

For our vehicle, we will assume that we are using


20% biodiesel fuel (B-20).
percent biodiesel,, 80 percent
p
petroleum
p
This is 20 p
diesel.
We will first calculate conventional mpg for B-20.
This is easy: mpg = distance travelled divided by
the amount of B-20 fuel consumed (in gallons)
We already know the amount of fuel consumed in grams.
We do not know how far the vehicle has travelled in
miles.

Post Processing

We can have the model calculate the


distance travelled by integrating the
vehicle speed
speed.
We will convert the fuel consumed in
grams to fuel consumed in gallons in the
post processing file.
Add an integrator and gain block to the
Rear Diff and Body subsystem as shown.
Add the distance signal to the diagnostics
bus as shown.

3
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Post Processing

To convert from meters to miles per hour,


divide meters by 1609.34.

Post Processing

We are already calculating fuel consumed in


the model, so we do not need to add a signal
for that
that.
In order to use the data calculated during the
simulation in a MATLAB file, we need to save
the calculated data in the MATLAB workspace.
This is done with the MATLAB To Workspace
part (Simulink / Sinks library).
We will place the To Workspace parts in the
Display_and_Logging subsystem:

4
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Display_and_Logging Subsystem

For the moment, we will only place two To Workspace


parts.
One will be used to log the vehicle speed, and simulation
time.
The second will only be used to log vehicle distance.
The second one will be copied for all of the other signals we
want to log.

10

Speed and Time


Double-Click on the To Workspace block
for the Vehicle_Speed_mph signal. Fill in
the parameters as shown:
The data will be saved in
the MATLAB workspace
with the variable name
Vehicle_Speed_mph_str.
Date for the entire
simulation will be saved
in the structure.
No decimation. Every
data point will be saved.

5
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Speed and Time

11

To reduce the amount of data we save in


the workspace, we will use the sample
time to specify that we only save a data at
a fixed and specified sample rate. Variable
Sample_Time was specified previously in
the init file as 0
0.1
1 seconds
seconds. Since all of
our scopes and To Workspace blocks will
use the Sample_Time variable, we can
change the data collection sample rate for
all of our blocks at the same time.
We will save this variable as a structure
with time. This will save both the data for
the signal and the time vector at which
the data points were collected.
Although we will not be using the time
vector in the mpgge calculation, we will
use it later for more involved post
processing.

Post Processing File

12

We can extract the time and the vehicle


speed data from the structure by using the
lines below in the post processing file:

Note that the p


post p
processing
g file is jjust an
m-file that we run after the simulation has
been completed.
Save the file as Vehicle_Post_File.m

6
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

13

Distance_Miles
The Distance_Miles signal will be saved
as an array:
Notice that we are using
the Sample_Time variable
to reduce the size of the
array.
The format is specified as
y A 1-dimensional
an array.
array will be created that
contains only the data for
the specified signal.

To Workspace

14

When you close the dialog boxes, you will notice


that the To Workspace blocks no display the
variable name under which the data will be saved in
the MATLAB workspace.

7
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Post Processing

15

Eventually we will add To Workspace blocks for


all sigals in our model.
For the MPGGE calculation,, we need the
following signals:

Battery_SOC
Battery_Voltage_V
Battery_Current_A
Engine_Fuel_Consumed_g

Copy the Distance_Miles To Workspace block


for all of the other signals (they all will be saved
as an array and use the Sample_Time).

Display and Logging Subsystem

16

8
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Post Processing File

17

We will now create the post processing file


for our model.
The first thing we will do is define a few
constants for the conversion:

Constants

18

Fuel heating values are the amount of energy


contained in the fuel. Note that a gallon of
diesel fuel contains more energy than a
gallon of reformulated gasoline. This is one of
the reasons why diesel costs more that
gasoline.
The heating values are in BTU/gal. (Sorry
about that))

9
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

19

Constants
Remember that our battery model was a
voltage source (referred to as the open
circuit voltage) in series with a resistor:
RSeries

+
IBAT
VOC

VBAT

VBAT = VOC + IBAT*RSeries

Constants

20

To calculate the energy stored in the battery or


the energy supplied by the battery, we need to
know the battery open circuit voltage.
In
I our model,
d l the
th open circuit
i it voltage
lt
is
i a
function of the battery state of charge, which
changes during the simulation.
Later we will calculate the battery open circuit
voltage from an V-I plot generated from the
model.
model
For now, we will assume that the open circuit
voltage is constant equal to 366 V.

10
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Constants

21

We cannot just take energy from the battery and


assume that it is free.
y energy
gy take from the batteryy must be replaced
p
Any
or the battery will eventually become discharged.
If we do use some of the energy from the battery
to move the vehicle, we need to know the amount
of fuel that it will take replace that energy.
y of fuel energy
gy to electrical
A conversion efficiency
energy of 25% is assumed. (Later on, we may run
simulations to verify this calculation).

Fuel and Distance

22

The amount of B20 fuel consumed for the entire simulation is


the last value saved in the Engine_Fuel_Consumed_g array.
The fuel consumed is converted from grams to gallons by
dividing
g by
y 3215. This conversion constant was p
provided by
y
Argonne National Labs for a specific type of B-20 used in the
Challenge X competitions.
The total distance travelled in the simulation is the last value
saved in the Distance_Miles array.

11
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Battery State of Charge (SOC)

23

If we remove energy from the battery


during the drive cycle, we must calculate
the additional amount of fuel required to
replace it.
If we added energy to the battery, we must
calculate the amount of fuel required to
produce that energy and subtract the fuel
from our total.

Battery State of Charge (SOC)

24

The amount of charge added or removed from


the battery is equal to the change in battery SOC
times the battery amp-hour rating.
We will assume that the ending battery SOC is
less that the initial SOC, so that charge has
been removed from the battery.
Thus, we will call this amount,
Amp_Hours_Consumed:

12
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Battery State of Charge (SOC)

25

The energy removed from the battery is equal to


the Amp-hours consumed times the battery open
circuit voltage. (Note that Amp-Hours times volts is
equal to Watt-Hours.)
Note that in our battery model, the open-circuit
voltage source is the energy storage portion of the
model. The series resistance accounts for battery
losses.

Battery State of Charge (SOC)

26

We now know how much electrical energy was


used in moving the vehicle. To calculate the
amount of fuel the vehicle would use to replace
that energy, we divide by the the
Conversion_Efficiency.
Finally, we will be using BTUs as the unit of
energy for all post processing MPGGE
calculations. To convert Watt-Hours to BTUs,
multiply
lti l b
by 3
3.412.
412

13
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Battery State of Charge (SOC)

27

Note that if, at the end of a simulation, the battery final SOC
is less that the battery initial SOC, electrical energy will have
been removed from the battery.
In our calculation
calculation, this will result in a negative value for the
Electrical_Energy_BTU.
Since this energy was removed from the battery and used to
move the vehicle, we need to add this amount of energy to
the actual amount of fuel consumed by the vehicle.
Since energy removed from the battery is calculated as
negative energy
energy, we have to subtract this amount of energy
from the fuel consumed energy so that the two actually
add.(This is done later when we calculate the total energy
consumed.)

Fuel Energy

28

Next we calculate the amount of energy contained


in the fuel that was consumed by the vehicle.
g a different
We will assume B-20. If we are using
value, we use the fuel heating value for that fuel.
We know the amount of fuel consumed in gallons.
The fuel heating value is the amount of energy in
BTUs a fuel contains in BTU per gallon:

14
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Total Energy

29

The total energy is the electrical energy


consumed plus the fuel energy consumed.
As mentioned earlier,
earlier if electrical energy is
consumed, it is calculated as a negative
quantity, so to add it to the total fuel
consumed, we need to subtract:

RFG Consumed

30

We now know the total energy consumed by the


vehicle for it to complete the drive cycle.
Next,, calculate the amount of reformulated
gasoline (RFG) that would be required to supply
the same amount of energy.
Divide the total energy consumed (in BTS) by the
fuel heating value of RFG in BTU per gallon:

15
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MPGGE

31

Finally, to calculate the efficiency, divide the


distance travelled by the amount of RFG
consumed:

Note that this is gas equivalent because we


converted the energy into the amount of RFG
required.
The number is state of charge corrected because
we included the amount of energy removed from
the battery.

32

MPGGE
Step 4 Fuel Energy BTU
Fuel_Energy_BTU = Fuel_Consumed_Gallons*
133393 1102
133393.1102

Step 5 Total Energy BTU


Total_Energy_BTU = Electrical_Energy_BTU +
Fuel_Energy_BTU

133393.1102 BTU/Gal is the fuel heating value


of B
B-20.
20.
Awesome We now know the total energy
consumed by our vehicle over the drive cycle.

16
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Vehicle_Post_File.m File

Vehicle_Post_File.m File

33

34

17
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Msgbox

35

The last thing we need to do is create a


spiffy display for our calculations:

Post Processing File

36

If you would like this file to run after every


simulation, we can specify it as a callback
that runs when the model stops..
Right click on the model and
Select Model Properties
Select the Callbacks Tab
Select StopFnc
Enter the name of the
post processing file
without the .m.

18
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Simulation Results

37

Demo___________

Open Circuit Voltage

38

In our previous calculation, we assumed a


value for the open circuit voltage.
This value can be calculated from the
battery voltage and current data collected
during the simulation.
If you remember, our model for the
battery, the terminal voltage is equal to the
open circuit voltage plus the battery
current times the series resistance:

19
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Battery Model

39

RSeries

+
IBAT
VOC

VBAT

VBAT = VOC + IBAT*RSeries


The battery terminal voltage is a linear function
of the battery current.
The equation is a straight line where the yintercept is the battery open-circuit voltage.

Battery Open-Circuit Voltage

40

We can determine the battery open-circuit


voltage by plotting the battery voltage
versus battery current (a V-I
V I plot).
plot)
We can fit a first order polynomial to the
measured data.
The y-intercept of the fitted curve is the
battery open-circuit voltage.

20
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Battery Open-Circuit Voltage

41

The lines below plot the battery V-I curve:

Battery Open-Circuit Voltage

42

The measured V-I curve for the FU505 drive cycle is:

21
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Battery Open-Circuit Voltage

43

We could eye-ball the curve and estimate that


the open-circuit voltage is around 320 V.
Instead,
Instead we will use a first
first-order
order polynomial
curve fit to the measured data.
We will use the MATLAB polyfit command:

Polyfit

44

The polyfit function calculates a polynomial fit to the


measured data.
The value is returned in a polymomial.
Since
Si
we asked
k d for
f a first
fi order
d fit,
fi the
h polynomial
l
i l is
i in
i the
h
form poly= [a1 a2].
The 1st order polynomial equation would be in the form y =
a1*x + a2.
Thus, the second coefficient of the returned polynomial is
the y-intercept, and in this example, the battery open circuit
voltage.
For the FU505 drive cycle, the open circuit voltage is
calculated as 318.441. A bit off from our estimate of 366 V.

22
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Updated MPGGE Results

45

With the updated Battery SOC, the


MPGGE calculations are as shown:

Demo___________

23
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Advanced Model-Based-System
Design
Lecture 9: Improving Simulation Speed
Brake Models

Simulation Speed

By now you should have noticed that our model


has the annoying problem that at zero speed,
the simulation becomes exceedingly slow.
This is bothersome because:
It takes so long to run.
The simulation appears to run slowly when the
desired vehicle speed is zero. (For some reason, this
seems wrong. We expect the simulation to require
more computation when the vehicle is performing
maneuvers rater than sitting still and not moving.

1
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Simulation Speed

The problem becomes obvious when we


run the Consumer Reports City drive cycle
which has high acceleration and
deceleration portions, and several portions
at zero speed.
The simulation runs fast during the
acceleration and deceleration portions of
the drive cycle, but slows to a crawl when
the vehicle is at zero speed.

Simulation Speed

We have been dealing with this problem with several


different vehicle models for a long time.
The method presented here to discover the problem may
not present a method of how the solution to the problem
was discovered.
The solution was discovered as a result of the model
used in this course, however, the realization of the
solution took several models and several years (yes, we
are slow).
We
W suggestt a method
th d tto di
discover the
th reason for
f the
th
problem, but the method presented to discover the
solution may not really describe the troubleshooting
method that uncovered the solution.

2
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Simulation speed

If we run the simulation with the Consumer


Reports City Cycle (not the whole thing, it
takes too long) and plot the
Desired and actual vehicle speed
Driver torque request
Motor torque

We might get some insight into the


problem (or maybe not).

Simulation runs
very slow here,
even in accelerator
mode.

Driver torque request


appears to be zero,
as it should be. We
will zoom in here.

Driver torque
q
appears to be zero,
as it should be. We
will zoom in here.

3
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

7
Vehicle speed is
zero

Tiny oscillations in the driver


torque request around zero.

Tiny oscillations in the motor


torque around zero.

Simulation Speed

We see that there are small oscillations (10-30


size oscillations) around zero.
We conclude that in order to keep
p the vehicle
speed at zero, the proportional feedback system
(the driver block feedback loop) gives the
vehicle a small negative torque bump to slow the
vehicle down.
This bump, however causes the vehicle speed to
become slightly negative. The feedback
controller detects this and gives the motor a
small positive torque bump to correct this.

4
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Simulation Speed

The vehicle speed has tiny oscillations around


zero speed, and the system and the system
feedback system and motor use tiny positive and
negative torque pulses to push the vehicle
speed slightly positive or slightly negative.
Because there is no damping, the vehicle never
settles down to zero.
Tiny time steps are required because the
MATLAB solver tries to get close to zero within a
specified tolerance.
These tiny time steps make the simulation run
slowly.

Simulation Speed

10

You might ask, if this is a proportional feedback


system, why do we not see the same problem
when the vehicle attempts to maintain a constant
speed at say 30 mph?
A possible explanation is that the vehicle model
has aerodynamic drag built into the vehicle solver.
Drag increases as the square of the velocity. At 30
mph the amount of drag is significant.
To increase speed, a torque bump from the motor
is necessary. If the vehicle speed is too high, aero
drag will slow it down.

5
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Simulation Speed

11

Thus, to maintain a constant speed only


positive motor torque requests are
needed Drag ends up decreasing vehicle
needed.
speed.
Thus, the torque request signal will not
oscillate around some bias.

Solution 1

12

So, we think we know the reason for the


simulation to slow down when the vehicle
speed is zero.
zero
A solution to this problem is to never allow
the vehicle to reach zero.
We will add a small constant offset to the
desired speed in the driver block.

6
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Solution 1

13

We see that we have added a 0.3 mph constant


offset to the desired speed signal.

With this modification, the simulation now runs very


fast:

14

Speed never goes to


zero, as designed.

7
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Solution 1 Speed Offset

15

Te simulation now take about a minute to run,


where it used to take about 9 minutes.
We do notice the offset as we see that the vehicle
speed never reaches 0.
The solution is acceptable, but could cause
problems when we add a shifter to our system
and have the vehicle go forward and reverse.
pp our hypothesis
yp
that the
The solution does support
driver feedback loop may be the cause of the
problem.

Solution 2

16

Since we are hypothesizing that the driver


block is emitting small positive and negative
torque requests to keep the vehicle at zero
speed, we come up with a new idea:
Since tiny torque requests will not significantly
move the vehicle, why not just prevent torque
requests below a certain threshold from being
emitted by the controller.
controller
We can do this with a dead zone block.

8
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Solution 2: Dead Zone Clipper

17

Remove the offset we added previously.


Add a Dead Zone block (Simulink /
Discontinuities) to the controller as
shown.

Solution 2: Dead Zone Clipper

18

The properties of the Dead Zone Clipper are:

9
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Solution 2: Dead Zone Clipper

19

The Dead Zone clipper is set to eliminate any


torque requests between -0.001 and +0.001.
These limits were chosen as a first guess
guess.
The values are small enough to not
significantly affect the torque request.
However, ting torque requests will be
blocked, and hopefully solve the problem.
When we run this solution, the model appears
to run as fast as the first solution.

20

Speed offset now gone.


Simulation runs fast.

10
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Solution 2 Dead Zone Clipper

21

The Dead Zone solution fixes the simulation speed


problem, and does not give the vehicle speed an
arbitrary constant offset.
Simulation speed tests were run using the Consumer
Reports City cycle. The time to complete the
simulation for the various methods were:
No Solution Original Model: 529 Seconds
Constant 0.3 mph Offset: 70 Seconds
Dead Zone Clipper: 67 Seconds

We will use the Dead Zone Solution because it does


not ad an arbitrary offset to the vehicle speed.

Brake Models

11
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Brake Models

23

At this point the only method of slowing the


vehicle is to use the motor to apply a negative
torque to the rear wheels.
The benefit is that we recapture all of the
possible regenerative braking energy available.
There are two problems with this method, one
fairly obvious, the other a bit subtle.
problem is that if the motor,, motor
The first p
controller, or powertrain fail, there is no way to
slow the vehicle. Thus, we need a backup.

Brake Models

24

The second, less obvious problem, is that the


motor slows the vehicle by applying a negative
torque to the powertrain. This raises two issues:
If a tire breaks free, the wheel will actually spin at high
speed in the opposite direction of vehicle movement.
(With mechanical friction brakes, when there is too
much braking torque, the wheel just locks).
At low vehicle speeds, since braking applies a
g
torque,
q
if we are not careful, p
pressing
g the
negative
brake could cause the vehicle to move backwards.
(To prevent this problem, we do not allow
regenerative braking below certain vehicle speeds.)

12
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Braking Methods

25

We will show two brake models:


The first method uses a torque actuator and
applies a torque to the half shaft in the
opposite direction of tire rotational velocity.
(This method has the problem of causing the
tire to spin backwards during hard braking).
The second method uses a friction clutch to
pp y a torque
q between the half shaft and an
apply
immovable object. (This method locks the
wheel during hard braking.)

Braking Methods

26

Both methods will cause problems around


vehicle speed.
This causes the simulation to run slowly just as
it did with the problem in the driver feedback
loop around zero vehicle speed.
We will employ a similar solution to mitigate this
problem.

13
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Method 1 Opposing Torque

27

The first model will sense the direction of


rotation and apply a torque in the opposite
direction The basic model is shown below:
direction.

SimDriveline motion
sensor used to
measure rotational
velocity.

1-D Lookup
table.

Method 1 Opposing Torque

28

The 1-D lookup table is used to output the direction of


rotation.
If the rotational velocity is negative, the table outputs
a -1.
1 If the rotational velocity is positive
positive, the table
outputs a +1.
This lookup table is used to switch the direction of
applied torque based on the direction of shaft
rotation.

14
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

29

Torque actuator
applies braking torque
to the shaft.

Braking input signal, expected to


be between 0 and 1.

Maximum available
braking torque.

Method 1 Opposing Torque

30

There are some issues with this model, some of


which might be obvious.
p
, we can
First,, when the shaft is near zero speed,
foresee the output of the motion detector
flipping back and forth around zero. As it flips,
the output of the lookup table will flip causing
the braking torque to flip in the opporite
direction.
We should expect that the braking torque will
oscillate rapidly between positive and negative
torques as the tire speed reaches zero.

15
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Method 1 Opposing Torque

31

To prevent wild oscillations, we will slow down


the output of the lookup table with a rate limiter.

Method 1 Opposing Torque

32

The rate limiter has positive and negative slew


rates of 10 per second.
p of the lookup
p table flips
p
Since the output
between -1 and +1, the brake can swing from
full positive torque to full negative torque (or
vise versa) in 0.2 seconds (2/10).
This reduce slew rate prevents wild oscillations
in the applied braking torque when the tire
speed is zero.

16
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Method 1 Opposing Torque

33

Next, we need to limit the controlling input signal to be


between 0 and 1.
We expect this range of inputs, but we will add a
saturation block just in case the user of the brake
subsystem makes a mistake:

Saturation block added.

Method 1 Opposing Torque

34

If the user slams on the brakes, we do not


want to apply a step change in torque to
the brakes.
brakes
Large step changes in torque brake shafts.
To prevent this, we will add a rate limiter
that reduces the rate at which we can
apply torque with the brake.
We will use a positive slew rate of 4 and a
negative slew rate of -10.

17
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Method 1 Opposing Torque

35

The control signal goes from 0 to 1. Having a


positive slew rate of 4 means that the signal will
travel from 0 to 1 in seconds, or 250 ms.
The
Th auto
t industry
i d t says that
th t h
humans iinterpret
t
ta
response time of 250 ms as instantaneous.
Thus a slew rate of +4 on the brake signal will not
appear to have a delay to a human operator.
A negative going slew rate of 10 was chosen so
that
h the
h brake
b k releases
l
quickly,
i kl as this
hi iis not a
change in torque that will break a shaft. (Re
removal of torque rather than applying a step
increase in torque.)

Method 1 Opposing Torque

36

The rate limiter is added as shown below:

Rate limiter block


added.

18
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Method 1 Opposing Torque

37

The last problem we need to address is the same


problem we observed with the driver feedback loop.
When the vehicle speed is zero, the previously
shown
h
brake
b k model
d l would
ld cause th
the simulation
i l ti tto
run extremely slowly.
The cause is the same. The brake would attempt to
hold the vehicle at zero speed by applying a torque
to the shaft that would oscillate between positive to
negative values
values.
The solution is the same. We will use a lookup
table to reduce the torque to zero when the vehicle
speed is zero.

38

Absolute value block.

1-D lookup table.

19
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Method 1 Opposing Torque

39

The 1-D lookup table reduces the braking torque to


zero at low speeds.
For speeds 3 mph and higher, the output of the table is 1
and the braking torque is the torque requested by the
driver.
As the vehicle speed drops from 3 mph to 1 mph, the
braking torque is linearly reduced to zero.

Method 1 Opposing Torque

40

We will place the brake model within a subsystem


so that we can use it several times within the same
model.

20
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Brake Testing

41

We will test the brake with the testing harness


shown below:

Brake Testing

42

The basic idea is to give a large inertia an initial


velocity with the IC block and then use the brake
to slow the speed down to zero.
We will also do a lot of testing with the brakes in
the vehicle model. However, it will take a lot of
work to incorporate the brake into our model, so
we will use the testing harness as a preliminary
test.
The blocks have the values shown on the next
slide.

21
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

43

44

Brake Testing
For an Initial condition of -1000 rad/sec, the plot
of the speed is shown below:
We see that the speed
decreases (in absolute
value) and eventually the
shaft locks at 0.

Demo___________

22
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

45

Brake Testing
For an Initial condition of +1000 rad/sec, the plot
of the speed is shown below:
We see that the speed
decreases and eventually
the shaft locks at 0.

Demo___________

Brake Model Method 2

46

The second method uses many of the same


components as the first method except that we use a
clutch rather than a torque actuator:

23
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

47

Method 2
This model uses a friction clutch to apply
torque in the form of friction between the
rotating shaft (input port of the brake) and
an immovable object (in this case the
housing).
The housing can be thought of an in
infinite inertia. It takes in infinite amount of
toque to make it spin.
The properties of the friction clutch are
shown on the next slide.

48

Brake Method 2
The applied torque is
equal to the normal
force times the times
the radius of the
friction surface times
the number of friction
surfaces. In our case
the peak torque we
can apply is 6000 Nm,
the same as in
method 1.

24
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Clutch Model

49

The clutch has a pressure input (P).


Allowable values are 0 to 1.
As
A th
the pressure signal
i
l goes ffrom 0 tto 1
1,
the applied frictional torque goes from 0 to
6000 Nm (for our settings).

Next, we will test this brake using the


same harness we developed earlier.

Brake Testing Method 2

50

We will test the brake with the testing harness


shown below:

25
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

51

52

Brake Testing
For an Initial condition of -1000 rad/sec, the plot
of the speed is shown below:
We see that the speed
decreases (in absolute
value) and eventually the
shaft locks at 0.

Demo___________

26
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

53

Brakes
The two models appear to behave in a
similar fashion.
We will use the clutch model in the
vehicle.
Dont ask why..

54

Brake Testing
For an Initial condition of +1000 rad/sec, the plot
of the speed is shown below:
We see that the speed
decreases and eventually
the shaft locks at 0.

Demo___________

27
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Advanced Model-Based-System
Design
Lecture 9:
Brakes Part 2: Brake Controller

Incorporating the Brake Model

Now that we have a mechanical friction brake


model, we need to incorporate the brake mdoel
into our vehicle. This will require three steps:
Connecting the brakes to the half-shafts
Modifying the driver model to emit acceleration and
braking signals.
Designing a brake controller so choose between the
foundation brakes (mechanical friction brakes) and
the regen braking (the electric motor).

1
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Connecting the Brakes

The brakes are connected to the rear halfshafts (the shafts between the rear
differential and the wheels
wheels.
We will start with model Lectue9_Model3
that we modified in Lecture 9 and
improved the simulation speed.
Save this mode as Lecture10_Model1.
Add the mechanical brakes as shown:

2
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Connecting the Brakes

The brake model has:


Been resized to fit in a small space.
Two Inports
p
that are labeled as 1:
Inport 1.

Inport 1.

Inports

We notice that both Inports are labeled as


port 1.
This means that the ports are the same port
port.
The Rear Diff and Body subsystem will
only have a single Simulink (not two).
We can use these duplicated Inports instead
of using From and Goto blocks.
The duplicated port was created using the
following procedure.

3
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Inports
Place a single Inport in your drawing:
Inport 1
added here.

Inport 1 not
added here.

Inports

Right-click and drag the Inport you want to


duplicate:
Right-click
Right
click on this
Inport and drag it
somewhere.
Dragged Inport:

4
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Inports

Drag the port


next to the lower
brake
subsystem and
release the
mouse button.
Simulink will ask
if you want to
C
Copy
off
Duplicate the
port.

Inports

10

Selecting Copy will create a new port (number 2


in this case) and will name it with the same
name as the original port and append a 1 to the
name.
Selecting Duplicate Inport will create a port with
the same number (1 in this case) and will name
it with the same name as the original port and
append a 1 to the name.
Duplicating a port does not create a new port. It
creates a connection to an existing port without
using From and Goto blocks.

5
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

11

Inports
Select Duplicate Inport and connect the
port as shown:

12

Inports
When we go top-level block diagram, we will see
that the Rear Diff and Body subsystem only has
a single Brake_Request input:

Single Simulink
input.

6
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Driver Model

13

We now need to update the driver subsystem.


The driver block knows what the desired and actual
p
are and emits the driver torque
q
vehicle speeds
request to try to make the actual vehicle speed
equal the desired speed:
The emitted driver torque request is a number between -1
and +1.
If the vehicle speed is too slow, the driver block emits a
positive signal to accelerate the vehicle
vehicle.
If the vehicle speed is too high, the driver block emits a
negative signal to decelerate the vehicle.

Driver Model

14

Thus, we see that positive driver torque


requests are acceleration requests and
negative torque requests are braking requests
requests.
We can easily split the driver torque request
into two separate signals:
The driver accelerator request which are the
positive values of the driver torque request signal.
Driver brake request which are the negative values
of the driver torque request.

7
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

15

Driver Model
We will use saturation blocks to split the signal in
half. The Driver_Accel_Request is the positive
portions of the driver torque request signal.

Driver_Accel_Requests are always positive.


The sat block passes only the positive
portions of the driver torque request.
Driver torque request signal. It has
both positive and negative values.

16

Driver Model
The Driver_Brake_Request signal is the negative
portions of the driver torque request signal.

Driver_Brake_Requests are always


positive. The sat block passes only the
negative portions of the driver torque
request and then we multiply by -1 because
the brake model requires a positive signal
as well.

8
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Driver Signals

17

Note that:
A positive value in the Driver_Brake_Request
means slow down the vehicle.
A positive value in the Driver_Accel_Request
means speed up the vehicle.

These two signals are one step in preparing


our model for the Hardware-in-the-Loop (HIL)
simulations
i l ti
we will
ill d
do llater
t where
h
th
these ttwo
inputs will come from actual brake and
acceleration pedals.

Driver Block

18

Also note that our driver block now has a


single output.
The Driver_Accel_Request
Driver Accel Request and
Driver_Brake_Request signals are not
contained in the Vehicle_System_Diagnostics
bus.

9
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Brake Controller

19

The meat of this section is the development of a


brake controller.
g brakes ((using
g the electric
We have both regen
motor to slow down the vehicle) and foundation
brakes (mechanical friction brakes).
Foundation brakes result in 100% energy loss
all of the braking energy goes into generating
heat.
Regen braking allows you to recapture some of
the vehicles kinetic energy and store it in the
battery.

Brake Controller

20

Several different concerns will be included in our


braking control strategy:
Fuel efficiency We will create a strategy that uses
regen braking before foundation brakes so that we
maximize the energy we recapture.
Safety
Both regen and foundation brakes are required in case one
method fails.
We need to prohibit regen barking when the battery state of
charge is too high (When the battery is charged, it cannot
accept charge)
charge).

Driver feel We will be switching between regen and


foundation brakes as the vehicle changes speed. We
do not want the driver to notice a difference as we
switch between the two methods.

10
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

21

Brake Controller
We will add a new subsystem to the
Controller called
Acceleration and Braking
Acceleration_and_Braking
The input to this subsystem will be the
Vehicle_System_Daignostic bus.
The Outputs of the system will be:
Motor_Torque_Request
_
q _ q
((responsible
p
for
acceleration and regen braking).
Brake_Request (foundation brake signal)

The Controller is shown on the next slide:

22

Added subsystem.

11
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Accel and Brake Controller

23

An enlargement is shown below.


Note that the outputs of the
Acceleration_and_Braking subsystem are also the
outputs
t t off the
th Controller
C t ll subsystem.
b
t

Accel and Brake Controller

24

Before we build the subsystem, we note that the


motor is responsible for both acceleration and
regenerative braking.
Thus, the motor torque request signal is a
combination of the acceleration request and the
braking request.
A positive acceleration request will be passed to the
motor as a positive torque request.
A positive
iti b
braking
ki requestt will
ill b
be passed
d tto th
the motor
t
as a negative torque request.

12
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Acceleration Signal

25

We will first look at extracting the appropriate signals from the


bus and forming the Motor Torque Request Signal. The
model is shown below:

The Driver_Accel_Trequest is passed directly on to the motor


as the motor is the only component responsible for
accelerating the vehicle. Thus, we will not modify the signal
(yet Later we may do some signal conditioning on the
signal to prevent damage to the vehicle to do driver
enthusiasm)

Acceleration Signal

26

Note that we can add the accel request to the brake


request because when there is a brake request the accel
request is zero, and when there is an accel request the
brake request is zero.
Even though motor accel requests are positive and
motor regen requests are negative, they wioll not cancel
when we add them because because one is always
zero.
Thus, we can form the complete motor torque request
signal by adding together acceleration and braking
requests.

13
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Braking Method

27

We will now create a simple braking metho to


increase energy recovery.
When the driver braking request goes from 0 to 50%
pedal position, the regen braking request will go from
0 to 100%. That is, we will ask for full regen braking
when the brake pedal is 50% depressed.
When the driver braking request goes from 0 to 25%
pedal position, No Mechanical brake request will be
generated.
When the driver braking request goes from 25 to
100% pedal position, the foundation braking request
will go from 0 to 100%.

Braking Method

28

This method:
Allows us to use 100% regenerative braking
for light braking requests.(No foundation
brakes.)
Uses both the foundation and regen brakes
for safety through the use of both braking
systems at the same time.
Creates a dead spot in the brake pedal with
no braking regen braking is disabled (whill wil
happen quite frequently. Need to fix this.)

14
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Braking Method

29

We will use look-up tables to implement


this method. The Simulink block diagram
is shown below:

Braking Method

30

The parameters for the two look-up tables are:

15
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Braking Method

31

Note that a negative brake request is


passed to the motor as a negative torque
request
request.
We have now created a simple braking
controller.
The last thing we need to do is connect
the Brake_Request and
Motor_Torque_Request signals at the toplevel block diagram:

32

16
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

33

Brake Model Test


To test the braking method we will run the FU505
model and plot:

Vehicle, Passenger Tire, and Driver Tire Speeds


The Driver_Accel_Request and Driver_Brake_Request
Battery Voltage
Motor and Generator Currents
Battery SOC
Regen Brake Request and Foundation Brake Request

Show tat your model uses both regen abd


foundation braking.

Lecture 10 Demo 1

Demo___________

34

17
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Braking Results

35

Note the following from the results of the


previous simulation:
We successfully split the driver torque request
into acceleration and Braking requests.
For the FU505, most of the braking is done
through regen braking (which suggests that a
25% pedal throw is only needed for this drive
cycle.

Just for fun, run the Consumer Reports


City cycle and observe the amount of
regen and foundation braking:

Braking Results

36

The Consumer Reports Drive Cycle has


instances of much harder acceleration
and braking than does the FU505
FU505.
The simulation crashes after a while due
to too many zero crossings, which
suggests that the solver is having trouble
simulating the system.
We do see that there are more foundation
braking requests than in the FU505 cycle
because of the heavier braking.

18
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

37

More foundation
braking.

Braking Problem

38

We do notice a problem with the simulation now.


We see this hash that we did no see earlier.

What is this.

19
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

39

Lecture 10 Exercise 1
What is the hash that you are seeing in
the previous slide?
What is the cause of the problem?
Determine a way to fix the problem and
demo the Consumer Reposts City drive
cycle showing that the problem has been
eliminated.
Demo___________

40

Lecture 10 Exercise 2
In Lecture 8 we calculated the fuel efficiency of a
model that used only regen braking to slow the
vehicle.
In this lecture, we have now added foundation
brakes, which can only reduce the efficiency of
our vehicle.
Compare the efficiency of your vehicle from
lecture 8 to the efficiency of this vehicle using of
the FU505 and Consumer Reports City drive
cycles.
Demo___________

20
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Regen Braking and SOC

41

As the battery SOC increases, the batterys capability


of accepting charge decreases. (A fully charged
battery cannot accept charge.)
There are two things we need to consider:
Our control strategy needs to be designed (optimized) so
that the battery remains somewhat discharged so that we
can always take advantage of regen braking (we will not
address this here).
If the battery SOC becomes too high, we need to disable
regen braking.

We will now reduce and, if necessary, disable regen


braking if the Battery SOC becomes too high.

21
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Advanced Model-Based-System
Design
Lecture 11:
Partitioning the System
High-Level Control

Incorporating the Brake Model

We now have a fairly large and complex system.


We would like to arrange it more like a classical
control system and also arrange it to easily
facilitate deploying the models on our Hardware
HardwareIn-the-Loop (HIL) system.
We would like to set up the system in the form of
a controller and a plant. In this case the plant is
everything in our vehicle model except for the
controller and driver block
block.
The controller receives commands from the
driver block and coordinates the subsystem
compoonents inside theplant.

1
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Partitioning the System

We would like to set up a classic-looking control


system.
y
interface to
We will have the driver subsystem
the controller, and then the controller interface to
the plant which contains all of the other
subsystem components of the vehicle except the
logging and visualization subsystem.
We will start with the last model developed in
Lecture 10 and rename it as Lecture11_Model1.
This model is shown next:

2
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Partitioning the System

Separate the subsystem components as shown:

Partitioning the System

We want to make a subsystem out of the


Diagnostic bus, Battery, Electric Motor,
Rear Diff and Body
Body, Generator
Generator, Engine
subsystems.
Select all of these components and then
right-click on one of the selected
components and select Create
Subsystem:

3
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Partitioning the System

When you select Create Subsystem, all of


the selected subsystems will be grouped
into a single subsystem.
subsystem
Rename that subsystem Vehicle_Plant.

4
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Partitioning the System

We now need to do a fair amount of


reorganization and rerouting of some
control signals
signals.
We will start with the driver. The output
signals will be grouped together in what
we will now call the Driver_Controls_Bus.
The model does not need to be modified,
but is shown next:

Driver Block

10

Note that the only reason the driver block needs the
Vehicle_System_Diagnostiocs is because the feedback
system that tracks a drive cycle needs to know the vehicle
speed In a future lecture
speed.
lecture, the driver block will have only
outputs unless we implement a cruise control.

5
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Controller Modifications

11

The Driver_Diagnostics will no longer be part of


the Vehicle_System_Diagnostics bus.
g
go
g directlyy to
Instead,, the driver control signal
the controller, and the controller issues the
appropriate commands to the subsystem
components based on the inputs provided.
Modify the controller as shown next. The only
change on the top level of the Controller is that
the driver controls connect to the controller
through a separate port.

Controller Top Level Changes

12

The changes to the top level of the


controller are shown next:
Goto and From blocks
added.

Ports replaced by Goto blocks.


These signals will be placed in the
Control Signals bus.

Driver_Cojntrol_Signals is now an input and goes


directly to the Acceleration and Braking subsystem.

6
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Controller Top-Level Changes

13

Goto and From blocks


added.
Control_Signals
bus added.

Top Level Changes

14

On the top level, we need to connect the


Driver Controls Bus

7
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Vehicle_Plant Chaqnges

15

We now need to make some changes in the


plant.
y input
p to the Plant is the
The only
Vehicle_Control_Signals bus.
We will leave this signal as a bus because it will
go to every subsystem in the Vehicle_Plant.
Plus, we will be adding many more control
g
in the future. Using
g the Control_Signals
g
signals
but will clean things up a bit.
The Vehicle_Plant has been modified as shown
next:

Vehicle_Plant

16

Note that we are immediately assign a Goto block to the


Control_Signal input.
Note that we have also removed the Driver_Diagnostics
from the Vehicle_System_Diagnostics
Vehicle System Diagnostics bus.
bus

We will be adding additional signals to the


Control_Signals bus, so we will leave it as a bus and
then it will be an input to all subsystem blocks in the
plant.

8
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Vehicle Plant Battery Subsystem

17

We will modify one plant subsystem at a time.


At the moment, the battery has now control
g
This will change
g when we do our wakesignals.
up sequence for the vehicle.
For now, we will add that Control_Signals bus as
an input to the battery, and then terminate that
signal inside the battery subsystem. This way,
the control signals will be ready to use within the
subsystem once the appropriate logic has been
discovered.

Battery Model

18

The battery has been modified by adding a new


port to connect the Control_Signals but to:

At the plant level, we connect the control signal


bus to the battery Controls_Singal input:

9
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Plant Mods Electric Motor

19

The Torque Request for the electric motor


will come from the Motor_Torque_Request
bus
bus.
We will change the input of the
Torque_Request port to a Control_Signals
port. Inside the model, we will need to
extract the motor torque from the Bus.

Electric Motor

20

Inside the electric motor, we need to extract the


Motor_Torque_Request signal from the bus:

And then connect this signal to the torque


request portion of the model:

10
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

More Changes

21

We can make similar changes to all remaining


subsystems within the Vehicle plant:
For the Rear Diff and Body: replace the Brake Request
input by the Control_Signals input and extract the
Brake_Request signal inside the subsystem.
For the Generator : replace the Generator_Torque input by
the Control_Signals input and extract the
Generator_Torque signal inside the subsystem.
For the Engine:
g
replace
p
the Throttle and Engine_On
g _
inputs
p
by a single Control_Signals input and extract the Throttle
and Engine_On signals inside the subsystem.

Plant Model

22

We now have a pretty clean plant model:

11
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Top Level

23

We can now connect the system together at the top level:

This now looks like a classical control system top-level block


diagram:
The controller gets its commands from the driver block and then
issues commands to the plant.
The controller monitors the plant output and modifies its output so that
the plant achieves certain performance criteria.

Top Level

24

For the moment, the Driver block needs the


vehicle speed as well, and this signal is
contained within the
Vehicle_Systems_Diagnostics bus, so we need
to connect this bus to the driver block as well:

12
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Top Level

25

The last thing we need to do is modify the


Display_and_Logging subsystem.
We will place this subsystem at the top
level so that we can display and log
signals in all three busses.

Display and Logging Subsystem

26

This system now has three bus inputs.


We will log every signal in all three
busses
busses.
You will need to rearrange some of the
signals from one bus to another as signals
that were originally in the
Vehicle_System_Diagnostics bus have
been moved to one of the other busses.

13
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Display and Logging Subsystem

27

Enlargements of each
portion of this subsystem
are shown ion the next
few slides.

Display and Logging Subsystem

28

14
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Display and Logging Subsystem

Display and Logging Subsystem

29

30

You cannot see any of the


signals in this slide. This
portion displays all of the
signals in the bus.

15
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

System Test

31

We will now run a test to see that we


connected everything correctly.
We have not changed the model
physically, so the results should be the
same as in Lecture 10.
If there are differences, it is because we
made a mistake in connecting signals.

System Test

32

When we run a simulation, we get an error


that says that we have an algebraic loop!

16
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

33

System Test

Upon further investigation, we find that the algebraic


loop includes the SimDriveline Env, and clutch, and
tire models.
It tturns outt th
thatt using
i the
th clutch
l t h can cause an
algebraic loop.
There are three ways to fix this:
First Method: Do not use a clutch. The only place we are
using a clutch is for the brakes. We can use the brake
model that used the torque actuator rather than the
clutch.
Method 2: Add a memory block
somewhere in the
mode to break the algebraic loop.

34

Clutch Algebraic Loop


In the Simulation
/ Configuration
Parameters
dialog box we can
change the
diagnostics for
Algebraic loops
from error to
warning (This did
warning.
not work in this
case)

Change these to items to


warning.

17
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

35

System Test
Pick the method you would like to use and
run a simulation and vetrify that it
produces the same results for the FU505
as in lecture 10.

Lecture 11 Demo 1

Demo___________

36

Demo the working model of the rearranged system.

18
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Manual Controls

37

Next, we would like to replace the driver


block with manual controls.
Eventually,
Eventually we will drive the vehicle with
these controls in real-time.
For now, we will just add acceleration and
braking signals.
Later, we will add signals for turning on the
vehicle and the gear shift.

Driver Block

38

We will replace the contents of the driver


block with the manual controls shown below:

19
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Driver Block

39

We did not delete the Desired_Vehicle_Speed


signal because it would require extra work on
our part to search through the model and locate
all instances of where this signal is is used.
Instead, we set the driver speed to a constant of
0 so that we can continue to use all of our plots
and post processing files without modification.
The new blocks used in the driver subsystem
are Slider Gain blocks located in the Simulink /
Math Operations library.

Slider Gain

40

If you double-click on one of the slider gain blocks, you


will notice that limits are specified:

This part is a gain block that is controlled by the slider


shown above. The limits on the slider are specified in the
block.
This is a g
gain block. The output
p is the input
p times the
gain, where the gain is determined by the slider.
Note that the slider can be changed during a simulation,
allowing you to change the gain on-the-fly.

20
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

41

Slider Gain

Lower limit of slider


gain.

Upper limit of slider


gain
gain.

Since the limits on the slider gain are 0 and 1,


and the input to the slider is 1, the output of the
slider varies between 0 and 1 as we move the
slider
slider.
We will use these sliders as the accelerator and
brake pedals for driving our vehicle.

Driver Block

42

Note that the driver block no longer needs the


vehicle speed information, so we can delete the
Vehicle_Systems_Diagnostics bus:

21
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Accel and Brake Pedals

43

We would like to add some logic to protect


the driver from himself and protect the
vehicle from a rogue driver
driver.
We will ad some logic that prevents the
accelerator pedal and brake pedal from
being depressed at the same time.

Accel and Brake Pedals

44

We will implement the following rules:


If the brake pedal is depressed, the accelerator
pedal signal is set to zero, even if the accelerator
pedal is being depressed. (We will always brake
and disable the accelerator pedal whenever the
brake pedal is depressed.)
If the brake pedal is not depressed, the value of
pedal is p
passed to the system.
y
the accelerator p

22
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Controller Modifications

45

The accelerator and brake signals are


passed directly to the
Acceleration and Braking subsystem that
Acceleration_and_Braking
is contained within the controller.
We will add a signal conditioning block
where the signals first enter the
Acceleration_and_Braking Subsystem:

Acceleration and Braking Subsystem

46

The contends of the Pedal_Conditioning


subsystem are

23
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Acceleration and Braking Subsystem

47

We see that the Brake_Pedal signal is basically passed


to the system with little modifications.
Saturation blocks are used to limit the signals from 0 to 1
in case we make a mistake and put in too large of a
signal.
The Slew rate of the limiter is set to +/-10 per second to
eliminate very sharp braking and acceleration requests.
The threshold of the switch is set to 0.05. The switch
sets the acceleration pedal signal to zero if the Brake
pedal
d l iis d
depressed
d more th
than 5% (th
(the 0
0.05
05 th
threshold).
h ld)

Test Drive

48

We are now ready to drive the vehicle with the


manual controls.
Set the simulation time to inf
inf.
Set the simulation to Normal. (Not the accelerator
or rapid accelerator.
In the scope plot you which to use, se thet Tiome
range to 100.

S
Sett up your windows
i d
as shown
h
nextt and
dd
drive
i
the vehicle and verify the logic of the accel and
brake pedals:

24
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

49

Lecture 11 Demo 2
Demo___________

25
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Advanced Model
Model-Based-System
Based System
Design
Lecture 12:
System Initialization
Shifting Logic
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

System Initialization
We now have a vehicle that we can drive
with manual accelerator and brake pedals.
With most vehicles, you cannot just hump
press the accelerator p
pedal and
in and p
drive away. The following usually occurs
You turn the key to start the vehicle.
The vehicle goes through a component check.
The vehicle systems are enabled
enabled.
You must then shift the vehicle out of park into
forward or reverse.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

System Initialization
We will add a parallel Stateflow chart to go
through the vehicle startup and shifting
procedures.
This Stateflow chart will enable the
charge-control Stateflow chart that
g
g
charging
g g
controls the engine-generator
system.
We will start with model
Lecture12_Model0, which will be passed
out in class.
class
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

System Initialization
First, we will add a switch to the driver block that
simulates the key switch of a conventional
vehicle.
hi l
Our vehicle does not have a starter, so all we
need is an off
off-on
on switch
switch.
We will use a manual switch to switch the signal
between 0 and 1
1.
We will add this to the Driver_Controlls bus, and
this signal will go directly to the controller
controller.
We will Name the signal Vehicle_Key.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Driver Subsystem

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Controller
Next
Next, we will add a second Stateflow chart
chart.
The only inputs to this chart will be the
Vehicle Key signal and a clock
Vehicle_Key
clock, which is the
same clock as used for the charge controller.
This chart has a single output, which is the
Vehicle_Ready signal.
The value of this signal
g
is initialized to zero and
will remain zero until we check the status of the
battery, motor, generator, and engine.
We will also add a variable called State for
debugging purposes.
Add a Stateflow chart as shown:
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Controller Modifications

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Controller
The contents of the chart only check to see the
status of the Vehicle_Key switch.
Note that,
that for the moment
moment, the vehicle_Key
vehicle Key
switch only tells the vehicle to turn on. It is not
capable
p
of turning
g the vehicle off.
(We will implement this later because we need
to do a controlled shut-down procedure.)
The beginning of the Startup_and_Shifting chart
are shown next:

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Controller
There is an error in this
diagram. Something was left
out. You may find it later

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Controller
The Charge_Controller
Charge Controller Stateflow chart must also
be modified.
We want to specify that the engine and
generator not be enabled until until the
Startup_and_Shifting
p_
_
g chart check out all of the
components and signals that the vehicle is
ready.
We will need to add the Vehicle_Ready signal as
an input to this chart.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

10

Controller
Modify the Charge_Controller
Charge Controller chart as shown:

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

11

Charge_Controller
We will add an exit condition to the
initialization state of the Charge-Controller
Stateflow chart that will not allow the
vehicle to enter the normal
charge/discharge cycle until the vheicle is
ready.
Note that this modification does not
graceful shutdown.
address the issue of a g

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

12

Charge Controller
This state transition guard
added.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

13

Battery Model
Next we will add a startup handshake for the battery and
some operational details.
The battery has a control signal that must be sent to it and a
status signal that it sends to indicate its state.
The battery has an internal contactor. When the contactor is
open, the battery voltage is zero and the pack is
disconnected from the system.
When the contactor is closed
closed, the battery is connected to
the system (motor and generator in our case) and the output
voltage is that indicated by our model.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

14

Battery Model
Connect Command Input signal received by
the battery
1 Close the contactor.
0 Open Contactor.

Pack State output


o tp t signal sent by
b the Batter
Battery

0 Unavailable
1 Idle
2 Disconnected (Contactor Open)
3 Precharging
g g
4 Connected (Contactor Closed).

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

15

Battery Model

The battery model needs to be modified as follows


The Connect Command must be added as part of the Control_Signals bus.
A switch is added to the model so that the battery voltage is switched between zero
and the model voltage depending on the value of signal Connect
Connect Command
Command.
When the battery receives the a connect command of 1, after a 3 second delay, the
contactor switch will close and the battery voltage will be equal to the model
voltage.
If the connect command goes to zero, the contactor should open immediately.

A diagnostic output should be added that contains the Pack state


signal. The pack state signal should have the following values
d
depending
di on th
the state
t t off th
the b
battery
tt
model:
d l
2 The contactor is open, the battery is disconnected, and the battery voltage is
zero.
3 During the three second delay when the battery is connecting
connecting.
4 The contactor is closed. The battery is connected, and the voltage is equal to
the modeled voltage.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

16

Battery Model
The Startup_and_Shifting Controller must be
modified as follows:
After Vehicle_Key = 1, the controller must issue the
connect command.
Before proceeding to the next state
state, the controller
waits for the Pack state to Equal 4.
If the pack state does not go to 4, do not proceed and
do not allow the driver to use the vehicle. (Indicate an
error and hold in an error state.)
If the pack state changes to 4
4, allow the controller to
proceed to the next state.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

17

Lecture12 Exercise 1
D
Demonstrate
t t the
th operation
ti off the
th Vehicle
V hi l
Key Switch and the Battery Connect
command.
d Sh
Show the
th ffollowing:
ll i
Startup_and_Shifting chart as it walks through
th startup
the
t t procedure.
d
The battery voltage showing the operation of
the contactor
contactor.
The battery status signal showing the various
states.
states
Show a plot similar to the one shown on the
Demo___________
___________
next two slides
slides.
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

18

Lecture12 Exercise 1

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

19

Battery Model Exercise 1

Pack was commanded to connect,


but there was an error and it never
closed the contactor.

Pack
P
k state
t t stays
t
att
2.

Contactor never
closes.

State goes to 4
indicating an error.
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

20

Motor and Generator Models

21

Next
Next, we need to add the handshake and status
signals for the Motor and generator models.
The Motor and Generator models have a control
signal that must be sent to it and a status signal that
it sends to indicate its state.
Enable Command Received by Motor or Generator
1 Enable Component.
p
0 Disable Component.

Motor/Generator State Sent byy Motor or Generator


0 Motor/generator Not Ready
1 Motor/generator Ready

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Motor and Generator Models

22

The Motor and Generator models need to be modified


as follows
The Enable Command must be added as p
part of the vehicle
Control_Signals bus.
The motor/ or generator will only be ready after it receives
th enable
the
bl command
d and
d th
the b
battery
tt
voltage
lt
iis greater
t th
than
200 V.
The motor or generator can produce no torque if they are not
enabled or the battery voltage is below 200 V.
A diagnostic output should be added for the motor or
generator
t state
t t signal.
i
l This
Thi signal
i
l should
h ld h
have th
the ffollowing
ll i
values:
1 Component
p
OK and enabled.
0 The component is disabled. This occurs if the enable signal goes
to zero or the battery voltage drops below 200 V.
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Controller Modifications
The start-up sequence must be modified:
After the battery has passed its start-up test
the enable command should be sent to the
motor. The controller then waits to receive
th status
the
t t off the
th motor.
t
If the status is 1, proceed to the generator check.
If the status does not change to 1 after 1
1.5
5
seconds, enter an error state and hold.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

23

Controller Modifications
The start-up sequence must be modified:
After the motor has passed its start-up test the
enable command should be sent to the
generator. The controller then waits to
receive
i th
the status
t t off the
th generator.
t
If the status is 1, set Vehicle_Ready to 1 and go to
the Park State (for now do nothing in this state
except set Vehicle_Ready to 1).
If the status does not change to 1 after 1.5
seconds, enter an error state and hold.

You might want to use the After command in


St t fl
Stateflow.
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

24

25

Lecture12 Exercise 2
D
Demonstrate
t t the
th operation
ti off the
th Vehicle
V hi l Key
K
Switch, Battery Connect, Motor Enable, and
G
Generator
t Enable
E bl C
Commands.
d Sh
Show th
the
following:
Startup_and_Shifting
S
d Shif i chart
h as iit walks
lk through
h
h the
h
startup procedure.
The
Th status
t t signals
i
l showing
h i th
the various
i
states
t t off
each component.
Show a plot similar to the one shown on the next
Demo___________
two slides.
Plots are shown on the next two slides
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Lecture12 Exercise 2

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

26

Lecture12 Exercise 2

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

27

Lecture 12 Exercise 3
We now wish to add shifting logic to our model
model.
We will need to add three pushbuttons for forward,
reverse and park
reverse,
park. These switches go in the Driver
block.
Park When the driver p
presses this p
push-button, it
indicates that the driver wants to have the transmission
enter the park state. In this state, the accelerator pedal
input is ignored.
ignored
Forward - When the driver presses this push-button, it
indicates that the driver wants the vehicle to move
forward when the accelerator pedal is pressed.
Reverse - When the driver presses this push-button, it
indicates that the driver wants the vehicle to move
backwards when the accelerator pedal is pressed.
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

28

Lecture 12 Exercise 3
We also need some dashboard indicator lights for
the driver.
Park LED This LED is illuminated when the vehicle is in
Park.
Forward LED This LED is illuminated when the vehicle
is in Forward.
Reverse LED This LED is illuminated when the vehicle
is in Reverse.
Error LED This LED illuminates to alert the driver if
there is a problem
problem.
Vehicle Ready LED This light illuminates when the
vehicle has passed all component checks.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

29

Lecture 12 Exercise 3
Note that the controller determines when
we are in park, forward or reverse.
We will place these indicators in a new
y
within the Vehicle_Plant called
subsystem
Dashboard.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

30

Lecture 12 Exercise 3

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

31

32

All logic for the accelerator pedal, brake pedal and pushbuttons resides in the controller
controller. The controller emits signals for
the traction motor torque and foundation brakes. The driver
block just contains the driver input sensors.
At vehicle startup, after checking that the status of each
component is correct, the vehicle should enter the park state.
To shift out of park into either forward or reverse
reverse, the following
sequence must occur:
The driver must depress the brake pedal by 50% or more.
The driver can then press the forward or reverse buttons.
When the button is pressed, the appropriate indicator light is illuminated
and the vehicle shifts into either forward or reverse.
If the vehicle is in park and the brake pedal is depressed less than 50%
and the forward or reverse buttons are pressed, nothing happens and
the vehicle remains in Park.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Forward State

33

The controller takes the accelerator p


pedal and
brake pedal signals and modifies them
appropriately so that
The traction motor increases the vehicle speed in the
forward direction when the accelerator pedal is
depressed.
depressed
The traction motor and foundation brakes decrease
speed in the forward direction when the brake pedal is
depressed.
To exit the forward state, the following items must be true
simultaneously:
The brake pedal must be depressed by more 50% or more.
The vehicle speed should be less than 1 mph.
The driver must press the Park or Reverse buttons.
If the Park, Reverse, or Forward buttons are pressed while the above
conditions are not true, the buttons are ignored.
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Reverse State

34

The controller takes the accelerator p


pedal and
brake pedal signals and modifies them
appropriately so that
The traction motor increases the vehicle speed in the
reverse direction when the accelerator pedal is
depressed.
depressed
The traction motor and foundation brakes decrease
speed in the reverse direction when the brake pedal is
depressed.
To exit the reverse state, the following items must be true
simultaneously:
The brake pedal must be depressed by more 50% or more.
The vehicle speed should be less than 1 mph.
The driver must press the Park or Forward buttons.
If the Park, Reverse, or Forward buttons are pressed while the above
conditions are not true, the buttons are ignored.
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

35

Lecture12 Exercise 3
D
Demo off everything
thi working.
ki
I will try to brake your model.

Demo___________

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

4/22/2009

Introduction to Model-Based
Systems Design
Lecture HIL1:
Introduction to Hardware-in-theLoop

HIL

HIL is a simulation method that allows us


to test our controller, controller hardware,
and the wiring interface on a virtual plant
before testing the controller, controller
hardware, and wiring interface on the real
plant.
This is yet another level of testing we can
do before
f
deploying our design in the real
world.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

4/22/2009

HIL
Remember that our goal is to design and
implement a controller for real and
complicated physical system.
system
Controller

We are designing and


implementing this.

Interface

Plant

We are controlling physical


devices within this plant.

HIL

The plant is very complicated and difficult


to understand, expensive to fix if we break
something and could be dangerous if
something,
controlled improperly.
HIL allows us to test our controller on the
target hardware we will be using, with the
wiring interface we will be using.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

4/22/2009

HIL

Instead of taking our controller and seeing


if it works by connecting it to the actual
plant to be controlled,
controlled we will connect it to
a computer running a model of the plant.
The model of the plant will have the same
interface as the physical plant. It will
have the same physical inputs and outputs
as the physical plant.

HIL

So, instead of connecting our controller to


the real plant, we will connect it to a
computer running a model of the plant (a
computer pretending to be the plant).
We can then test our controller without
worry of damaging the physical plant.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

4/22/2009

HIL

HIL will allow us to test:


The control algorithm.
The controller hardware (the target computer
on which the controller is deployed).
The control algorithm as it runs on the target
hardware.
The physical interface between the Controller
and the plant
plant. (Assuming that the harness we
use in the test is the same harness we will
use when we connect to the physical plant.)

HIL

Up to now we tested the control algorithm


on:
A Windows system running on a PC essentially using a continuous system with a
time step that is variable and can become
very small when needed, and floating point
calculations.
Using xPC target Using a fixed time step
and possibly discrete control blocks, but using
a more powerful computer than will be used
for the target.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

4/22/2009

HIL
HIL simulations allow us to test the control
algorithm on the hardware that will be
used to implement the controller
controller.
The benefit is that we can test the
controller using a model of the plant so
that there is no danger of personal injury
or physical damage to the plant.

10

HIL
We will be using the test platform below:

Controller

Interface

Controller deployed on an
MPC5554 computer.

Computer Model of the


Plant

National Instruments PXI real-time


computer running a model of the
plant.
l t

Same physical interface as


in the actual system
(Wiring for analog signals
in our example.)

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

4/22/2009

11

HIL
Once controller testing is complete and the
controller passes all tests and satisfied all
requirements we just plug the controller
requirements,
into the physical plant.
If the models are accurate and the
interface is the same, the controller should
be able to control the physical plant as
well as it controlled the model off the plant.

12

HIL
Completed System:

Controller

Interface

Controller deployed on an
MPC5554 computer.

Physical Plant

The actual plant that we wish to


control.

Physical interface of the


actual system

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

4/22/2009

HIL

13

We will deploy the controller on an


MPC5554 computer and the plant on a
National Instruments PXI real-time
real time
computer.
This requires us to learn National
Instruments hardware and software.
We will break the process into two steps.
First, we will simulate the entire model in
real-time on a National Instruments PXI
computer.

HIL

14

This model will be similar to what we did


with xPC, except we will use National
Instruments tools
tools.
We will learn how to use:
National Instruments Simulation Interface
toolkit.
National Instruments LabVIEW
National Instruments Measurement and
Automation Explorer (MAX)

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

4/22/2009

HIL

15

In this step, we will not split apart the plant


and controller. Both will remain in the
same model and be simulated on the
same real-time target (National
Instruments PXI Computer).
This will allow us to learn the National
Instruments tools and how to use
MathWorks models with hardware and
software from other vendors.

HIL

16

In the Second step, we will split the controller and


plant into separate models.
The Plant will run on a National Instruments PXI
t
target.
t
The controller will run a Freescale MPC5554
target.
The Plant will run on a National Instruments PXI
target.
We will connect the two targets with a wiring
harness and some interface electronics (a low
pass filter).

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

4/22/2009

HIL

17

We will use the RAppID toolbox and


associated Freescale tools to deploy the
controller on the Freescale target
target.
We will use the Simulation Interface
Toolkit and associated National
Instruments tools to deploy the plant on
the National Instruments target.
The plant and controller models are
mature and have been developed with
MathWorks tools.

HIL

18

To learn the National Instruments tools We


will deploy a small model developed in a
previous class on a PXI Target
Target.
Create a new folder called Lecture13.
Copy file Lecture13_Model0.mdl into this
directory and rename the model
Lecture13_Model1.mdl.
Copy the init file as well.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

4/22/2009

Stand-Alone Model

19

This model was created to run on an xPC


target, so we need to make a few
changes
changes.
The starting model is shown below:

Model Modifications

20

The controls for the desired speed and number


of bulbs will be front panel LabVIEW controls, so
we can eliminate the Simulink sliders for Speed
and Number of Bulbs:

Slider deleted.

Slider deleted.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

10

4/22/2009

Top-Level Modifications

21

We would like to display the real time in


our front panel. To do this, we will create
an integrator at the top level of our model
and integrate a constant (equal to 1).
The value of the integral will be the
elapsed time since the simulation started.
Add the blocks below to your top-level
model:

Top-Level Modifications

22

The sample time of the


integrator should be set
to the fixed step size
specified in the simulation
configuration parameters.
This was a value that we
specified in the init file.
Set the parameters for
th iintegrator
the
t
t as shown:
h
Sample_Time specified here.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

11

4/22/2009

23

Top-Level Model
Your top-level Model should be as shown:

Note that this signal is labeled.

Controller Modifications

24

The controller contains a number of blocks that


were added do display information for xPC. These
blocks are no longer needed and can be deleted:

Delete these components.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

12

4/22/2009

Controller Modifications

25

To make connections between the LabVIEW


front panel and the Simulink model easier, we
will add two gain blocks to the model as
shown next.
These gain blocks will make it easy to identify
signals and label front panel controls:

Controller Modifications

26

Gain block added and


renamed to Desired rpm.

Gain block added and


renamed to Scaled rpm.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

13

4/22/2009

Plant Model Modifications

27

The only changes we need to make to the


plant are in the encoder model.
This model contains an xPC Target Scope
block that must be deleted:
Delete this block.

Plant Model Modifcations

28

Label the signal at the encoder output


Plant_RPM.

This signal was labeled.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

14

4/22/2009

Model Modifications

29

We are now done with modifications to the plant


model.
g to specify
p
y that
We need to make some changes
the MathWorks Real-Time Workshop creates a
DLL for the National Instruments PXI target
rather than the xPC Target.
From the Simulink menus, select Simulation
and the Configuration Parameters (or type Ctrl
e.)

Model Modifications

30

Solver
selected.
Fixed Step solver
selected because we
will be running in realtime on a target.

Step size set to


Sa p e_Time.
Sample
e Thiss
value is set in the init
file.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

15

4/22/2009

Model Modifications

31

nidll.tlc specified for


the target file.
Real-Time
Workshop
selected.

Nidll.tlc specified that when we build the model,


a dll file that can run on an National Instruments
target will be created.

Creating the DLL File

32

Click the OK button.


We are now ready to create the Dynamic-Link
y ((dll).
)
Library
A dll file is a compiled version of the model that can
be executed on the target. The dll has no inputs or
outputs, and we will need to create a LabVIEW
shell to connect to the inputs and outputs.
yp ctrl-d to check y
your model for errors.
Type
If there are no errors, type ctrl-b to build the model
and create the dll file.
You will see the dialog shown in the next 2 screen
captures.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

16

4/22/2009

33

34

Build was
successful.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

17

4/22/2009

Creating a DLL file

35

If the build was successful, a dll file will be


created in a new sub-directory. My model
was named Lecture13_Model1.
Lecture13 Model1
The new directory that was created is named
Lecture13_Model1_nidll_rtw.
The dll is located in this directory and is called
Lecture13_Model1.dll.

W
We will
ill need
d tto point
i t tto this
thi file
fil when
h we
set up our LabVIEW front panel.

National Instruments Targets

36

Now that we have created the DLL for our


model, we need to create a LabVIEW shell
to specify the inputs to the model and
display the model output.
We can also use the LabVIEW shell to
tune the controller parameters.
Before we create our LabVIEW shell, we
need to identify the PXI target on which we
will run the model.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

18

4/22/2009

National Instruments Targets

37

We will assume that you have already set


up your National Instruments PXI target, it
is running properly,
properly it has the correct
software installed, and it is plugged into
the network.
For this exercise, we need to discover the
IP address of your PXI target.
There are three ways to discover the IP
address of a PXI target connected to the
network.

National Instruments Targets

38

Ask someone that knows the IP address.


Some PXI controllers have a VGA output
for a monitor.
monitor When the system starts up
up,
it will display the IP address.
Use the National Instruments
Measurement & Automation Explorer
(MAX)
MAX can be used to discover all PXI targets
on the local subnet.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

19

4/22/2009

National Instruments MAX

39

Run the National


Instruments
Measurement and
Automation Explorer

National Instruments MAX

40

MAX is the software that allows National


Instruments hardware and software to
work together seamlessly.
seamlessly
We will only show how to use MAX to
discover systems on your local subnet and
to add remote systems for which you
already know the IP address.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

20

4/22/2009

National Instruments MAX

41

We will assume that this is the first time


that you have run MAX.
If this is the case,
case MAX will only show you
Real-Time targets on your local Subnet.
When MAX runs, you will see the next
screen:

42

Click on this plus sign to


expand the tree and view
National Instruments RealTime targets on your local
subnet.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

21

4/22/2009

National Instruments MAX

43

My MAX shows a single system on the


local subnet:

Click on this plus sign to


expand
d th
the ttree and
d
properties of this target.

National Instruments MAX

44

We would like to view the network settings


for this target:
Click on this text to see the
network properties of the
target.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

22

4/22/2009

National Instruments MAX

45

The properties of our target are shown


below:
In a future exercise,, we will
use part of the tree to
configure the cards installed
on the target.

You can view and install software on


the Target in this part of the tree. The
versions of software on your PC must
match the versions of software
installed on the target. We will
assume that the software has been
set up correctly.

46

Target Selected.
The IP address of this target is
192.168.1.107. We will need
thi address
this
dd
iin order
d tto run our
model on this target.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

23

4/22/2009

National Instruments MAX

47

If you know the IP address of a target that


is not on your local subnet, you can view
the target by adding it as a remote target
target.
In MAX, right click on Remote Systems
and then select Create New:

National Instruments MAX

48

Select Remote Device and then click the Next


button.
Enter the IP address
of the known system
and click the Finish
button.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

24

4/22/2009

National Instruments MAX

49

If you have access to the system (and


there is not a firewall set up to block
access) you can view your remote target
target.
Once you add remote systems,
MAX will remember those
systems the next time you run
itit.
For our example, all we need to
know is the IP address of our
target.

National Instruments LabVIEW

50

Next, we want to run LabVIEW and create a


shell to communicate with our model DLL.
Run LabVIEW:

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

25

4/22/2009

National Instruments LabVIEW

51

Click here to create


a new blank
bl k VI
VI.

National Instruments LabVIEW

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

52

26

4/22/2009

LabVIEW

53

Before we begin, we would like to save the


VI.
Select File and then Save from the
LabVIEW menus.
Save the file in the directory where you
saved your Simulink model.
Save the VI as Motor Generator Shell.VI

Motor Generator Shell

54

Our motor-generator system has two user


inputs (desired speed and number of light
bulbs) and one output (motor speed at 2
2.5
5
V per 1000 rpm).
We will place two controls and one chart in
the LabVIEW front panel and connect
them with the Simulink model signals.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

27

4/22/2009

55

Right-click here.

Left-click here to
select this control.
control

Hover here.

Motor-Controller Shell

56

When you left click on the control, it becomes


attached to the mouse and the menu
disappears.
Place the control in your front panel by left
clicking on the location you wish to place it:

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

28

4/22/2009

Motor Generator Shell

57

Note that the name is highlighted, so that we can


easily rename it.
Change the name to Number of Bulbs.

Motor Generator Shell

58

Next, we want to select the entire


indicator.
Click and drag the left mouse as shown

Click and hold the


left mouse button
h
here.

Drag the mouse to


here.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

29

4/22/2009

Motor Generator Shell

59

When you release the mouse button, the


entire indicator will be selected (both the
label and the indicator field)
field).

Entire control
selected.

Click on the font pull-down menu as


shown next:

Motor Generator Shell

60

Change the font to 18 pt, bold, and Arial.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

30

4/22/2009

Motor Generator Shell

61

Next, we want to change the control to


select and display an integer between 0
and 6
6.
Right click on the control and select
properties:

You are encouraged to play with the


settings in this tab to see their effect on
the display of the control.

62

Select the
Display Format
tab.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

31

4/22/2009

63

There are several ways we could display a


single digit. We will only show one here.

Click here to
select the
Advanced
editing mode.

64

Replace this text with


%2.0f. This means
display a floating point
number with a total of
2 digits and 0 digits
displayed after the
decimal point.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

32

4/22/2009

65

Format string changed.

Next, select the Data


Entry tab and fill it in as
shown on the next slide.

66

The selected settings for the control force


the choice of an integer between 0 and 6.

Option is not selected.

Click the OK button


to apply the
changes and return
to the front panel.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

33

4/22/2009

LabVIEW Front Panel

67

Try entering a number


here.

The display may look unchanged, but if


you enter a number into the field, you will
notice that you can only specify an integer
b t
between
0 and
d6
6.

LabVIEW Front Panel

68

Next, we would like to create a control for


the desired speed.
We will use a fill slide and constrain it to
have a value between 0 and 1 with 0.1
step increments.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

34

4/22/2009

69

Right-click here.

Left-click here to
select this control.
control

Hover here.

Motor-Controller Front Panel

70

When you left click on the control, it becomes


attached to the mouse and the menu
disappears.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

35

4/22/2009

Motor-Controller Front Panel

71

Place the control in your front panel by left


clicking on the location you wish to place it:

Motor-Generator Front Panel

72

Change the name of the control to


Desired Speed.
Change the font to 18 pt Arial bold using
the same techniques we used for the
numerical control.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

36

4/22/2009

Motor-Generator Shell

73

Next, we want to change the control to


select a number between 0 and 1 with 0.1
steps
steps.
Right click on the control and select
properties:

You are encouraged to play with the


settings in this tab to see their effect on
the display of the control.

74

Select the Data


Entry tab.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

37

4/22/2009

75

The selected settings for the control force


the selection of a value between 0 and 1
with 0.1 size steps.
Option is not selected.

Select the Scale tab and change the


maximum value to 1.
Click the OK button when done.

76

Select the Scale


tab.

Maximum
specified as 1.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

38

4/22/2009

77

Front Panel
Click on the control and use the
handlebars to resize the fill slide:

Motor-Generator Front Panel

78

The last thing we want to do


is add a chart to display the
Motor RPM.
Right-click here.
Left-click here to
select Chart icon.

Hover here.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

39

4/22/2009

Motor-Controller Front Panel

79

When you left click on the chart, it becomes


attached to the mouse and the menu
disappears.

Motor-Controller Front Panel

80

Place the control in your front panel by left


clicking on the location you wish to place it:

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

40

4/22/2009

Motor-Generator Front Panel

81

Change the name of


the chart to Motor
Speed (2.5 V per 1000
rpm)
rpm).
Change the font to 18
pt Arial bold using the
same techniques we
used for the numerical
controls.
Resize the chart to fit
the available space in
the window:

Motor-Generator Shell

82

Next, we want to change the chart to


display 20 seconds of data and change
the y-axis
y axis to have a scale of 0 to 8
8.
Right click on the chart and select
properties:

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

41

4/22/2009

The first thing we will do is change the line


thickness and color of the trace. Select the
Plots tab and make the selections shown
below:

83

Select the Plots


tab.

Yellow line color


selected.
selected

Thicker line
selected.

84

Select the Scales tab and make the


changes shown below to specify that the
time axis have a range of 20 seconds:

X-Axis selected.

Select the
Scales tab.

Time range
specified as 0 to
20.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

42

4/22/2009

85

Next, make the changes shown below to


specify that the Y-axis have a range of 0 to
8:
Autoscale not
selected.
Y-Axis selected.

Range specified
as 0 to 8.

We are done
with the
changes for
the chart..
Click the OK
button when
done.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

86

43

4/22/2009

Motor-Generator Shell

87

We have now constructed a basic front


panel for our Motor-Generator system.
The next step is to use the National
Instruments Simulation Interface Toolkit
(SIT) to connect the front panel controls
and chart to the DLL we created with
Simulink.
Save your LabVIEW model before
continuing.

Simulation Interface Toolkit

88

We are now
ready to connect
our front panel to
the Simulink
model compiled
into a DLL.
From the
LabVIEW menus,
select Tools and
then SIT
Connection
Manager:

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

44

4/22/2009

SIT Connection Manager

89

We will be running our model on a National


Instruments PXI real-time target, so click
here to select Real-Time Target.

We need to specify the DLL we


created for the Simulink model. Its
name should
h ld b
be HIL
HIL_Model1.dll
M d l1 dll
and it is located in directory
Lecture13_Model1_nidll_rtw.

SIT Connection Manager

90

Model
selected.

We must now select our target. If your


PXI target is on the local subnet, you
can use this option. You do not need to
know the IP address of the target for
this option.

If the target is not on the local


subnet and you know the IP
address of the target, you can use
this option.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

45

4/22/2009

SIT Connection Manager

91

My target is on the local subnet:


I will select this option.

To detect PXI systems on the local


subnet, click on this + sign. (Make sure
that your local PXI systems are
plugged in to the network and that the
power is turned on.)

Sit Connection Manager

92

In my system, the SIT Connection


Manager located one PXI system:

Click on the PXI target that you want to


use and then click the OK button. If you
do not have any PXI systems listed
here you may need use the option for
here,
remote systems and specify the IP
address of the target manually.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

46

4/22/2009

SIT Connection Manager

93

After selecting the target, we return to the


SIT main dialog box with the target and
model specified:

SIT Connection Manager

94

The last step we need to take is to specify


connections between our front panel and
the Simulink model
model.
Click on the Mappings
category to specify
connections between
the Simulink model and
the front panel.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

47

4/22/2009

SIT Connection Manager

95

The dialog box now lists the LabVIEW


controls and charts in the front panel. We
need to manually connect each to a signal
in the Simulink model.

Controls and charts on


the front panel.

The control we labeled as


Number of Bulbs is selected.

96

Simulink Model
We would like to connect this to the
constant block in the top level of our
Simulink model
model. The model is shown
below as a reminder:

Looks like we want to connect the


control in the front panel we
labeled as Number of Bulbs to
this constant in the Simulink
model called One Bulb.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

48

4/22/2009

97

SIT Connection Manager


Font panel control Number of
Bulbs is selected.

Click this button.

Click on this + sign to


see the properties we
can connect to in
constant One Bulb.

We want to connect
to this constant (One
Bulb).

Sit Connection Manager

98

We can connect the front panel control to the


value of the constant. This will allow us to
change the value of the constant with the front
panel control.

The value of constant One Bulb


is selected. Click the OK button to
connect this to the front panel
control we called Number
Number of
Bulbs.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

49

4/22/2009

SIT Connection Manager

99

The Dialog box now shows that we have


connected the front panel control to the
Simulink constant
constant.

LabVIEW front panel control


Number of Bulbs connected to
the value of Simulink constant
One Bulb.

SIT Connection Manager

100

Repeat the process to connect the front panel


control called Desired Speed to the value of
the Simulink constant named Desired Speed
(RPM):

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

50

4/22/2009

SIT Connection Manager

101

The last thing we need to do is connect the


Motor Speed chart to the encoder output signal
in the Simulink model. The Simulink encoder
model is shown below:

This shows us that we need to connect the chart


to the output of he gain block labeled Gain in
the Encoder subsystem of the Simulink model.

SIT Connection Manager

102

Select the Motor Speed chart and click the


Change Mapping button:

Motor Speed chart (it is classified


as an indicator) is selected.

Click here.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

51

4/22/2009

103

Encoder Mapping
Expand the Plant subsystem and then the Encoder
subsystem until you see the gain with the output
port labeled as Plant_RPM. If you recall, we
labeled the signal out of the gain block in the
Encoder as Plant_RPM.
Output port of the
encoder gain block
selected.

Click the OK button to map the


LabVIEW front panel chart to
this signal in the Simulink
model.

SIT Connection Manager

104

We have now mapped all of the LabVIEW


front panel objects to the Simulink DLL.

When we click the OK button, the SIT


Connection Manager will write the LabVIEW VI
to run the Simulink DLL on the remote target and
establish communication between the front
panel and the real-Time target.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

52

4/22/2009

LabVIEW Front Panel

105

The front panel has been modified with


controls to run the model.

Controls added by
the SIT Connection
Manager.

Block Diagram

106

If you open the block diagram window, you will


see the block diagram created by the SIT
Connection Manager. We will not discuss the
operation of the various components
components.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

53

4/22/2009

Front Panel Controls

107

The front panel controls added by the SIT


Connection Manager have the following
functions:
Run the Simulation.
Pause the simulation.
Stop the Simulation.
Edit parameters.
Remap front panel controls and indicators
indicators.
Show simulation details
Stop the front panel VI but allow the DLL to keep
running on the remote target.

Running the Model

108

We are now ready to run the model. Click


on the RUN
button as shown:

Click here.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

54

4/22/2009

Running the Model

109

When you click the Run button,


LabVIEW will connect to the target and
begin downloading the model and
related VIs:

Running the Model

110

You might get the notification:

This message is notifying us that there are


already some VIs that are present on the target
that are not needed for the project we want to
run. This is not a problem, so click the OK
button.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

55

4/22/2009

111

Running the VI
The model will continue to download:

112

Running the Model


When the download is complete, the front
panel will look a little different:
The grid is gone. This
indicates that the VI is
running on our local PC.
The Simulink DLL is not,
however, running on the
remote target.

Click here to run the


Simulink DLL on the remote
PXI target.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

56

4/22/2009

113

Running the Model


When you click the Run button, the
Simulink DLL will run in real-time on the
remote target
target.

Desired Speed control is


set to max.

Model takes off and goes


past 8 because the
Desired Speed control is
set to max.

Running the Model

114

You can now change the number of bulbs


and the desired speed and watch the
system respond in real-time
real time.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

57

4/22/2009

Stopping the Simulation

115

To stop the simulation on both the remote


target and your local computer (which is
running the display panel)
panel), click the Stop
Simulation button :

Click here to stop the


simulation on both the
remote target and your local
PC.

Demo

116

Demonstrate the working model running in


real-time.

Demo___________

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

58

4/22/2009

Exercise 1

117

Modify the front panel so that the current simulation time


is displayed as shown. The time should display a total of
4 digits, one of which shows time to the tenth of a
second Note that Bauhaus font is being used
second.
used.

Demo___________

Exercise 2

118

Create the front panel shown below. The controls created earlier are
unchanged. Added items are listed in the following few slides.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

59

4/22/2009

119

Exercise 2

Displays the desired and


measured speeds in the
controller subsystem.

120

Exercise 2

Displays the proportional


gain control signal and the
integral gain control signal in
the controller.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

60

4/22/2009

121

Exercise 2

Changes the value of the


integral gain.
Changes the value of the
proportional gain.

122

Exercise 2
Decoration.
Decoration.

Decoration.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

61

4/22/2009

123

Exercise 2
Demo___________

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

62

8/28/2009

Advanced Model-Based-System
Design
Lecture 14:
Real-Time Vehicle Model

Models

We now have a good model of the vehicle


that runs in the Simulink environment.
We know how to use the National
Instruments Simulation Interface Toolkit to
run Simulink models in real-time.
Next, we will put the two together and run
our vehicle model in real-time on the PXI
platform and have a cool display to show
vehicle performance.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

8/28/2009

Foreshadowing

We will need to make some modifications


to the model.
We will need to create the LabVIEW front
panel from scratch.
We will run into some numerical solver
issues that will make the system behave
badly.

Models

We will start with model Lecture_14_Model0.mdl that will


be passed out to the class.
This is a Simulink model with push-buttons and slider
gain blocks in the driver subsystem
subsystem.
The driver block can be used to drive the vehicle, but it is
kind of clunky.
We will replace the Simulink driver controls with
LabVIEW controls to make the vehicle easier to drive.
We will use the Display_and_Logging subsystem to
monitor the model outputs in which we are interested.
Save the model as Lecture14_Model1 and make the
changes to the driver block as a show on the next slide.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

8/28/2009

Driver Block Modifications

We have replaced all of the controls by constants.


Note that the names of the
constant blocks have been
changed to the name of the
signal in the bus.
This makes the constants
easy to identify when
connecting signals with the
LabVIEW SIT.
Note that the constants
have a value of 0. This sets
the default value of the lv
controls when the
simulations starts.

Driver Block

Even though we are setting the driver


controls to a constant value of zero, we
will be able to drive the vehicle because
we will connect the constant blocks to
LabVIEW controls.
The LabVIEW controls will specify the
value of the constants and thus change
the driver input to the vehicle.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

8/28/2009

Display_and_Logging

The other subsystem that has to change is the


Display_and_Logging subsystem.
We need to:

Remove all scopes.


Delete all To Workspace Blocks
Terminate all outputs in which we have no interest.
Add gain blocks and signal probes to the signals that
we wish to monitor.

The next few slides show the modifications to


the Logging_and_Display Subsystem.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

8/28/2009

We will not display this signal, so


we can terminate it.
We want to display this signal on the
front panel. Add a gain block with a gain
of 1. Name the gain block the same as
the signal name to make it easy to
recognize.
recognize

These blue things are


probes. To add a Test
point:
Right-click on a signal line
and select Signal
Properties.
In the dialog box that
appears, check the box
next to Test point to add a
test point.

Logging and Display Block

10

The only signals from the controller that


we will be display are the forward, reverse,
and park LED indicators.
indicators
We will connect these signals to front
panel indicators so show when the vehicle
is actually in park, forward, or reverse.
The State signal is displayed for
debugging purposes so that we can tell
which state we are in on the
Startup_and_Shifting Stateflow chart.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

8/28/2009

All signals shown are


from the
Vehicle_System_Diagn
ostics bus.
We are moniotring the
following signals:
Vehicle_Speed_mpg
Battery_Current_A
Battery_Voltage_V
Battery_SOC
Motor_Current_A
Generator_Current_A
Measured_Engine_rp
m

11

Solver

12

The last things we need to do are setup


the simulation configuration parameters
and:
Specify a fixed step solver type.
Pick a fixed step solver.
Choose the fixed step size.
In the Real-Time Workshop section, specify
NIDLL tl as the
NIDLL.tlc
th System
S t
target
t
t file.
fil

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

8/28/2009

Lecture14 Exercise 1

13

Build the dll for the model.


Create the front panel shown on the next
slide
slide.
Use National Instruments SIT to connect
the front panel controls and indicators to
the Simulink model.
Determine the solver and fixed step size,
so that the model runs in real-time.
For real-time operation, the cpu processor
utilization should be less than 70%.

14

Demo___________
Lecture14 Exercise 1

CPU Utilization_______ %

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

8/28/2009

15

Lecture 14 Exercise 2
We notice that the generator current
bounces all around, independent of the
step size and integration methods
methods.
To get a better idea of the system
behavior, add the graphs to the front panel
as shown next:

16

Demo___________
Lecture14 Exercise 2
CPU Utilization_______ %

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

8/28/2009

Model Problems

17

We notice one obvious problem in that the motor


current bounces all around even though we are asking
for a constant acceleration.
Occasionally the model goes wild and the vehicle
speed goes to infinity and some of the displays show a
value of NaN rather than a real numerical value. (NaN
stands for Not a Number.)
Both of these problems can be solved by using the
ODE14x solver with a small time step.

Model Problems

18

The problem with using a small time step is that the


model must be executed once each time step. It does
not matter what our time step is, the same calculations
occur whether we use a time step of 0.1 or a time step
of 0.001.
The problem with a smaller time step is that all of the
model calculations must be completed by the next
time step.
Complex models with small time steps will require a
fast real-time computer to complete the required
calculations in the specified time step.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

8/28/2009

Lecture 14 Exercise 3

19

As a first fix, we will use the ODE14x


solver and a time step of 0.001 seconds.
The problem with this solution is that it
may take too much CPU power to run the
model.

Demo___________
CPU Utilization_______ %

Model Problems

20

The ODE14x solver was designed for stiff systems


that require small time steps.
pretty
y simple.
p Either we are
Most of our model is p
integrating a slowly changing force with a large mass,
or a slowly changing torque with a large inertia. In
either case, the time scale is such that a small time
step is not required.
The elements in our model that require a small time
step are the tires.
The tires model tire slip. Under hard braking it is
possible that the wheels will lock and the tires will skid.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

10

8/28/2009

Model Problems

21

We noticed under hard braking that occasionally the


model blew up and the vehicle speed went to infinity.
g the boundary
y between when the tire is
Determining
skidding and rolling can take a very small time step.
To get a small enough time step to simulate the tires,
we go past 100% processor utilization on the real-time
target and bad things happen.
p
the SimDriveline tire with a simplified
p
A fix is to replace
tire model that has no slip.
Create the tire model shown next and use it for both
tires on the vehicle

New
Tire Model

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

22

11

8/28/2009

New Tire Model

23

Given an input torque, the model calculates the force applied to


the vehicle by dividing by the radius of the tire.
Given an input linear velocity of the vehicle, the model
g byy the
calculates the rotational velocityy of the tire byy dividing
radius.
This rotational velocity is then imposed on the driveline by the
motion actuator.

New Tire Model

24

This model has a problem in that it


imposes a dynamic constraint on the drive
line It fixes the velocity of the drive line
line.
to which the tire is connected.
If we have another block in the model that
also fixes the speed of the same drive line,
we will get an error that states that we
have a redundant dynamic constraint. (We
(
cannot have two blocks that specify the
velocity of the same drive line.)

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

12

8/28/2009

Lecture 14 Exercise 4a

25

Create a subsystem for the new tire


model.
Create a mask for the subsystem that:
Specifies the tire radius as an input parameter
to the model.
Displays the tire picture as shown.
Displays the name RHIT Tire Model rather
than Subsystem.
S
Tire Masked Subsystem
____________

Lecture 14 Exercise 4b

26

With this new tire model, the model should


behave well using a large step size (0.01
or larger) and the ODE14x solver is note
needed.
Demo___________
We will notice
CPU Utilization_______ %
Low processor utilization.
The model does not blow up any more.
The motor current now behaves.

A screen capture of this model running in


real-time is shown on the next slide.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

13

8/28/2009

27

Model Debugging

28

Now that we have the model running in real time, we


can run the model and find out any other problems
that it may have.
One problem that we notice is that under hard
acceleration, the motor will draw more than 50 amps.
In our present scheme the generator only puts out 50
amps constant when it charges.
Thus,, under extended hard acceleration,, we will
discharge the battery completely leading to safety and
lifetime issues.
We need to modify our control scheme.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

14

8/28/2009

29

Lecture 14 Exercise 5
Modify the control algorithm as follows:
Under normal conditions, the generator will charge the battery at
50 A.
If the battery SOC goes below a value of 0.58, a new algorithm
kicks in where the battery charges at the motor current plus 20%
with some averaging. (What should happen if regen braking
kicks in and the motor current flips?)
The minimum charging current in this mode is 50 A.
This method continues until the battery is charged back up to
0.7.
Once the battery is charged to 0.7,
0 7 the normal charging
algorithm kicks back in.
Demo___________
CPU Utilization_______ %

30

Lecture 14 Exercise 6

One of the modifications we made to the model is that we


reduce the braking torque at vehicle speeds below 3 mph.
As we drive the vehicle in real-time, this becomes very
annoying because the vehicle takes a long time to slow down
below 3 mph.
We made this modification because we had numerical
problems with the brakes at low speed.
With the new tire model, the braking problem may no longer be
an issue.
Modify the brakes so that we can apply full braking torque at
speeds of 0.25 mph and higher.
Verify your design and prove that it works.
Demo___________
CPU Utilization_______ %

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

15

Advanced Model-Based-System
Design
Lecture 15:
Number Systems

Outline

Binary
Hexadecimal
M tl b Functions
Matlab
F
ti
Unsigned Integers
Signed Integers
Floating Point Numbers

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Number Systems
There are two kinds of engineers in this
world
Those who know binary and those who dont.
That was a joke.
If you dont know binary, you probably didnt
get it.

This section is for the engineers that didnt


didn t
get it.

Base 10
Most of us are familiar with base 10
number systems.
Valid digits are 0 through 9 (Hey! There
are 10 values!)
The base is also referred to as the radix.
An example is:

7384 = 7 103 + 3 10 2 + 8 101 + 4 100


Radix = 10

Radix = 10

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Binary
Binary uses a radix of 2.
Valid values of a digit are 0 and 1.

) (

) (

) (

) (

10110 = 1 2 4 + 0 23 + 1 2 2 + 1 21 + 0 20

Radix = 2

10110 = (1 16 ) + (0 8) + (1 4 ) + (1 2 ) + 0 = 22

Binary

10110
0s place

16s place

8s place

2s place
4s place

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Binary

Historically and physically our choice of 0


and 1 for a binary digit comes from:
Switches which can be on or off
off.
Digital logic circuits that produce either a low
voltage or a high voltage.
Typical 5 V logic circuits
Low = logic 0 Voltage from 0 to 0.8 Volts.
High = Logic 1 Voltage from 3.4 to 5 Volts.

Synonyms
1 = logic 1 = high = True
0 = logic 0 = low = False

Terminology

A single binary digit is referred to as a bit.


A group of 4 binary digits is referred to as
a nibble
nibble. (1011 1110) is two nibbles
nibbles.
A group of 8 binary digits is referred to as
a byte (10111110) is one byte.
1k (for digital guys) is 210 = 1024
1M (for digital guys) is 1k * 1k = 210 *2
210=
1048576.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Hexadecimal Radix = 16

We will be dealing with long strings of bits.


It is convenient to group those bits in
groups of 4
4.
Binary

Hex

Decimal

Binary

Hex

Decimal

0000

1000

0001

1001

0010

1010

10

0011

1011

11

0100

1100

12

0101

1101

13

0110

1110

14

0111

1111

15

Hexadecimal

10

In decimal every digit can have ten values,


0 through 9.
In hexadecimal each digit
g can have16
values ranging from 0 to 15.
Hey, we need a single symbol for each
digit!
How do we do this with only 10 numeric
symbols in our mathematical vernacular.
For numbers 0 through 9, use 0 through 9.
For numbers 10 through 15, use letters A
through F.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

11

Hexadecimal
1011
{ 0110
{ 1101
{ 0111
{ 0011
{
B
6
D
7
3

) (

) (

) (

) (

B6 D73 = 1116 4 + 6 163 + 13 16 2 + 7 161 + 3 160

101101101101011100112 = B 6 D7316 = 74891510

Useful Matlab Functions

12

Bin2dec Converts a binary text string to


a decimal number:
>> bin2dec('10110110110101110011')
ans =
748915

Dec2bin Converts a decimal number to a


binary text string.
>> dec2bin(748915)
ans =
10110110110101110011

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Useful Matlab Functions

13

Hex2dec Converts a hexadecimal string


to a decimal number:
>> hex2dec('B6D73')
ans =
748915

Dec2hex Converts a decimal number to


a hexadecimal text string.
>> dec2hex(748915)
ans =
B6D73

Matlab

14

How do we convert from binary to hex?


(
(
))
>> dec2hex(bin2dec('10110110110101110011'))
ans =
B6D73

How do we convert from hex to binary?


>> dec2bin(hex2dec('B6D73'))
ans =
10110110110101110011

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Hexadecimal Numbers

15

If we see a number like 123, how do we


know if it is a hexadecimal or decimal
number? ((It could actuallyy be anyy base
greater than 3, but we wont go there.)
Ways of indicating a number is a
hexadecimal number
hex 123 - saying it.
$123 - preceding
di th
the number
b with
ith a $ sign.
i
x123 - preceding the number with an x which
is short for hex.
12316 Indicating the base explicitly.

Basic Data Types in Simulink

16

Boolean True or False (not 0 or 1 numerically)


Uint8 Unsigned 8-bit integer. Can represent
values from 0 to 255.
111111112
= 27+26+25+24+23+22+21+20
= 28-1 = 25510

Uint16 Unsigned 16-bit integer. Can represent


values from 0 to 65535.
11111111111111112
= 215+214+213+ + 22+21+20
= 216-1 = 6553510

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Basic Data Types in Simulink

17

Uint32 Unsigned 32-bit integer. Can represent


values from 0 to 4294967295.
111111111111111111111111111111112
= 231+230+229+ + 22+21+20
= 232-1 = 429496729510

Signed Integers

18

There are three common ways of


representing signed numbers
Sign and magnitude: The most significant bit
represents the sign. (1 is negative, 0 is
positive)

10001 would represent the number -1.


11111 would represent the number -15.
00001 would represent
p
the number 1.
01111 would represent the number +15.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Signed Integers Sign and Magnitude

19

With sign and magnitude representation:


There are an equal number of positive and
negative values that can be represented.
There are two ways to represent 0:
1000000
0000000

We will not be using this method to


represent signed integers
integers.

Signed Integers Biased Values

20

With biased values, to calculate the


numerical value of the code, calculate the
magnitude of the code and then subtract
off a fixed bias.
Example: 5-bit codes, bias = 15.
00000 value = 0 15 = -15
00001 value = 1 15 = -14
01111 value = 15 15 = 0
10000 value = 16 15 = 1
11111 value = 31 15 = 16

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

10

21

Signed Integers 2s Complement


We will be using a method called twos
complement to represent positive and
negative integers
integers.
With 2s complement, the most significant
bit has a negative weight.
Note this (-) sign.

) (

) (

) (

) (

10110 = 1 2 4 + 0 23 + 1 2 2 + 1 21 + 0 20
= 16 + 6

= 10

22

2s complement Numbers

) (

) (

) (

) (

00110 = 0 2 4 + 0 23 + 1 2 2 + 1 21 + 0 20
= 0+6

= 6

With 2s complement
If the most significant bit is a 1, the number is
negative
negative.
If the most significant bit is a 0, the number
will be positive.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

11

2s complement Numbers

23

We will do some 8-bit examples.


The most negative number is
10000000 = -2
27 = -128
128

The most positive number is


011111111 = 127

The code for -1 is


111111111 = -27+127
-27

127

2s complement

24

There is only one representation for 0


00000000

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

12

Signed Integer Types in Simulink

25

Int8 2s complement signed 8-bit integer. Can


represent values from -128 to 127.
10000000 = -27 = -128
011111111 = 127

Int16 2s complement signed 16-bit integer. Can


represent values from -32768 to 32767.
1000000000000000 = -215 = - 32768
0111111111111111 = 32767

Int32 2s complement signed 32-bit integer.


Represents values from - 2147483648 to 2147483647.
10000000000000000000000000000000 = -231 = - 2147483648
01111111111111111111111111111111 = 2147483647

Floating Point Numbers

26

The MathWorks help facility has a good


section on floating point numbers.
The following few slides were generated
from the information contained in the
MathWorks help facility.
Search for the topic, floating-point
numbers in the MathWorks help facility to
find more in-depth information.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

13

Floating Point Numbers

27

Floating Point Numbers

28

Fixed-point numbers are limited in that they


cannot simultaneously represent very large or
very small numbers using a reasonable word
size.
This limitation can be overcome by using
scientific notation.
With scientific notation, you can dynamically
place the binary point at a convenient location
and use powers of the binary to keep track of
that location.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

14

29

Scientific Notation (Decimal)


Most of us are familiar with scientific
notation.
d is a decimal digit with values from 0 to 9
9.
We can move the decimal point right or left by
decreasing or increasing the power of 10 by
which we multiply.

d .dddd 10 p

= ddddd .0 10 p 4
0.ddddd 10 p +1

Decimal point.

30

Binary Point
Binary numbers can have a fractional part
just like decimal numbers:

73.84 = 7 101 + 3 100 + 8 10 1 + 4 10 2


Decimal point.

) (

) (

) (

) (

101.11 = 1 2 2 + 0 21 + 1 20 + 1 2 1 + 1 2 2

101.11 = (1 4 ) + (0 2 ) + (1 1) + (1 1 2 ) + (1 1 4 ) = 5.75
Binary point.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

15

Radix Point Notation (Binary)

31

Radix point notation is similar. Here we


show radix notation for binary (radix = 2).
b is a binary digit with values of 0 or 1
1.
We can move the binary point right or left by
decreasing or increasing the power of 2 by
which we multiply.

= bbbbb.0 2 p 4

b.bbbb 2 p

Binary point.

0.bbbbb 2 p +1

IEEE Floating Point Standard 754

32

Single Precision 32 bits

(
(

)
)

( 1)s 2 e 127 (1. f ) ; normalised ,0 e 255, f 0

s
Value = ( 1) 2 e 126 (0. f ) ; denormalised , e = 0, f > 0
exceptional value

Exceptional values: NaN, inf.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

16

32-bit Floating point example

33

1 10111101 10100000000000000000000
s
e
f
s = 1 we have
h
a negative
ti number.
b
e = 10111101=18910
e 127
189 127
) = (262 )
(2 ) = (2
f = 10100000000000000000000
1.ff = 1.10100000000000000000000
= (1 20 ) + (1 21 ) + (0 22 ) + (1 23 ) + (0 24 ) + (0 25 ) + ....
= 1.625

32-bit Floating Point Example

34

Our number is
-1.62510 + 262
= -7.493989779944505
7 493989779944505 x 1018 (decimal)
(d i l)

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

17

IEEE Floating Point Standard 754

35

Double Precision 64 bits

(
(

)
)

( 1)s 2e 1023 (1. f ) ; normalised ,0 e 2047, f 0

s
Value = ( 1) 2e 1022 (0. f ) ; denormalised , e = 0, f > 0
exceptional value

Exceptional values: NaN, inf.

36

Floating Point Numbers


Data Type

Low Limit

High Limit

Exponent
Bias

Precision

Single

2-12610-38

21283x1038

127

2-2310-7

Double

2-10222x10-308

210242x10308

1023

2-5210-16

Inf - Defined as those values outside the


range of representable numbers.
Any arithmetic operation involving Inf
yields Inf.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

18

Floating Point Numbers

37

NaN Not a number.


There are two types of NaN:
A signaling NaN signals an invalid operation
exception.
A quiet NaN propagates through almost every
arithmetic operation without signaling an
exception.

The
Th ffollowing
ll i operations
ti
resultlt iin a N
NaN:
N

+
0
0/0
/

Questions?

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

19

Advanced Model-Based-System
Design
Lecture 16:
Introduction to MotoTron ECUs
and MotoHawk

Outline

Physical Connections
Creating a MotoTron MotoHawk Project
Flashing LED Project (Digital Output)
Changing CAN Speed
Motor Speed Controller
Analog Input
Digital Output

Using MotoTune
MotoHawk Probes
MotoHawk Calibration

1
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Connecting MotoTron Hardware

80-Pin Development Cable

2
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

80-Pin Development Cable

Main power relay (MPRD)


12V In-line fuse (25A).

80-Pin Development Cable

Harness +12 V Connection

Harness ground
connection

ECU CAN connector.

3
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

ECU555-80
Plug these in to the ECU.
They only fit one way.

ECU555-80

80-Pin Connectors

ECU555-80 Connections

4
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

12V Power Connection

Connect the power


connectors. For our
application we only need
a 1 A 12V power supply.

CAN Hub

10
On/Key switch. This
switch passes 12V to the
ECUP input of the ECU.
This is an old style
switch.

6 port CAN hub.

Development cable CAN


connection

5
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

11

CAN Hub
Development cable CAN
connection

New style On/Key switch.


This switch passes 12V
to the ECUP input of the
ECU.

6 port CAN hub.

MotoTron Yellow CAN Cables

12

Some of the CAN cables


have an internal 120
terminator on one end.
Others do not.

6
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MotoTron Yellow CAN Cables

13

This end is not terminated.


This end is terminated.

Can Connections

14

If you have a terminated CAN cable, you


can plug in the terminated end into the 6port hub.

7
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

15

Can Connections
120 terminator.

If you don not have a terminated CAN


cable, you can still use it if you plug in a
120 terminator into the hub.

120 Terminator

16

8
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Kavaser CAN to USB

17
Non-terminated side
of CAN cable
connected here.

Terminated side of CAN cable connected here. (Or nonterminated cable with terminator plugged into hub.)

18

Isolated USB Hub

Plug in MotoHawk
dongle here.

Connect this to your computers USB Port.

Isolated USB Hub. This


hub
ub will eliminate
e
ate
ground loops between
your computer and the
vehicle system. It will
also help prevent faults
in one system from
damaging the other
(your PC or MotoHawk
ECU).

9
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Complete Setup

19

Creating a MotoHawk Project

20

Run Matlab.
Change to your working directory.
At th
the M
Matlab
tl b promptt enter
t the
th command
d
motohawk_project('Motor_Control_MH1')

This will:
Create a directory called Motor_Control_MH1
Change to that directory
directory.
Create support sub directories.
Create a model file called Motor_Control_MH1.mdl
Open the model named Motor_Control_MH1.mdl

10
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

21

Directory Structure
Support directories.

New model file.

New directory.

New Simulink Model Created

22

Title block.

Target definition.

Main power relay.


Foreground trigger.
Subsystem that will
contain our model.

11
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

23

Title Block

Revision number
number. This number will
increment every time we build this model
(automatically generate code).

MotoHawk Target Definition Block

24

Selected ECU

Double-click on
this block to
change the ECU.

These numbers will


fill in when we build
the project.

12
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

25

We will be using a
ECU555-80 target for this
example. If you have a
different target, specify it
here.
here

Click the OK button after


making any changes. You
will return to the Simulink
model.

MotoHawk Blocks

This block controls the main power


relay. (See picture on next slide.)
The main power relay will close
100 ms after power is applied to
the ECUP line of the ECU. The
relay will open 250 ms after 12 V is
removed from the ECUP signal.
See next slide for more
information.

26

Foreground real-time interrupt


trigger. By default, this block
generates a trigger signal every 5
ms. We will show how to change
the time later
later.
Triggered subsystem. We will put
our controller in here. Our
controller will execute once every
5 ms.

13
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MotoHawk Development Harness

27

VBATT power line.

Main power relay.

ECU555-80 Data Sheet

Red wire in
development
harness.

Main power relay.


Closes 100 ms
after key switch
closes. Opens
250 ms after key
switch opens.
These delays
allow
ll
ffor graceful
f l
starting and
shutdown
procedures.

28

Key switch.

14
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Simulation Configuration Parameters

29

We have one last item to look at before we


start creating our model.
From the Simulink menus
menus, select
Simulation and then Configuration
Parameters.
You will see the following dialog box:

Simulation Configuration Parameters

Fixed step solver


selected.

Solver option
selected.

30

Discrete solver
selected
selected.
Simulink will pick
our step size.

15
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Simulation Configuration Parameters

31

MotoHawk target
selected.

Real-Time Workshop
option selected.

Simulation Configuration Parameters

32

We notice that the Simulation


Configuration Parameters are set up
correctly for our project
project.
The parameters are set up correctly
because we initially created the project
using the command
motohawk_project('Motor_Control_MH1').
We do not need to make any changes.
Click the OK or Cancel button.

16
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

33

Foreground Process
We are now ready to create our controller.
Our first controller will just turn on and off
the LEDs.
LEDs
These LEDs tell us that the ECU is alive.
Double-click on
the foreground
block to open it.

Default Foreground Block

34

Default foreground
process.
We will not use this
stuff.
Delete the controller
and plant
plant.
Your foreground
subsystem should
look as shown on the
next slide.

17
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

New Foreground Subsystem

35

Flashing Light Controller

36

We will now create a controller that turns


on and off two LEDs at a one second rate.
Place a part called Pulse Generator
(located in the Simulink / Sources library).
Place a part called Compare to Constant
located in Simulink \ Logic and Bit
Operations library
Double-click on this
block to open it.
Change it as sown
next.

18
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

37

Pulse Generator

Select sample based.


The sample time is 5 ms
since we are in a
triggered subsystem that
is triggered every 5 ms.
The output pulse goes
from 0 to 1.

The period is 200 samples.


Since the sample time is 5
ms, the period is 200 times
5 ms, or 1 second.
Pulse width is 100 samples
of 0.5 seconds. This is the
time the pulse is 1.

Click OK when done.

Inherit the sample time. This


will be 5 ms since we are in a
triggered subsystem.

Compare To Constant

38

We want the Compare To Constant block to


perform a logical inversion function.
g the comparison
p
to
To do this,, we can change
<=0.5.
When the pulse output is 1, the comparison will
be false and the block will output false.
When the pulse output is 0, the comparison will
p true.
be true and the block will output
Double-click on the block and change the dialog
box as shown:

19
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

39

Compare To Constant

Change to 0.5.

Change to boolean. Well


see why in a few slides.

MotoHawk Digital Output

40

We now need to add blocks to access the


digital outputs of the MotoTron ECU.
Place two blocks called MotoHawk_Dout
MotoHawk Dout
in your model. These blocks are located in
the MotoHawk \ Digital I/O Blocks
library.
Connect the blocks as shown:

20
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MotoHawk Digital Output

41

This block requires a Boolean data type for


the input. This is why we specified that the
output data type of the Compare To
Constant block as Boolean.

We need to specify which pin of the ECU


we want to use.

MotoTron ECU Resources

42

The MotoTron ECU has several digital outputs.


We will use the data sheet to select one.
Our LED will draw about 50 mA of current.
current
The digital outputs of the MotoTron ECU have
high current drivers, so this should not be an
issue.
Open the data sheet for your ECU.
We will use the FUELP and TACH outputs.
outputs
The data sheet detailing these outputs is shown
next:

21
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

FUELP

43
The TACH output
uses pin B12.

The FUELP output


uses pin B11.

Output connected to the


development harness.
This output can sink 1.5
A of current.

Output connected to the


development harness.
This output can sink 1.5
A of current.

FUELP and TACH Outputs

44

To determine which wires in the


development harness we should use, we
need to scroll down further in the data
sheet.

22
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

45

FUELP and TACH

46

The FUELP output is an Orange wire and is


numbered 43.

The TACH output is an Orange wire and is


numbered 44.

23
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Digital Output

47

In the
Simulink
model,
doubleclick on the
Discrete
Output
block and
change the
Resource
to TACH:

Digital Output

48

Change
the
Resource
of the
other
digital
output
block to
FUELP:

24
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Blinky Lights Model

49

Your Simulink model should appear as


shown:
TACH resource specified.

FUELP resource specified.

Data Type Conversion

50

There is one last step we need to take.


The output of the Pulse Generator block is a
precision data type
yp ((even though
g it only
y
double p
outputs a value of 0 or 1.
The input data type for the Discrete Output block
is Boolean.
We need to convert the double precision data
yp to a Boolean.
type
Place a Data Type Conversion block as shown.
This block is in the Simulink \ Commonly Used
Blocks library.

25
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

51

Data Type Conversion


Double-click on this
block to open it.

52

Data Type Conversion


This setting will allow
Simulink to choose the
output data type.

Since we know that we


want a Boolean data type,
select Boolean.

26
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Data Type Conversion

53

Boolean output
data type selected.

Data Types

54

It is always a good idea to check your


model for errors periodically.
e would
ou d a
also
so like
e to
od
display
sp ay da
data
a types
ypes
We
on the signal lines to help spot any errors.
Data type mismatches can cause erratic
behavior of your controller and be difficult
to diagnose.
To display data types on your schematic
schematic,
select Format, Port/Signal Display, and
then Port Data Types from the Simulink
menus.

27
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

55

56

Data types now


shown on model.

28
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

57

Updating the Model


When you make changes to your model, the
data types are not automatically updated on the
schematic.
We
W would
ld also
l like
lik tto check
h k our model
d l ffor errors.
To accomplish both of the above, type ctrl-d in
the Simulink window.
Any errors will be listed and the data types will
be updated.
My model was already up to date and there
were no errors, so there is nothing to show.
However, you should use the ctrl-d command
frequently.

58

Wiring
The next thing we need
to do is wire up our
circuit.
The LED circuit is
shown to the right.
We have already
identified the wires for
the TACH and FUELP
Signals.
We need to find a 5V
reference.

XDRP (A23)
Wire No. 23
Purple/Yellow
5V

D2

D1

LED

LED

R2

R1
100

LED1
TACH (B12)
Wire Number 43
Orange

100

LED2
FUELP (B11)
Wire Number 44
Gray

29
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Wiring

59

MotoTron ECU provide a +5V reference


for use in sensors.
Two signal lines are available called
XDRP and XDRP_B (Pins A23 and B24)

Wiring

60

Looking further down the datasheet for our


ECU, we find
XDRP (A23) is wire number 23 and is
Purple/Yellow

XDRP_B (B24) is wire number 56 and is


P rple/Pink
Purple/Pink

30
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Wiring

61

We need to make
connections as shown.
y
Connections
Physical
are Shown on the next
slide.

Wiring

62

31
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Project Build

63

We are now ready to build the Project.


If you typed ctrl-d in the Simulink window
and received no errors
errors, you should be able
to build the project without any errors.
Before we build, notice in the MotoHawk
title block that we are at revision 000.

Revision 000.

Project Build

64

In the Simulink window, type ctrl-b to build


the project.
You can also select Tools,
Tools Real-Time
Real Time
Workshop, and then Build Model from
the Simulink menus.
After typing ctrl-b, switch to the Matlab
command window to observe the
progress.

32
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Matlab Command Window

65

66

Total memory usage.

Model memory usage.

Look at this more closely.

33
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Project Build

67
This is the file we will
download to the ECU.

This build was created


with rev 000 of the model.

Project Build

68

The build files we just created are stored in directory


C:\ECUFiles.
The .srz files are located in directory
C:\ECUFiles\Programs

34
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

69

Project Build
When we switch back to our model, we
notice that the revision number in the
header has been incremented.
incremented

Revision 001.

MotoTune

70

To download our controller to the


MotoTron ECU we will use MotoTune.
Run MotoTune
MotoTune. It is located in the
MotoTools folder in your Start menu.

35
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

71

MotoServer
Before we download our model, we will
check the CAN port settings in
MotoServer
MotoServer.
The MotoServer icon
should be
located in your windows tray.
MotoServer icon.

MotorServer

72

Right-click on the MotoServer icon and


select Ports

36
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MotorServer

73

You should have a port labeled PCM-1.


The correct settings are:
Kavaser CAN
Access 4
Baud Rate 250000

This port should


be enabled.

MotoServer

74

The CAN Baud rate default setting of the


ECU modules is 250k.
If you have never changed the baud rate
of your ECU, then it is probably set to 250
k.
If your port settings are not as shown on
the previous slide, or you know that your
ECU was programmed previously with a
different Baud rate, we will need to change
the port settings.

37
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MotoServer Only if Necessary

75

Skip to slide 84 if your port settings are


correct as shown in slide 74.
If you need to change the port settings
settings,
select PCM-1 and click the Modify button.

Port selected.

Click the Modify


button.

MotoServer Only if Necessary

76

Change the settings as needed to match


your CAN baud rate or the settings shown:

Click the OK button to accept the changes


changes.

38
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MotoServer Only if Necessary

77

If your port settings are now correct, skip


to slide 84.
If your window does not show PCM
PCM-1,
1 you
must do the following:
Click the Edit Names button

Click here.

MotoServer Only if Necessary

78

Click this Add


button.

Select CAN Kingdom and


then click the Next button.

39
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MotoServer Only if Necessary

79

Fill in the dialog box as shown and click


the Finish button.
Name is PCM-1.
CityID is 11.

CAN Bus 1.

MotoServer Only if Necessary

80

PCM-1 should be added to the CAN Bus


Mappings.

Name listed here.

Click the OK button.

40
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MotoServer Only if Necessary

81

Click this Add


button.

Fill in properties as shown.


Type Kavaser CAN
Location PCM-1
Access Level 4
Baud Rate 250000
Click the OK button when done.

MotoServer Only if Necessary

82

The port should


be added with
the proper
settings.

Port is selected.
Click the OK button. We
are ready to go.

41
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

83

MotoTune
We now have the ports set correctly and
can program our ECU!
In the MotoTune window select File and
then Program, or select the program
button:

84

MotoTune
Select the most
recent .srz file for
your model (or the
.srz
srz file you want to
download to your
ECU).

42
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

85

MotoTune
File selected. Click
the Open button.

Note that we are using port PCM-1. If


this port is not selected, use the pulldown menu to choose port PCM-1.

86

MotoTune
If you are successful, you will see the
series of dialog boxes below:
If you do not see this
box, you may need to
turn on your key switch
and/or turn on your 12 V
power supply.

43
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MotoTune

87

Our model should now be programmed on the


ECU.
g on and off.
You should see the LEDs flashing
As you cycle the key switch, the ECU should
automatically power off and on and start the
program (which flashes the LEDs).
MotoTune has many more capabilities which we
p
will show in our next example.
Here, we only show how to program the ECU
with MotoTune.

Build Process

88

If you make any changes to the model,


you will need to go through the following
steps to run the new model on the ECU:
Build the model in Simulink (ctrl-b)
Program the ECU with MotoTune
That is it!

44
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

89

CAN Baud Rate


As a last part of this example, we will show
how to change the CAN Baud rate of our
ECU.
We will increase the Baud rate to 500 K.
All future examples will use a Baud rate of
500 k.
Place a part called CAN Definition in your
model.
model
This block is located in the MotoHawk /
CAN library.

90

CAN Definition block


placed in the top level of
our model.

Double-click on this
block to change its
parameters.

45
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

91

MotoTron ECUs have two CAN


ports available. We can change
the properties of each CAN port
independently.

Default CAN Baud rate is 250K. If


we do not change the Baud rate
with a CAN Definition block, the
baud rate will be 250k.
Note that the City ID is 11 (hex B).
R
Remember
b th
thatt th
the Cit
City ID ffor
PCM-1 was also set to 11. This
enables MotoTune to communicate
with your ECU.

92

The only change we will make is to


change the Baud rate to 500 k.
Make this change and click the OK
button.

46
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

93

CAN Baud Rate

Note that the Baud rate


change is reflected here.
Save
S
your model
d l and
d th
the ttype
ctrl-b to build it.
View the Matlab window to
observe the build progress.

94

CAN Baud Rate


Since this is the second time
we have built the model, the
executable file is now called
001.srz.
001 srz Each time we build
the model, we will get a new
.srz file.

47
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

CAN Baud Rate

95

We now need to program the ECU with


the new executable (.srz file).
Note that the ECU is still running at 250 K
K.
The ECU will not run at the changed Baud
rate until we program it.
Thus, we will leave the MotoServer ports
at 250k until the ECU is programmed.

CAN Baud Rate

96

We will now program the ECU.


Select File and then Program from the
MotoTune menus.
Select the most recent .srz file.

When the programming is complete, the ECU


will use a Baud rate of 500k.
Note that your two LEDs should still be flashing.
All we changed in the model was the CAN rate.

48
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

97

CAN Baud Rate


Now that the ECU is running at a different
CAN Baud rate, we need to change the
port settings on MotoServer
MotoServer.
Right-click on the MotoServer icon
and
select Ports.

98

CAN Baud Rate


To change the port settings, select PCM-1
and click the Modify button.

Port selected.

Click the Modify


button.

49
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

99

CAN Baud Rate


Change the settings as shown:

Baud rate
changed.

Click the OK button to accept the


changes
changes.

100

CAN Baud Rate


Your port configuration should be as
shown.

Baud rate changed


to 500k.

Click the OK button if your settings match.

50
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

101

CAN Baud Rate


MotoTune can once again communicate
with our ECU.
To show this
this, we will change the rate at
which the LEDs flash and then reprogram
the ECU.
Double-click on the Pulse Generator block
inside your model.
Make the following changes:

102

CAN Baud Rate


Period set to 100.

Pulse width set to 50.

51
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

CAN Baud Rate

103

Click OK to close the dialog box.


Type ctrl-b in Simulink to build the model.
Use
U M
MotoTune
t T
tto d
down lload
d th
the newly
l
created .srz file
Select File/Program from the MotoTune
menus.
Select the most recent .srz file.

CAN Baud Rate

104

If the Baud rates were changed in both the


ECU and MotoServer ports and they
match, programming of the ECU should
start.

When programming is complete,


complete you the
new model should run, and the lights
should flash faster.

52
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

The Last Slide

105

We will leave the CAN Baud rate at 500k


for the remaining examples in this
workshop
workshop.

Lecture 16 Demo 1

106

Demo the Operation of the MotoTron ECU blinking


lights. The CAN baud rate should be 500 k.

Demo___________

53
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Advanced Model-Based-System
Design
Lecture 17:
MotoTron MotoHawk Projects

Outline

Implement the controller for the Motor Generator


system that we modeled earlier.
Use the MotoHawk PWM block.
Use the MotoHawk analog input block.
Use MotoHawk Probes to view signals internal
to the ECU in real-time.
g the
Use MotoHawk Calibration blocks to change
feedback gains in real-time.
View real-time signals using MotoTune charts.

1
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Motor Control Project

We will now create a new MotoHawk


project in our working directory.
Enter the command
motohawk_project('Motor_Control_MH2')
at the Matlab command prompt.
Simulink will run and open the new model.

Motor Control Project

We need to make a few modifications:


Change the CAN Baud rate to 500k (copy the
can block from our first model)
Delete the controller and plant subsystems
inside the Foreground subsystem.
Copy the Flashy lights portion of the first
model and place it in the foreground
subsystem of our new model
model. (These lights
will tell us that the ECU is working.)
The following two slides show what you
should have:

2
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Top Level Model

Added CAN definition


block. Note baud rate is
500 k.

Foreground Subsystem

3
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Analog Inputs

In our model, we are going to read three analog


inputs:
The potentiometer (POT) This is a 0 to 5V analog
voltage.
The motor rpm output signal. This is approximately a
0 to 8V signal coming out of the motor. This signal is
divided in half by two 10 k resistors on the circuit
board. Thus, the input is approximately a 0 to 4 V
signal.
The generator output voltage. This is approximately a
0 to 24V signal coming out of the motor. This signal is
divided in half by a resistor network on the circuit
board to produce a 0 to 5V signal.

Analog Inputs

We have scaled all of our analog signals


to be between 0 and 5V.
e MotoTron
o o o ECU
CU has
as several
se e a a
analog
a og
The
input channels.
Most channels are designed for a 0 to 5 V
input.
A portion of the available inputs are shown
on the next slide
slide.
This information is contained in the data
sheet for your MotoHawk ECU.

4
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

ECU555-80 Data Sheet

Analog Inputs

10

We will use analog inputs AN4M, AN5M,


and AN6M because:
The
e do not
o have
a ea
an internal
e a pu
pull-up
up
resistor.
They have the highest input impedance:
AN1M through AN3m have 51.1k resistors
to ground.
AN4M through AN8M have 200k resistors
to ground.
All inputs have built-in filters. Note that we
did not include these filters in our model.

5
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Analog Inputs

11

The ECU555-80 data sheets tells us that the


analog inputs have a 0-5V range, 10-bit
resolution and a filter time constant of 1 ms
resolution,
ms.
A 0 V input is converted to a numeric value of 0.
A 5 V input is converted to a numeric value of
210-1 or 1023.

The 1 ms time constant comes from the low


pass filter
filt (th
(the 33k resistor
i t and
d th
the 0
0.033
033 F
F
capacitor).

Analog Inputs

12

Place three instances of the block


motohawk_ain in your model.
This block is in the MotoHawk / Analog I/O
Blocks library
Added analog input
blocks.

Double-click on this
block to open it.

6
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

13

Analog Inputs
Change this to AN4M.

Note that the output data


type is uint16. This is an
unsigned 16-bit integer.
The 10-bit conversion will fit
in a uint16 without anyy
problems.
Click the OK button after
changing the resource to
AN4M.

14

Analog Inputs
Modify the three Analog Input Blocks as shown.
Changed to AN4M.

Changed to AN5M.

Changed to AN6M.

7
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Analog Inputs

15

The output of the analog blocks is a 16-bit


unsigned integer data type (uint16).
The
e rest
es of
o our
ou model
ode uses doub
double
e
precision floating point data types.
Add three data type conversion blocks to
the model (library Simulink / Commonly
Used Blocks):
Double
Double-click
click on the Convert block and specify
the type as double.

You should have the model shown on the


next slide.

Analog Inputs

16

8
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Analog Inputs

17

The output of the analog input blocks is a


number from 0 to 1023.
We want to scale this value to a number
between 0 and 1.
We will do this by using a gain block with a
gain of 1/1023:
Add Gain blocks and Goto blocks as shown
next:

Analog Inputs

18

9
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Analog Inputs

19

I will hide the block names on the model:


Select the part
Right click on the part
Select Format and then Hide Name from the
menus

Analog Inputs

20

We would like to observe these three


signals in real-time as the controller is
running on our ECU.
ECU
We can observe the signals with
MotoTune if we place MotoHawk Probes
in our model.
From the MotoHawk / Probing &
Calibration Blocks library, place three
instances of the block called
motohawk_probe in your mdoel.

10
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Analog Input

21

Added probe blocks.

MotoHawk Probes

22

We need to name each of the probes with


a unique name.
To name a probe
probe, double
double-click
click on a probe
block.
Change the Probe
name here. Note:
The name must be
g
enclosed in single
quotes.
There must be no
spaces in the name.
Underscores are OK.

11
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MotoHawk Probes

23

Change the Probe names as shown:

PWM Output

24

We now have the analog inputs we need


to run our system.
Next,
Next we need a PWM output to drive our
system.
MotoTron ECUs have several high current
PWM drivers that we can use.
For example, the ETC (electronic throttle
control) output can drive a 5 A load.
The OILP output can drive a 10 A load.

12
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

PWM Output

25

Out system already has high current drivers, so all


we need to do is supply a low current pwm signal.
We could use a high current PWM output such as
ETC but well
ETC,
we ll save that in case we need itit.
We will use the EST outputs because they have
active pull-up and pull-down drive transistors.
(Some of the outputs only have a low side driver
and would need a pull-up resistor for our
application.)
Also,, the EST outputs
p
p
produce 5V amplitude
p
PWM
signals, and this is compatible with our hardware.
The portion of the 555-80 data sheet is shown next
for the EST outputs:

PWM Output

26

13
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

PWM Outputs

27

Eight EST outputs are available.


We will use EST1 for this application.
To
T access this
thi resource, place
l
a partt
called motohawk_pwm in your model.
This part is located in the MotoHawk \
Analog I/O Blocks library.

PWM Output

28

The first thing we need to do is specify


EST1 as the output pin we want to use.
Double-click
Double click on the PWM block and
change the parameters as shown:

14
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

29

PWM Output
Specify the Resource as
EST1.

S
Specify
if th
the minimum
i i
ffrequency
as 1000. (If you are not using
MotoHawk 084 Beta 9 or
higher, you will get a different
dialog box here.)

PWM Output

30

We notice a few things about the PWM


block.
The duty cycle input is a number from -4096
to 4096. Its type is a signed 16-bit integers
(int16)
For full bridge outputs (like ETC), we can
have a negative or positive output. A duty
cycle of -4096
4096 means full negative output.

15
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

PWM Output

31

Duty Cycle Input Continued


Since we are using a half bridge, we will only
use the positive half of the duty cycle input
range.
A duty cycle input of -4096 to 0 produces an
output that is always low.
A duty cycle input from 1 to 4096 produces a
PWM output with a duty cycle from 0 to 100%

PWM Output

32

The frequency input is a 32-bit unsigned


integer (uint32).
pu of
o 100
00 p
produces
oduces a frequency
eque cy o
of 1
An input
Hz.
For this input, we need to multiply the
desired PWM frequency by 100.
We would like to use a PWM frequency of
20 kHz because it is inaudible to humans
humans.
We will use a constant block to specify the
PWM Frequency as shown:

16
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

33

PWM Frequency

Double-click here to open this block.


Specify the value as 20000*100 to
specify a PWM frequency of 20 kHz.

34

PWM Frequency

Frequency
value
specified
here.

Select this tab


next.

17
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

35

PWM Frequency
The frequency input needs a uint32 data
type.
We could do this with a data type
conversion block.
Instead we will do it with the Signal Data
Types tab in the constant block:

36

PWM Frequency
Select the Signal Data Types tab and
select the uint32 data type:

Uint32 specified.
Click the OK
b tt when
button
h
done.

18
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

PWM Duty Cycle

37

The signal from our controller will have the


following properties:
Numerical value from 0 to 1
1.
Data type: floating point double precision

Add a gain block to scale values of 0 to 1


to values from 0 to 4096.
Add a data conversion block to convert a
double precision number to a type of int16.

PWM Duty Cycle Input

38

19
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MotoHawk Override

39

Eventually, the PWM signal will come from


our controller.
For now,
now we would like to manually control
the duty cycle through MotoTune.
Place a constant with a value of 0 and a
part called motohawk_override_abs from
the MotoHawk / Calibration & Probing
Blocks library
Wire your model as shown:

MotoHawk Override

40

Double-click on this block and change


the attributes as shown below.

Change the name to


Duty_Cycle_Override
Do not forget the quotes.

Leave the default at zero so that the


motor will be off unless we change the
value with the override.

20
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MotoHawk Override

41

Before we build the model we need to


check it for errors.
Select Format, Port/Signal Display, and
then Port Data Types from the Simulink
menus to display data types on the signal
lines.
Type ctrl-d to check the model for errors.

42

21
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Model Build

43

If:
you did not receive any errors after using the
ctrl-d
ctrl
d command, and
Your data types match the ones shown

Type ctrl-b to build your model.


Switch to the Matlab command window to
view the progress.

Wiring Connections

44

The final step we need to take is physically


connect the ECU to our motor-generator system
with wires in the development harness.
The first wire we need to connect is our
transducer ground reference. This wire is called
XDRG and is pin A22, wire 22 and is
Black/Orange.
Connect this wire to one of the GND connections
on the motor-generator circuit board

22
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

PWM Connection

45

From the portion of the ECU555-80


datasheet we saw earlier, we chose EST1
which was pin B2.
Looking further down the datasheet, we
see the following information
We see that this is a green/black wire and
is numbered 34
34.
Connect this wire to the one labeled
PWM on the motor/generator PC board.

POT Connection

46

From the portion of the ECU555-80


datasheet we saw earlier, we chose AN4M
which was pin A6.
Looking further down the datasheet, we
see the following information
We see that this is a light blue/white wire
and has the number 6
6.
Connect this wire to the one labeled POT
on the motor/generator PC board.

23
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

RPM Connection

47

From the portion of the ECU555-80


datasheet we saw earlier, we chose AN5M
which was pin A7.
Looking further down the datasheet, we
see the following information
We see that this is a white/yellow wire and
has the number 7
7.
Connect this wire to the one labeled
RPM on the motor/generator PC board.

Voltage Connection

48

From the portion of the ECU555-80


datasheet we saw earlier, we chose AN6M
which was pin A8.
Looking further down the datasheet, we
see the following information
We see that this is a brown/white wire and
has the number 8
8.
Connect this wire to the one labeled
VOLTAGE on the motor/generator PC
board.

24
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

49

Circuit Diagram
A complete circuit diagram for our
connections is shown below.
XDRP (A23)
Wire No. 23
Purple/Yellow
5V
PWM

5V

RPM

Voltage

D2

D1

LED

LED

LED1
TACH (B12)
Wire Number 43
Orange

R3
10k

R2

R1
100

100

LED2
FUELP (B11)
Wire Number 44
Gray

PWM
EST1 (B2)
Wire Number 34
Green/Black

GND

POT

XDRG (A22)
Wire Number 22
Black/Orange

AN4M (A6)
Wire Number 6
Light Blue/White

RPM

VOLTAGE

AN5M (A7)
Wire Number 7
White/Yellow

Wiring Connections

AN6M (A8)
Wire Number 8
Brown/White

50

A picture of the wiring connections is


shown below:

25
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MotoTune

51

We are now ready to program the ECU


with MotoTune.
Use the procedure covered earlier
Run MotoTune
Select File and then Program from the
MotoTune menus
Select the most recent executable version of
our MH2 model.

When the programming is complete, click


the OK button to close the dialog box.

MotoTune Display

52

You should have an empty MotoTune


window.
Select File,
File New,
New and then Online
Display/Calibration or from the menus.

Select Display and click the OK button.

26
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MotoTune Display

53

Cli
Click
k th
the Next
N t button
b tt twice
t i and
d then
th click
li k
the Finish button.
You should have the screen shown next:

54

27
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

55

MotoTune
Click on the plus sign(s) next to
Motor_Control_MH2 to expand the tree.

Click on this + sign


and then expand
the tree fully.

56

MotoTune Display
This is the override
we p
placed in our
model.

These are the three


probes we placed in
our model.

28
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MotoTune Display

57

You can display as many or as few of the


probes and overrides as you want.
To place an item in your display
display, drag the
item into the display window.
If you drag an individual item, only that
item will be displayed.
If you drag a folder, all probes and
overrides in the folder will be displayed.

MotoTune Display

58

Drag the item Actual_Speed to the disply


window as shown below:

Release the mouse


button here.

29
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MotoTune Display

59

When you release the mouse button, the


item and its value will be displayed.
Resize
es e the
e ce
cells
s to
o sshow
o the
ee
entire
e text
e
labels.

Probe name.

Real-time value.

MotoTune Display

60

Drag the probes Desired_Voltage and


Actual_Voltage to the display window.

30
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MotoTune Display

61

For the override, we need both items.


The easiest way to do this is by dragging
the
e folder
o de Duty
u y_Cyc
Cycle
e_O
Override
e de O
Override
e de
to the display window. Both items will
appear in the window:

MotoTune Display

62

The next thing we need to do is change


the speed at which the displayed values
are updated
updated.
Right click on the cell as shown below:
Right-click here and
then select Properties
from the menu
menu.

31
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

63

MotoTune Display

By default, MotoTune updates all of the


values at a 500ms rate.
This is too slow for our example.
Click the Set Fast button and select the
Apply To All option

64

MotoTune Display
Option selected.

Values will be displayed


at a 50 ms rate.

We have specified that all values in the display window


will be updated every 50 ms.
The downside is that this information is communicated
over the CAN bus.
By displaying a lot of items and updating them at a high
rate, we are increasing the amount of CAN traffic on the
bus.

32
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

65

MotoTune Display
The model is running on our ECU.
If you rotate the pot, you should see the
value on the Desired
Desired_Voltage
Voltage probe
change between 0 and 1.

66

MotoTune Override
Right now, the override is set to PassThrough.
From the model
model, the value we specified is
0, so the motor will be off.

Click here to reveal the


options.

33
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MotoTune Override

67
After selecting the cell,
options are now available.
Select Override and press
the enter key.

Override now selected.

68

MotoTune Override
Enter a value here.
When you press the enter
key, the output of the
override block will be
changed to the value you
enter.

Enter a value between 0 and 1. Zero is full


off, 1 is full on.
The motor should spin and you should see
all of the other probe values change.
If you have an oscilloscope, you can
observe the PWM output and see the PWM
waveform as the duty cycle changes.

34
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MotoTune Override

69

We now know how to use probes and


overrides.
The last thing we will do is save our
display.

MotoTune Display

70

Select File and then Save from the


MotoTune menus.
Specify a name for your display,
display like MH2
and click the Save button.
The next time we use this model, we can
open the display we saved.
We can also use the display in future
models if we have the same probes and
overrides.

35
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Lecture 17 Demo 1

71

Demo of MotoTune with the Motor/generator system


MotoHawk Probes display measurements
MotoHawk override controls motor speed.

Demo___________

Controller Implementation

72

We now have a MotoHawk shell that has


the inputs and outputs that we need to
control our system.
system
We will now place the controller we
designed with simulations in our ECU
model.
We will do this in a subsystem so that we
can easily separate our control subsystem
from the MotoHawk I/O shell.

36
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Controller Implementation

73

Place a subsystem block in the foreground


block of our model.
Subsystem blocks are located in the
Simulink / Commonly Used Blocks library.
Rename the subsystem Controller.

74
Added subsystem.
Double-click on the
subsystem to open it.
ports as shown next.
Add p

37
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Controller Subsystem

75

In the Foreground subsystem, make the


connections shown next to the Controller
subsystem.
b
t
Use From and Goto blocks located in the
Simulink / Signal Routing library.

Controller

76

38
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Controller

77

To connect the controller PWM output to


the ECU PWM output, replace the
constant block with a From block as
shown:

This was a constant block.

Controller

78

We now have a shell for utilizing the ECU


resources, and we have a convenient
place to put all of our control logic
logic.
If we make a change to our control
algorithm, we only need to modify the
contents of the controller subsystem. The
only time we will need to modify our
MotoHawk shell is iff we need to create
additional inputs or outputs.

39
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

79

Controller
We will start with the proportional feedback
method we developed in model
Motor_Control_Sim1.mdl.
The controller portion of the model is shown
below.

Only copy this part. Do not


copy the ports.

Controller.

80

We only need to copy the proportional


control portion of the model.
The low
low-pass
pass filter is implemented in
hardware and is a circuit on the PC board.
Copy and paste the controller from the
simulation into the MotoHawk model as
shown:

40
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MotoHawk Controller

81

The load voltage signal is not being used,


so we will connect it to a terminator
terminator.
This controller had a fixed gain of 100.

MotoHawk Controller

82

We would like to add the capability of changing


the proportional gain while the controller is
running.
This will allow us to tune the controller to our
physical system in real time.
We can do this by adding a MotoHawk
Calibration block to our controller.
The calibration block is located in the MotoHawk
/ Calibration & Probing Blocks library.
Make the changes shown next.

41
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

83

MotoHawk Controller
Gain changed to 1

Cal block added.

P d t bl
Product
block
k added.
dd d

Double-click on the calibration block and


make the changes shown next.

84

Calibration Block
Name changed to
Proportional_Gain
Do not forget the quotes. No
spaces allowed.

Default value set to 10.


We can change this value
while the model is running on
the
h ECU
ECU.

42
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Calibrations

85

Click the OK button.


Build the model.
Download the model to your ECU with
MotoTune.
Display all of the probes and overrides as
we did in the previous example.
You can load a saved display from the
MotoTune File menu if you want
want.
You should have the following MotoTune
display.

MotoTune

86

43
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Motor-Generator Operation

87

We can now run or controller on the actual


motor-generator system.
We notice the following:
The motor speed follows the setting on the
speed pot.
The motor speed is held relatively constant as
we change the load on the generator. (As it
should with a proportional feedback system
system.))
The Motor generator system makes a ton of
noize.

Lecture 17 Demo 2

88

Demo of Motor/generator with the proportional feedback


control system.

Demo___________

44
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Motor-Generator Operation

89

We notice that the motor speed signal is


bouncing all around. (It might not do this.
We added a flywheel to the motor
generator system to fix this problem.)
If we looked at the motor speed on an
oscilloscope, we would notice that the
speed signal is oscillating.

Motor-Generator Operation

90

In our MotoHawk realization, the


foreground process only executes every 5
ms
ms.
This means that the control algorithm
executes only once every 5 ms, which
may e too slow for the motor/generator
system.

45
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MotoHawk Trigger Definition

91

To change the rate at which the


foreground process is triggered, we need
to place a motohawk
motohawk_trigger_def
trigger def block in
the top level of our model.
This block is located in the MotoHawk /
Trigger Blocks library.
Place the block in the top level as shown
next:

MotoHawk Trigger Definition

92

Block added.

46
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MotoHawk Trigger Definition

93

When we open the block, we see


Trigger FGND RTI period is set to 5000 s, or
5 ms.
FGND RTI stands for foreground real-time
interrupt.
This trigger will be generated every 5 ms.
Change this value to 1000 to generate a
trigger every 1 ms
ms.

94
Period changed
to 1 ms.

This is a trigger block that generates a trigger


based on the foreground real-time interrupts.

47
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

95

FGND RTI
We see that our foreground subsystem is
triggered by the FGND RTI. Since we
changed this value to 1 ms
ms, our controller
will now execute every 1 ms.
This block generates a trigger at
the rate specified by the FGND
RTI block.

This 5 ms is for documentation purposes.


Changing it is not necessary. To change it, right
click on it, select Edit Mask, select the
Initialization tab, and then change the sample
time.

Motor-Generator Operation

96

Build the model and download it to the


ECU.
e s see if the
e bad be
behavior
a o has
as bee
been
Lets
fixed.
The oscillation has been eliminated with
no load.
There is still a grinding sound at higher
speeds and higher loads
loads.
We will look at changing the feedback gain
to see if it fixes this oscillation.

48
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MotoTune Calibration

97

In the MotoTune window we have all of the


probes and overrides displayed.

MotoTune Calibration

98

We can change the gain by changing the


calibration we added in the previous
model
model.
Select File, New, and then Online
Display & Calibration from the MotoTune
menus.

Select Calibration and click the OK button

49
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MotoTune Calibration

99

You can specify a new


name or use the one given.
button
Click the Save button.
In the future, we will be
able to load calibrations
that we made earlier.
We can also back load
calibrations into our model
(although this process is
not recommended).

MotoTune Calibration

100

Expand this portion of the tree.

50
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MotoTune Calibration

101

This is the calibration part that


we added to out model.
Double-click on it to open a
window for this calibration.

Calibration window that allows us


to change the value of the
Proportional_Gain.
Enter a new value in the cell.
When you press the Enter key,
the new value will ne sent to the
ECU.

Calibrations

102

The Calibrations allow us to try different


values of the parameter we are changing.
We can save the calibrations to a file for
later use.
We can backload the values into out
model. (Not recommended.)

51
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Motor-Generator Operation

103

My system appears to have the following


behavior:
For gains of 1 to 5,
5 the noise disappears
disappears.
For a gain around 10, we hear some
noise.
For gains of 100 and 1000, the oscillation
is noticeable for all speeds of operation.

Proportional Feedback

104

The error signal is the difference between


the desired quantity and the actual
measured quantity.
In our case the error is the difference between
the desired voltage signal and the voltage
signal representing the rpm.

A system with proportional feedback will


have the following properties:
As we increase the gain, the error signal will
decrease.
For a fixed gain, as we increase the load, the
error will increase.

52
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Proportional Feedback

105

To make the actual rpm follow the desired


rpm (make the error as small as possible)
we want to make the gain as large as
possible.
Increasing the gain can make the system
unstable.
We can observe all of these properties in
our system.

Proportional Gain

106

To make the observation of our system a


little easier we will add a probe on the
error signal as shown below:

53
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Motor-Generator System

107

Download our change to the ECU.


Observe that the system exhibits the
behaviors
be
a o s discussed.
d scussed

Lecture 17 Demo 3

108

Demo of Motor/generator with the proportional


feedback control system with the following
Foreground process set to a trigger rate of 1 ms
Modifying the feedback gain with MotoHawk calibrations.
Viewing the Error Signal

Demo___________

54
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Further Investigations

109

At this point, we know how to use several


of the tools available from MotoTron.
We will investigate the effects of different
control methods.

Integral Control

110

The proportional control method causes


the measured signal to follow the desired
control signal with a constant amount of
error.
Integral will cause this error to go to zero
in steady state.
We are controlling rpm.
The rpm
p will equal
q
the command rpm
p in
steady state.
When we change the load, the rpm will return
to the steady state value after a slight
(hopefully) disturbance.

55
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Integral Control

111

We explored the effects of adding an


integrator in our SIL simulations, and in
our real-time simulations.
We will not use the built-in MathWorks
discrete integrator because:
The integration time step is determined at
compilation time. (For our system, it is 1 ms.)
This predetermined value is used to calculate
the integral even if the actual time between
integration steps varies slightly while the
model is running.

Integral Control

112

MotoHawk has a block called dT.


This block returns the actual time difference
between
be
ee when
e the
eb
block
oc was
as p
previously
e ous y
executed to the time is currently being
executed.
This block allows us to use the actual time
difference in a calculation.
We will use a rectangular integration method
with saturation limits.
Open your controller and modify as shown:

56
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Integral Control

Proportional Gain.

113

Sum. Forms the


Proportional/Integral
(PI) control.

Error Signal.

Integrator.

Integrator Rectangle Method

Rectangular area. (Width of


time slice times the error.)

114

Integrator output.
Equal to the
previous value
value, plus
the added area of
the rectangle just
calculated.
Integrator output from
the previous time step.

57
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Integrator Rectangle Method


Calibration block used to set gain.

MotoHawk delta time (dT)


block. Located in the
MotoHawk / Extra
Development Blocks library.

115

Saturation block. Limits the


integrator output to 1.

Integral gain.
Initially the gain is
set to zero.
zero We will
change the gain
with the calibration
block.

Model Build

116

Build and download the model to your


ECU.
Display all MotoHawk Probes
Probes.
Display the calibration spreadsheet for the
proportional and integral gains.

58
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

117

System Behavior

118

You should notice the following properties


of your PI System.
The p
proportional
p
g
gain behaves similar to our
last example.
High proportional gain causes the system to
oscillate and emit an grinding noise.
Low proportional gain produces a large error under
high load conditions.

The Integral
g g
gain
Drives the error signal to zero.
Causes over and undershoot.
Larger values of integral gain cause more over and
undershoot, but drive the error to zero faster.

59
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Lecture 17 Demo 4

119

Demo of Motor/generator with the PI feedback


controller.

Demo___________

Calibration Problem

120

One thing you might have noticed is that


when you changed the value of the
integral gain calibration
calibration, the motor speed
jumped (sometimes extremely high) and
then slowly game back to the rpm it was
set at.
Imagine if you were in a vehicle and you
changed the gain with a calibration and a
50 hp engine or electric motor made a
similar jump in speed and torque.

60
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

121

Calibration Problem
A step change like the one we see in our
motor-generator system could easily break
a shaft
shaft.
The reason for this problem is where we
placed the gain block for our integrator.

122

Calibration Problem

Integrator output: This value


hold constant or changes
relatively slowly when a step
change occurs in the gain
gain. (It
will eventually change in
response to the step change in
gain.)

Integral gain (the calibration


together with the product
block):This value can change
instantaneously.

Output to sum
bl k E
block:
Even
though the
integrator
holds it value,
this signal will
have step
changes
because the
gain has step
changes.

61
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Calibration Problem

123

We can fix this problem by placing the


gain before integrator:

Step changed will occur here.

Integrator output tends to hold its


value. Output will change when
we have a step change in the
input, but the output will change
slowly.

Calibration Problem

124

Even though the input to the integrator will have


step changes, the output of the integrator can
only change slowly.
Thus, when we change the integral gain, we will
not get wild changes in the motor speed and
torque that we saw earlier.
We expect changes, but only slow changes.
g in the p
placement of the
Note that the change
gain does change the effect of the limiter.
(How?)

62
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Controller Improvements

125

One thing we notice in the operation of our


motor-generator system is that even though we
are keeping the motor speed constant, as we
turn on more light bulbs,
bulbs the light bulbs become
dimmer.
This is because of the output impedance of the
generator.
We are effectively modeling the generator as an
ideal voltage
g source:
The output voltage is constant no matter how much
current we draw.
The output voltage is a function of the generator rpm
(which we are keeping constant)

Generator Model

126

With this model, if we keep the rpm


constant, the output voltage should be
constant independent of load
constant,
load.
This is obviously not the case since we
observed that the lights become dimmer
as we turn on more lights.
A better model of the generator is an ideal
voltage source with a series output
resistance.

63
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Generator Model

127

What we should do:


Set up a series of measurements using the
MathWorks Model Based Calibration tool.
Measure the generator characteristics.
Generate a new model.
Simulate the new model.
Generate a new controller for the model.
Download the new model on to out ECU.

Constant Voltage Controller

128

We will skip the process of improving the


model and simulating a controller.
Note that this is a dangerous step if
you are working with a complicated and
expensive system.
You should always simulate a new
control method before deploying it on
hardware.
We dont have time in this short
workshop to do this.

64
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Constant Voltage Controller

129

Instead we will use our knowledge of control


systems.
g at our controller,, we note that we are
Looking
comparing the control signal (called Desired
Voltage) to the measured rpm signal.
The feedback tries to make the measured signal
equal to the control signal.
g
the g
generator output
p voltage,
g , all we
To regulate
need to do is change the signal we are feeding
back.
Make the changes shown on the next slide.

Constant Voltage Controller

130

Generator output
voltage is now the
feedback variable.
The speed signal is
not being used.

65
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Constant Voltage Controller

131

The feedback now attempts to keep the


generator output voltage equal to the
control signal
signal.
As the load changes, the controller will try
to keep the generator voltage constant.
When you run this model, you will notice
that, in order to keep the generator voltage
constant, the motor will speed up as more
light bulbs are turned on.

Constant Voltage Controller

132

Build this model.


Download it to your ECU.
Test it.
it
Observe the effects of changing the gains.
Note that this system may require different
feedback gains than our constant motor
speed system.
You should be able to visually see the
effects of over and undershoot in the
brightness of the bulbs.

66
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Lecture 17 Demo 5

133

Demo of Motor/generator with the PI feedback


controller and constant voltage feedback.

Demo___________

67
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Advanced Model-Based-System
Design
Lecture 18:
CAN Communication

Outline

Can code calculator


CAN message data base with Vector CANdb+
CAN message m-files for MotoHawk
MotoHawk Read CAN Message block
MotoHawk Send CAN message block
We will create a system where we have two
MotoTron ECUs communicate over a CAN link
link.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

CAN Signals - Apology

(The author apologizes for the repetitive


nature of the following 70 slides
slides.))

ECU1 CAN Output

We will generate 4 sine waves on ECU1


and send the values over CAN to ECU2.
Sine Wave 1: Period = 1 s,
s Amplitude = 1V
Sine Wave 2: Period = 2 s, Amplitude = 3V
Sine Wave 3: Period = 3 s, Amplitude = 5V
Sine Wave 4: Period = 4 s, Amplitude = 7V

We will send all 4 values in one CAN


message with CAN ID x123

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Vector CANdb++

We will use a program named CANdb+


from Vector Informatik to visualize CAN
messages and maintain a CAN database
database.
All signals will be saved in a database
named MBD_MotoHawk.dbc
We will show a variety of signals to
illustrate CAN scaling and offsets.

CAN Message ECU1_Message1

Sent by ECU1
CAN ID x123 (hex)
CAN Standard 11-bit ID
DLC 6 bytes in length
Signals
SW1 values -1 to 1
SW2 values -3 to 3
SW3 values -5 to 5
SW3 values -7 to 7

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

SW1
Sine Wave 1
g
is a signal
with values
from -1 to +1.
Send as an
unsigned 8-bit
code.

CAN Code Calculator

Unsigned
g
Codes
n := 8

Number of bits in the code


n

Xmax := 2 1

Xmax = 255

Xmin := 0
X is
i the
th binary
bi
value
l off th
the code
d iin th
the fifield.
ld W
We are
assuming a unsigned codes from 0 to 2n-1.

Ymax and Ymin are the values of the data signal being
sent via CAN.
Ymax := 1
factor := 1

Ymin := 1
offset := 0

Initial Guesses

Given
Ymax

factor Xmax + offset

Ymin

factor Xmin + offset

factor

:= Find( factor , offset)


offset
factor = 7.843137 10

offset = 1

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

SW2
Sine Wave 2
g
is a signal
with values
from -3 to +3.
Send as a
signed 8-bit
code.

CAN Code Calculator


2' compliment
2's
li
t signed
i
d codes
d
n := 8
Xmax := 2

n1

Xmax = 127

Xmin := 2

n1

Xmin = 128

X is the binary value of the code in the field. We are


assuming a signed codes from -2n-11 to 2 n-11-1.

10
Ymax and Ymin are the values of the data signal being
sent via CAN.
Ymax := 3

Ymin := 3

factor := 1

offset := 0

Initial Guesses

Given
Ymax

factor Xmax + offset

Ymin

factor Xmin + offset

factor

:= Find( factor , offset)


offset
factor = 0.023529

offset = 0.0117647

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

11

SW2
Sine Wave 3
is a signal
with values
from -5 to +5.
Send as an
unsigned 16bit code.
Use little
endian (Intel)
format.

Ymax and Ymin are the values of the data signal being
sent via CAN.
Ymax := 5
factor := 1

12

Ymin := 5
offset := 0

Initial Guesses

Given
Ymax
a

factor Xmax
a + offset

Ymin

factor Xmin + offset

factor

:= Find( factor , offset)


offset
factor = 1.525902 10

offset = 5

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

13

SW4
Sine Wave 4 is a
signal with
values from -7 to
+7.
Send as a
signed 16-bit
code.
Use big endian
(Motorola)
format.

CAN Code Calculator


2's
2
s compliment signed codes
n := 16
Xmax := 2

n1

Xmax = 32767

Xmin := 2

n 1

Xmin = 32768

X is the binary value of the code in the field. We are


assuming a signed codes from -2
2n-1 to 2 n-1-1.
1.

Ymax and Ymin are the values of the data signal being
sent via CAN.
Ymax := 7

14

Ymin := 7

factor := 1

offset := 0

Initial Guesses

Given
Ymax

factor Xmax + offset

Ymin

factor Xmin + offset

factor

:= Find( factor , offset)


offset
factor = 2.136263 10

offset = 0.0001068

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

15

Note: Intel (little endian) format.

Note: Motorola (big endian) format.

CANdb++ display of CAN message x123

16

CAN Message ECU1_Message1


Summary

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

MotoHawk CAN M-files

17

The MotoHawk CAN block does not read


CANdb+ files.
We will create one m
m-file
file for each CAN
message we want to send.
When you create a model using the
command motohawk_project, you may
have noticed a subdirectory called CAN.
This directory:
Is where we will place our CAN m-files.
Contains an example CAN message m-file.

Example CAN Message M-file

18

If you look in the CAN directory, you


should see an m-file with the name of your
project and a .m
m extension
extension.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

CAN Message m-files

19

You can open this file and take a look at


the file.
Here,
Here we will go over the m
m-files
files we
created for this example.
These files are provided for you.
First, take a look at file called
ECU1 Message1.m.
ECU1_Message1.m.
Edit this file with the Matlab editor:

ECU1_Message1.m

20

Note that our m-file was named


ECU1_Message1.m.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

10

21

ECU1_message1
The message will be
sent at a 50 Hz rate.

Information for
documentation.

The physical CAN channel


we will be using.

22

ECU1_message1
We will be using an11-bit ID.

The ID for this CAN


message is Hex 123.

This is a 6-byte
message.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

11

23

ECU_Message1
Here is where the signals
contained in the message
are defined
defined.

ECU1_message1 SW1

24

Signal name. Same as in CANdb+.

Units for documentation only.

Same as in CANdb+.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

12

25

ECU1_message1 SW1

Location of the least significant


bit of the signal.
Independent of:
Big endian, little endian.
Number of bytes in the
g
message.
Bit numbering is different
than that shown in CANdb+.

26

63

62

61

60

59

58

57

56

55

54

53

52

51

50

49

48

47

46

45

44

43

42

41

40

Least significant bit of signal SW1 is


39
38
37
36
35
bit 56.

35

33

32

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

13

27

ECU1_message1 SW2

Location of the least significant


bit of this signal is 48.

28

63

62

61

60

59

58

57

56

55

54

53

52

51

50

49

48

47

46

45

44

43

42

41

40

Least significant bit of signal SW2 is


39
38
37
36
35
bit 48.

35

33

32

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

14

29

ECU1_message1 SW3
Location of the least significant
bit of this signal is 40.

30

63

62

61

60

59

58

57

56

55

54

53

52

51

50

49

48

47

46

45

44

43

42

41

40

39

38

37

36

35

35

33

32

Least
SW3 is27
31 significant
30 bit of
29signal28
bit 40.

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

15

31

ECU1_message1 SW4
Location of the least significant
bit of this signal is 16.

Note that the byte order for this


signal is big endian.

32

63

62

61

60

59

58

57

56

55

54

53

52

51

50

49

48

47

46

45

44

43

42

41

40

39

38

37

36

35

35

33

32

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

Least significant bit of signal SW4 is


7
6
5
4
3
bit 16.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

16

33

ECU1_Message2

Sent by ECU1
CAN ID x601 (hex)
CAN Standard 11-bit ID
DLC 6 bytes in length
Signals
Potentiometer Value 0 to 1023.
Sine Wave Period = 5.0 s, Amplitude = 5V
Shark Tooth Waveform (Ramp) -100 to 100.
Time 0 to 3600 seconds.

Potentiometer

34

Analog signal measured with analog input. Use


the POT on the Motor-Generator system.
Value is read on ECU1 as a 10 bit code with
values from 0 to 210-1
1 (1023 for non ECE
people).
Send over CAN as an unsigned 10-bit code.
Factor is 1.
Use little endian (Intel) format.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

17

Sinewave (not mispelled!)

35

Signal with
values from -5
to +5.
Send as an
unsigned 14bit code.
tt e
Use little
endian (Intel)
format.

36

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

18

SharkTooth

37

Signal with
values from 100 to +100.
Send as an
unsigned 12bit code.
tt e
Use little
endian (Intel)
format.

38

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

19

Time

39

Signal with
values from 0
to 3600.
Send as an
unsigned 12bit code.
tt e
Use little
endian (Intel)
format.

40

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

20

41

42

CAN Message ECU1_Message2


Summary

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

21

43

ECU1_Message2.m

Note that our m-file was named


ECU1_Message2.m.

44

ECU1_message2
The message will be
sent at a 50 Hz rate.

Information for
documentation.

The physical CAN channel


we will be using.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

22

45

ECU1_message2
We will be using an11-bit ID.

The ID for this CAN


message is Hex 601.

This is a 6-byte
message.

ECU_Message2

46

Here is where the signals


contained in the message
are defined
defined.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

23

47

ECU1_message2 Sinewave
Location of the least significant
bit of signal Sinewave is 50.

48

63

62

61

60

59

58

57

56

55

54

53

52

51

50

49

48

Least significant bit of signal Sinewave


47
45
44
is bit 50. 46

43

42

41

40

39

38

37

36

35

35

33

32

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

24

49

ECU1_message2 Time
Location of the least significant
bit of the signal.

50

63

62

61

60

59

58

57

56

55

54

53

52

51

50

49

48

Least significant bit of signal Sinewave


47
45
44
is bit 28. 46

43

42

41

40

39

38

37

36

35

35

33

32

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

25

51

CAN Message ECU2_Message1

Sent by ECU2
CAN ID x708 (hex)
CAN Standard 11-bit ID
DLC 3 bytes in length
Signals
Temperature 0 to 100
Fred -3150 to -3120
LED3 0 to 1
Pulsewidth 0 to 100

Temperature

52

Signal with
values from 0
to 100.
Send as an
unsigned 7-bit
code.
tt e
Use little
endian (Intel)
format.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

26

53

Fred

54

Signal values
from -3150 to
-3120.
Send as an
unsigned 5-bit
code.
tt e
Use little
endian (Intel)
format.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

27

55

LED3

56

Signal value 0 or 1.
Send over CAN as an unsigned 1-bit code.
Factor is 1.
1
Use little endian (Intel) format.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

28

Pulsewidth

57

Signal values
from 0 to 100.
Send as an
unsigned 10-bit
code.
Use little
endian
e
d a ((Intel)
te )
format.

58

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

29

59

60

CAN Message ECU2_Message1


Summary

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

30

61

ECU2_Message1.m

Note that our m-file was named


ECU2_Message1.m.

62

ECU2_Message1
The message will be
sent at a 50 Hz rate.
Information for
documentation.

The physical CAN channel


we will be using.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

31

63

ECU2_Message1
We will be using an11-bit ID.

The ID for this CAN


message is Hex 708.

This is a 3-byte
message.

ECU2_Message1

64

Here is where the signals


contained in the message
are defined
defined.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

32

65

ECU2_Message1 Fred
Location of the least significant
bit of signal Fred is 63.

66

63

62

61

60

59

58

57

56

55

54

53

52

51

50

49

48

47

46

45

44

43

42

41

40

Least significant bit of signal Fred is


39
38
37
bit 63.

36

35

35

33

32

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

33

67

ECU2_Message1 LED3
Location of the least significant
bit of signal LED3 is 52.

68

63

62

61

60

59

58

57

56

55

54

53

52

51

50

49

48

47

46

45

44

43

42

41

40

Least significant bit of signal LED3 is


39
38
37
bit 52.

36

35

35

33

32

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

34

69

CAN Message ECU2_Message2

Sent by ECU2
CAN ID x124 (hex)
CAN Standard 11-bit ID
DLC 1 byte in length
Signals
Cooling_Fan 0 to 1

Cooling_Fan

70

Signal value 0 or 1.
Send over CAN as an unsigned 1-bit code.
Factor is 1.
1
Use little endian (Intel) format.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

35

71

CAN Project Preview

72

We will connect two MotoTron ECUs


together on a single CAN bus.
Each ECU will control a motor
motor-generator
generator
setup.
ECU1 will send commands to ECU2,
some of which are commands to spin the
motor connected to ECU2.
ECU2 will send commands to ECU1,
some of which are commands to spin the
motor connected to ECU1.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

36

CAN Project Preview

73

We will use two PCs to communicate with


the individual ECUs.
Each PC will use its own copy of
MotoTune.
To use MotoTron with two ECUs on the
same CAN bus, we will have to change
the City ID of one of the ECUs.

Can Project Preview

74

We will use the same hardware setup as


we used in the previous examples.
No wiring changes are needed
needed.
All we need to do is connect two of the
CAN hubs together with one of the yellow
MotoTron CAN cables (non-terminated at
both ends). (Do not do this yet!)
We can remove one of the key switches
since the switches are effectively in
parallel. (Do not do this yet!)

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

37

Work in Groups of Two

75

One person should choose to be ECU1.


Follow the slides with the header ECU1.
These are slides that follow this slide
slide.
One person should choose to be ECU2.
Follow the slides with the header ECU2.
ECU2 should skip the following slides and
jump to the appropriate slides.
(Approximately slide number??)

76

ECU1 Slides
ECU2 Group skip ahead to slides
l b l d with
labeled
ith h
header
d ECU2
ECU2.
(Approximately slide number 116)

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

38

ECU1

77

ECU1 will do the following:


Generate 4 sine waves and send the values
over the CAN bus using message
ECU1_Message1.
Read the potentiometer from the motorgenerator system and send the binary value
(0 to 1023) over the CAN bus using
ECU1_Message2.
Generate signals for Time, a ramp (shark
tooth), and a sine wave, and send the values
over the CAN bus using message
ECU1_Message2.

ECU1

78

ECU1 will receive the following information


over the CAN bus in message
ECU2 Message1:
ECU2_Message1:
Temperature: Value will be displayed with a
MotoHawk probe.
Fred and LED signals: Light up LED on
motor-generator system. Display value with
MotoHawk probe.
probe
Receive the pulse width signal (0 to 100) and
spin the motor with the given pulse width.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

39

ECU1

79

ECU1 will receive the following information


over the CAN bus in message
ECU2 Message1:
ECU2_Message1:
Cooling Fan signal. Display the value with a
MotoHawk probe.

ECU1

80

At the Matlab command prompt, enter the


command:
motohawk project('ECU1
motohawk_project(
ECU1_CAN_CAN
CAN CAN')) to
create a new model.
In the top level of the model, place a
MotoHawk CAN Definition block:
Part in library MotoHawk /CAN Blocks
Change the CAN rate to 500 k baud
Leave the CityID at 11 (hex B).

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

40

ECU1

81

ECU1

82

When you create a project using the


command motohawk_project, a new
directory is created with the same name
as the project.
Inside the new directory is a subdirectory
called CAN. We will place all of the CAN
files in this directory.
CAN m-files should be
placed in this directory.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

41

83

ECU1
Copy all of the CAN files to the CAN
directory.
By default
default, the MotoHawk CAN blocks will
look in this directory for the m-files.

All of our m-files copied to the CAN


subdirectory.

84

ECU1
Next, open the foreground subsystem.
Delete the controller and plant models.
Place
Pl
4 Si
Sine W
Wave parts
t iin thi
this subsystem
b
t
(library Simulink/Sources).
Sine wave properties:
Amplitude: 1
Period: 1 sec

Double-click on this part


and change its properties
as shown next.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

42

ECU1

85
Time based chosen. We cannot
use a sample based sine wave
inside a triggered subsystem.

Frequency (rad/sec) = 2 (Frequency in Hz)


= 2 / (Period in seconds)

Since this part is inside a


triggered subsystem
subsystem, the sample
time must be set to inherited (-1).

ECU1

86

Use the same settings for the other sine


waves except:
Sine Wave 2 should have a period of 2
seconds and amplitude of 3.
Sine Wave 3 should have a period of 3
seconds and amplitude of 5.
Sine Wave 4 should have a period of 4
seconds and amplitude of 7
7.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

43

87

ECU1
We want to send the values of the sine
waves over the CAN bus.
Place a part called Send CAN Messages
in your model. (Library MotoHawk/CAN
Blocks.)
Double-click on the part and change the
settings as shown:

ECU1

88
We created this m-file earlier.
The name of the file was
ECU1_Message1.m.
We placed this file in the
subdirectory named CAN.
This m-file contains the signal
definitions for this message.

When you click the OK button, if


MotoHawk can find the m-file, the
properties
p
will change:
g
block p
There will be one Simulink input
for every signal in the message.
The block will display the
properties of each signal and the
CAN transmit rate.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

44

ECU1

89

Your block should look as shown.

ECU1

90

Connect the sine wave sources to the


CAN block.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

45

ECU1

91

ECU1 will also send out the following


information that will be contained in
message ECU1
ECU1_Message2:
Message2:
The potentiometer reading from the motorgenerator.
A sine wave of amplitude 5 and period 5
seconds.
A periodic ramp signal of amplitude 100 and
period of 5 seconds (mistakenly called a
shark tooth).
The time since the ECU was last started.

ECU1

92

For the potentiometer signal, we will use


the same analog input as we used in the
earlier project.
project
Copy the potentiometer analog input from
our previous project.
Use a convert block to change the data
type to double.
Add an override so that we can change
the value while debugging.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

46

93

ECU1
As a reminder, the potentiometer used
analog input AN4M.
Do not scale the value
value. (We are
transmitting the raw value in the range of 0
to 1023.)

94

ECU1
For the sine wave, use the same part as
we used for the first 4 sine waves and set
the amplitude to 5 and period to 5:

Amplitude 5.
Period 5
5.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

47

95

ECU1
For our ramp, we will use a part called
Signal Generator. (Located in library
Simulink/Sources.))
Sawtooth chosen.
Note that we have chosen
that the time reference for
this block should be an
external signal.
We will need to provide a
signal for this block that
corresponds to time.
Amplitude set to 100, Frequency set to
0.2 Hz (corresponding to a period of 5
seconds.)

ECU1

96

When you click OK in the dialog box for


the signal generator, you will notice that
the Signal Generator has an input
input.
This input is the time input for the block.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

48

ECU1

97

The last signal we need is a signal corresponding


to time.
MotoHawk provides a block called
motohawk_abs_time
t h k b ti
(located
(l
t d in
i library
lib
MotoHawk/Extra Development Blocks).
The output of this block is the time since the
MotoTron ECU was last restarted.
Place the block in your model and connect it to the
i
input
t off the
th signal
i
l generator
t bl
block.
k

ECU1

98

We want to send the values of the signals


just created over the CAN bus.
Place a part called Send CAN Messages
in your model. (Library MotoHawk/CAN
Blocks.)
Double-click on the part and change the
settings as shown:

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

49

ECU1

99
We created this m-file earlier.
The name of the file was
ECU1_Message2.m.
We placed this file in the
subdirectory named CAN.
This m-file contains the signal
definitions for this message.

When you click the OK button, if


MotoHawk can find the m-file, the
properties
p
will change:
g
block p
There will be one Simulink input
for every signal in the message.
The block will display the
properties of each signal and the
CAN transmit rate.

ECU1

100

Your block should look as shown.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

50

ECU1

101

Connect the CAN block as shown. (An


enlargement is shown on the next slide.)

ECU1

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

102

51

103

ECU1
ECU1 will be receiving two can messages.
We need to add a CAN receive block for
each message we are receiving
receiving.
Place a part called Read CAN Message in
your model. (Library MotoHawk/CAN
Blocks.)
Double
Double-click
click on the block and change the
settings as shown:

ECU1

104
We created this m-file earlier.
The name of the file was
ECU2_Message1.m.
We placed this file in the
subdirectory named CAN.
This m-file contains the signal
definitions for this message.

When you click the OK button, if


MotoHawk can find the m-file, the
properties
p
will change:
g
block p
There will be one Simulink output
for every signal in the message.
The block will display the
properties of each signal and the
CAN transmit rate.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

52

ECU1

105

ECU1

106

All signals will be connected to probes so


we can observe their values.
In addition
addition, we will do the following:
Fred:
If the value equals -3127, turn on one of the
LEDs in the motor-generator system.
Use digital output part with pin FUELP. (Same
as in our previous motor control exercise.
Should already be wired up correctly.)

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

53

107

ECU1
LED3:
Convert to a Boolean type and turn on and off an LED
in the motor-generator system.
Use digital output part with pin TACH
TACH. (Same as in
our previous motor control exercise. Should already
be wired up correctly.)

Pulsewidth:
The received signal has values from 0 to 100.
Convert to values from 0 to 4096.
Convert to type int16 and send out a PWM signal
using the PWM output block with pin EST1.
(Same as in our previous motor control exercise.
Should already be wired up correctly.)

108

ECU1
The next few slides show the connections.
MotoHawk probe.

Compare to constant. Check if


values is equal to -3127.
MotoHawk_dout.
Pin: FUELP

MotoHawk probe.

MotoHawk_dout.
Pin: TACH
Data Type Conversion.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

54

109

ECU1
Motohawk_pwm.
Pin: EST1

MotoHawk probe.

Gain block. Gain


set to 4096/100.

Constant block. Sets PWM


frequency to 20 kHz. Value:
20000*100.

ECU1

110

All connections for CAN read block.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

55

111

ECU1
The second CAN message that ECU1 will
receive is ECU2_message2.
This message has one signal called
Cooling_Fan.
We will display this signal with a probe.
Place a part called Read CAN Message in
your model. (Library MotoHawk/CAN
Blocks.)
Double-click on the block and change the
settings as shown:

ECU1

112
We created this m-file earlier.
The name of the file was
ECU2_Message2.m.
We placed this file in the
subdirectory named CAN.
This m-file contains the signal
definitions for this message.

When you click the OK button, if


MotoHawk can find the m-file, the
properties
p
will change:
g
block p
There will be one Simulink output
for every signal in the message.
The block will display the
properties of each signal and the
CAN transmit rate.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

56

ECU1

113

ECU1

114

Connect the Cooling_Fan signal to a


MotoHawk probe.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

57

115

ECU1
We are now done building the model.
Use the techniques covered previously to:
Check for consistency in data types:
Select Format, Port/Signal Displays, and then
Port Data Types to display data types.
Type ctrl-D to evaluate your model for errors.

Build the Model (type ctrl-b)


Use MotoTune to download your model to
your ECU.
Note: Do not connect both ECUs to the same CAN
network yet.

116

ECU2 Slides
ECU1 Group skip ahead to slides
l b l d with
labeled
ith h
header
d ECU1/ECU2
ECU1/ECU2.
(Approximately slide number 166)

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

58

ECU2

117

ECU2 will do the following:


Receive 4 sine waves over the CAN bus
using message ECU1_Message1. The values
will be displayed with probes.
Receive the potentiometer over the CAN bus
using ECU1_Message2. Scale the signal from
0 to 4096 and spin the motor in the motorgenerator system using the given duty cycle.
Receive signals for Time, a ramp (shark
tooth), and a sine wave over the CAN bus
using message ECU1_Message2. The values
will be displayed with probes.

ECU2

118

ECU2 will send the following information


over the CAN bus in message
ECU2 Message1:
ECU2_Message1:
Temperature. The value will be set with a
MotoHawk override.
Fred and LED signals. The values will be set
with a MotoHawk overrides.
Pulsewidth.
Pulsewidth The value will be read from the
potentiometer on the motor-generator system
and scaled to values from 0 to 100. An
override will also be used for debugging.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

59

ECU2

119

ECU2 will send the following information


over the CAN bus in message
ECU2 Message1:
ECU2_Message1:
Cooling Fan signal. The value will be set with
a MotoHawk override.

ECU2

120

At the Matlab command prompt, enter the


command:
motohawk project('ECU2
motohawk_project(
ECU2_CAN_CAN
CAN CAN')) to
create a new model.
In the top level of the model, place a
MotoHawk CAN Definition block:
Part in library MotoHawk /CAN Blocks
Change the CAN rate to 500 k baud
Change the CityID to12 (hex C).

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

60

121

ECU2

CAN definition block. Doubleclick on the block and change


the settings as shown next.

122

ECU2
Baud rate set to 500 kbaud.

City ID set to 12 (hex C). This is


necessary so that MotoTune can
communicate with two different
ECUs on the same CAN bus.
Contact MotoTron tech support
for a range of valid City IDs.
Click the OK button when done.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

61

ECU2

123

ECU2

124

When you create a project using the


command motohawk_project, a new
directory is created with the same name
as the project.
Inside the new directory is a subdirectory
called CAN. We will place all of the CAN
files in this directory.
CAN m-files should be
placed in this directory.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

62

125

ECU2
Copy all of the CAN files to the CAN
directory.
By default
default, the MotoHawk CAN blocks will
look in this directory for the m-files.

All of our m-files copied to the CAN


subdirectory.

ECU2

126

Next, open the foreground subsystem.


Delete the controller and plant models.
The foreground subsystem should be
empty except for the two blocks shown:

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

63

127

ECU2
ECU2 will be receiving two can messages.
We need to add a CAN receive block for
each message we are receiving
receiving.
Place a part called Read CAN Message in
your model. (Library MotoHawk/CAN
Blocks.)
Double
Double-click
click on the block and change the
settings as shown:

ECU2

128
We created this m-file earlier.
The name of the file was
ECU1_Message1.m.
We placed this file in the
subdirectory named CAN.
This m-file contains the signal
definitions for this message.

When you click the OK button, if


MotoHawk can find the m-file, the
properties
p
will change:
g
block p
There will be one Simulink output
for every signal in the message.
The block will display the
properties of each signal and the
CAN transmit rate.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

64

ECU2

129

ECU2

130

All signals will be connected to probes so


we can observe their values.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

65

131

ECU2
The second CAN message that ECU2
receives is ECU1_Message2.
Place a part called Read CAN Message in
your model. (Library MotoHawk/CAN
Blocks.)
Double-click on the block and change the
settings as shown:

ECU2

132
We created this m-file earlier.
The name of the file was
ECU1_Message2.m.
We placed this file in the
subdirectory named CAN.
This m-file contains the signal
definitions for this message.

When you click the OK button, if


MotoHawk can find the m-file, the
properties
p
will change:
g
block p
There will be one Simulink output
for every signal in the message.
The block will display the
properties of each signal and the
CAN transmit rate.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

66

ECU2

133

ECU2

134

All signals will be connected to probes so


we can observe their values.
In addition
addition, we will do the following to the
Potentiometer signal:
Scale the signal from 0 to 1023, to 0 to 4096.
Convert the signal to an int16 data type.
Output the signal with a MotoHawk_pwm
block on EST1 and spin the motor with the
specified duty cycle.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

67

135

ECU2
The next few slides show the connections.
Gain block. Scale the
signal to 0 to 4096. Gain
= 4096/1023.

Data Type
Conversion.

MotoHawk probe.

MotoHawk_pwm.
Pin: EST1

Constant block. Sets PWM


frequency to 20 kHz. Value:
20000*100.

ECU2

136

All connections for CAN read block.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

68

ECU2

137

ECU2 will transmit the following information that


will be contained in message ECU2_Message1:
Temperature. A value from 0 to 100. This value will
be set with a MotoHawk override.
Fred. A value from -3150 to -3120. This value will be
set with a MotoHawk override.
LED3. A value from 0 to 1. This value will be set with
a MotoHawk override.
Pulsewidth. A value from 0 to 100. The value will be
obtained from the potentiometer on the motorgenerator system. An override will also be used for
debugging purposes.

ECU2

138

For the pulsewidth signal, we will use the same


analog input as we used in the earlier project.
py the potentiometer
p
analog
g input
p from our
Copy
previous project.
Use convert block to change the data type to
double.
Use a gain block to scale the signal from 0 to
100.
Add an override so that we can change the
value while debugging.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

69

139

ECU2
As a reminder, the potentiometer used
analog input AN4M.

140

ECU2
The three other signals in this message
use overrides to set the values.
To p
protect against
g
the user making
g an
error when setting an override, we will add
saturation blocks to limit the signals.

Temperature Saturation limits: 0 to 100.


FRED Saturation Limits: -3150 to -3120.
LED3 Saturation limits: 0 to 1.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

70

141

ECU2
We want to send the values of the signals
just created over the CAN bus.
Place a part called Send CAN Messages
in your model. (Library MotoHawk/CAN
Blocks.)
Double-click on the part and change the
settings as shown:

ECU2

142
We created this m-file earlier.
The name of the file was
ECU2_Message1.m.
We placed this file in the
subdirectory named CAN.
This m-file contains the signal
definitions for this message.

When you click the OK button, if


MotoHawk can find the m-file, the
properties
p
will change:
g
block p
There will be one Simulink input
for every signal in the message.
The block will display the
properties of each signal and the
CAN transmit rate.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

71

ECU2

143

Your block should look as shown.

ECU2

144

Connect the CAN block as shown. (An


enlargement is shown on the next slide.)

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

72

ECU2

145

ECU2

146

ECU2 will send out the following information that


will be contained in message ECU2_Message2:
Cooling_Fan. A value from 0 to 1. This value will be
set with a MotoHawk override.
To protect against the user making an error when
setting an override, we will add a saturation block to
limit the signal from 0 to 1.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

73

147

ECU2
We want to send the value of the
Cooling_Fan signal just created over the
CAN bus
bus.
Place a part called Send CAN Messages
in your model. (Library MotoHawk/CAN
Blocks.)
Double-click on the part and change the
settings as shown:

ECU2

148
We created this m-file earlier.
The name of the file was
ECU2_Message2.m.
We placed this file in the
subdirectory named CAN.
This m-file contains the signal
definitions for this message.

When you click the OK button, if


MotoHawk can find the m-file, the
properties
p
will change:
g
block p
There will be one Simulink input
for every signal in the message.
The block will display the
properties of each signal and the
CAN transmit rate.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

74

ECU2

149

Your block should look as shown.

ECU2

150

Connect the CAN block as shown.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

75

ECU2

151

We are finished building the model.


Use the techniques covered previously to:
Check for consistency in data types:
Select Format, Port/Signal Displays, and then
Port Data Types to display data types.
Type ctrl-D to evaluate your model for errors.

Build the Model (type ctrl-b)


Use MotoTune to download your model to
your ECU. (See Next Slide!!!)
Note: Do not connect both ECUs to the same CAN
network yet.

ECU2

152

If you recall, in the top level of model


ECU2_CAN_CAN, we changed the City ID of
ECU2 to 12 (hex C).
Since we have not yet programmed ECU2 with
the new model, ECU2 still has a City ID of 11.
Thus, we program ECU2 with MotoTune the
same as we did in our last example.
Once we program ECU2 with the new model, we
will need to make some changes in the
MotoTune ports.
(Program your ECU with the new model if you
have not yet done so.)

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

76

153

ECU2
Once ECU2 has been programmed with
the new model, we need to change (or
add) a port for PCM
PCM-2
2 (City ID 12)
12).
We used a procedure earlier to
change/verify the properties of the
MotoServer ports.
We will repeat a similar procedure here.

ECU2 - MotoServer

154

We now need to add a port for City ID 12


(PCM-2) using MotoServer.
The MotoServer icon
should be
located in your windows tray.
MotoServer icon.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

77

ECU2 - MotorServer

155

Right-click on the MotoServer icon and


select Ports

ECU2 - MotorServer

156

You may or may not have a port called


PCM-2.
If you have a PCM-2
PCM 2 port,
port the settings
should be:
Kavaser CAN
Access 4
Baud Rate 500000
If you have this port,
enable it and disable
the PCM-1 port.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

78

157

ECU2 - MotoServer
If PCM-2 port settings are not:
Kavaser CAN
Access 4
Baud Rate 500000

Then you will need to change the port


settings.
Skip
p to slide 166 if yyour port
p settings
g are
correct.

158

ECU2 - MotorServer
If you need to change the port settings,
select PCM-2 and click the Modify button.

Port selected.

Click the Modify


button.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

79

159

ECU2 - MotorServer
Change the settings as shown:

Click the OK button to accept the changes.


Make sure that
only port PCM
PCM-2
2
is enabled.

160

ECU2 - MotoServer
If your port settings are correct, skip to
slide 166.
If your window does not have a port
named PCM-2, you must do the following:
Click the Edit Names button

Click here.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

80

161

ECU2 - MotoServer
Click this Add
button.

Select CAN Kingdom and


then click the Next button.

162

ECU2 - MotoServer
Fill in the dialog box as shown and click
the Finish button.
Name is PCM-2.
CityID is 12.

CAN Bus 1.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

81

163

ECU2 - MotoServer
PCM-2 should be added to the CAN Bus
Mappings.

Name listed here.

Click the OK button.

164

ECU2 - MotoServer
Click this Add
button.

Fill in properties as shown:


Type Kavaser CAN
Location PCM-2
Access Level 4
Baud Rate 500000
Click the OK button when done.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

82

165

ECU2 - MotoServer
The port should
be added with
the proper
settings
settings.

Disable all other


ports.

Port is enabled.
Click the OK button. We
are ready to go.

ECU1 / ECU2 CAN

166

We can now connect the two 6-port hubs


together with a CAN Cable. (Nonterminated at both ends.)
Remove one of the key switches. (One
key switch will turn on both ECUs.)
Run MotoTune on each PC and open a
display to your ECU.
PC1 connect to ECU1 (PCM-1
(PCM 1 port))
PC2 connect to ECU2 (PCM-2 port)

Both PC1 and PC2 show all probes and


overrides on the display.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

83

PC1 ECU1 Display

167

PC2 ECU2 Display

168

Quick check:
Signals SW1
through SW4
should be
changing
h
i
continuously.

Quick check: All


of these signals
should be
changing except
the
h P
Potentiometer
i
signal.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

84

169

Testing
Next, we will change values of the
overrides on PC2/ECU2 and we should
see the probe values change on
PC1/ECU1.
Test each override for several values
within each signals range.
I will show the display for both PCs on the
same slide. You will have the displays
shown on two different PC screens.

Testing

170
This value
should follow a
change in the
indicated
override. Valid
range is 0 to 1.

To see a faster response,


you may want to set the
update rate of a cell to
fast. (Right-click on a cell
and select Properties.
Next, click the Set Fast
button and then click the
OK button.)

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

85

Testing

Testing

171
This value should
follow a change in
the indicated
override. Valid
range is -3150 to
-3120.

172
Note a significant
amount of error?
For a temperature
range of 0 to 100
degrees, we only
used 7 bits. One
q
to
bit is equal
0.79 degrees.

With signals like the


Pulsewidth and temperature,
we are representing a
continuous signal by a binary
code with a finite number of
bits. You will notice that the
value transmitted over the
CAN bus is an
approximation that results in
round off error.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

86

Testing

173

Using the overrides, verify that all signals


being sent from one ECU are received
accurately by the other ECU
ECU.

MotoTune Displaying Charts

174

To verify the waveforms that are being


sent over CAN are working, we will plot
the signals with MotoTune
MotoTune.
We will first plot signal SW1 on ECU2.
Right-click on the SW1 value cell and
select Properties.

Right-click here and select


Properties from the menu.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

87

MotoTune Displaying Charts

175

Fill in the dialog box as shown:


We will apply the changes to all
signals in the display.

Click the OK button when done.

This option not selected combined with the


Apply To All option will result in all signals
being removed from the chart.

MotoTune Displaying Charts

176

After clicking the OK button, the selections


to not plot anything will take effect.
Right-click
Right click again on the SW1 value cell
and select Properties.
This time:
Click the Set Fast button.
Do not select the Apply
pp y to All button.
Select the Add to Chart/Log button.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

88

MotoTune Displaying Charts

177

Fill in the dialog box as shown:


Option not selected.

The value of the signal will be updated


every 50 ms.
This signal will be displayed on the chart.

MotoTune Displaying Charts

178

Click the OK button to accept the


changes.
With our settings
settings, only signal SW1 will be
displayed on our chart.
To display the chart, select Chart and then
Open Chart from the MotoTune menus.
You should see the following chart:

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

89

MotoTune Displaying Charts

179

MotoTune Displaying Charts

180

To add another signal to the chart:


Right-click on the value cell and select
Properties.
In the dialog box that appears:

Click the Set Fast button.


Select the Add to chart/log option.
Do not select the Apply To All option.
Clock the OK button.

Close the chart that is presently open.


Open a new chart by selecting Chart and
then Open Chart from the MotoTune menus.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

90

MotoTune Displaying Charts

181

Display all 4 Sine waves on the same


chart.

MotoTune Displaying Charts

182

Display the SharkTooth waveform.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

91

CAN_CAN Project

183

You should now be able to control the


motors and LEDs connected from one
ECU by CAN messages sent from the
other ECU.
We are done. Whew
Any Questions?

Lecture 18 Demo ECU1

184

ECU1: CAN Communication


Fred ECU 1 Turns on LED when it receives value of
-3127. Value sent with MotoHawk Probe.________
LED3 Turn on and off an LED connected to ECU1.
One bit signal sent by ECU2.________
Pulsewidth Receive signal of 0 to 100 from ECU2.
ECU1 Receives the signal and emits a PWM signal
that controls the motor speed._________
Temperature
p
ECI1 Receive CAN signal
g
from ECU2
and display value with probe.___________
Cooling FAN Receive 10bit Signal from ECU2.
Display with MotoHawk Probe. _________

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

92

Lecture 18 Demo ECU2

185

ECU2: CAN Communication


Receive four sine waves from ECU1. Display values
on a chart ._________
Potentiometer Receive potentiometer signal from
ECU1. Scale signal and emit a PWM signal that
controls the motor speed._________
ECU2 receives signals for time, a ramp (shark tooth),
and a sine wave over the CAN bus. The values will be
displayed with probes and a chart. _________

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

93

Advanced Model
Model-Based
Based
Systems Design
Lecture 19:
Hardware In The loop Simulations
(HIL)
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

HIL
Up to this point we have:
Learned several levels of simulations: PC
and Real-Time.
Learned several software packages:
MATLAB, Simulink, MotoHawk, LabVIEW
Used many platforms: PC, LabVIEW RT, PXI
Used several different hardware targets: PXI,
MPC555.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

HIL
It is now time to put it all together and perform Hardwarein-the-loop (HIL) simulations.
We will start with the full vehicle model developed in
Lecture 14 exercise 6 and split the model so that:
The controller runs in the MPC555 target.
The plant runs on the PXI target.

The two targets will be connected with a CAN bus, the


same harness that will be used in the final product
product.
The Controller will be connected to driver controls
through a wiring harness.
The models will run in real time.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

HIL
This is a test of the controller:
Hardware - It is running on the target we will use in
the final implementation.
p
Speed - It is running in real time.
Wiring Interface - It is connected to the plant and
driver controls using the same interface that will be
used in the final implementation.
This tests both the wiring
g as well as the effect of network
latency as control messages are sent through the CAN bus.

If the controller works when hooked to our virtual


plant,
l t we h
have confidence
fid
th
thatt it will
ill work
k when
h
we hook it to the physical plant (the real vehicle).

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

HIL

We will start with Lecture14_Exercise6.mdl


_
and split
p it
into two models, the plant and the controller. (The model
has been renamed Lecture19_Model0.mdl and passed
out )
out.)
The plant will:
Run on the PXI Target.
Use LabVIEW and SIT to create a shell to interface between the
model and the controller.
The inputs
p
and outputs
p
will be CAN signals.
g

The controller will


Run on an MPC555 target.
Use MotoHawk to interface between the model and physical
world.
The inputs and outputs will be analog voltages and CAN signals.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

HIL
We will be using the test platform below:

Controller
d l
deployed
d on an
MPC555
computer.
Same p
physical
y
interface as
in the actual system.
(Wiring for analog signals
in our example.)

Same physical interface as


in the actual system. (CAN
bus in our example.)

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

National Instruments
PXI real-time
computer running a
model
d l off th
the plant.
l t

HIL Simulations

Part 1: Implementing the


g
Controller on the MPC5554 Target

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Motor Controller Deployment


From lectures 16 through 18, we now know how
to use the hardware resources of the MPC555
wellll enough
h tto use it as th
the ttargett ffor th
the
controller of our motor-generator system.
We will use the control method we proved
proved,
tested, and verified in the SIL and real-time
portions of the class.
First, we will create a shell that accesses the
hardware resources of our target
g ((MPC555).
)

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Motor Controller Deployment


The controller will have the following driver
inputs that come from the driver board:

Brake Pedal 0 to 5 V analog input.


Accelerator Pedal 0 to 5 V analog input.
Park push
push-button
button - 0 to 5 V analog input
input.
Forward push-button - 0 to 5 V analog input.
Reverse push-button
push button - 0 to 5 V analog input.

The driver board has LEDs that indicate Park,


Forward,, Reverse,, Error,, and Vehicle Ready:
y

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

10

Driver Board Schematic

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

11

Motor Controller Deployment


You will need to use MotoHawk analog input
channels to read the analog inputs and then
scale
l the
th signal
i
l appropriately
i t l for
f the
th signals
i
l
required by the controller.
You will use MotoHawk high current digital
outputs to drive the LEDs. Note that a low output
will illuminate the LEDs on the driver board.
All other inputs and outputs for the controller will
use the CAN bus.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

12

Hardware Shell
We will now create a top-level shell for
our controller that:
Initializes the MPC555 and MotoTune
Reads and scales the inputs
p
and p
provides the
outputs
Passes the information to a subsystem that
contains the controller.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

13

Hardware Shell
The basic idea is that our interface to the
hardware will not change that much.
Given the same interface, we can make
significant changes to our control method.
All off these
th
changes
h
will
ill b
be iimplemented
l
t d iin th
the
controller subsystem.
The
Th hardware
h d
shell
h ll will
ill remain
i relatively
l ti l
unchanged. (Occasionally, a new control
method will require new inputs or outputs.
outputs In this
case, we will need to modify the hardware shell.)

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

14

Hardware Model Top Level

15

Specify CAN 1 and a baud


rate of 500 K

Specify the GHS compiler.

Controller and shell inside


here. Run once every 5
ms.
ms

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Hardware Shell - Foreground Subsystem


All input signals
bussed together
here and passed
to the controller.

CAN
Outputs

Analog inputs
and outputs.

Controller outputs
p
extracted with a
bus selector and
passed to analog
and CAN output
blocks.

CAN
Inputs

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

16

Hardware Shell LED Outputs

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

17

Hardware Shell LED Outputs

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

18

Hardware Shell Push-button Inputs

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

19

Hardware Shell Bus interface to Controller


Controller inside here
here.
(Unchanged - Mostly)

Subsystems Probes and Probes1


contain
t i only
l probes
b so th
thatt we can look
l k
at every controller input and output
signal for debug purposes.
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

20

21

HIL Simulations

Part 2: Implementing the Plant on


the National Instruments PXI
Target

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Plant Model
Since we already implemented the entire
model in real-time to run on a PXI target in
the previous lecture, we will reuse some of
the work we did in that model.
This Model was resaved as
Lecture19_Model0.
Open the model and resave it as
Vehicle Plant mdl
Vehicle_Plant.mdl.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

22

Plant Model
Delete the Controller subsystem and NI_Driver
subsystem.
Leave the NI_Display_and_Loging subsystem in
the model as we will display most of the same
signals in the LabVIEW front panel as we did in
lecture 14.
The inputs that came from the controller are now
connected to In ports and the plant outputs that
went to the controller are now connected to Out
ports.
We will associate these with CAN signal inputs and
outputs using the Simulation interface toolkit.
Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.
This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

23

Plant Model

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

24

NI_Display_and_Logging
The NI_Display_and_Logging subsusyem
was slightly modified because we needed
to remove the driver signals.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

25

LabVIEW Front Panel


We will use the front panel we created in
Lecture 14 in this example.
We will remove the driver controls from
p y but reuse everything
y
g else from the
display
example.
The VI from lecture 14 has been provided
for you and renamed as
Lecture19 Model0 vi
Lecture19_Model0.vi.
Modify the front panel as shown next:

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

26

LabVIEW Front Panel

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

27

SIT Connection Manager


You will need to use the SIT connection
manager to:
Change the DLL to use the one for the plant
only.
Connect the front panel displays to the
appropriate signals in the DLL.
Associate CAN inputs and outputs with the In
and Out ports that we placed in the plant
model.
d l

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

28

SIT Connection Manager - CAN


The CAN signals are specified in a CANdb file.
This file has been provided for you and is named
AMBD HIL1 db
AMBD_HIL1.dbc
All of the CAN signals that are needed are
contained in this file
file.
(Not all of the m-files needed to define the CAN
ssignals
g a s in MotoHawk
oo a
have
a e bee
been p
provided.)
o ded )

CAN signals are associated with In and


Out ports by selecting the Hardware I/O
category in the SIT Connection Mamager:

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

29

SIT Connection Manager - CAN

Select Hardware
I/O.

Click this button.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

30

SIT Connection Manager


You will need to right click on your target
target,
select Add Device and then NI-CAN.
The ensuing
screens will allow
you to
t identify
id tif the
th
CAN hardware on
your target and
specify a CANdb
.dbc for the
project.
project

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

31

SIT Connection Manager


Once you identify the CAN channels and
specify the CANdb file, all of the signals in
he CANdb file will be displayed.
p
and
You can then associate model inputs
outputs with (In and Out ports) with CAN
g
signals.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

32

CAN Baud Rate


You will need to use the National
Instruments Measurement and Automation
Explorer to set the baud rate of the
specific CAN channels.
(Show how to do this.)

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

33

34

Lecture 19 Exercise 1
Demonstrate a working HIL system with the
controller logic unchanged. You will need to:
Use MotoTune to debug and display many of the
controller input and output signals.
Define some m-files
m files for the missing CAN signals
signals.
Wire the driver control board to your ECU.
Debug
g a lot of wrong
g connections and signal
g
associations.

You should be able to drive you vehicle


with the driver controls.
Demo___________

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

Lecture 19 Exercise 2
You will notice that the charging current oscillates
wildly when the vehicle starts charging.
This is because the feedback signals and generator
torque engine throttle command signals for the
proportional feedback loop come over the CAN bus
bus.
CAN messages are periodic and are sent at a slower
rate than needed to make the loop stable
stable.

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

35

36

Lecture 19 Exercise 2a

Investigate an earlier model that we ran in Matlab.


Add delay to the feedback loops to model the delay
introduced by the periodicity of the CAN messages.
Show that the control loops for maintaining constant
engine
i rpm and
d constant
t t oscillate
ill t when
h we add
dd 20 ms
delays to the incoming and outgoing signals.
This
Thi should
h ld prove th
the th
theory th
thatt th
the reason th
the
system is unstable is the added delay due to latency
in the CAN network
network.
Demo___________

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

37

Lecture 19 Exercise 2b

In the controller model running on the MotoTron ECU,


add calibration blocks that allow us to change the
f db k gains
feedback
i off th
the engine
i speed
d lloop and
d th
the
generator current loop.
Determine the feedback gain of both loops necessary
to obtain constant and stable charging currents.

Demo___________

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

38

Lecture 19 Exercise 3

In Exercise 2b, we find that the proportional gains have to be


reduce so much that the engine rpm and generator currents are
quite far away from the desired values.
The loops are stable but we have a large error because the gains are so
small.

To fifix this problem


problem, add integrators to both loops and add
calibration blocks so that we can tune both the proportional and
integral gains of each loop separately.
Show that the error goes to zero and that the system is stable.
(A little bit of overshoot is acceptable.)
You
Y will
ill need
d tto b
build
ild your own di
digital
it l iintegrator
t
t and
d make
k sure
that it saturates (or has limits on how big the value can grow).
Demo___________

Copyright (c) 2013 by Zac Chambers and Marc E. Herniter.


This work is made available under the terms of the Creative Commons Attribution-ShareAlike 3.0 license,
http://creativecommons.org/licenses/by-sa/3.0/.

You might also like