## 4 MPPT Control Design
### Current Regulation
#### 4.2.2 Backstepping Algorithm  
Backstepping is a nonlinear control solution that acts in accordance with the nonlinearity of the boost converter. It is well known by its robustness against modeling inaccuracies and system parameter fluctuations. After the estimation of \(I_{mpp}\), the backstepping algorithm is applied to reduce as much as possible the actual current error between the desired setpoint current \(I_{mpp}\) and the PEMFC measured current variable \(x_{1}\). Thus, the backstepping algorithm is designed to enforce \(x_{1}\) to track, as accurately as possible, \(I_{mpp}\). The backstepping approach [56; 57; 58; 52; 53; 54] is designed as follows:  
* **Step 1.** First, we define the tracking current error as \[e_{1}=x_{1}-I_{mpp}.\] (21) In order to achieve the tracking objective, it is needed to enforce \(e_{1}\) to vanish. Therefore, the dynamics of \(e_{1}\) must be clearly defined. By placing Equation (18) into Equation (21), the time derivative of \(e_{1}\) can be written as \[\dot{e_{1}}=-(1-u_{1})\frac{x_{2}}{L}+\frac{V_{Stack}}{L}-\dot{I}_{ref}\] (22)  
\begin{table}
\begin{tabular}{c c c c} \hline \hline
**Type of Controller** & \(K_{p}\) & \(T_{i}=K_{p}/K_{i}\) & \(T_{d}=K_{d}/K_{p}\) \\ \hline P & \(k_{cr}/2\) & \(\infty\) & 0 \\ PI & \(k_{cr}/2.2\) & \(P_{cr}/1.2\) & 0 \\ PID & \(k_{cr}/1.7\) & \(P_{cr}/2\) & \(P_{cr}/8\) \\ \hline \hline \end{tabular}
\end{table}
Table 2: Ziegler–Nichols tuning rules.  
Figure 11: Sustained oscillation with a period \(P_{cr}\).  
where the quantity \(\frac{x_{2}}{L}\) is a virtual variable. In order to stabilize the virtual error \(e_{1}\), a Lyapunov function \(V_{1}\) is considered: \[V_{1}=\frac{1}{2}e_{1}^{2}.\] (23) Using the equations mentioned above, the time derivative of \(V_{1}\) can be represented as \[\dot{V}_{1}=e_{1}\dot{e}_{1}=e_{1}\left(-(1-u_{1})\frac{x_{2}}{L}+\frac{V_{ Stack}}{L}-\dot{I}_{ref}\right).\] (24) Equation (24) shows that \(e_{1}\) can be adjusted to zero (\(e_{1}=0\)) if \(\frac{x_{2}}{L}=\gamma_{1}\), where the stabilizing function \(\gamma_{1}\) is defined by Equation (25): \[\gamma_{1}=\frac{1}{1-u_{1}}\left(b_{1}e_{1}+\frac{V_{Stack}}{L}-\dot{I}_{ref}\right)\] (25) where \(b_{1}\) is a positive constant parameter. Since \(\frac{x_{2}}{L}\) is a virtual variable and not the actual input of the controller, then a second tracking error variable \(e_{2}\) is given by Equation (26): \[e_{2}=\frac{x_{2}}{L}-\gamma_{1}.\] (26) Using Equations (25) and (26), Equation (22) can be written as \[\dot{e}_{1}=-b_{1}e_{1}-(1-u_{1})e_{2}.\] (27) Therefore, the Lyapunov function given in Equation (24) can also be rewritten as \[\dot{V}_{1}=-b_{1}e_{1}^{2}-(1-u_{1})e_{1}e_{2}.\] (28)
* **Step 2.** The aim of this step is to enforce the errors \((e_{1},e_{2})\) to vanish. For this reason, first of all, the dynamics of \(e_{2}\) must be determined. Using Equations (18), (25) and (27), the time-derivative of \(e_{2}\) can be obtained as \[\dot{e}_{2}=-\frac{u_{1}}{1-u_{1}}\gamma_{1}+\Psi\] (29) where \[\Psi=\frac{1}{1-u_{1}}\left(b_{1}^{2}e_{1}+(1-u_{1})b_{1}e_{2}-\frac{\dot{V}_ {Stack}}{L}+\dot{I}_{ref}\right)+\frac{1}{L}\left(\frac{1-u_{1}}{C}x_{1}- \frac{x_{2}}{RC}\right).\] (30) In order to obtain a stabilizing control law \(u_{1}\) for the whole system, the following Lyapunov function candidate is proposed: \[V=V_{1}+\frac{1}{2}e_{2}^{2}=\frac{1}{2}e_{1}^{2}+\frac{1}{2}e_{2}^{2}.\] (31) The time derivative of the above Lyapunov function is obtained by combining Equations (28) and (29): \[\dot{V} = \dot{V}_{1}+e_{2}\dot{e}_{2}\] (32) \[= -b_{1}e_{1}^{2}+e_{2}\left(\dot{e}_{2  
where \(b_{2}\) is a positive design parameter. Finally, by combining Equations (29) and (34), the following control law can be obtained:  
\[\dot{u_{1}}=\frac{1-u_{1}}{\gamma_{1}}\left(b_{2}e_{2}-(1-u_{1})e_{1}+\Psi \right). \tag{35}\]  
Using the above equations, the implementation of the backstepping algorithm in the Matlab-SimulinkTM environment is presented by Figure 12.