Skip to content
Nemo157 edited this page Oct 16, 2011 · 14 revisions

CAN bus

See Wikipedia for a general description of a CAN bus.

Diagram of our CAN bus network design

Microcontrollers

There are three choices of Atmel based MCUs that we could use with in-built CAN support.

From the Atmel AVR-based CAN MCUs page there are the AT90CAN range and the ATmega16{M1|C1} range. Both of these are 8-bit AVR based devices, the main difference is that the AT90CAN range has a much greater range of peripherals and IO.

The other choice is the SAM7X range of parts. These are much more powerful MCUs than either of the 8-bit devices, being based off the 32-bit ARM7TDMI, and also offer far more peripherals. One of the biggest advantages is the inbuilt USB, this will make for a much easier computer-USB-CAN-MCU communications channel.

CAN Tranceivers

On the Atmel CAN Tranceivers page there are two different tranceivers listed: the low speed B10011S and the high speed ATA6660.

Because we will only periodically be sending small instructions the low speed one should be fine. It also seems to offer higher noise tolerance because of its lower speed making it an even better choice.

However a supplier for the B10011S could not be found. So we can get the ATA6660 from Mouser

CAN Connectors

We have decided to use the RJ45 style connectors for the CAN bus. The reason for the choice of these connectors was a mixture of cost and footprint size on the PCB. Using RJ45 connectors means that standard Ethernet cables can be used for connecting the node together.

The following diagram shows the pin layout of the cables and connectors.

RJ45 Connector Image

As 100BASE-TX Ethernet requires only pairs 2 and 3, the other two pairs should be used for can, with using one twisted pair for CAN and the other for power/ground.

Pin Ethernet Pair CAN pin
1 3 NC
2 3 NC
3 2 NC
4 1 CAN High
5 1 CAN Low
6 2 NC
7 4 Vcc
8 4 Ground

High level protocol

CAN Protocol