CAN vs. PWM for Motor Control - Pros and Cons

I am wondering what the differences and advantages are in utilizing CAN communication for motor control compared to traditional PWM. I am using a Blue Cube with Hobbywing X13 motor-esc combo.

I currently use CAN strictly for telemetry purposes in reporting ESC amps, voltage, temp, etc. But i use PWM as the main method for commanding the speed of the motor. I know it is possible to use only CAN for both telemetry and speed control of the motor, but i am unsure of any potential hazards in doing this or of any benefits that may come with the switch.

If anyone has any experience with CAN controlled ESCs/ motors or knows which is better (if that is even true) I would highly appreciate your input. My main reason for looking to switch is to remove complexity from my setup and clean up the wiring. Thanks ahead of time!

CAN would be the system of choice - it’s specifically designed for long wire lengths and noise immunity.

1 Like

From a datarate/refresh rate perspective CAN has enough power to get the job done. I do not know how often it gets updated though.

So CAN is going to be more reliable? Are there any known cases where a drone crash occurred due to noise on low dshot bitrates ( dshot150/300 )?

DSHOT is also far superior to ordinary old PWM, since it is a proper serial protocol with checksums and more. PWM is almost just noise on the wire.
I am not aware of any instabilities or crashes because of DSHOT or CAN itself.
CAN is still at the top spot, especially if you already have ESCs that will do it.

So are DSHOT and CAN virtually the same in terms of reliability? An ESC that supports CAN communication is nearly x3 the price of an ESC that supports DSHOT.

I would make a point of using CAN for long wire lengths, where the ESCs are a long way from the flight controller. This may be the case with very large industrial or commercial copters. CAN wiring can be daisy-chained around to various devices, no need to run a star configuration, so wiring could be simplified. CAN is industrial-strength, specifically designed for long signal wire lengths in electrically noisy environments.
If you had to get a copter certified by a regulator and for insurance, CAN is probably be the way to go.

DSHOT should be reliable for normal use. I’m using DSHOT300 to two centrally-placed 4-in1 ESCs for 8 motors, so there are 24 motor wires criss-crossing all across the signal wires in close proximity and no problems so far. I’ve used this config before.
I’ve had good experiences with the Holybro Tekko32 45A and 65A Metal ESCs.

Ideally you would have short power and signal wires and long motor wires, but some manufacturers insist on having very long power and signal wires.

Dshot has AFAIK no checksum.

Yes, 4 bit checksum (technically CRC) on the throttle bits and telemetry request bit:

  • 11 bit throttle: 2048 possible values. 0 is reserved for disarmed. 1-47 are reserved for special commands. Leaving 48 to 2047 (2000 steps) for the actual throttle value
  • 1 bit telemetry request - if this is set, telemetry data is sent back via a separate channel
  • 4 bit CRC: (Cyclic Redundancy) Check to validate data (throttle and telemetry request bit)

So dshot does have crc?

I am upgrading my x11plus setup to CAN CONTROLLED ESC very soon.

I will share the outcome over here.

hi
so i am able to get just the voltage data on the main HUD of MP. how do i get the current from each esc averaged out to be displayed on the HUD of the MP.

Ive been using CAN on my X6 plus motors for a quad…theyve been working great and havent had any issues yet in roughly 70 hours