1 Introduction
1.1 Literature Review
1.2 Contributions
1.3 Paper Organisation
2 Experimental Setup and Battery Tests
Specifications | Nominal capacity (A·h) | Nominal voltage (V) | Cut-off voltage (V) | Maximum charging/discharging current (A) |
---|---|---|---|---|
Quantity | 25 | 3.65 | 4.15/2.5 | 75/100 |
3 Fractional Order Models
3.1 Model Structures
FOM | Parameters | Discretised model equations | State space for SOC estimation |
---|---|---|---|
[Uoc, Ri, R1, Q1, α1] | \(\left\{ {\begin{array}{*{20}l} {U_{\text{c1}} \left( k \right) = \frac{{\tau_{1} }}{{\tau_{1} + 1}}\left[ {\frac{1}{{Q_{1} }}I\left( k \right) - {\text{D}}^{{\left( {\alpha_{1} } \right)}} U_{\text{c1}} \left( k \right)} \right],} \hfill \\ {U_{\text{t}} \left( k \right) = U_{\text{oc}} + I\left( k \right)R_{\text{i}} + U_{\text{c1}} \left( k \right).} \hfill \\ \end{array} } \right.\) | \(\left\{ \begin{array}{l}
\left[ {\begin{array}{*{20}{c}}
{{{\rm{D}}^{{\alpha _1}}}{U_{{\rm{c1}}}}\left( {k + 1} \right)}\\
{{{\rm{D}}^1}z\left( {k + 1} \right)}
\end{array}} \right] = \left[ {\begin{array}{*{20}{c}}
{ - \frac{1}{{{\tau _1}}}}&0\\
0&0
\end{array}} \right]\left[ {\begin{array}{*{20}{c}}
{{U_{{\rm{c1}}}}\left( k \right)}\\
{z\left( k \right)}
\end{array}} \right] + \left[ {\begin{array}{*{20}{c}}
{\frac{1}{{{Q_1}}}}\\
{\frac{1}{{{C_{\max }}}}}
\end{array}} \right]I\left( k \right),\\
{U_{\rm{t}}}\left( k \right) = {U_{{\rm{oc}}}}\left( {z\left( k \right)} \right) + I\left( k \right){R_{\rm{i}}} + {U_{{\rm{c1}}}}\left( k \right).
\end{array} \right.\) | |
[Uoc, Ri, R1, Q1, α1, W1, β1] | \(\left\{ {\begin{array}{*{20}l} \begin{aligned} U_{\text{c1}} \left( k \right) = \frac{{\tau_{1} }}{{\tau_{1} + 1}}\left[ {\frac{1}{{Q_{1} }}I\left( k \right) - {\text{D}}^{{\left( {\alpha_{1} } \right)}} U_{\text{c1}} \left( k \right)} \right], \hfill \\ U_{\text{W}} \left( k \right) = \frac{1}{{W_{1} }}I\left( k \right) - {\text{D}}^{{\left( {\beta_{1} } \right)}} U_{\text{W}} \left( k \right), \hfill \\ \end{aligned} \hfill \\ {U_{\text{t}} \left( k \right) = U_{\text{oc}} + I\left( k \right)R_{\text{i}} + U_{\text{c1}} \left( k \right).} \hfill \\ \end{array} } \right.\) | \(\left\{ \begin{array}{l}
\left[ {\begin{array}{*{20}{c}}
{{{\rm{D}}^{{\alpha _1}}}{U_{{\rm{c1}}}}\left( k \right)}\\
{{{\rm{D}}^{{\beta _1}}}{U_{\rm{W}}}\left( k \right)}\\
{{{\rm{D}}^1}z\left( k \right)}
\end{array}} \right]{\rm{ = }}\left[ {\begin{array}{*{20}{c}}
{ - \frac{1}{{{\tau _1}}}}&0&0\\
0&0&0\\
0&0&0
\end{array}} \right]\left[ {\begin{array}{*{20}{c}}
{{U_{{\rm{c1}}}}\left( k \right)}\\
{{U_{\rm{W}}}\left( k \right)}\\
{z\left( k \right)}
\end{array}} \right] + \left[ {\begin{array}{*{20}{c}}
{\frac{1}{{{Q_1}}}}\\
{\frac{1}{{{W_1}}}}\\
{\frac{1}{{{C_{\max }}}}}
\end{array}} \right]I\left( k \right),\\
{U_{\rm{t}}}\left( k \right) = {U_{{\rm{oc}}}}\left( {z\left( k \right)} \right) + I\left( k \right){R_{\rm{i}}} + {U_{{\rm{c1}}}}\left( k \right) + {U_{\rm{W}}}\left( k \right).
\end{array} \right.\) | |
[Uoc, Ri, R1, Q1, α1, W1, β1] | \(\left\{ {\begin{array}{*{20}l} {U_{\text{c}} \left( k \right) = \frac{{\left[ \begin{aligned} I\left( k \right) + W_{1} R_{1} {\text{D}}^{{\beta_{{_{1} }} }} I\left( k \right) - W_{1} {\text{D}}^{{\left( {\beta_{{_{1} }} } \right)}} U_{\text{c1}} \left( k \right) \hfill \\ - W_{1} \tau_{1} {\text{D}}^{{\left( {\alpha_{1} + \beta_{{_{1} }} } \right)}} U_{\text{c1}} \left( k \right) - Q_{1} {\text{D}}^{{\left( {\alpha_{1} } \right)}} U_{\text{c1}} \left( k \right) \hfill \\ \end{aligned} \right]}}{{W_{1} + W_{1} \tau_{1} + Q_{1} }},} \hfill \\ {U_{\text{t}} \left( k \right) = U_{\text{oc}} + I\left( k \right)R_{\text{i}} + U_{\text{c1}} \left( k \right).} \hfill \\ \end{array} } \right.\) | \(\left\{ \begin{array}{l}
\left[ {\begin{array}{*{20}{c}}
{{{\rm{D}}^{{\alpha _1}}}{U_{{\rm{c1}}}}\left( k \right)}\\
{{{\rm{D}}^{ - {\beta _1}}}{I_1}\left( k \right)}\\
{{{\rm{D}}^1}z\left( k \right)}
\end{array}} \right]{\rm{ = }}\left[ {\begin{array}{*{20}{c}}
{ - \frac{1}{{{\tau _1}}}}&0&0\\
W&0&0\\
0&0&0
\end{array}} \right]\left[ {\begin{array}{*{20}{c}}
{{U_{{\rm{c1}}}}\left( k \right)}\\
{{I_1}\left( k \right)}\\
{z\left( k \right)}
\end{array}} \right] + \left[ {\begin{array}{*{20}{c}}
{\frac{1}{{{Q_1}}}}\\
{W{R_1}}\\
{\frac{1}{{{C_{\max }}}}}
\end{array}} \right]I\left( k \right)\\
{U_{\rm{t}}}\left( k \right) = {U_{{\rm{oc}}}}\left( k \right) + I\left( k \right){R_{\rm{i}}} + {U_{{\rm{c1}}}}\left( k \right)
\end{array} \right.\) | |
[Uoc, Ri, R1, Q1, α1, R2, Q2, α2] | \(\left\{ {\begin{array}{*{20}l} \begin{aligned} U_{\text{c1}} \left( k \right) = \frac{{\tau_{1} }}{{\tau_{1} + 1}}\left[ {\frac{1}{{Q_{1} }}I\left( k \right) - {\text{D}}^{{\left( {\alpha_{1} } \right)}} U_{\text{c1}} \left( k \right)} \right], \hfill \\ U_{\text{c2}} \left( k \right) = \frac{{\tau_{2} }}{{\tau_{2} + 1}}\left[ {\frac{1}{{Q_{2} }}I\left( k \right) - {\text{D}}^{{\left( {\alpha_{2} } \right)}} U_{\text{c2}} \left( k \right)} \right], \hfill \\ \end{aligned} \hfill \\ {U_{\text{t}} \left( k \right) = U_{\text{oc}} + I\left( k \right)R_{\text{i}} + U_{\text{c1}} \left( k \right) + U_{\text{c2}} \left( k \right).} \hfill \\ \end{array} } \right.\) | \(\begin{aligned} \left[ {\begin{array}{*{20}c} {{\text{D}}^{{\alpha_{1} }} U_{\text{c1}} \left( k \right)} \\ {{\text{D}}^{{\alpha_{2} }} U_{\text{c2}} \left( k \right)} \\ {{\text{D}}^{1} z\left( k \right)} \\ \end{array} } \right]{ = }\left[ {\begin{array}{*{20}c} { - \frac{1}{{\tau_{1} }}} & 0 & 0 \\ 0 & { - \frac{1}{{\tau_{2} }}} & 0 \\ 0 & 0 & 0 \\ \end{array} } \right]\left[ {\begin{array}{*{20}c} {U_{\text{c1}} \left( k \right)} \\ {U_{\text{c2}} \left( k \right)} \\ {z\left( k \right)} \\ \end{array} } \right] + \left[ {\begin{array}{*{20}c} {\frac{1}{{Q_{1} }}} \\ {\frac{1}{{Q_{2} }}} \\ {\frac{1}{{C_{\text{max} } }}} \\ \end{array} } \right]I\left( k \right), \hfill \\ U_{\text{t}} \left( k \right) = U_{\text{oc}} \left( {z\left( k \right)} \right) + I\left( k \right)R_{\text{i}} + U_{\text{c1}} \left( k \right) + U_{\text{c2}} \left( k \right). \hfill \\ \end{aligned}\) | |
[Uoc, Ri, R1, Q1, α1, R2, Q2, α2, W1, β1] | \(\left\{ {\begin{array}{*{20}l} \begin{aligned} U_{\text{c1}} \left( k \right) = \frac{{\tau_{1} }}{{\tau_{1} + 1}}\left[ {\frac{1}{{Q_{1} }}I\left( k \right) - {\text{D}}^{{\left( {\alpha_{1} } \right)}} U_{\text{c1}} \left( k \right)} \right], \hfill \\ U_{\text{c2}} \left( k \right) = \frac{{\tau_{2} }}{{\tau_{2} + 1}}\left[ {\frac{1}{{Q_{2} }}I\left( k \right) - {\text{D}}^{{\left( {\alpha_{2} } \right)}} U_{\text{c2}} \left( k \right)} \right], \hfill \\ U_{\text{W}} \left( k \right) = \frac{1}{{W_{1} }}I\left( k \right) - {\text{D}}^{{\left( {\beta_{1} } \right)}} U_{\text{W}} \left( k \right), \hfill \\ \end{aligned} \hfill \\ {U_{\text{t}} \left( k \right) = U_{\text{oc}} + I\left( k \right)R_{\text{i}} + U_{\text{c1}} \left( k \right) + U_{\text{c2}} \left( k \right) + U_{\text{W}} \left( k \right).} \hfill \\ \end{array} } \right.\) | \(\left\{ \begin{array}{l}
\left[ {\begin{array}{*{20}{c}}
{{{\rm{D}}^{{\alpha _1}}}{U_{{\rm{c1}}}}\left( k \right)}\\
{{{\rm{D}}^{{\alpha _2}}}{U_{{\rm{c2}}}}\left( k \right)}\\
{{{\rm{D}}^{{\beta _1}}}{U_{\rm{W}}}\left( k \right)}\\
{{{\rm{D}}^1}z\left( k \right)}
\end{array}} \right] = \left[ {\begin{array}{*{20}{l}}
{ - \frac{1}{{{\tau _1}}}}&0&0&0\\
0&{ - \frac{1}{{{\tau _2}}}}&0&0\\
0&0&0&0\\
0&0&0&0
\end{array}} \right]\left[ {\begin{array}{*{20}{c}}
{{U_{{\rm{c1}}}}\left( k \right)}\\
{{U_{{\rm{c2}}}}\left( k \right)}\\
{{U_{\rm{W}}}\left( k \right)}\\
{z\left( k \right)}
\end{array}} \right] + \left[ {\begin{array}{*{20}{c}}
{\frac{1}{{{Q_1}}}}\\
{\frac{1}{{{Q_2}}}}\\
{\frac{1}{{{W_1}}}}\\
{\frac{1}{{{C_{\max }}}}}
\end{array}} \right]I\left( k \right),\\
{U_{\rm{t}}}\left( k \right) = {U_{{\rm{oc}}}}\left( k \right) + I\left( k \right){R_{\rm{i}}} + {U_{{\rm{c1}}}}\left( k \right) + {U_{{\rm{c2}}}}\left( k \right) + {U_{\rm{W}}}\left( k \right).
\end{array} \right.\) |
3.2 Parameter Identification
3.2.1 Parameter Identification Method
Step 1: Present the range of nonlinear parameters and stopping criteria. |
Step 2: Randomly generate the population in the range. |
Step 4: Identify [Uoc, Ri] using least squares and output the RMSE. |
Step 5: Evaluate the stopping criteria. If the criteria are met, stop and return the best solution. If not, go to the next step. |
Step 6: Generate a new population by crossover, mutation and selection. Go to Step 3. |
3.2.2 Parameter Identification Results
Uoc (V) | Ri (mΩ) | R1 (mΩ) | α1 | Q1 (\(s^{{\alpha_{1} }} /\Omega\)) | R2 (mΩ) | α2 | Q2 (\(s^{{\alpha_{2} }} /\Omega\)) | β1 | W1 (\(s^{{\beta_{1} }} /\Omega\)) |
---|---|---|---|---|---|---|---|---|---|
3.676 | 2.557 | 19.928 | 0.434 | 18997.936 | 97.051 | 0.863 | 29179.723 | 0.601 | 27330.045 |
4 Comparative Analysis of State of Charge Estimation
4.1 State of Charge Estimation Method
Step 1 A fractional order system: \(\left\{ \begin{aligned} &{\text{D}}^{\gamma } x_{k + 1} = f\left( {x_{k} ,u_{k} } \right) + w_{k} , \hfill \\& y_{k} = g\left( {x_{k} } \right) + v_{k} , \hfill \\ \end{aligned} \right.\) where x is the state vector, y is the measurement, u is the input. w and v represent the process noise and measurement noise with their variance being Q and R, respectively. The state error covariance is defined as P. |
Step 2 Initialisation: Pre-set Q, R and the initial values of x and P. |
Step 3 Time update: (a) Compute sigma points \(\left\{ \begin{aligned} &\tilde{x}_{0,k - 1/k - 1} = \hat{x}_{k - 1/k - 1} , \hfill \\& \tilde{x}_{j,k - 1/k - 1} = \hat{x}_{k - 1/k - 1} + \rho U_{j} \sqrt {s_{j} } , { }j = 1, \cdots ,n, \hfill \\& \tilde{x}_{j,k - 1/k - 1} = \hat{x}_{k - 1/k - 1} + \rho U_{j} \sqrt {s_{j} } , { }j = 1 + n, \cdots ,2n, \hfill \\ &P_{k - 1/k - 1}^{{}} = USV_{{}}^{\text{T}} , \hfill \\ \end{aligned} \right.\) where n is the length of x. sj and Uj denote the jth element and jth column of S and U, respectively. ρ is a constant in the range of \(\left[ {1,\sqrt 2 } \right]\). (b) Prior state estimation \(\left\{ \begin{aligned} &{\text{D}}^{\gamma } \hat{x}_{k/k - 1} \approx \sum\limits_{j = 0}^{2n} {W_{i}^{m} } f\left( {\chi_{j,k - 1/k - 1} ,u_{k - 1} } \right), \\& \hat{x}_{k/k - 1} = {\text{D}}^{\gamma } \hat{x}_{k/k - 1} - \sum\limits_{j = 1}^{k} {\left( { - 1} \right)^{j} } \gamma_{j} \hat{x}_{k - 1/k - 1} , \\& P_{k/k - 1}^{\text{DD}} \approx \sum\limits_{j = 0}^{2n} {W_{i}^{c} } \left[ {f\left( {\tilde{x}_{j,k - 1/k - 1} ,u_{k - 1} } \right) - {\text{D}}^{\gamma } \hat{x}_{k/k - 1} } \right] \\& \times \left[ {f\left( {\tilde{x}_{j,k - 1/k - 1} ,u_{k - 1} } \right) - {\text{D}}^{\gamma } \hat{x}_{k/k - 1} } \right]^{\text{T}} + Q, \\& P_{k/k - 1}^{{x{\text{D}}}} \approx \sum\limits_{j = 0}^{2n} {W_{i}^{c} } \left[ {f\left( {\tilde{x}_{j,k - 1/k - 1} ,u_{k - 1} } \right) - {\text{D}}^{\gamma } \hat{x}_{k/k - 1} } \right] \\& \times \left[ {f\left( {\tilde{x}_{j,k - 1/k - 1} ,u_{k - 1} } \right) - {\text{D}}^{\gamma } \hat{x}_{k/k - 1} } \right]^{\text{T}} , \\ & P_{k/k - 1}^{{}} = P_{k/k - 1}^{\text{DD}} + \gamma_{1} P_{k/k - 1}^{{x{\text{D}}}} + P_{k/k - 1}^{{{\text{D}}x}} \gamma_{1} + \sum\limits_{j = 1}^{k} {\gamma_{j} P_{k - 1/k - 1} } \gamma_{j} . \\ \end{aligned} \right.\) where the associated weights are computed as \(\left\{ \begin{aligned} & W_{0}^{m} = \frac{\lambda }{\lambda + n}, \hfill \\& W_{0}^{c} = \frac{\lambda }{\lambda + n} + \left( {1 - \alpha_{\text{w}}^{2} + \beta_{\text{w}} } \right), \hfill \\& W_{i}^{m} = W_{i}^{\left( c \right)} = \frac{1}{{2\left( {\lambda + n} \right)}},\;i = 1, \ldots ,2n, \hfill \\ \end{aligned} \right.\) with \(\alpha_{\text{w}}\) and \(\beta_{\text{w}}\) being two algorithm parameters. |
Step 4 Measurement update: (a) Create new sigma points using \(P_{k/k - 1}\) (b) Generate the estimated yk and the corresponding covariance \(\left\{ \begin{aligned} &\hat{y}_{k/k - 1}^{{}} = \sum\limits_{j = 0}^{2n} {W_{i}^{m} h\left( {\tilde{x}_{j,k/k - 1} } \right)} , \hfill \\& P_{k/k - 1}^{yy} = \sum\limits_{j = 0}^{2n} {W_{i}^{c} \left[ {h\left( {\tilde{x}_{j,k/k - 1} } \right) - \hat{y}_{k/k - 1}^{{}} } \right]\left[ {h\left( {\tilde{x}_{j,k/k - 1} } \right) - \hat{y}_{k/k - 1}^{{}} } \right]^{\text{T}} } + R, \hfill \\& P_{k/k - 1}^{xy} = \sum\limits_{j = 0}^{2n} {W_{i}^{c} \left[ {h\left( {\tilde{x}_{j,k/k - 1} } \right) - \hat{y}_{k/k - 1}^{{}} } \right]\left[ {h\left( {\tilde{x}_{j,k/k - 1} } \right) - \hat{y}_{k/k - 1}^{{}} } \right]^{\text{T}} } . \hfill \\ \end{aligned} \right.\) (c) Update the posterior estimation |
Step 5:k = k + 1. Go to Step 3. |
4.2 State of Charge Estimation Accuracy
Model | q | r | n |
---|---|---|---|
R(RQ) | 9 | 15 | 2 |
R(RQ)W | 3 | 15 | 3 |
R(RWQ) | 8 | 15 | 3 |
R(RQ)(RQ) | 8 | 15 | 3 |
R(RQ)(RQ)W | 8 | 15 | 4 |