CMU
UM


Steady-State Error

Calculating steady-state errors
System type and steady-state error
Example: Meeting steady-state error requirements

Steady-state error is defined as the difference between the input and output of a system in the limit as time goes to infinity (i.e. when the response has reached the steady state). The steady-state error will depend on the type of input (step, ramp, etc) as well as the system type (0, I, or II).

Note: Steady-state error analysis is only useful for stable systems. It is your responsibility to check the system for stability before performing a steady-state error analysis. Many of the techniques that we present will give an answer even if the system is unstable; obviously this answer is meaningless for an unstable system.

Calculating steady-state errors

Before talking about the relationships between steady-state error and system type, we will show how to calculate error regardless of system type or input. Then, we will start deriving formulas we will apply when we perform a steady state-error analysis. Steady-state error can be calculated from the open or closed-loop transfer function for unity feedback systems. For example, let's say that we have the following system:

which is equivalent to the following system:

We can calculate the steady state error for this system from either the open or closed-loop transfer function using the final value theorem (remember that this theorem can only be applied if the denominator has no poles in the right-half plane):

Now, let's plug in the Laplace transforms for different inputs and find equations to calculate steady-state errors from open-loop transfer functions given different inputs:

When we design a controller, we usually want to compensate for disturbances to a system. Let's say that we have the following system with a disturbance:

we can find the steady-state error for a step disturbance input with the following equation:

Lastly, we can calculate steady-state error for non-unity feedback systems:

By manipulating the blocks, we can model the system as follows:

Now, simply apply the equations we talked about above.

System type and steady-state error

If you refer back to the equations for calculating steady-state errors for unity feedback systems, you will find that we have defined certain constants ( known as the static error constants). These constants are the position constant (Kp), the velocity constant (Kv), and the acceleration constant (Ka). Knowing the value of these constants as well as the system type, we can predict if our system is going to have a finite steady-state error.

First, let's talk about system type. The system type is defined as the number of pure integrators in a system. That is, the system type is equal to the value of n when the system is represented as in the following figure:

Therefore, a system can be type 0, type 1, etc. Now, let's see how steady state error relates to system types:


Type 0 systems
Step Input
Ramp Input
Parabolic Input
Steady State Error Formula
1/(1+Kp)
1/Kv
1/Ka
Static Error Constant
Kp = constant
Kv = 0
Ka = 0
Error
1/(1+Kp)
infinity
infinity


Type 1 systems
Step Input
Ramp Input
Parabolic Input
Steady State Error Formula
1/(1+Kp)
1/Kv
1/Ka
Static Error Constant
Kp = infinity
Kv = constant
Ka = 0
Error
0
1/Kv
infinity


Type 2 systems
Step Input
Ramp Input
Parabolic Input
Steady State Error Formula
1/(1+Kp)
1/Kv
1/Ka
Static Error Constant
Kp = infinity
Kv = infinity
Ka = constant
Error
0
0
1/Ka


Click on the System Type to see examples

Example: Meeting steady-state error requirements

Given the following system,

where G(s) is:

K*(s + 3)(s + 5) -------------------------- s (s + 7)(s + 8)
find the value of K so that there is 10% steady state error in open loop. Since this system is type 1, there will be no steady-state error for a step input and an infinite error for a parabolic input. The only input that will yield a finite steady-state error in this system is a ramp input. Let's look at the ramp input response for a gain of 1:
	num = conv( [1 5], [1 3]);
	den = conv([1,7],[1 8]);
	den = conv(den,[1 0]);
	[clnum,clden] = cloop(num,den);
	t = 0:0.1:50;
	u = t;
	[y,x] = lsim(clnum,clden,u,t);
	plot(t,y,t,u)
	xlabel('Time(secs)')
	ylabel('Amplitude')
	title('Input-purple, Output-yellow')
 

The steady-state error for this system is very large, since we can see that an input of time = 20 gives us an output with amplitude of approximately 16. We will talk about this in further detail in a few moments.

We know from our problem statement that the steady state error must be 0.1. Therefore, we can solve the problem following these steps:

Let's see the ramp input response for K = 37.33:

	k =37.33 ;
	num =k*conv( [1 5], [1 3]);
	den =conv([1,7],[1 8]);
	den = conv(den,[1 0]);
	[clnum,clden] = cloop(num,den);
	t = 0:0.1:50;
	u = t;
	[y,x] = lsim(clnum,clden,u,t);
	plot(t,y,t,u)
	xlabel('Time(secs)')
	ylabel('Amplitude')
	title('Input-purple, Output-yellow')

In order to get a better view, we must zoom in on the response. We choose to zoom in between 40 and 41 because we will be sure that the system has reached steady state by then and we will also be able to get a good view of the input and the output.

	axis([40,41,40,41])

The amplitude = 40 at t = 40 for our input, and time = 40.1 for our output. However, since these are parallel lines in steady state, we can also say that when time = 40 our output has an amplitude of 39.9, giving us a steady-state error of 10%. Let's zoom in further on this plot and confirm our statement:

	axis([39.9,40.1,39.9,40.1])

Now let's modify the problem a little bit and say that our system looks as follows:

Our G(s) is the same, but now we want zero steady-state error for a ramp input.

From our tables, we know that a system of type 2 gives us zero steady-state error for a ramp input. Therefore, we can get zero steady-state error by simply adding an integrator (a pole at the origin) Let's view the ramp input response for a step input if we add an integrator and use a gain of one:

	num =conv( [1 5], [1 3]);
	den =conv([1,7],[1 8]);
	den = conv(den,[1 0]);
	den = conv(den,[1,0]);
	[clnum,clden] = cloop(num,den);
	t = 0:0.1:250;
	u = t;
	[y,x] = lsim(clnum,clden,u,t);
	plot(t,y,t,u)
	xlabel('Time(secs)')
	ylabel('Amplitude')
	title('Input-purple, Output-yellow')

As you can see, the response is not the most desirable one (we can see oscillations at 100secs, but you may have to zoom in to see them). However, at steady state we have zero steady-state error. Let's zoom in at 240 secs. (trust me, it doesn't reach steady state until then):

	axis([239.9,240.1,239.9,240.1])

As you can see, the steady-state error is zero. Feel free to zoom in at different areas on the diagram and observe how the response approaches steady state.


User feedback

We would like to hear about difficulties you had with the tutorials, suggestions you have for improvement, errors that you found, or any other comments that you have. This feedback is anonymous; include your email address if you want a reply.


Use your browser "Back" button to return to the previous page

8/28/96 LJO