# 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:

## Close loop transfer function

The transfer function of the 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 rewrite as:

$0

and:

$0

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

## 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}$

$(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}$