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
| Identifier | 29 bit (CAN 2.0B, extended frame), device address in the identifier |
| Default address | 0x0A – commands to 0x0A000000, telemetry from 0x1A000003 |
| Broadcast | 0x01000000 – arm, disarm and fault log for all devices on the bus |
| Telemetry | cyclic: operating data every 100 ms, signal state every 10 ms |
| Galvanic isolation | CAN transceiver and PPM input isolated from the power stage |
| Connection | D-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
| Identifier | Data (8 bytes) | Meaning |
|---|---|---|
0x0n000000 | 10 01 D0 07 00 00 00 00 | 16-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. |
0x0n000000 | 13 0D 01 00 00 00 00 00 | Write 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. |
0x01000000 | 00 00 00 00 00 00 00 00 | Broadcast to all devices: deactivate PPM setpoint (disarm). |
0x01000000 | 01 00 00 00 00 00 00 00 | Broadcast: arm PPM setpoint. |
0x01000000 | 02 00 00 00 00 00 00 00 | Broadcast: 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.
| Identifier | Cycle | Content | Scaling |
|---|---|---|---|
0x1n000003 | 100 ms | phase current (RMS) · DC current (filtered) · DC voltage · MOSFET temperature | ÷10 A · ÷10 A · ÷10 V · ÷100 °C |
0x1n000006 | 100 ms | Id actual · Iq actual · Id setpoint · Iq setpoint | ÷100 A |
0x1n000007 | 100 ms | Ud · Uq · error integral Ud · error integral Uq | ÷100 V · ÷100 V · ÷1000 · ÷1000 |
0x1n000008 | 100 ms | MotionCtrlState · ErrorState · maximum cycle time (internal quality figure) · firmware version (dev·patch·minor·major, 4 bits each) | uint16 |
0x1n00000C | 100 ms | speed actual · speed setpoint · speed maximum · torque actual | int16 rpm · ÷1000 Nm |
0x1n000013 | 100 ms | motor temperature (NTC) | ÷100 °C |
0x1n000005 | 10 ms | armed · inverted · PPM state · valid · PPM raw value · PPM value | bool · bool · uint8 · bool · uint16 · uint16 |
0x1n000004 | 10 ms | raw signal counter · valid signal counter · pulse duration · pause duration | 1 · 1 · 100 ns · 100 ns |
0x1n00000B | 2 ms | update process request (only during the firmware update) | – |
0x1n00000F | on fault or on request | fault 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
| Value | State |
|---|---|
0x0000 | STO – Safe Torque Off, motor freewheeling |
0x00F2 | waitingForSetpoint – waiting for setpoint (STO or ASC, depending on parameter) |
0x00F3 | ControlActive – control active |
0xFF00 | HardFault |
PPM state
| Value | State |
|---|---|
| 0 | disarmed |
| 1 | invalid |
| 2 | armed |
| 3 | armed, signal invalid |
| 4 | armed, signal valid |
| 5 | enabled always |
ErrorState
| Code | Fault |
|---|---|
| 0 | OK |
| 30 | overcurrent protection triggered |
| 41 | PPM signal invalid |
| 42 | PPM timeout |
| 43 | PPM inversion error |
| 44 | overtemperature |
| 45 | PPM 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 variant | D-Sub 15 HD with Persystems pin assignment; INV-CAN-ADAPT adapter to D-Sub 9 with standard CAN pin assignment |
| Embedded board | D-Sub 15 HD as on the case variant |
| Aero variant | CAN/PPM and motor NTC via Molex PicoBlade connectors |
| Signals | CAN_H, CAN_L, CAN_GND and PPM input – galvanically isolated from the power stage |
| Wiring | reference 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.
