Discussion and questions related to the course CAN Bus Communications Decoded
Which module or modules output the 2.5 volts for the CAN communications? Or am I looking at this wrong? The way I imagine it, one module outputs the 2.5 volts and they all "pull it up" or "pull it down" (depending on whether it is CAN high or low) to create the message.
The transmitting device(s) will create a differential voltage on the two CAN lines. Receiving devices just monitor the voltage differential.
That's a super interesting question Tim! And, to be honest, I'm not 100% sure on a complete answer. I think we'd be pretty deep into the weeds of IC design before we had an absolute, but hopefully the following warble helps:
When a device wants to transmit, it sends out some current on the CANH line, which flows out away from the device on the CANH line in both directions, through both termination resistors, and back through the devices CANL line. The device monitors the voltage on the CANH and CANL lines, and when the differerence between them is right, it holds that current level for the period of the bit transmission. This is why the termination resistors are so important, but also why there is a little flexibility in their value, as each device on the bus regulates it's current output to result in the correct voltage levels. It's a voltage regulated current source type of circuit.
This is different to devices 'pulling up' and 'pulling down', as those system have no regulation to the amount of current that flows in the circuit, and bad things result when bus wires are accidentally shorted to ground or 12V or similar.
As to how the devices keep the recessive level at ~2.5V, Hmmmm, that's actually causing my brain a little trouble... I mean, that 2.5V is compared to the vehicle chassis (so module shared) ground level... Which isn't guaranteed to be the same everywhere. I'll have a ponder on that and see if I come up with anything. Maybe someone else can chime in and discuss too :-).
With differential signaling, there is no reference to the ground, individual devices can have different grounds. The only signals reference each other, and the difference needs to be 2.5v (or whatever the spec calls out).
For example, my Dyno and the vehicle don't share a common ground, but yet they can communicate via CAN. My laptop (and it's USB to CAN adapter with opto isolation) don't share a common ground, yet they communicate via CAN just fine.