LPMS3 CAN Bus data parsing
LPMS CAN sensors can be configurde to output sensor data in either CANOpen or sequential CAN transmission mode to hte CAN Bus. The following sections explains the details of the output data.
CANOpen and Sequential CAN Protocols
In CANOpen and sequential CAN transmission modes, two or more output words of measurement data can be assigned to a CAN channel. In sequential CAN mode the channel addressing can be individually controlled. In CANOpen mode, 4 TPDO (Transmission Data Process Object) messages and a heartbeat message are transmitted.
NOTE: In CANOpen mode a heartbeat message is transmitted with a frequency between 0.1 Hz and 2 Hz.
In CANOpen mode, the message base address is calculated in the following way:
CAN ID1 = Base CAN ID = Start ID + IMU ID
CAN ID2 = CAN ID1 + 100h
CAN ID3 = CAN ID2 + 100h
CAN ID4 = CAN ID3 + 100h
CAN ID5 = 700h + IMU ID
Note: In CANOpen mode, Start ID is fixed at 180h
In sequential CAN mode, the message base address is calculated in the following way:
CAN ID1 = Base CAN ID = Start ID + IMU ID
CAN ID2 = CAN ID1 + 1h
CAN ID3 = CAN ID2 + 1h
CAN ID4 = CAN ID3 + 1h
NOTE: In sequential CAN mode, Start ID is set to 514h (1300d) by default. This value can be changed via LpmsControl2 interface
CAN Data Output Format
Each CAN message can be assigned multiple channels representing the sensor data. The number of assignable sensor data will depend on the data output precision, i.e. 32bit data or 16bit data output. By utilizing 4 CAN message with 16bit sensor data precision, the sensor can output a maximum of 16 different sensor data for a given instance.
CAN channel mapping (16bit data output)
CANOpen ID | Sequential CAN | Output data | Â | Â | Â |
181h | 515h | channel 1 | channel 2 | channel 3 | channel 4 |
281h | 516h | channel 5 | channel 6 | channel 7 | channel 8 |
381h | 517h | channel 9 | channel 10 | channel 11 | channel 12 |
481h | 518h | channel 13 | channel 14 | channel 15 | channel 16 |
701h | - |
| Â | Â | Â |
CAN channel mapping (32bit data output)
CANOpen ID | Sequential CAN | Output data | Â |
181h | 515h | channel 1 | channel 2 |
281h | 516h | channel 3 | channel 4 |
381h | 517h | channel 5 | channel 6 |
481h | 518h | channel 7 | channel 8 |
701h | - |
| Â |
CAN Mapping
Each channel can be assigned different sensor data by changing the CAN mapping via LpmsControl2. The table below summarizes the available sensor output data.
Mapping index | Data | Unit | 16bit data scaling factor |
0 | Not assigned | Â | Â |
1 | Raw Accelerometer X | g | 1000 |
2 | Raw Accelerometer Y | g | 1000 |
3 | Raw Accelerometer Z | g | 1000 |
4 | Calibrated Accelerometer X | g | 1000 |
5 | Calibrated Accelerometer Y | g | 1000 |
6 | Calibrated Accelerometer Z | g | 1000 |
7 | Raw GyroI X | Not available | |
8 | Raw GyroI Y | Not available | |
9 | Raw GyroI Z | Not available | |
10 | Raw GyroII X | dps or rad/s | 10 (dps), 100 (rad/s) |
11 | Raw GyroII Y | dps or rad/s | 10 (dps), 100 (rad/s) |
12 | Raw GyroII Z | dps or rad/s | 10 (dps), 100 (rad/s) |
13 | Bias calibrated GyroI X | Not available | |
14 | Bias calibrated GyroI Y | Not available | |
15 | Bias calibrated GyroI Z | Not available | |
16 | Bias calibrated GyroII X | dps or rad/s | 10 (dps), 100 (rad/s) |
17 | Bias calibrated GyroII Y | dps or rad/s | 10 (dps), 100 (rad/s) |
18 | Bias calibrated GyroII Z | dps or rad/s | 10 (dps), 100 (rad/s) |
19 | Alignment calibrated GyroI X | Not available | |
20 | Alignment calibrated GyroI Y | Not available | |
21 | Alignment calibrated GyroI Z | Not available | |
22 | Alignment calibrated GyroII X | dps or rad/s | 10 (dps), 100 (rad/s) |
23 | Alignment calibrated GyroII Y | dps or rad/s | 10 (dps), 100 (rad/s) |
24 | Alignment calibrated GyroII Z | dps or rad/s | 10 (dps), 100 (rad/s) |
25 | Raw magnetometer X | uT | 100 |
26 | Raw magnetometer Y | uT | 100 |
27 | Raw magnetometer Z | uT | 100 |
28 | Calibrated magnetometer X | uT | 100 |
29 | Calibrated magnetometer Y | uT | 100 |
30 | Calibrated magnetometer Z | uT | 100 |
31 | Angular Velocity X | dps or rad/s | 10 (dps), 100 (rad/s) |
32 | Angular Velocity Y | dps or rad/s | 10 (dps), 100 (rad/s) |
33 | Angular Velocity Z | dps or rad/s | 10 (dps), 100 (rad/s) |
34 | Quaternion W | Â | 10000 |
35 | Quaternion X | Â | 10000 |
36 | Quaternion Y | Â | 10000 |
37 | Quaternion Z | Â | 10000 |
38 | Euler X | deg or rad | 100 (deg), 10000 (rad) |
39 | Euler X | deg or rad | 100 (deg), 10000 (rad) |
40 | Euler Z | deg or rad | 100 (deg), 10000 (rad) |
41 | Linear Acceleration X | g | 1000 |
42 | Linear Acceleration Y | g | 1000 |
43 | Linear Acceleration Z | g | 1000 |
44 | Pressure | kPa | 100 |
45 | Temperature | °C | 100 |
Â
Example
Assuming default sensor settings, the CAN bus settings and corresponding data output are shown below:
Here we can decode the data for CAN-ID 181h as follow:
181h | Byte [0:1] | Byte [2:3] | Byte [4:5] | Byte [6:7] |
---|---|---|---|---|
Byte | 22 FF | 39 00 | C9 03 | FA FF |
Integer value | -222 | 57 | 969 | -6 |
Corresponding data | Acc Calibrated X | Acc Calibrated Y | Acc Calibrated Z | GyroII Align. Calibrated X |
Scaled data | -0.222g | -0.057g | 0.969g | -0.6dps |
Like wise, the raw data can be decoded for 281h, 381h, 481h as follow:
281h | Byte [0:1] | Byte [2:3] | Byte [4:5] | Byte [6:7] |
---|---|---|---|---|
Byte | FF FF | 00 00 | 75 07 | 75 09 |
Integer value | -1 | 1 | 1909 | 2421 |
Corresponding data | GyroII Align. Calibrated Y | GyroII Align. Calibrated Z | Mag Calibrated X | Mag Calibrated Y |
Scaled data | -0.1dps | 0.1dps | 19.09uT | 24.21uT |
381h | Byte [0:1] | Byte [2:3] | Byte [4:5] | Byte [6:7] |
---|---|---|---|---|
Byte | DD 02 | 4F 01 | 0D 05 | 73 FB |
Integer value | 733 | 335 | 1293 | -1165 |
Corresponding data | Mag Calibrated Z | Euler X | Euler Y | Euler Z |
Scaled data | 7.33uT | 3.35deg | 12.93deg | -11.65deg |
481h | Byte [0:1] | Byte [2:3] | Byte [4:5] | Byte [6:7] |
---|---|---|---|---|
Byte | 96 26 | 93 01 | 42 04 | EF FB |
Integer value | 9878 | 403 | 1090 | -1041 |
Corresponding data | Quat W | Quat X | Quat Y | Quat Z |
Scaled data | 0.9878 | 0.0403 | 0.109 | -0.1041 |
Â
Â
Â
Â