### Introduction

Battery stacks based on lithium-ion (Li-ion) cells are used in many applications such as hybrid electric vehicles (HEV), electric vehicles (EV), storage of renewable energy for use at a later time, and energy storage on the grid for various purposes such as grid stability, peak shaving, and renewable energy time shifting. In these applications, it is important to measure the state of charge (SOC) of the cells, which is defined as the available capacity (in Ah) and expressed as a percentage of its rated capacity. The SOC parameter can be viewed as a thermodynamic quantity enabling one to assess the potential energy of a battery. It is also important to estimate the state of health (SOH) of a battery, which represents a measure of the battery’s ability to store and deliver electrical energy, compared with a new battery. Analog Devices power control processor, the ADSP-CM419, is a perfect example of a processor that has the capability to deal with battery charging techniques discussed throughout this article.

This article deals with the algorithms utilized for SOC and SOH estimation based on coulomb counting. The technical environment specifications for coulomb counting are defined and an overview of the estimation methods of the SOC and SOH parameters, in particular the coulomb counting method, the voltage method, and the Kalman filter method are presented. Several SOC and SOH estimation commercial solutions are also described. In addition, this article details the best-in-class SOC and SOH estimation algorithms, especially the enhanced coulomb counting algorithm, the universal SOC algorithm, and the extended Kalman filter algorithm. Finally, the evaluation procedure and the simulation results of the chosen SOC and SOH algorithm are presented.

### Battery SOC Measurement Principle

Since the determination of the SOC of a battery is a complex task depending on the battery type and on the application in which the battery is used, much development and research work has been done in recent years to improve SOC estimation accuracy. Accurate SOC estimation is one of the main tasks of battery management systems, which will help improve the system performance and reliability, and will also lengthen the lifetime of the battery. In fact, precise SOC estimation of the battery can avoid unpredicted system interruption and prevent the batteries from being over charged and over discharged, which may cause permanent damage to the internal structure of batteries. However, since battery discharge and charge involve complex chemical and physical processes, it is not obvious to estimate the SOC accurately under various operation conditions.

The general approach for measuring SOC is to measure very accurately both the coulombs and current flowing in and out of the cell stack under all operating conditions, and the individual cell voltages of each cell in the stack. This data is then employed with previously loaded cell pack data for the exact cells being monitored to develop an accurate SOC estimate. The additional data required for such a calculation includes the cell temperature, whether the cell is charging or discharging when the measurements were made, the cell age, and other relevant cell data obtained from the cell manufacturer. Sometimes it is possible to get characterization data from the manufacturer of how their Li-ion cells perform under various operating conditions. Once an SOC has been determined, it is up to the system to keep the SOC updated during subsequent operation, essentially counting the coulombs that flow in and out of the cells. The accuracy of this approach can be derailed by not knowing the initial SOC to an accurate enough state and by other factors, such as self discharge of the cells and leakage effects.

### Technical Specifications

This article encompasses the design and development of a coulomb counting evaluation platform to be used for SOC and SOH measurement for a typical energy storage module, which in this case is a 24 V module, typically comprising seven or eight Li-ion cells. The evaluation platform is composed of a hardware system including an MCU and required interfaces and peripherals, embedded software for the SOC and SOH algorithm implementation, and a PC-based application software as a user interface for system configuration, and data display and analysis.

The evaluation platform periodically measures the voltage value of each cell and the battery pack’s current and voltage, by means of appropriate ADCs and sensors, and will run the SOC estimation algorithm in real time. This algorithm will use measured voltage and current values and some other data collected by temperature sensors, and/or given by PC-based software application (such as constructor specifications from a database). The SOC estimation algorithm output will be sent to the PC graphical user interface for dynamic display and database updating.

### SOC and SOH Estimation Methods Overview

Regarding SOC and SOH estimation methods, three approaches are mainly being used: a coulomb counting method, voltage method, and Kalman filter method. These methods can be applied for all battery systems, especially HEV, EV, and PV, and each method is discussed in the next few sections.

### Coulomb Counting Method

The coulomb counting method, also known as ampere hour counting and current integration, is the most common technique for calculating the SOC. This method employs battery current readings mathematically integrated over the usage period to calculate SOC values given by

where *S*_{OC}(*t*_{0}) is the initial SOC, C_{rated} is the rated capacity, I^{b} is the battery current, and I_{loss} is the current consumed by the loss reactions.

The coulomb counting method then calculates the remaining capacity simply by accumulating the charge transferred in or out of the battery. The accuracy of this method resorts primarily to a precise measurement of the battery current and accurate estimation of the initial SOC. With a preknown capacity, which might be memorized or initially estimated by the operating conditions, the SOC of a battery can be calculated by integrating the charging and discharging currents over the operating periods. However, the releasable charge is always less than the stored charge in the charging and discharging cycle. In other words, there are losses during charging and discharging. These losses, in addition with the self discharging, cause accumulating errors. For more precise SOC estimation, these factors should be taken into account. In addition, the SOC should be recalibrated on a regular basis and the declination of the releasable capacity should be considered for more precise estimation.

### Voltage Method

The SOC of a battery, that is, its remaining capacity, can be determined using a discharge test under controlled conditions. The voltage method converts a reading of the battery voltage to the equivalent SOC value using the known discharge curve (voltage vs. SOC) of the battery. However, the voltage is more significantly affected by the battery current due to the battery’s electrochemical kinetics and temperature. It is possible to make this method more accurate by compensating the voltage reading by a correction term proportional to the battery current and by using a lookup table of the battery’s pen circuit voltage (OCV) vs. temperature. The need for a stable voltage range for the batteries makes the voltage method difficult to implement. In addition, the discharge test usually includes a consecutive recharge, which makes it too time consuming to be considered for most applications. Another drawback is that during testing the system function is interrupted (offline method) contrarily to coulomb counting (online method).

### Kalman Filter Method

The Kalman filter is an algorithm to estimate the inner states of any dynamic system—it can also be used to estimate the SOC of a battery. Kalman filters were introduced in 1960 to provide a recursive solution to optimal linear filtering for both state observation and prediction problems. Compared to other estimation approaches, the Kalman filter automatically provides dynamic error bounds on its own state estimates. By modeling the battery system to include the wanted unknown quantities (such as SOC) in its state description, the Kalman filter estimates their values and gives error bounds on the estimates. It then becomes a model-based state estimation technique that employs an error correction mechanism to provide real-time predictions of the SOC. It can be extended in order to increase the capability of real-time SOH estimation using the extended Kalman filter. Notably, the extended Kalman filter is applied when the battery system is nonlinear and a linearization step is needed. Although Kalman filtering is an online and a dynamic method, it needs a suitable model for the battery and a precise identification of its parameters. It also needs a large computing capacity and an accurate initialization.

Other methods for SOC estimation are presented in various literature, such as impedance spectroscopy, which is based on cell impedance measurements, using an impedance analyzer in real time for both charge and discharge. Although this technique can be used for Li-ion cells SOC and SOH estimation, it was omitted since it is based on external measurements utilizing instrumentation. The methods based on the electrolytes’ physical properties and artificial neural networks are not applicable for Li-ion batteries.

### Methodology for SOC and SOH Estimation Method Choice

Several criteria should be considered to select the suitable SOC estimation method. First, the SOC and SOH estimation technique could be applied to Li-ion batteries for HEV and EV applications, storage of renewable energy for use at a later time, and energy storage on the grid. In addition, it is crucial that the selected method should be an online and real-time technique with low computational complexity and high accuracy (low estimation error). It is also required that the estimation method uses measured voltage, current values, and other data collected by temperature sensors and/or given by PC-based software applications.

### Enhanced Coulomb Counting Algorithm

In order to overcome the shortcomings of the coulomb counting method and to improve its estimation accuracy, an enhanced coulomb counting algorithm has been proposed for estimating the SOC and SOH parameters of Li-ion batteries. The initial SOC is obtained from the loaded voltages (charging and discharging) or the open circuit voltages. The losses are compensated by considering the charging and discharging efficiencies. With dynamic recalibration on the maximum releasable capacity of an operating battery, the SOH of the battery is evaluated at the same time. This in turn leads to a more precise SOC estimation.

### Technical Principle

The releasable capacity (C_{releasable}), of an operating battery is the released capacity when it is completely discharged. Accordingly, the SOC is defined as the percentage of the releasable capacity relative to the battery rated capacity (C_{rated}), given by the manufacturer.

A fully charged battery has the maximal releasable capacity (C_{max}), which can be different from the rated capacity. In general, C_{max} is to some extent different from C_{rated} for a newly used battery and will decline with the used time. It can be used for evaluating the SOH of a battery.

When a battery is discharging, the depth of discharge (DOD) can be expressed as the percentage of the capacity that has been discharged relative to C_{rated},

where C_{released} is the capacity discharged by any amount of current.

With a measured charging and discharging current (I_{b}), the difference of the DOD in an operating period (Ʈ) can be calculated by

where *I*_{b} is positive for charging and negative for discharging. As time elapsed, the DOD is accumulated.

To improve the accuracy of estimation, the operating efficiency denoted as *ŋ* is considered and the DOD expression becomes,

with *ŋ* equal to *ŋ*_{c} during charging stage and equal to *ŋ*_{d} during discharging stage.

Without considering the operating efficiency and the battery aging, the SOC can be expressed as

Considering the SOH, the SOC is estimated as

Figure 1 shows the flowchart of the enhanced coulomb counting algorithm. At the start, the historic data of the used battery is retrieved from the associated memory. Without any information for a newly used battery, the SOH is assumed to be healthy and has a value of 100%, and the SOC is initially estimated by testing either the open circuit voltage, or the loaded voltage depending on the starting conditions.

The estimation process is based on monitoring the battery voltage (*V*_{b}) and *I*_{b}. The battery operation mode can be known from the amount and the direction of the operating current. The DOD is adding up the drained charge in the discharging mode and counting down with the accumulated charge into the battery for the charging mode. After a correction with the charging and discharging efficiency, a more accurate estimation can be achieved. The SOC can be then estimated by subtracting the DOD quantity from the SOH one. When the battery is open circuited with zero current, the SOC is directly obtained from the relationship between the OCV and SOC.

It is noted that the SOH can be reevaluated when the battery is either exhausted or fully charged, and the battery operating current and voltage are specified by manufacturers. The battery is exhausted when the loaded voltage (*V*_{b}) becomes less than the lower limit (*V*_{min}) during the discharging. In this case, the battery can no longer be used and should be recharged. At the same time, a recalibration to the SOH can be made by reevaluating the SOH value by the accumulative DOD at the exhausted state. On the other hand, the used battery is fully charged if (*V*_{b}) reaches the upper limit (*V*_{max}) and (*I*_{b}) declines to the lower limit (*I*_{min}) during charging. A new SOH is obtained by accumulating the sum of the total charge put into the battery and is then equal to SOC. In practice, the fully charged and exhausted states occur occasionally. The accuracy of the SOH evaluation can be improved when the battery is frequently fully charged and discharged.

Thanks to the simple calculation and the uncomplicated hardware requirements, the enhanced coulomb counting algorithm can be easily implemented in all portable devices, as well as electric vehicles. In addition, the estimation error can be reduced to 1% at the operating cycle next to the reevaluation of the SOH.

### Initial SOC Determination

A battery can be operated at one of the three modes; charging, discharging, and open circuit. At the charging stage, the variations of the battery voltage and current when the battery is charged by the constant current, constant voltage (CC-CV) mode are usually specified by the manufacturer. With a constant charging current, the battery voltage increases gradually and reaches the threshold. Once the battery has been charged by the constant voltage mode, the charging current drops first rapidly, and then slowly. Eventually, the current declines to almost zero when it has been fully charged. This charging curve can be converted into the relationship between the SOC and the charging voltage during the constant current stage, and the relationship between the SOC and the charging current during the constant voltage stage. The initial SOC during charging can be deduced from these relationships.

At the discharging stage, the typical voltage curves when the battery is discharged when different currents are given by the manufacturer. The terminal voltage declines as the operating time elapses. A higher current causes faster decline in the terminal voltage, leading to a shorter operation time. The relationship between SOC and the discharging voltage at different currents can then be obtained, and the initial SOC during the discharging stage can be deduced.

At the open circuit stage, the relationship between the OCV and the SOC is needed. The battery is discharged by different currents before disconnecting from the load. The OCV can be used to estimate SOC if a long period rest time is available.

### Charging and Discharging Efficiencies

The operational efficiency of a battery can be evaluated by the coulombic efficiency, which is defined as the ratio of the number of charges that can be extracted from the battery during discharging, compared to the number of charges that enter the battery during charging. It is noted that the coefficients of the charging and discharging efficiencies are obtained from the average values of several tested batteries.

All tested batteries are charged by a constant maximal rate to the designated capacities, which is the product of the charging rate and charging duration, and then discharged by a constant minimal rate to the cutoff voltage. The charging efficiency is defined as

The discharging efficiency is the ratio of the released capacity of two stages to C_{max} in one discharge cycle. All tested batteries are fully charged and then discharged by the two stage current profile, first by a specified current to a designated DOD and then by a minimal rate to the cut off voltage. The discharging efficiency is calculated by

where *I*_{1}, *I*_{2}, *T*_{1} and *T*_{2} are the discharging currents and periods during the first and second stages, respectively.

### Universal SOC Algorithm

The universal SOC algorithm is proposed in and it applies to all types of batteries—in particular, Li-ion batteries. Using linear system analysis in the frequency domain but without a circuit model, the OCV is calculated based on the sampled terminal voltage and discharge current of the battery. Knowing OCV leads to SOC due to the well known mapping between OCV and SOC, the considered assumptions that the SOC is constant within a time window of certain width, and the battery being a linear or weakly nonlinear system.

### Mathematical Formulation

In each time window, the terminal voltage *v(t)* of a battery can be decomposed as

where *v*_{zi}*(t)* is the zero input response corresponding to the terminal voltage with no discharge current, and *v*_{zs}*(t)* is the zero state response corresponding to the terminal voltage with discharge current, *i(t)* as input and the voltage source shorted. *h(t)* is the impulse response of the linear system modeling the battery. Note that the validity of the convolution in (Equation 12) is based on the assumption of linearity.

The SOC is assumed to be extracted in the time window 0 ≤ *t* ≤ *t*_{w} and at *t* < 0, the discharge current is always zero. This assumes that before *t* = 0, the battery is disconnected from load. This assumption is later removed as the window is shifted. With this assumption and ignoring the self-discharge effect, the zero input response is actually the OCV; that is,

where *u(t)* is a unit step function

First, *f(t)* which satisfies the following relationship should be found

where *δ(t)* is the Dirac delta function, that is

Note that it is required that *f(t)* satisfies (Equation 15) only in the window.

The time discrete algorithm to solve for *f(t)* is illustrated in Algorithm 1, where *n* is the total number of sampling points in the window and *t*_{1}, *t _{}*2, …,

*t*

_{n}are the sampling time points. The key idea is to inverse convolute the samples. The process is similar to that of solving the inverse of a matrix using elementary transformation.

With, *f(t)*, *v*_{f}*(t)* = *f(t)* × *v(t)* can be computed as

where *u*_{f}*(t)* = *f(t)* × *u(t)*.

#### Algorithm 1. The Algorithm to Calculate f(t)

The frequency domain response of the battery can be considered as finite and according to the final value theorem

Accordingly

This means that when a large t is used, *h(t)* approaches zero and *v*_{f}*(t)*/*u*_{f}*(t)* gives a good approximation of OCV in the current time window.

After the extraction of OCV, the impulse response of the system in the current time window can be obtained

After finishing the OCV extraction in the current window, the same process to extract the OCV can be repeated in the next window.

### Algorithm Implementation

In Algorithm 1, the bottleneck of runtime is mainly in the step to solve *f(t)* × *i(t)* = *δ(t)* for *f(t)* and the following step to calculate *v*_{f}*(t)* = *f(t)* × *v(t)* and *u*_{f}*(t)* = *f(t)* × *u(t)*. Actually, these two steps can be combined into one and there is no need to explicitly calculate *f(t)*. The overall algorithm is shown in Algorithm 2, where *n* is the total number of sampling points that are in one window.

#### Algorithm 2. The Algorithm to Combine the Steps of Deconvolution and Convolution

Once the OCV is extracted, the SOC can be inferred by using the variations of SOC as a function of OCV.

The time complexity of the algorithm is *O*(*n*^{2}) where *n* is the number of samples. Experiments verify that the SOC can be extracted online with less than 4% error for different battery types and discharge current.

### Extended Kalman Filter Algorithm

The extended Kalman filter is applied in to estimate SOC directly for a lithium battery pack. It is assumed that the relationship between battery OCV and SOC is approximately linear, and varies with the ambient temperature. This assumption matches with the real battery behavior. A battery is modeled as a nonlinear system with the SOC defined as a system state and so the extended Kalman filter can be applied.

### Lithium-Ion Battery Model

An equivalent circuit model for a lithium battery pack is shown in Figure 2. The bulk capacitance (C_{cb}) represents the battery pack storage capacity and the surface capacitance (C_{cs}) represents battery diffusion effects. Resistances (R_{i}) and (R_{t}) represent the internal resistance and the polarization resistance, respectively. The voltages across the bulk capacitor and the surface capacitor are denoted by (V_{cb}) and (V_{cs}), respectively. The battery pack terminal voltage and terminal current are denoted by (V_{0}) and I, respectively.

The parameters required for the battery model can be determined from experimental data, where OCV tests are performed upon successive discharge of battery by injection of current pulses.

The characteristics of the model in Figure 2 are governed by the following equations

Since the relationship between battery OCV and SOC is only piecewise linear in practice, V_{CB} can be expressed as

where the coefficients k and d are not constant and vary with battery SOC and the ambient temperature. So

Then the final system equations can be rewritten as

The battery system modeled by the previous equations is nonlinear, and the extended Kalman filter technique is applied.

### Extended Kalman Filter Application

Extended Kalman filter is the extension of the Kalman filter for nonlinear systems. With the extended Kalman filter technique, a linearization process at every time step is performed to approximate the nonlinear system with a linear time varying system. The linear time varying system is then used in a Kalman filter, resulting in an extended Kalman filter for the true nonlinear system. Like a Kalman filter, the extended Kalman filter also uses the measured input and output to find the minimum mean squared error estimate of the true state, with the assumptions that the process noise and sensor noise are independent, zero mean, Gaussian noises.

In the battery pack system Equation 28 and 29, the system state variables are defined as *x*_{1}*(t)* = S_{OC} and *x*_{2}*(t)* = *V*_{cs}

The input is defined as *u(t)* = I and the output is *y(t)* = V_{0}. The battery pack system Equation 28 and 29 can be rewritten as

where *x* = [*x*_{1}, *x*_{2}]^{T}

The terms *w* and *v* not only represent random disturbances, but also represent errors caused by the changes of the parameters *d* and *k*. It is assumed that the terms *w* and *v* are independent, zero mean, Gaussian noise processes with covariance matrices *R* and *Q*, respectively.

The functions *f(x,u)* and *g(x,u)* are

If the functions *f(x,u)* and *g(x,u)* are linearized by a first-order, Taylor series expansion, at each sample step about the current operating point, the linearized model is

where

The model represented by Equation 34 and 35 can be discretized as

where *A*_{d} ≈ *E* + *T*_{c}*A*_{k}, *B*_{d} ≈ *T*_{c}*B*_{k}, *E* is the unit matrix and *T*_{c} is the sampling period, and *C*_{d} ≈ *C*_{k}, *D*_{d} ≈ *D*_{k} .

The Kalman filter is an optimal observer whose principle is illustrated in Figure 3. The principle is to minimize, in real time, the errors between the estimated and the measured outputs, using a feedback that adjusts the uncertain variables of the used model. By such a model fit, it is possible to observe the physical parameters of the model that are not accessible to measurements. The correction is weighted by a gain vector K that allows correction of the dynamic and the performance of the filter. The gain is calculated at each iteration from error predictions and uncertainties (noise) on states and measurements. The filter dynamic control is then based on the initialization of the noise matrices of states Q and measurements R, as well as through the initialization of the matrix of error covariance P.

The Kalman filter algorithm, illustrated in Figure 4, takes place in two phases: the first concerns the initialization of the matrices P, Q, and R, and the second concerns the observation which is composed of two steps at each sampling interval. First, the algorithm predicts the value of the present state, output, and error covariance. Second, by using a measurement of the physical system output, it corrects the state estimate and error covariance.

So, the extended Kalman filter is applied to obtain SOC estimation for a lithium battery pack. The computational complexity of this algorithm is *O*(*n*^{3}), where *n* is the number of measurements. Experimental results show that the proposed extended Kalman filter-based SOC estimation method is effective and can estimate battery SOC accurately. It can also been applied to estimate the SOH value of the Li-ion battery pack.

### SOC Algorithm Selection

In order to fit the application requirements in terms of computational capabilities, required accuracy, real-time constraints, and system environment, the enhanced coulomb counting seems to be an advantageous algorithm. In fact, it is based on a simple real-time calculation and does not present complicated hardware constraints. Its complexity is obviously lower than that of the other algorithms. In addition, the enhanced coulomb counting algorithm presents a small estimation error and it can then provide acceptable accuracy. Furthermore, this algorithm does not need extra information besides the data provided by the manufacturer.

### Enhanced Coulomb Counting Evaluation

In this section, we’ll evaluate the presented enhanced coulomb counting algorithm in order to validate its accuracy and performance. In fact, it is obvious that the extended Kalman filter presents high computational complexity and complicated hardware requirements. It is then not suitable for the application. For the evaluation of the universal SOC algorithm, we need the curve of the SOC vs. the OCV, which is not provided in the battery data sheet. It is then essential to have this curve in order to evaluate the universal SOC algorithm.

A first evaluation step of the enhanced coulomb counting is described, and it can be followed by other advanced steps when we dispose of realistic experimental values of measured voltage and current.

### Evaluation Procedure

The SOC values obtained by enhanced coulomb counting algorithm simulation are compared to the experimental SOC values deducted from the charging and discharging curves, which are given by battery data sheets. The charging and discharging curves can also be reproduced using the Simulink model of MATLAB (MathWorks model), which implements a generic dynamic model parametrized to represent most popular types of rechargeable batteries—in particular, Li-ion batteries.

### Simulation Results

We have tested the implemented enhanced coulomb counting algorithm using MATLAB simulation tool for the charging mode, the discharging mode, and the two modes together. In Figure 5, the blue curves represent the experimental SOC and the red curves represent the estimated SOC, obtained by an enhanced coulomb counting algorithm.

### Charging Mode

Figure 5 shows the experimental and estimated SOC using the enhanced coulomb counting algorithm for a complete charging stage. The maximal obtained error between experimental and estimated values is of about 3.5% at the end of the charging stage. After a SOH reevaluation, the error will be considerably reduced.

Figures 6 and 7 illustrate the variations of the experimental and simulated SOC as a function of time for the CC and CV stages of charging mode. The maximal estimation error that can be obtained in the end of algorithm execution before reevaluating the SOH value is less than 2% for the CC stage and less than 1% for the CV stage. It is noted that the estimation error increases with the algorithm runtime and before the SOH reevaluation when the battery is fully charged. It is also worthwile noting that the precise determination of initial SOC is of great importance for reducing the estimation error. The accurate evaluation of the charging efficiency can also reduce the error between the experimental and the simulated SOC values.

### Discharging Mode

Figures 8 and 9 illustrate the experimental and simulated SOC as a function of battery terminal voltage for a complete discharging stage and a partial discharging stage. The maximal estimation error does not exceed 2% for the long complete stage and almost equals to zero for the short partial stage. The estimation error reaches its maximal value at the end of a complete discharging stage before reevaluating the SOH value and increases with the algorithm runtime.

The enhanced coulomb counting algorithm is also evaluated for charging and discharging stages together, which can reproduce the real behavior of a battery pack. It has been verified that the estimation error is often small enough (<4%) to ensure an accurate SOC estimation in real time and without disturbing the battery pack operation.

### References

Bentley, P, B.S. Bhangu, C.M. Bingham, and D.A. Stone. “Nonlinear Observers for Predicting State-of-Charge and State-of-Health of Lead-Acid Batteries for Hybrid-Electric Vehicles.” *IEEE Transactions on Vehicular Technology*, 2005.

Chen, Yi-Ping, Chin-Sien Moo, Kong Soon Ng, and Yao-Ching Hsieh “Enhanced Coulomb Counting Method for Estimating State-of-Charge and State-of-Health of Lithium-ion Batteries.” *Journal of Applied Energy*, 2009.

Fang, Lijin, Fei Zhang, and Guangjun Liu. “A Battery State-of-Charge Estimation Method with Extended Kalman Filter.” IEEE/ASME International Conference on Advanced Intelligent Mechatronics, 2008.

He, Lei, Bingjun Xiao, and Yiyu Shi. “A Universal State-of-Charge Algorithm for Batteries.” 47th IEEE Design Automation Conference “DAC ‘10”, 2010.

Jossen, Andreas, Marion Perrin, and Sabine Piller. “Methods for State-of-Charge Determination and Their Applications.” *Journal of Power Sources*, 2001.