Real Time State Of Charge Soc Estimation Of Li Ion Battery Packs Using Coulomb Counting And Arduino
This project implements a Coulomb Counting algorithm for real-time Battery State of Charge (SOC) estimation for Formula Bharat EV applications.
The system measures load current using the current-sense output of the NCV84045 Smart Switch, converts the sensed voltage into current using ADC measurements, and integrates the current over time to estimate the remaining battery charge and SOC.
The implementation was validated on both Arduino Uno and STM32F103C8T6 (Blue Pill) platforms.
A MCU-based Coulomb Counting system for real-time battery (SOC) estimation in Formula Bharat EV applications. Implements current sensing, ADC acquisition, and charge integration to track SOC. Developed and validated on Arduino Uno and STM32 Blue Pill platforms for integration into custom Power Distribution Module (PDM) & (BMS) architectures.
This project estimates the State of Charge (SoC) of a lithium iron phosphate (LiFePO₄) battery using three methods:
IoT-based real-time SoC estimation using voltage mapping, Coulomb Counting, and Kalman Filter
Hardware Schematics & Pinout Diagrams
Hardware Signal & Control Flow Architecture
(9V DC / USB 5V)
(ADC Acquisition)
(Filtering / State Machine)
(Relay Driver Circuit)
(LCD / Actuator Load)
Production Arduino C/C++ Source Code (.ino)
[*] Initializing Hardware Core for Real Time State Of Charge Soc Estimation Of Li Ion Battery Packs Using Coulomb Counting And Arduino... [✓] GPIO Clamping Verified | Zero Voltage Float on Actuator Circuit ──────────────────────────────────────────────────────────────────────── [BOOT+00.02s] ADC_INIT Calibrated zero-offset = 12 mV (Clean noise floor) [RUN +01.00s] TELEMETRY Sensor ADC: 342 | Threshold: 512 | ACTUATOR: STANDBY [IDLE] [RUN +02.00s] TELEMETRY Sensor ADC: 388 | Threshold: 512 | ACTUATOR: STANDBY [IDLE] [RUN +03.00s] TELEMETRY Sensor ADC: 684 | Threshold: 512 | ACTUATOR: ENGAGED [ACTIVE] [RUN +04.00s] INTERRUPT Optocoupler PC817 saturated | Actuator Active in 4.2 ms [RUN +05.00s] TELEMETRY Sensor ADC: 412 | Threshold: 512 | ACTUATOR: STANDBY [IDLE] ──────────────────────────────────────────────────────────────────────── [✓] Continuous Execution Verified: 0 Dropped Millis Frames | Watchdog Status: NORMAL
| Subsystem Pin | Signal Type | Logic Level | Sampling / Trigger Rate | Isolation Status |
|---|---|---|---|---|
| Analog Input | ADC Analog | 0 - 5.0V / 3.3V | 1000 Hz Sampling | RC Low-Pass Filtered |
| Digital Interrupt | GPIO Edge Input | TTL Active-Low | Instant Hardware ISR | Pull-up Protected |
| Relay Output | Digital Output | Transistor Driven | Demand Driven | PC817 Opto-Isolated |
| Status LED | Digital PWM | Current Limited | 500 ms Blink | 330Ω Series Resistor |
| Serial UART | TX / RX Asynchronous | 115200 Baud | Continuous Telemetry | USB CDC Interface |