Cruise Control: System Modeling
Automatic cruise control is an excellent example of a feedback control system found in many modern vehicles. The purpose of the cruise control system is to maintain a constant vehicle speed despite external disturbances, such as changes in wind or road grade. This is accomplished by measuring the vehicle speed, comparing it to the desired or reference speed, and automatically adjusting the throttle according to a control law.
We consider here a simple model of the vehicle dynamics, shown in the free-body diagram (FBD) above. The vehicle, of mass m, is acted on by a control force, u. The force u represents the force generated at the road/tire interface. For this simplified model we will assume that we can control this force directly and will neglect the dynamics of the powertrain, tires, etc., that go into generating the force. The resistive forces, bv, due to rolling resistance and wind drag, are assumed to vary linearly with the vehicle velocity, v, and act in the direction opposite the vehicle's motion.
With these assumptions we are left with a first-order mass-damper system. Summing forces in the x-direction and applying Newton's 2nd law, we arrive at the following system equation:
Since we are interested in controlling the speed of the vehicle, the output equation is chosen as follows
For this example, let's assume that the parameters of the system are:
(m) vehicle mass 1000 kg
(b) damping coefficient 50 N.s/m
First-order systems have only has a single energy storage mode, in this case the kinetic energy of the car, and therefore only one state variable is needed, the velocity. The state-space representation is therefore:
We enter this state-space model into MATLAB using the following commands:
m = 1000; b = 50; A = -b/m; B = 1/m; C = 1; D = 0; cruise_ss = ss(A,B,C,D);
Taking the Laplace transform of the governing differential equation and assuming zero initial conditions, we find the transfer function of the cruise control system to be:
We enter the transfer function model into MATLAB using the following commands:
s = tf('s'); P_cruise = 1/(m*s+b);