PI-based first-order controller

Introduction

The aim of this post is to explain and demonstrate how to calculate a simple PI controller for a first-order system. Let’s assume that the system is given by its transfer function G. The closed loop system is given by the following diagram:

Diagram of a closed loop system with controller

C is the system controller we'll design in the following.

Close loop transfer function

The transfer function of the closed-loop system is given by:

$$ \frac{y}{y_c} = \frac {CG}{1+CG} $$

as \(G\) is assumed to be a first-order system, its equation is given by:

$$ G=\frac{b}{z-a} = \frac{b} { z-e^{-\Delta/\tau} } $$

where \( \Delta \) is the sampling time, and \( \tau \) the time constant of the open loop system.

\( C \) is the PI controller, its equation is given by:

$$ C=K . \frac{z-a}{z-1} $$

The transfer function of the closed loop system is now given by:

$$ \frac{y}{y_c} = \frac { K \frac{z-a}{z-1} \frac{b}{z-a} }{1+ K \frac{z-a}{z-1} \frac{b}{z-a}} $$

Previous equation can be simplified:

$$ \frac{y}{y_c} = \frac { K \frac{b}{z-1} }{1+ K \frac{b}{z-1} } $$

The new transfer function is given by:

$$ \frac{y}{y_c} = \frac { Kb }{ z -1 + Kb } $$

Static gain of the closed loop system

Let's consider the response of the closed loop system when the input is a unity step ( \( \frac{z}{z-1} \) ):

$$ y(z) = \frac { zKb }{ (z -1 + Kb)(z-1) } $$

According to the final value theorem for Z-transforms, the static gain of the system is given by :

$$ \lim\limits_{z \to 1} (z-1).y(z) = \lim\limits_{z \to 1} \frac { zKb(z-1) }{ (z -1 + Kb)(z-1) } = \lim\limits_{z \to 1} \frac { zKb }{ (z -1 + Kb) } = 1 $$

The static gain of the system is equal to 1, the static error will be equal to zero.

Time constant of the closed loop system

The closed loop system is also a first-order :

$$ \frac{y}{y_c} = \frac { Kb }{ z -1 + Kb } = \frac { Kb }{ z - e^{-\Delta/\tau_c} }$$

where \( \Delta \) is the sampling time, and \( \tau_c \) the time constant of the closed loop system. Note that \( \tau_c \) can be less than \( \tau \) (the time constant of the open loop system). If \( \tau_c<\tau \) the system is more reactive (but is also more energy consuming). In practice, \( \tau_c=\tau/2 \) is a good compromise. From the previous equation :

$$ 1-Kb = e^{-\Delta/\tau_c} $$

and:

$$ K= \frac {1-e^{-\Delta/\tau_c}} {b} $$

To get the same response time in closed and open loop, the previous equation becomes :

$$ K= \frac {1-a} {b} $$

Stability

The system is stable if all the poles are located inside the unity circle. Here, as the system is a first-order, there is one pole : \( 1-Kb \). The system is stable if:

$$ -1 < 1-Kb < 1 $$

The previous equation can be rewritten as:

$$ 0 < Kb < 2 $$

and:

$$ 0 < K < \dfrac{2}{b} $$

Note that if \( K \) is calculated from \( \tau_c \) ( \( K = \dfrac {1-e^{-\Delta / \tau_c}}{b} \) ), the term \( e^{-\Delta / \tau_c} \) is included in the range [0,1[ and the system is necessarely stable because it leads to \( 0 < Kb < 1 \).

Discrete-time function

The transfert function of the controller expressed in the discrete-time domain is given by:

$$ \frac{u(z)}{\epsilon(z)} = K . \frac{z-a}{z-1} $$

The previous can be rewritten as:

$$ (z-1)u(z) = K(z-a)\epsilon(z) $$ $$ z.u(z) - u(z) = K.z.\epsilon(z) -K.a.\epsilon(z) $$ $$ z.u(z) = K.z.\epsilon(z) - K.a.\epsilon(z) + u(z) $$

Let's expressed the previous equation in the discrete-time domain:

$$ u_{n+1}= K\epsilon_{n+1} - K.a.\epsilon_n + u_{n} $$

or :

$$ u_{n}= K\epsilon_{n} - K.a.\epsilon_{n-1} + u_{n-1} $$

Response of the open and closed loop systems

Download

Here is a MATLAB script for simulating the system response:

pi-first-order.m

See also


Last update : 01/24/2021