Electronic – I2C extender or repeater

capacitancedistancei2cnoise

I am developing a dolly-pan-tilt system, where an Arduino is connected via I2C to three independent rotary encoders for positioning. Having read a few posts on this site and elsewhere, I am aware that I2C has a limitation regarding distance of the cables for correct signal transmission. My issues/questions are the following:

SDA and SCL wires ought to be twisted, although some think they don't need to?
I am thinking of using a twisted SDA/SCL for each function, dolly, pan and tilt movement, which sit very close to each other on a 24pole flat ribbon cable.
So, twisting is probably adequate as well as an I2C repeater, as the distance between the Arduino controller for the dolly encoder is around 2.20m, the distance for the panning encoder is about 1.80m and the tilt encoder is closer with 0.60-0.70cm.

However, I have seen mention of I2C repeaters as well as extenders: which one is better suited as they seem to both be doing the same?

I2C extender: P82B715

I2C repeater: CPC5902G by Clare

What is truly the difference and advantages between the two ICs?
Also, I read somewhere, that the overall distance between the master and his I2C slaves ought to be considered, in my case: adding up the above mentioned distances 2.20m+1.80m+0.70m for all three movements, and not consider them independently towards the microcontroller; —is this valid?

As unfortunately all three I2C cable pairs are right next to each other (distance between each line is 1.26mm) on the ribbon cable followed by the GND line, it can still get noisy as thereafter are the cables driving the DC motors +/- @ 12V and up to 2A.
I did my calculations regarding wire capacitance concerning the ribbon cable AWG (28), based on this website and ended up with 38.51pF for 2.5m of cable.

The datasheet of my encoders demands though to remain below 10pF, in order to ensure correct operation!

Best Answer

Where did you get the idea that SDA and SCL lines should be twisted?

This is the second worst thing you can do to I2C communication next to cutting the wires.

Twisting is suitable for differential lines such as CAN or RS485/422.

With slow enough communication you probably won't even need repeater/extender on 2.5m. Especially, if this a 5V system. Just untwist those I2C lines.

If you have some spare lines on the ribbon cable try to put some GND lines in between I2C (non-twisted )pairs or even between SDA and SCL of same channel.

EDIT: there is a way where twisted-pair might come in handy for I2C. It is where each of the two signals is transmitted differentialy (some kind of 4-wire I2C).

Driving I2C-bus signals over twisted pair cables with PCA9605 transmits SDA bidirectionally over a twisted pair of wires.

Sending I2C-bus signals via long communications cables with P82B96 or PCA9600 explains the advantages of transmitting SDA using a unidirectional "4-wire driving method".