Skip to main content
Firmware Stable

Status Messages

This document describes the status messages format of the ESCx controller.

info
  • All listed datagram types are multicast
  • All listed payloads use big-endian format
Interface Configuration
Advanced

Relative Units​

To optimize communication bandwidth, some data uses relative units and ranges instead of floating-point values. Ranges represent real units (Volts, Amps) and are transmitted in the Range and Reference message. Current range applies to all current values, and voltage range applies to all voltage values.

Converting relative units to absolute values:

VMEAS = (relative value / 32767) * VRANGE

Use the specified range when provided in the message description.

note

Range Examples: Voltage and current ranges remain constant for each specification. With a single controller type, ranges can be hardcoded.

Example:

  • esc3-sc1_24dxa0840
    • Urange = 80
    • Irange = 400
Controller Voltage RangeUrange
60V60
80V80
100V100
Controller Current RangeIrange
100A100
400A400
600A600

Motor voltage scaling​

The motor voltage fields of Motor 1 and Motor 3 are phase-to-phase amplitudes. On VECTOR the driver multiplies the q-axis and d-axis phase voltages by √3 before transmission, so that a fully open driver reports the supply voltage and the value spans the whole Urange:

FieldTransmitted value
Motor 3, bytes 2-3√3 · voltageq
Motor 3, bytes 6-7√3 · voltaged
Motor 1, bytes 2-3√3 · √(voltageq² + voltaged²), the phase-to-phase stator voltage from the motor measurements

The /driver/motor/voltageq and /driver/motor/voltaged states themselves (terminal, siliWatch) are phase-to-neutral amplitudes and therefore read √3 ≈ 1.732 times lower than the CAN fields. Example: voltageq = 13.97 V on the terminal corresponds to 24.2 V in Motor 3 bytes 2-3.

note
  • /driver/motor/voltage exists only on BLDC. On VECTOR the Motor 1 voltage field is computed from voltageq and voltaged as above and has no terminal counterpart.
  • On VECTOR, both voltage fields of Motor 3 change sign together with the direction inversion (negative /driver/ipeak), whereas the voltaged state does not.
  • The current fields are not scaled: Motor 3 carries currentqf and currentdf exactly as read on the terminal, Motor 1 carries their amplitude.

Status Message - Range and Reference​

Controller sendingCAN ID: 0x0D8(27 << 3) + 0 controller address|DLC: 8
Datagram byteValue / typeDescription
0-1uint16Urange - voltage range
2-3uint16Irange - current range
4-5uint16Uref - resolved voltage reference [V] (parameter /driver/uref, see tip below)
6-7uint16Iref - current reference [A] (parameter /driver/iref)
Changed in driver 6

The Uref field carries the resolved voltage reference [V] (the voltage actually used by the driver), not the raw uref parameter. With uref = 0 it streams the available bus voltage; hosts that read this field back as the parameter value must be updated.

Status Message - Driver State 1​

Controller sendingCAN ID: 0x0D0(26 << 3) + 0 controller address|DLC: 8
Datagram byteValue / typeDescription
0bit 0-3/driver/enable (power stage state, 0 = hi-Z)
0bit 4-7Driver algorithm (BLDC: bit4 enabled, VECTOR: bit5 enabled)
1uint8/driver/stat
2uint8/driver/mode
3int8/driver/temp
4-5uint16/driver/limit
6-7uint16/driver/error

Status Message - Driver State 2​

Controller sendingCAN ID: 0x120(36 << 3) + 0 controller address|DLC: 8
Datagram byteValue / typeDescription
0-1int16/driver/cmd (-32767 to 32767)
2-3uint16/driver/totallimit (0 to 65535)
4-5uint16/driver/ptctemp [-] (no scaling)
6uint8/driver/iqmult on VECTOR, /driver/imult on BLDC (0 to 255)
7uint8/driver/uqmult on VECTOR, /driver/umult on BLDC (0 to 255)

Status Message - Supply 1​

Controller sendingCAN ID: 0x0E0(28 << 3) + 0 controller address|DLC: 8
Datagram byteValue / typeDescription
0-1int16/driver/supply/currentf in relative units
2-3int16/driver/supply/voltage in relative units
4-7int32/driver/supply/cap [mAh]

Status Message - Motor 1​

Controller sendingCAN ID: 0x0F0(30 << 3) + 0 controller address|DLC: 8
Datagram byteValue / typeDescription
0-1int16Motor current amplitude in relative units. VECTOR: √(currentqf² + currentdf²), BLDC: |/driver/motor/current|
2-3int16Motor voltage amplitude in relative units, phase-to-phase (see Motor voltage scaling). VECTOR: √3 · √(voltageq² + voltaged²), BLDC: |/driver/motor/voltage|
4-7int32/driver/energy [J]

Status Message - Motor 2​

Controller sendingCAN ID: 0x0F8(31 << 3) + 0 controller address|DLC: 8
Datagram byteValue / typeDescription
0-1int16/driver/powerf (VECTOR) or /driver/power (BLDC) in relative units. Range: Urange*Irange.
2-3int16Mechanical angle [radian]. Range: 3.14.
4-5int16/driver/motor/rpmf. Range: int16 * 8.
6-7int16/driver/motor/odo. Range: 1.

Status Message - Motor 3​

Controller sendingCAN ID: 0x100(32 << 3) + 0 controller address|DLC: 8
Datagram byteValue / typeDescription
0-1int16/driver/motor/currentqf in relative units. BLDC: /driver/motor/current
2-3int16√3 · /driver/motor/voltageq in relative units, phase-to-phase (see Motor voltage scaling). BLDC: /driver/motor/voltage
4-5int16/driver/motor/currentdf in relative units. BLDC: always 0
6-7int16√3 · /driver/motor/voltaged in relative units, phase-to-phase (see Motor voltage scaling). BLDC: always 0

Status Message - Motor 4​

Controller sendingCAN ID: 0x108(33 << 3) + 0 controller address|DLC: 8
Datagram byteValue / typeDescription
0-1int16Rthermistor [ohm]
2-3int16/driver/motor/mres [mohm]
4-5int16Actual motor torque [Nm] * 100
6-7int16Maximum possible torque [Nm] * 100