diff --git a/docs/impl/reports/Z27AG-DECODE-3.md b/docs/impl/reports/Z27AG-DECODE-3.md index 7b415a1..29eb64d 100644 --- a/docs/impl/reports/Z27AG-DECODE-3.md +++ b/docs/impl/reports/Z27AG-DECODE-3.md @@ -13,8 +13,8 @@ IMU, no OBD-II. Nothing was marked, so this pass uses what any drive has: corner | Signal | Where | Evidence | Registered as | |---|---|---|---| | Wheel speeds | `235` four words, little-endian (pass 2): bytes 0–1 **front right**, 2–3 **front left**, 4–5 **rear right**, 6–7 **rear left** | from corners, below | `wheel_speed_fr_kph`, `_fl_`, `_rr_`, `_rl_` | -| Odometer | `570` bytes 4–6, little-endian, **1 km** | steps once per kilometre: 12 steps over 11.9 km (`000009`), 3 over 3.0 km (`000011`); 167966 on the 13th, 167988 at the end of the drive back; valid with the engine off too | `odometer_km` (the layout format gained 24-bit fields) | -| Distance counter | `14D` bytes 6–7, little-endian, **about 0.40 m** per count | tracks distance from the wheel speeds with correlation 1.0000 in both drives (103.2 and 103.6 m per step of byte 7); wraps every ~26 km | not registered: the odometer covers whole kilometres; this is there if a trip meter needs finer steps | +| Odometer | `570` bytes 4–6, little-endian, **1 km** | steps once per kilometre: 12 steps over 11.9 km (`000009`), 3 over 3.0 km (`000011`); 167966 on the 13th, 167988 at the end of the drive back; valid with the engine off too. Agrees with the cluster's (digital) odometer | `odometer_km` (the layout format gained 24-bit fields) | +| Distance counter | `14D` bytes 6–7, little-endian, **about 0.40 m** per count | tracks distance from the wheel speeds with correlation 1.0000 in both drives (103.2 and 103.6 m per step of byte 7); wraps every ~26 km | not registered. The cluster's two trip meters count 0.1 km and may run from this; it is also the finest distance on the bus (slow creeping, short manoeuvres) | ### Which word is which wheel @@ -45,11 +45,24 @@ Jack stands (checklist 23–26) would still confirm this, but are no longer need ## Candidates -- **`570` bytes 2 and 3** move together (byte 3 ≈ byte 2 + 48) and fall slowly: byte 2 read 87 on the - 13th and 76 at the end of the drive back, 22 km later. Fuel level fits the fall, but byte 2 also rose - by about 3 while parked between drives (78 → 81), which fuel would not do on level ground. It may - be outside temperature instead, falling through the evening. Both read `7F` with the engine off. A - refuel settles it: fuel jumps, temperature does not. Not registered. +- **`570` bytes 2 and 3: fuel, most likely.** Both fall slowly: byte 2 read 87 on the 13th and 76 + at the end of the drive back, 22 km later. Both read `7F` with the engine off. Outside temperature + was the other reading, but the car shows it nowhere, and the bytes **slosh**. Take away their own + 60 s average, and what is left follows the car's motion in all three drives: + + | Byte | Lateral g | Longitudinal g | Lag | + |---|---|---|---| + | 3 | +0.70 to +0.81 | −0.42 to −0.48 | none | + | 2 | +0.64 to +0.75 | −0.48 to −0.50 | about 3 s | + + Lateral g here is from the wheel speeds and the steering angle, longitudinal from the change in + wheel speed. A temperature would not do this; liquid in a tank would. Byte 3 looks like the sender + as it is, and byte 2 a damped copy (a gauge needle is damped the same way). The "rise while parked" + (78 → 81) was the same thing: the drive before ended at 80, parked in the same spot (the same + IMU tilt to three decimals). It read 76 a minute earlier, while still moving. The reading moves about + ±4 with tilt and motion, so it needs averaging over minutes. + Scale unknown: full is unlikely to be 100 or 255. A refuel gives two points (before and after, + parked level, with the litres put in). Not registered until then. ## Notes on the recording