Copter, Plane and Rover support DroneCAN Electronic Speed Controllers (ESCs) that allow two-way communication with the autopilot enabling potentially easier setup and in-flight monitoring of ESC and motor health.

List of CAN ESCs

Name Avail Ever Worked
Zubax Orel 20 Yes Yes
Zubax Myxa Yes Yes
Zubax Mitochondrik Yes Yes
Holybro Kotleta20 Yes Yes
AutoQuad ESC32 No No
VESC Yes No (proposal)
HiEnd Can Bus ESC Yes ?
Velocity ESC Yes Yes

Connecting to the Flight Controller


One ESC (it does not matter which) should be connected to the flight controller’s CAN port using a 4-pin DF13 to 4-pin DroneCAN adapter cable. Each subsequent ESC should be connected to the previous using a 4-pin DroneCAN cable. The final ESC should have a CAN bus terminator plugged into one of its 4-pin DroneCAN ports.

The FTDI Cable connection is only required for the one-time set-up discussed below.

Alternatively, the ESC can be configured via CAN bus using the DroneCAN GUI Tool <common-uavcan-gui>.

Autopilot Setup

There are two parameters that determine which autopilot servo/motor channels are sent to the CAN escs: For the examples below, the values are shown for CAN driver #1.

  • CAN_D1_UC_NODE - which is the node ID of the autopilot sending the commands to the ESCs so that there can be differentiation between multiple sources on the CAN bus
  • CAN_D1_UC_ESC_BM - bitmask that determines which autopilot servo/motor output signals are sent to the DroneCAN ESCs

ESC setup using CLI

Each ESC must go through a one-time manual setup using an FTDI cable to define its DroneCAN Node Id and motor number. In future versions of ArduPilot this will be replaced with a setup procedure using the mission planner (and other GCSs).

The steps required are:

  • Connect the FTDI cable to the ESC’s “Developer port” as shown in the image above.
  • Power the ESCs with a battery
  • Use a terminal program such as Putty to connect to the ESC using the FTDI cable’s COM port, using serial at 115200 baud
  • press Enter into the terminal and a “ch>” prompt should appear
  • type cfg list to see a full list of parameters
  • on motor #1 (i.e. front-right on a quad) set the uavcan_node_id to “10” and esc_index to “0” by typing:
    • cfg set uavcan_node_id 10
    • cfg set esc_index 0
    • cfg save (to save the configuration)
    • reboot
  • to test the motor moves:
    • dc arm (to enable the output)
    • dc 0.2 (to spin motor at 20%)
    • dc (to stop motor)
  • repeat for motors #2 (back left on a quad), #3, #4, etc with each motor having a node-id and index one higher than the previous (in fact the node-id doesn’t matter as long as it’s unique).

Logging and Reporting

DroneCAN ESCs provide information back to the autopilot which is recorded in the autopilot’s onboard log’s CESC messages and can be viewed in any ArduPilot compatible log viewer. This information includes:

  • Error Count
  • Voltage
  • Current
  • Temperature
  • RPM
  • Power (as a percentage)

The RCOU messages are also written to the onboard logs which hold the requested output level sent to the ESCs expressed as a number from 1000 (meaning stopped) to 2000 (meaning full output).