Skip to main content
The Delta can act as a UAVCAN ESC node, taking throttle commands from a flight controller over CAN instead of PPM, ADC, or UART.
This is UAVCAN v0, now called DroneCAN. It is not UAVCAN v1 / Cyphal.The two are different, incompatible protocols that share a name. The Delta firmware implements v0 via libcanard, which is what PX4 and ArduPilot mean when they say “DroneCAN” or “UAVCAN” in their ESC configuration.

Enabling UAVCAN mode

In VESC Tool, under App Settings → General → CAN, set CAN Mode to UAVCAN.
Switching to UAVCAN changes what the CAN bus is used for. VESC-native CAN behaviour — including CAN forwarding, which is how VESC Tool reaches a second controller over the bus — no longer applies in the same way. Configure each controller over USB before putting it on a UAVCAN bus.

Core settings

Node ID and ESC index are different things. The node ID identifies the controller on the bus. The ESC index selects which element of the throttle array it obeys.On a multi-motor vehicle each controller needs both a unique node ID and the ESC index matching its motor position in the flight controller’s motor ordering.

Raw command modes

The flight controller broadcasts uavcan.equipment.esc.RawCommand — an array of setpoints, one per ESC. The Delta reads the element at its configured ESC index and scales it by 8192, giving a value from −1.0 to 1.0. What it does with that value depends on the raw mode:
On a propeller-driven aircraft, Current mode will spin the motor backwards on a negative command. Use Current, no reverse brake unless you specifically want reversing.
The Delta also accepts uavcan.equipment.esc.RPMCommand, which takes the RPM value at its ESC index directly rather than as a scaled fraction.

Telemetry

The Delta publishes uavcan.equipment.esc.Status, tagged with its configured ESC index. UAVCAN Status Current Mode selects which current appears in that message:
  • Motor — current through the motor phases
  • Input — current drawn from the battery
Pick to match what your flight controller expects, otherwise logged current will be consistently wrong. Status broadcast rates are configurable through the UAVCAN parameter service (can_status_rate_1, default 50; can_status_rate_2, default 5).

Supported UAVCAN interfaces

Firmware update over UAVCAN is also implemented.

Parameters exposed over the bus

These can be read and written with any UAVCAN parameter tool, without connecting VESC Tool:

Bringing up a bus

Props off. A wrong ESC index means the wrong motor spins, and you want to discover that on the bench.
1

Configure each controller over USB first

Set CAN Mode to UAVCAN, assign a unique Controller ID, set the ESC index for that motor position, and pick the raw mode. Write and verify before moving to the next controller.
2

Match baud rates

Every node on the bus must agree. 500K is the default and the usual choice.
3

Wire the bus

CAN H, CAN L, and a common ground. Termination matters — a UAVCAN bus needs 120 Ω at each physical end.
4

Confirm enumeration

Each controller should appear in your flight controller’s UAVCAN node list with the node ID you assigned. A missing node is a wiring, baud, or duplicate-ID problem.
5

Verify motor mapping one at a time

Command each motor position individually and confirm the expected motor responds. Do not skip this.
6

Check telemetry

Confirm ESC status is arriving from every node, with RPM and current that track what the motor is doing.

Troubleshooting

Input configuration

PPM, ADC, UART, and the Setup Input wizard.

Motor tuning and parameters

Current limits and cutoffs — set these before commanding from a bus.
Last modified on September 1, 2026