Cruise Control: PID Controller Design

Contents

  • System model and parameters
  • Performance specifications
  • PID overview
  • Proportional control
  • PI control
  • PID control

System model and parameters

The transfer function model for the cruise control problem is given below. Please see the Cruise Control: System Modeling page for the derivation.

(1)$$
P(s) = \frac{V(s)}{U(s)} = \frac{1}{ms+b} \qquad  [ \frac{m/s}{N} ]
$$

The parameters used in this example are as follows:

(m)   vehicle mass            1000 kg
(b)   damping coefficient     50 N.s/m
(r)   reference speed         10 m/s

Performance specifications

  • Rise time < 5 s
  • Overshoot < 10%
  • Steady-state error < 2%

PID overview

The block diagram of a typical unity feedback system is shown below.

Recall from the Introduction: PID Controller Design page, the transfer function of a PID controller is

(2)$$
C(s) = K_p + \frac{K_i}{s} + K_d s = \frac{K_d s^2 +K_p s + K_i}{s}
$$

We can define a PID controller in MATLAB using the transfer function directly:

Kp = 1;
Ki = 1;
Kd = 1;


 
Continuous-time transfer function.

Alternatively, we may use MATLAB's pid controller object to generate an equivalent continuous time controller as follows:

C = pid(Kp,Ki,Kd)
C =
 
             1          
  Kp + Ki * --- + Kd * s


Proportional control

The first thing to do in this problem is to find a closed-loop transfer function with a proportional control ($C = K_p$) added.

By reducing the unity feedback block diagram, the closed-loop transfer function with a proportional controller becomes:

(3)$$
T(s) = \frac{Y(s)}{R(s)} = \frac{P(s)C(s)}{1+P(s)C(s)} = \frac{K_p}{m s+b+K_p}
$$

Recall from the Introduction: PID Controller Design page, a proportional controller, $K_p$, decreases the rise time, which is desirable in this case.

For now, use $K_p$ equal to 100 and a reference speed of 10 m/s. Create a new m-file and enter the following commands.

m = 1000;
b = 50;
r = 10;

s = tf('s');
P_cruise = 1/(m*s + b);

Kp = 100;
C = pid(Kp);

T = feedback(C*P_cruise,1)

t = 0:0.1:20;
step(r*T,t)


Note that we have used the MATLAB feedback command to simplify the block diagram reduction of the closed-loop system. Please verify for yourself that the result agrees with the closed-loop transfer function, T, derived above.

Running the m-file in MATLAB should give you the step response above. As you can see from the plot, neither the steady-state error nor the rise time satisfy our design criteria.

You can increase the proportional gain, $K_p$, to reduce the rise time and the steady-state error. Change the existing m-file so that $K_p$ equals 5000 and rerun it in the MATLAB command window. You should see the following plot.

Kp = 5000;
C = pid(Kp);
T = feedback(C*P_cruise,1);


The steady-state error is now essentially zero, and the rise time has been reduced substantially. However, this response is unrealistic because a real cruise control system generally can not change the speed of the vehicle from 0 to 10 m/s in less than 0.5 seconds due to power limitations of the engine and drivetrain.

Actuator limitations are very frequently encountered in practice in control systems engineering, and consequently, the required control action must always be considered when proposing a new controller. We will discuss this issue much more in subsequent tutorials.

The solution to this problem in this case is to choose a lower proportional gain, $K_p$, that will give a reasonable rise time, and add an integral controller to eliminate the steady-state error.

PI control

The closed-loop transfer function of this cruise control system with a PI controller ($C = K_p + K_i/s$) is:

(4)$$
T(s) = \frac{Y(s)}{R(s)} = \frac{P(s)C(s)}{1+P(s)C(s)} = \frac{K_p s + K_i}{m s^2+(b+K_p)s + K_i}
$$

Recall from the Introduction: PID Controller Design page, an addition of an integral controller to the system eliminates the steady-state error. For now, let $K_p$ equal 600 and $K_i$ equal 1 and see what happens to the response. Change your m-file to the following.

Kp = 600;
Ki = 1;
C = pid(Kp,Ki);

T = feedback(C*P_cruise,1);


Now adjust both the proportional gain, $K_p$, and the integral gain, $K_i$, to obtain the desired response. When you adjust the integral gain, $K_i$, we suggest you to start with a small value since a large $K_i$ can de-stabilize the response. When $K_p$ equals 800 and $K_i$ equals 40, the step response will look like the following:

Kp = 800;
Ki = 40;

PID control

For this particular example, no implementation of a derivative controller was needed to obtain the required output. However, you might want to see how to work with a PID control for the future reference. The closed-loop transfer function for this cruise control system with a PID controller ($C = K_p + K_i/s + K_d s$) is:

(5)$$
T(s) = \frac{Y(s)}{R(s)} = \frac{P(s)C(s)}{1+P(s)C(s)} = \frac{K_d s^2 + K_p s + K_i}{(m + K_d) s^2 +(b+K_p)s + K_i}
$$

Let $K_p$ equal 1, $K_i$ equal 1, and $K_d$ equal 1 and enter the following commands into a new m-file.

Kp = 1;
Ki = 1;
Kd = 1;
C = pid(Kp,Ki,Kd);

T = feedback(C*P_cruise,1);

Plot the step response and adjust all of $K_p$$K_d$, and $K_i$ until you obtain satisfactory results. We will leave this as an exercise for you to work on.

Suggestion: Usually choosing appropriate gains requires a trial and error process. The best way to attack this tedious process is to adjust one variable ($K_p$$K_i$, or $K_d$) at a time and observe how changing one variable influences the system output. The characteristics of $K_p$$K_i$, and $K_d$ are summarized in the Introduction: PID Controller Design page.

Matlabsolutions.com provides guaranteed satisfaction with a commitment to complete the work within time. Combined with our meticulous work ethics and extensive domain experience, We are the ideal partner for all your homework/assignment needs. We pledge to provide 24*7 support to dissolve all your academic doubts. We are composed of 300+ esteemed Matlab and other experts who have been empanelled after extensive research and quality check.

Matlabsolutions.com provides undivided attention to each Matlab assignment order with a methodical approach to solution. Our network span is not restricted to US, UK and Australia rather extends to countries like Singapore, Canada and UAE. Our Matlab assignment help services include Image Processing Assignments, Electrical Engineering Assignments, Matlab homework help, Matlab Research Paper help, Matlab Simulink help. Get your work done at the best price in industry.

Machine Learning in MATLAB

Train Classification Models in Classification Learner App

Train Regression Models in Regression Learner App

Distribution Plots

Explore the Random Number Generation UI

Design of Experiments

Machine Learning Models

Logistic regression

Logistic regression create generalized linear regression model - MATLAB fitglm 2

Support Vector Machines for Binary Classification

Support Vector Machines for Binary Classification 2

Support Vector Machines for Binary Classification 3

Support Vector Machines for Binary Classification 4

Support Vector Machines for Binary Classification 5

Assess Neural Network Classifier Performance

Naive Bayes Classification

ClassificationTree class

Discriminant Analysis Classification

Ensemble classifier

ClassificationTree class 2

Train Generalized Additive Model for Binary Classification

Train Generalized Additive Model for Binary Classification 2

Classification Using Nearest Neighbors

Classification Using Nearest Neighbors 2

Classification Using Nearest Neighbors 3

Classification Using Nearest Neighbors 4

Classification Using Nearest Neighbors 5

Linear Regression

Linear Regression 2

Linear Regression 3

Linear Regression 4

Nonlinear Regression

Nonlinear Regression 2

Visualizing Multivariate Data

Generalized Linear Models

Generalized Linear Models 2

RegressionTree class

RegressionTree class 2

Neural networks

Gaussian Process Regression Models

Gaussian Process Regression Models 2

Understanding Support Vector Machine Regression

Understanding Support Vector Machine Regression 2

RegressionEnsemble