My HPPC Parameter Extraction and Simulink SOC Estimation – Need Verification & Help (SOC Going Negative) I performed an HPPC test at one temperature (25°C) and extracted the

15 views (last 30 days)
.
I performed an HPPC test at one temperature (25°C) and extracted the
following ECM parameters:
  • R0 (ohmic resistance)
  • R1 and τ1 (RC branch)
  • OCV–SOC curve
Then I created lookup tables for R0(SOC), R1(SOC), τ1(SOC), and OCV(SOC) and entered these into the 1-RC battery model in Simulink to estimate SOC.Please let me know if this procedure is correct for parameter identification using HPPC at a single temperature.
My doubt:
After running the simulation, the SOC value decreases normally for the first ~100 seconds, but then it becomes negative, which is not physically possible. Why does my SOC become negative after 100 seconds?
What are the possible causes in Simulink that would make SOC go below zero?
I suspect one of the following:
  • Current sign convention mismatch
  • Wrong capacity units (Ah vs mAh, missing 3600 factor)
  • SOC scaling issue (0–1 vs 0–100)
  • Incorrect initial SOC
  • Missing SOC saturation limits
  • Error in the SOC update equation inside the model
If someone can guide me on what to check first or what typically causes negative SOC in Simulink, it would be very helpful.

Answers (1)

Ayush
Ayush on 9 Dec 2025 at 5:09
Hi Soity,
I understand your concern about SOC going negative in your Simulink battery model. Your method for extracting and applying ECM parameters from HPPC data seems correct.
The battery block does not automatically constrain SOC within 0-1; it allows values outside this range to reflect real-world scenarios like overcharge or deep discharge. This means you won’t get an error, just a warning if SOC goes below zero or above one. The most frequent causes are:
  • Current sign convention mismatch (discharge/charge direction)
  • Incorrect capacity units (using mAh instead of Ah, or missing the 3600 s conversion)
  • Solver settings, especially if “Start simulation from steady state” is enabled, which can override your initial SOC and introduce unexpected values
Other factors worth checking are SOC scaling (0–1 vs 0–100), missing saturation logic to constrain SOC, and any initialization or update equation errors in the model. Also, review your initial SOC setting and make sure it’s prioritized as “High” in the block.
Hope this helps!

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!