Ce projet vise à documenter les codes OBD-II du véhicule électrique Mitsubishi I-Miev.
Conventions utilisées dans ce document:
L'ID de message est toujours composé de 3 caractères hexadécimaux
Les octets de données sont indexés à zéro: D0, D1, etc.
Analyse du trafic OBD-II
PID se produisant périodiquement:
1000ms (1 fps): 01C 1
200ms (5 fps): 568 1
100ms (10 fps): 012,101, 286, 298, 29A, 2F2, 374, 375, 377, 384, 385, 389 1, 38A 1, 3A4, 408, 412, 695, 696, 697, 6FA, 75A, 75B
50ms (20 fps): 38D, 564, 565, 5A1, 6D0, 6D1, 6D2, 6D3, 6D4, 6D5, 6D6, 6DA
40ms (25 fps): 424, 6E1/6E2/6E3/6E4
20ms (50 fps): 119, 149, 156, 200, 208, 210, 212, 215, 231, 300, 308, 325, 346, 418
10ms (100fps): 236, 285, 288, 373
PID descriptions
012
Key status (early iMiEV)
Transmitted every 100ms. Data bits:
D2: 0x04 Key is turned on
101
Key status (later iMiEV)
Transmitted every 100ms. Data bits:
D0: 0x04 Key is turned on
149
Rotation ESC
Transmitted every 20ms. Data bits:
D4-D5: Rotation ESC: (D5 * 256 + D4 - 32934) / 32.934 (OBDZero)
200
Wheel rotation
Transmitted every 20ms. Data bits:
D2-D3: Wheel rotation: (D2 * 256 + D3 - 49152) / 19 (OBDZero)
D3-D4: Wheel rotation: (D4 * 256 + D5 - 49152) / 19 (OBDZero)
208
Brake pedal / Wheel rotation
Break pedal sensor data is transmitted every 20ms. Data bits seem to be following:
D2-D3: Brake pedal position (D2 * 256 + d3 - 24576) / 6.4
D4-D5: Wheel rotation: (D4 * 256 + D5 - 49152) / 19 (OBDZero)
D6-D7: Wheel rotation: (D6 * 256 + D7 - 49152) / 19 (OBDZero)
210
Gas pedal
Gas pedal sensor data is transmitted every 20ms. Data bits seem to be following:
D2: gas pedal position (%) D2 * 0.4
215
Vehicle speed
Transmitted every 20ms. Data bits:
D0-D1: vehicle speed: (D0 * 256 + D1) / 128
231
Brake pedal switch sensor
Transmitted every 20ms. Data bits:
D4: 0x02 if brake is free, 0x00 if brake pedal is pressed
236
Steering wheel sensor
Transmitted every 10ms. Data bits:
D0-D1: Steering wheel position with 0.5 degree accuracy, center point (0.0 degrees) = D0:0x10, D1:0x00. (((D0 * 256) + D1) - 4096) / 2 = steering wheel position in degrees). Negative angle - right, positive angle left.
D2-D3: possibly represents rate of change, defaults to D2:0x10, D3:0x00 when steering wheel is at rest.
285
Transmitted every 10ms. Data bits:
D0-D1: Acceleration (D0 * 256 + D1 - 2000) / 400
286
Transmitted every 100ms. Data bits:
298
Transmitted every 100ms. Data bits:
D0-D3: Motor temp D* - 40
D6-D7: Motor RPM D6 * 256 + D7 - 10000
29A
Vehicle identification number
Transmitted every 100ms. Data bits:
346
Estimated range, handbrake
Transmitted every 20ms. Data bits:
D4 handbrake D4 bit 32 released
D7 Estimated range: D7
373
Battery
Transmitted every 10ms. Data bits:
D0: Battery Cell Maximum Voltage (V): (D0 + 210) / 10 (OBDZero)
D1: Battery Cell Minimum Voltage (V): (D1 + 210) / 10 (OBDZero)
D2-D3: Battery pack amps (A) (D2 * 256 + D3 - 32768)/100
D4-D5: Battery pack voltage (V) (D4 * 256 + D5) / 10
374
Battery SOC
Transmitted every 100ms. Data bits:
D0: State of charge (%): (D0 - 10) / 2 (OBDZero)
D1: State of charge (%): (D1 - 10) / 2
D4: Cell Maximum temperature (oC): D4 - 50 (OBDZero)
D5: Cell Minimum temperature (oC): D5 - 50 (OBDZero)
D6: Battery 100% capacity (Ah): D6 / 2 (OBDZero)
377
OBC (data from
https://openinverter.org/wiki/Mitsubish ... r_DCDC_OBC)
Transmitted every 100ms. Data bits:
D0-D1: 12V battery voltage in mV: D0 + D1
D2 + D3 12V battery charging current in A: (D2 + D3) / 10
D4-D6 = temperatures of OBC: D* - 40
D7 = status bytes
Bits D0
0: Error
1: In Operation
2:
3:
4:
5: Ready
6:
7:
384
Heating / Cooling
Transmitted every 100ms. Data bits:
D0: AC (A): (D0 * 256 + D1) / 1000
D3: Charging 12V Battery (A): D3 / 100 (OBDZero)
D4: Heating (A): D4 / 10
D5: Heating water temp return: (D5 - 32) / 1.8 ) - 3 OR D5 * 0.6 - 40
D6: Heating water temp flow: (D6 - 32) / 1.8 ) - 3 OR D6 * 0.6 - 40
389
Charger
Transmitted every 100ms. Data bits:
D0: Charge DC Voltage (V): 2 * D0 +1 (OBDZero)
D1: Charger Input voltage (V): D1
D2: Charge DC Input Current(A): D2 / 10 (OBDZero)
D3: Charger temp: D3 - 40 (D3 - 50 (OBDZero))
D4: Charger temp: D4 - 50 (OBDZero)
D6: Charging Input current (A): D6 / 10
3A4
Climate console
Transmitted every 100ms. Data bits:
D0: Heating level:
D0 bit 15 = 7 Middle
D0 bit 15 < 7 Cooling
D0 bit 15 > 7 Heating
D0: Recirculation: D0 bit 64
D0: AC On: D0 bit 128
D0: Fan spee MAX: D0 bit 32
D1: Fan speed (%): ((D1 bit 15) * 12.5) + 0.5
D1: Ventillation direction:
D1 >> 4 3
1/2: Face
3/4: Legs + Face
5/6: Legs
7/8: Legs + Windshield
9: Windshield
412
Speed + Odometer value
Transmitted every 100ms. Data bits:
D0: Key On D0 = 254
D1: Speed
D2-D4: Odometer ((((D2 >> 16) + D3) >> 8 ) + D4) 3
418
Gearshift
Transmitted every 20ms. Data bits:
D1:
80 : P
82 : R
78 : N
68 : D
131: B
50 : C
424
Light
Transmitted every 40ms. Data bits:
Bits D0 D1 D2 D6
0: hazard lights Unlock doors
1: Right Blinker Unlock driver door
2: Automatic light Upper Beam
3: Fog lights Wiper rear Rear window heating
4: Rear fog light Night headlights
5: Sidelights
6:
7:
696
Motor
Transmitted every 100ms. Data bits:
D2-D3: Motor current (A): (D2 * 256 + D3 - 500) / 20 (OBDZero)
D6-D7: Regeneration amps (A): (D6 * 256 + D7 -10000) /5 (OBDZero)
697
CHAdeMO
Transmitted every 100ms. Data bits:
D0: Connected
D1: Percent (%) (OBDZero)
D2: Charger current (A)
6E1 6E2 6E3 6E4
Battery pack cells
Transmitted every 40ms. Data bits:
MessageID: 6E1 / 6E2 / 6E3 / 6E4
PID_ID: MessageID - 1761
D0: CMU index (CMU_ID): D0 bit 15
D1: Temperature 1 (T1): D[1] - 50
D2: Temperature 2 (T2): D[2] - 50
D3: Temperature 3 (T3): D[3] - 50
D4-D5: Cell voltage 1 (V1): ((D4 * 256 + D5) / 200) + 2.1
D6-D7: Cell voltage 2 (V2): ((D6 * 256 + D7) / 200) + 2.1
Voltage index (VOLT_ID): (CMU_ID - 1) * 8 + (2 * PID_ID) Temperature index (TEMP_ID): (CMU_ID - 1) * 6 + (2 * PID_ID)
Voltage and temperature index modify based on CMU_id (because cmu 6 has only 4 cell) If CMU_ID >= 7
voltage index: VOLT_ID - 4
temperature index: TEMP_ID - 3
VOLT_ID = V1
VOLT_ID + 1 = V2
Temperature index fix based on PID_ID
If PID_ID == 0 {
TEMP_ID = T2
TEMP_ID + 1 = T3 } else {
TEMP_ID = T1 if CMU_ID != 6 && CMU_ID != 12 (this 2 CMU contain T2) - TEMP_ID + 1 = T2 }
Comment
1: Possibly only sent in debug mode.
2: Available when car in sleep and wake up with CAN message
3: bitshift: 1 >> 1 == 1 * 2, 1 >> 2 == 1 * 4 , 1 >> 8 == 1 * 256, 1 >> 16 == 1 * 65536 ,
x >> 34 == x * 2^34