[Ovmsdev] Hacking away at the Tesla Roadster ESS bus
Mark Webb-Johnson
mark at webb-johnson.net
Fri Dec 14 08:00:27 HKT 2018
On the ESS bus, I am seeing voltages on IDs 08A, 092. 09A, 0A2, 0AA, 0B2, 0BA, 0C2, 0CA, 0D2, and 0DA, Temperatures are on IDs 08C, 094, 09C, 0A4, 0AC, 0B4, 0BC, 0C4, 0CC, 0D4 and 0DC. 11 sheets, so we can assume the IDs are offset from 08A (voltages) and 08C (temperatures), spaced 8 apart.
Here is my decode for voltages:
Voltages
ID: 08A, 092. 09A, 0A2, 0AA, 0B2, 0BA, 0C2, 0CA, 0D2, 0DA (11 sheets, 11 IDs)
B1 \ Minimum voltage (low 8 bits)
B2 / Minimum voltage (high 8 bits), scaled 8192
B3 \ Maximum voltage (low 8 bits)
B4 / Maximum voltage (high 8 bits), scale 8192
B5 \ Average voltage (low 8 bits)
B6 | Average voltage (mid 8 bits)
B7 / Average voltage (high 8 bits), scale 9*8192 (9 bricks per sheet)
B8 Minimum brick# (low 4 bits), maximum brick# (high 4 bits)
The B7 factor is my best guess, looking at data from just one car. With 9 bricks per sheet, it seems obvious this is 9*8192, and that seems to match the log data the best.
For example, I have '08A 67 81 90 81 0f 8e 04 04'. This is:
* 08A Sheet #1 (of 11). Presumably ((ID - 08A)/8)+1 is sheet number.
* 67 81 33127/8192 = 4.0438v
* 90 81 33168/8192 = 4.0488v
* 0f 8e 04 298511/(9*8192) = 4.0488v
* 04 Minimum brick #4, maximum brick #0 (both relative to sheet #1)
So, another way of looking at the average voltage is sheet voltage (36.4393v in the above example).
For temperatures, I have:
Temperatures
ID: 08C, 094, 09C, 0A4, 0AC, 0B4, 0BC, 0C4, 0CC, 0D4, 0DC (11 sheets, 11 IDs)
B1 \ Minimum temperature (low 8 bits)
B2 / Minimum temperature (high 8 bits), scaled 256
B3 \ Maximum temperature (low 8 bits)
B4 / Maximum temperature (high 8 bits), scaled 256
B5 \ Average temperature (low 8 bits)
B6 | Average temperature (mid 8 bits)
B7 / Average temperature (high 8 bits), scaled 256*9*avgfactor
B8 ?
For example, I have '08C 6f 24 be 24 8c 92 02 10'. This is:
* 08C Sheet #1 (of 11). Presumably ((ID - 08C)/8)+1 is sheet number.
* 6f 24 9327/256 = 36.433C
* be 24 9406/256 = 36.742C
* 8c 92 02 168588/(256*9*2) = 36.585C
* 10 This somehow encodes the avgfactor, and perhaps others, but doesn't seem to be obvious
I am still working on temperatures B8, and how the avgfactor is determined. I am seeing values 10, 13, 20, 21, 23, 30, 31, and 32 there. It seems to be in general partitioned with bit masks, but not as simple as the high-4 low-4 of voltages. I think this somehow encodes the minimum and maximum bricks (or sensors), and maybe some sensor readings are invalid/discarded (which is why it affects the average and changes over time). If the Average temperature (and perhaps voltage) values are the sums of all the sensor values, then perhaps there are 9 voltage measurements for each sheet (9 bricks), but more temperature sensors? Each brick should have at least one temperature sensor. It doesn't really make sense how they can encode so much in just 8 bits.
It does change in subsequent readings, even for one sheet. For example:
1535254858.000033 3R11 08C 6e 24 bb 24 85 92 02 10
1535254858.500541 3R11 08C 6e 24 bb 24 88 92 02 20
1535254858.999948 3R11 08C 6e 24 bc 24 8b 92 02 10
A work in progress for average temperatures, but the others (in particular voltages) seem very clear.
Regards, Mark
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openvehicles.com/pipermail/ovmsdev/attachments/20181214/ed4f7b9a/attachment.html>
More information about the OvmsDev
mailing list