Technology · CAN interface

PersyCAN – the CAN protocol of the Persystems inverters

Setpoints, parameters, telemetry and firmware updates over one bus. PersyCAN uses 29-bit identifiers with a device address so that several inverters can share the same CAN bus – and sends operating data cyclically, without polling. This page summarizes the protocol documentation of the INV-60V-120A inverter.

At a glance

Identifier29 bit (CAN 2.0B, extended frame), device address in the identifier
Default address0x0A – commands to 0x0A000000, telemetry from 0x1A000003
Broadcast0x01000000 – arm, disarm and fault log for all devices on the bus
Telemetrycyclic: operating data every 100 ms, signal state every 10 ms
Galvanic isolationCAN transceiver and PPM input isolated from the power stage
ConnectionD-Sub 15 HD (case variant); adapter to D-Sub 9 with standard CAN pin assignment

Addressing

One bus, several inverters.

PersyCAN works with extended 29-bit identifiers. The second hexadecimal digit of the identifier is the device address n: commands to an inverter carry the identifier 0x0n000000, its telemetry arrives under 0x1n0000xx. The factory default address is 0x0A. This way several drives share one bus without the host having to tell messages apart – every address is readable in the identifier. Nobody has to assign addresses by hand: PersyCAN supports dynamic address allocation like the node allocation in DroneCAN. Several inverters with the same factory address are distributed automatically to their own CAN IDs through the discovery mechanism, and known devices get their previous address back after a restart – even if only one device was restarted.

Commands to the inverter

IdentifierData (8 bytes)Meaning
0x0n00000010 01 D0 07 00 00 00 0016-bit write command to the speed setpoint: 10 01 addresses the setpoint, D0 07 is 2000 rpm (0x07D0, little endian). The maximum speed is limited internally.
0x0n00000013 0D 01 00 00 00 00 00Write setup parameter: 13 0D addresses AutoArmOnInput, 01 00 activates automatic arming on a valid signal (setting is lost on restart).
0x0n00000A–Firmware update: response to the inverter’s update request.
0x0100000000 00 00 00 00 00 00 00Broadcast to all devices: deactivate PPM setpoint (disarm).
0x0100000001 00 00 00 00 00 00 00Broadcast: arm PPM setpoint.
0x0100000002 00 00 00 00 00 00 00Broadcast: trigger the fault log of all devices.

The setpoint can be given as speed or as torque; which control mode is active is set as a parameter. Besides CAN, the inverter accepts a classic PWM/PPM signal – the signal is checked for range, timing, timeout and noise, and an explicit arming state prevents unintended start-up.

Telemetry

Operating data without polling.

Most telemetry messages carry four 16-bit values (little endian). The scaling states the factor by which the raw value has to be divided.

IdentifierCycleContentScaling
0x1n000003100 msphase current (RMS) · DC current (filtered) · DC voltage · MOSFET temperature÷10 A · ÷10 A · ÷10 V · ÷100 °C
0x1n000006100 msId actual · Iq actual · Id setpoint · Iq setpoint÷100 A
0x1n000007100 msUd · Uq · error integral Ud · error integral Uq÷100 V · ÷100 V · ÷1000 · ÷1000
0x1n000008100 msMotionCtrlState · ErrorState · maximum cycle time (internal quality figure) · firmware version (dev·patch·minor·major, 4 bits each)uint16
0x1n00000C100 msspeed actual · speed setpoint · speed maximum · torque actualint16 rpm · ÷1000 Nm
0x1n000013100 msmotor temperature (NTC)÷100 °C
0x1n00000510 msarmed · inverted · PPM state · valid · PPM raw value · PPM valuebool · bool · uint8 · bool · uint16 · uint16
0x1n00000410 msraw signal counter · valid signal counter · pulse duration · pause duration1 · 1 · 100 ns · 100 ns
0x1n00000B2 msupdate process request (only during the firmware update)–
0x1n00000Fon fault or on requestfault log: state at the last overcurrent or on broadcast request–

This way the host system sees at any time what the drive is doing: the currents in the d and q axes show whether the controller is operating in the field-weakening range, the MOSFET and motor temperature show the thermal margin, and the cycle-time figure reveals whether the control loop is running cleanly under load.

States and fault codes

What the inverter reports.

MotionCtrlState

ValueState
0x0000STO – Safe Torque Off, motor freewheeling
0x00F2waitingForSetpoint – waiting for setpoint (STO or ASC, depending on parameter)
0x00F3ControlActive – control active
0xFF00HardFault

PPM state

ValueState
0disarmed
1invalid
2armed
3armed, signal invalid
4armed, signal valid
5enabled always

ErrorState

CodeFault
0OK
30overcurrent protection triggered
41PPM signal invalid
42PPM timeout
43PPM inversion error
44overtemperature
45PPM signal noisy

In the safe state the driver is switched off. Whether the motor runs freely (Safe Torque Off) or is short-circuited (Active Short Circuit) is selectable by parameter. Overcurrent, short-circuit, overtemperature and undervoltage protection act in hardware and software; if the MOSFET or motor temperature gets too high, the current is reduced automatically.

Configuration, logging, firmware

Everything over the same bus.

The Persystems configuration tool connects to the inverter over CAN. With it you set motor parameters, current limits, control mode and the assignment of the setpoint signal, and commission a new motor. During operation the tool records phase and DC currents, voltages and controller states in real time – for controller tuning and diagnosis.

Firmware updates also run over the bus, and the fault log with the state at the last shutdown can be read out at any time. For applications that need their own logic close to the drive there is the dual-core variant: the controller has two cores – one runs the motor control, the second executes your code, connected via an inter-processor interface with reference examples (learn more).

Connection

Case variantD-Sub 15 HD with Persystems pin assignment; INV-CAN-ADAPT adapter to D-Sub 9 with standard CAN pin assignment
Embedded boardD-Sub 15 HD as on the case variant
Aero variantCAN/PPM and motor NTC via Molex PicoBlade connectors
SignalsCAN_H, CAN_L, CAN_GND and PPM input – galvanically isolated from the power stage
Wiringreference signal grounds to the host system, not to the battery; keep DC lines short and twisted

Frequently asked questions

PersyCAN in practice.

Can several inverters be operated on the same CAN bus?

Yes. The device address is part of the 29-bit identifier: commands go to 0x0n000000, telemetry comes from 0x1n0000xx – n is the address of the inverter. The broadcast identifier 0x01000000 reaches all devices at once, for example for arming or for triggering the fault log. Addresses do not have to be assigned by hand: devices with the same factory address are distributed automatically to their own CAN IDs by the PersyCAN discovery mechanism – like the dynamic node allocation in DroneCAN.

Do I have to poll the telemetry?

No. The inverter sends its operating data cyclically: every 100 ms currents, voltages, temperatures, speed, torque, controller and fault state; every 10 ms the state of the setpoint signal. The host system only listens.

Does the inverter also support DroneCAN?

Yes. For flight controllers the INV-60V-120A can be switched to DroneCAN and then speaks esc.Status and NodeStatus according to the standard – not at the same time as PersyCAN, but switchable during operation; see DroneCAN ESC.

How are the values encoded?

Most telemetry messages carry four 16-bit values in little-endian format; the scaling is given in the table above (for example phase current in 0.1 A, Id/Iq in 0.01 A, torque in 0.001 Nm). The speed setpoint 2000 rpm is transmitted as D0 07 (0x07D0).

Where do I get the complete protocol description?

Pin assignment, signal paths, fault handling and the firmware update procedure are described in the technical documentation of the inverter at esc.persystems.org. We send you the complete protocol description with all parameters and messages as a PDF on request – together with the configuration tool for Windows.

Contact

Request the protocol documentation and configuration tool.

Tell us which application you want to connect – you will get the complete PersyCAN description and an answer straight from the engineering team.

Persystems

Echtzeit-Simulation und Leistungselektronik für elektrische Antriebe – entwickelt und gefertigt in Regensburg.

Persystems GmbH
Franz-Mayer-Straße 1 · 93053 Regensburg
info@persystems.org · +49 941 462 974 40

© 2026 Persystems GmbHPLECS, LTspice, Simulink, CarMaker und DroneCAN sind Marken ihrer jeweiligen Inhaber.
Persystems

Real-time simulation and power electronics for electric drives – developed and manufactured in Regensburg, Germany.

Persystems GmbH
Franz-Mayer-Straße 1 · 93053 Regensburg · Germany
info@persystems.org · +49 941 462 974 40

© 2026 Persystems GmbHPLECS, LTspice, Simulink, CarMaker and DroneCAN are trademarks of their respective owners.