Example: Solution to the Ball & Beam Problem Using PID Control

The open-loop transfer function of the plant for the ball and beam experiment is given below:

The design criteria for this problem are:

• Settling time less than 3 seconds
• Overshoot less than 5%

To see the derivation of the equations for this problem refer to the ball and beam modeling page.

## Closed-loop Representation

The block diagram for this example with a controller and unity feedback of the ball's position is shown below:

First, we will study the response of the system shown above when a proportional controller is used. Then, derivative and/or integral control will be added if necessary.

Recall, that the transfer function for a PID controller is:

## Proportional Control

The closed-loop transfer function for proportional control with a proportional gain (kp) equal to 100, can be modeled by copying the following lines of MATLAB code into an m-file (or a '.m' file located in the same directory as MATLAB)
```m = 0.111;
R = 0.015;
g = -9.8;
L = 1.0;
d = 0.03;
J = 9.99e-6;

K = (m*g*d)/(L*(J/R^2+m));   %simplifies input

num = [-K];
den = [1 0 0];
ball=tf(num,den);

kp = 1;
sys_cl=feedback(kp*ball,1);
```

Now, we can model the system's response to a step input of 0.25 m. Add the following line of code to your m-file and run it:

```step(0.25*sys_cl)
```

You should get the following output:

As, you can see the addition of proportional gain does not make the system stable. Try changing the value of kp and note that the system remains unstable.

## Proportional-Derivative Control

Now, we will add a derivative term to the controller. Copy the following lines of code to an m-file and run it to view the system's response to this control method.

```m = 0.111;
R = 0.015;
g = -9.8;
L = 1.0;
d = 0.03;
J = 9.99e-6;

K = (m*g*d)/(L*(J/R^2+m));   %simplifies input

num = [-K];
den = [1 0 0];
ball=tf(num,den);

kp = 10;
kd = 10;
contr=tf([kd kp],1);

sys_cl=feedback(contr*ball,1);

t=0:0.01:5;
step(0.25*sys_cl)
```

Your plot should be similar to the following:

Now the system is stable but the overshoot is much too high and the settling time needs to go down a bit. From the PID tutorial page in the section on characteristics of P, I, and D controllers, we see that by increasing kd we can lower the overshoot and decrease the settling time slightly. Therefore, make kd = 20 in your m-file and run it again. Your output should be:

The overshoot criterion is met but the settling time needs to come down a bit. To decrease the settling time we may try increasing the kp slightly to increase the rise time. The derivative gain (kd) can also be increased to take off some of the overshoot that increasing kp will cause. After playing with the gains a bit, the following step response plot can be achieved with kp = 15 and kd = 40:

As you can see from the above plot all the control objectives have been met without the use of an integral controller (settling time for this example is considered achieved when the response is less than 2% of its final value). Remember, that for a control problem there is usually more than one solution for the problem.

For other methods of controlling the ball and beam example, see the links below.

PID Examples
Cruise Control | Motor Speed | Motor Position | Bus Suspension | Inverted Pendulum | Pitch Controller | Ball & Beam

Ball & Beam Examples
Modeling | PID | Root Locus | Frequency Response | State Space | Digital Control | Simulink

Tutorials
MATLAB Basics | MATLAB Modeling | PID Control | Root Locus | Frequency Response | State Space | Digital Control | Simulink Basics | Simulink Modeling | Examples