1

I'm building a project that requires a pi to query multiple 9-DoF IMUs through I2C ( ideally up to 100, but 16 should be enough for the start). I'm wondering if this is even possible and what kind of expansion boards I should look for. Also, in terms of power consumption, is this achievable? The IMUs are LSM9DS1. I want to query all of them at a rate of 120Hz. Are multiple Raspberry Pi s needed in order to achieve this sample rate for such a high number of sensors?

Is this achievable?

  • 1
    Also, i am assuming that since you want to monitor so many of the same sensor, they are going to be located in different locations? Or is this like a wearable motion sensing suit? Either way, I2C is intended for short distance communication (usually across a circuit board) Although longer distances can be achieved, its usually at the expense of speed. So unless your putting 100 devices on the same circuit board, you probably want to rethink your design. – Chad G Jun 11 '19 at 21:08

2 Answers2

0

In theory you can connect up to 112 devices directly to the i2c bus using the 7-bit address standard. That limit is based on the number of unique addresses available. In practice, however, your case will probably be limited to many fewer since most specific i2c slave devices come with a limited number of i2c addresses hardwired into the device. Many times there is only one choice. So you'll need to deal with that issue somehow since you want to connect several copies of the same hardware (at least as I understand your question).

There are address translators that you could buy and incorporate. They do a shift of the address between the bus and the device, so that makes the device appear to have an different address on the bus. That introduces some complications to the design though, so you'll have to see if it's worth the trouble.

Assuming that you can get all of the devices connected, I don't see the power consumption necessarily being an issue. You might need to choose pull-up resistors on the bus to accommodate your load, but that's probably achievable. Assuming further that you are not going to put 100 IMUs right next to each other, you should also be aware that the specification does not support unlimited physical length of the bus lines. My personal experience is that with properly chosen pull-ups you can do better than the spec, but that must depend at least in part on the design of the devices that you put on the bus. There are multiple posts here about that. This one came up on quick search, but I think there are others:

Brick
  • 1,377
  • 2
  • 13
  • 19
0

This does not sound at all practical.

To get each of the datums (accelerometer, gyroscope, and magnetometer) would require a read of 18 bytes (6 per datum).

Conservatively assume each read requires a 2 byte overhead for 20 bytes per read. Each byte is transferred in 9 bits for a total of 180 bits per read.

The maximum supported I2C rate is 400 kbps so you could theoretically make 400000/180 or 2222 reads per second. You need 120 reads per second per sensor so theoretically you could handle 18 sensors. In practice I doubt if more than 8 would be workable on a single Pi.

You could use an I2C multiplexor such as the TCA9548A to connect up to 8 LSM9DS1 to a single I2C bus.

joan
  • 71,024
  • 5
  • 73
  • 106