Electronic – Proper CAN bus termination

buscantermination

I've been struggling with getting CAN bus transmission to work properly. I'm driving the setup with a Parallax Propeller board and the specifics are in another post, but I have a more specific question about the CAN bus wiring and termination:

Each source I've found that describes CAN bus termination does so with something like the top of the diagram shown below – a high and a low wire with 120ohm resistors at each end.

However, in my lab setup what I actually have is equivalent to the lower part of the diagram shown – the resistance is actually in the "middle", between the two devices. I've also tried playing with that resistance value, from taking it off entirely, and around 110ohms, as well as 220ohms and they all suffer from the same problem and the chip I'm using is reporting a transmission error.

Two 120ohm resistors in parallel should be the same as 60ohms resistance. But does the actual position of the resistors along the wire matter? The devices are physically about 6 feet of wire apart and it's running at 500Khz. I know some basics including Ohms Law, and I get that CAN uses voltage differential to transmit, but if the position of the resistors is what is wrong then there's definitely something I don't understand about how this circuit is supposed to work.

schematic

simulate this circuit – Schematic created using CircuitLab

Best Answer

The intent of the resistors at each end of the bus is to control transients due to time delays. The bus needs to be terminated with its characteristic impedance at each end.

However if the bus is only 6 feet long I would expect your implementation with a 60 ohm resistor in the middle to work. I expect you have some other problem.

You do need to have a device configured to receive the CAN packet and return an ACK to not have an error from the transmitter - some CAN bus monitors do not do so as they are expected to be non-intrusive. In that case you will get an error from the transmitter if there is no other node.

You may need to put another normal CAN node on the network to get the correct response.