I am running a short (2 m) CAN bus with about 20 nodes. 1 Mbit/s speed, PIC 18F2580s and 18F4580s with MCP2551 transceivers, 10 MHz (with PLL to 40 MHz) crystal oscillators. Both ends are terminated at 120 ohms. Sample point is at 70%.
Nodes are in three groups, each powered from a separate isolated power supply, but the grounds are all commoned along the bus.
I get quite a number of message errors, framing, bit stuffing. Looking at CANH and CANL on an oscilloscope, everything looks beautiful. No ringing, no reflections, and the timing correct. Measuring the oscillators with an accurate frequency measurer shows only a tiny variation.
So far, the only way I have been able to reduce the number of message errors is to beef up the ground wire along the bus until I get the GND difference below about 150 mV. The further above that I go, the more errors I get.
Why? According to the MCP2551 datasheet, they should be able to cope with GND differences up to 7 V!
Am I misunderstanding something?