[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