0

I am trying to find the simplest way to connect multiple 15 IMU sensors (ICM-20948) to a wearable suit.The thing is that they all have fixed addresses.

The solutions I found so far are:

However, with this method, I'm limited to the number of GPIO.

For now, the solution with a multiplexer seems to me the most reasonable, but is there any other way I am missing? Can I somehow produce IMUs with, say, 15 different addresses and wire them all together to one I2C?

Thanks for your help and please let me know what other details I should provide.

Edit: I'm using the 3B+ version of the pi.

  • The instructable's dt overlay method to create more I2C buses does not work for all OS versions, and no one very can firmly say which stretch version works and which does not work. I tried it in my stretch and it did not work. I have ordered Rpi4 and hope with buster can create 4 or 5 hardware I2Cs. – tlfong01 Jun 27 at 14:26
  • You answered your own question. First try the multiple busses, if that doesn't work, choose either a multiplexer or multiplecontroller, pick the one you think is the easiest / suits you best. – Dr_Bunsen Jun 27 at 14:28
  • Mux works. And by "different controllers", do you mean from different vendors? That makes programming very messy. – tlfong01 Jun 27 at 14:28
  • One more thing, placing too many I2C devices on the same bus make the whole thing very unstable, and extremely to troubleshoot (even pull up tailored, and 400pf cap limit not exceeded). I once placed 8 devices with different address in the same bus. They can all be detected, but input out errors come and go, finally I stopped at 4 devices at most (even with hardware I2C extenders and buffer chips, and wires already CAT5 and shorter than 30cm. In short, do expect much hard problems ahead, ... – tlfong01 Jun 27 at 14:36
  • If you are a MEMS newbie, I would suggest you to try 6 DOF first, eg MPU6050, before going MPU9250. ICM-20948 and other 9DOF modules might not disclose all the details for small guys, so another big problem. – tlfong01 Jun 27 at 14:42
1

I'd like to offer another way, from the datasheet it seems that your ICM-20948 also allow SPI, so you should go for SPI, and not I2C.

With SPI you'll be able to use any number of device, however you'll need a pin a per device to select the one you're talking to.

I think this will be the best solution for you. If you're using Linux, you'd be able to add an IO expander and use it to give as many Slave Select (SS) as you need.

[EDIT] One question remain though, do you need to have all available data in the same time? If so you need to verify whether you'll have time to go through all your devices without losing information.

  • Yes. I need to have all data at the same time, since I'll be using them to render a 3D model in Unity. – Misen Jun 27 at 17:00
  • Add timing requirements to original question, because strict timings can eliminate majority of possible solutions. – domen Jun 28 at 6:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.