CAN bus: the threshold between hobby servos and brushless joints
The moment joints move from servos to integrated brushless motors, communication almost always lands on CAN. Wiring is not the hard part — the hard part is that several conditions must hold at once, and when one fails they do not raise an error together. They go quiet together.
- Physical layer
- Differential twisted pair, two signal wires plus a common ground
- Termination
- 120 ohm at each end of the bus; miss one and packets drop sporadically
- Bitrate
- Classic CAN up to 1 Mbps; CAN FD higher, but both ends must support it
- Controller requirement
- A real CAN peripheral — not something a GPIO can emulate
- Common setup
- USB-CAN adapter to the host, or a multi-channel CAN FD adapter for several buses
- The spec, and what it measures
- The critical parameter is not the bitrate but termination and topology: 120 ohm at both ends, a common ground across every node, and short stubs. A missing terminator produces a symptom that is actively misleading — not "no communication" but intermittent communication and random packet loss, which looks like a software problem. On bitrate, CAN FD carries more data when both ends support it, but a single classic-CAN node on the bus drags the whole segment down to the lower rate.
- Price tiers
- Entry cost is low: one USB-CAN adapter gets you started, and integrated motors carry their own CAN transceivers. The real spending is on the host side — if your controller has no native CAN peripheral you need an add-on board or a different controller. Put "has a CAN controller" on the must-check list when choosing a controller; adding it later is worse.
- How to pick
- (1) Confirm the controller has a CAN peripheral — the easiest thing to discover too late. (2) Size the adapter to the number of buses: when several joints share a line, bandwidth and real-time behaviour have to be planned together, and one channel may not be enough. (3) Keep a multimeter handy: measure termination before powering up — the resistance across the two signal wires should read close to 60 ohm (two 120 ohm in parallel), and that minute saves a day. (4) Unify the bitrate: every node must match, and a mismatch again produces silence rather than an error.
- Known pitfalls
- (1) Missing termination — sporadic loss is the hardest class to diagnose because the symptom is not stable. (2) No common ground: differential signalling resists interference, but large potential differences between node references still break it. (3) Controllers without real CAN hardware: some boards can only bit-bang it, and timing collapses under load. (4) Mixing CAN FD with classic CAN: the segment drops to the lower rate and nothing reports it.
- What we checked
- We checked the two hard requirements of termination and topology, that the host side needs a real CAN peripheral rather than GPIO emulation, and the behaviour of mixing CAN FD with classic CAN. Not checked: we have not benchmarked specific adapters for packet loss or latency, so what is written here is the mechanism and the method rather than a verdict on any particular adapter.
Treat it as a one-time threshold rather than an ongoing nuisance: termination, common ground, bitrate and a controller with real CAN hardware, all four right at once, and you will rarely touch it again. The controller item is the easiest to overlook and the only one wiring cannot rescue — settle it when you choose the board, not afterwards.
The one-minute check before powering up
- Measure the resistance: powered down, across the two signal wires it should read near 60 ohm (two 120 ohm terminators in parallel). If it is far off, do not apply power yet.
- Check the common ground: every node needs a shared reference, especially when supplies are separate.
- Match the bitrate: nodes and adapter must agree; any mismatch means no communication at all, not slower communication.
- Confirm the controller: a hardware CAN peripheral, not a software emulation.
Intermittent packet loss on CAN almost always points at the physical layer: termination, grounding, stubs that are too long. Do not start by loosening software timeouts and retries — that turns one definite problem into two uncertain ones.
Sources
- CAN physical layer specifications (published standards on termination, topology and bitrate)
- Wiring and debugging records in open robot projects and motor vendor documentation
Objects in this entry
Last checked 2026-09-28