Read voltage and other details from HV battery?
#1
Hi,

is there a way to read the raw HV battery voltage, or even individual cell voltages and other details from the HV battery?

Orbit already displays a SoH and SoC percentage, so I assume it might be an adjacent feature.

These diagnostic features would incredibly valuable for independent analysis and repairs on the HV system, e.g. identifying damaged cells.
I'm also curious how Volvo treats the cells, i.e. where it sets the 0% and 100% SoC voltages, and how that differs for the SoC the dashboard shows, what's "actually" left at 0%, etc.

There's very little info about that, and it is hard to judge what it really means for the cell voltages when Orbit shows e.g. 83% SoC while the car shows 100%.

I found this picture, which suggests that at least the pack voltage is available via OBD using a generic OBD dongle:

[Image: 2023-volvo-v90-t8-recharge-plug-in-hybrid.jpg]
https://insideevs.com/photos/918920/2023...-in-hybrid



There's also this Volvo Service Manual (?) that shows the individual cell voltages are available to VIDA



https://static.nhtsa.gov/odi/tsbs/2025/M...0-0001.pdf
Reply
#2
Try these
ECU Tools > BECM > Send CMD > 22 DA 02 - all cell SoC or 22 FD 73 - cell delta voltage

i suspect you'll need to be in a diagnostic session.

Can't test as don't have those electrical things in my car Smile
Reply
#3
(04-17-2026, 08:35 PM)x119 Wrote: Try these
ECU Tools > BECM > Send CMD > 22 DA 02 - all cell SoC or 22 FD 73 - cell delta voltage


Thanks for the hint Smile

I selected "BECM" as the ECU first and then via "Send Cmd" sent "22DA02", with session = 3 and SA level = 00.

This seems promising:
Quote:Command sent to ECU: 22DA02
Response from ECU: 62da02166516631664167716701675167e1677166e16751683166a167716681674166015fa15cf15c115fb15ee15f51609160315c515ef15f715fb1605160215c915ee163c163f16311632163a163616341634162f16371631162e162e1631162f162d16381637163a16391638163916351636163b16311635163d163816351631163415d515cc15ba15c315ca15d915a815af15c615b015c015c415be15ab15e315ee16171615160f161c161916151611160e16161618161d1616161c1618161e160e

I assume it decodes like this:

62da02 is the positive response header and then there's 96x4 characters, so 96 2-byte words, which makes sense, since I have a 2020 PHEV, which has a 6x16S 11.6 kWh battery afaik.

E.g. cell 1 would be 1665 hex = 5733 dec or 57.33% SoC, which seem roughly right, since the car shows 60% SoC for the HV battery.

The remaining cells are between 

Min: cell 71 = 55.44%
Max: cell 11 = 57.63%
Average: 56.59%

So this is interesting data, but I'd still like to get raw voltage values.

The other command gets me this response:

Quote:Command sent to ECU: 22FD73
Response from ECU: 62fd730010

or sometimes 62fd73000e
So again a positive response header "62fd73" and then 0010 or 000e, but that just means "16" or "14" in decimal, so...  Undecided
Reply
#4
Ok, I found these using the Orbit Parameter Monitor

[Image: image.png]

Orbit displays 4856 as ~353V in the parameter monitor, and it drops by ~2V if I put some strain on the electric motor.  Smile

353V divided by 96 cells = 3.677V per cell, which seems reasonable at the current ~55% SoC displayed in the car.

If I query it using Send Cmd, I get

Quote:Command sent to ECU: 224856
Response from ECU: 6248560b30

Not entirely sure how to decode this.
Closest I can get to is assuming I have to divide by 8. 0b30 hex is 2864 dec. 2864/8 would be 358V.

Not far off 353V, but a bit too much to ignore it...

How does Orbit calculate the voltage value from what the car sends? Is there some ADC reference correction thing taken into account, or is there some more crooked factor instead of 1/8?
Reply
#5
I fully charged my car and collected a few more values:

PHP Code:
+------+---------+---------------------------+
RAW  Orbit   | (hex->dec)/8              |
+------+---------+---------------------------+
0c46 387.48  392.75                    |
0c45 387.35  392.625                   |
0c44 387.23  392.5                     |
| ...
  | ...     | ...                       |
0b30 353.29  358.0                     |
+------+---------+---------------------------+ 

So fitting a line to that to that it seems Orbit calculates the voltage as

PHP Code:
Voltage = (0.12395 x raw-value) - 1.02 


which seems a bit arbitrary

Assuming 392.75 V (0c46 / 8) is the "true" voltage that would mean the pack has stopped charging at an avg. 4.091 V/cell, which would make sense if it stops charging at a nice and round 4.1 V/cell for the highest voltage cell.

Assuming 387.48 V (Orbits displayed value) is the "true" voltage that would mean the pack has stopped charging at an avg, 4.036 V/cell, which seems a bit low.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)