This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DRV10983: communicating with multiple BLDC motor drivers using a single I2C channel

Part Number: DRV10983
Other Parts Discussed in Thread: MUX36D08, TCA9548A

Hi all -

I need to build a system that drives up to 8 BLDC motors, and I would like to use the DRV10983, but my MCU only has a couple of I2C channels available.  I am a little perplexed by this challenge, as all of my DRV10983s will have the same 7-bit I2C address (101 0010), which frustrated me a bit.

My plan is thus as follows: I will control each (of the 8) motor drivers using a dedicated variable-duty cycle PWM signal from the MCU connected to its SPEED pin, with a GPIO (from a GPIO expander) wired to its DIRection pin.  I will use speed feedback from each of the FG pins, directed through a 8:1 multiplexer back to the MCU, and (when running) cycle through each of the motors (using the multiplexer) quickly to measure the frequency of the PWM signal on each FG pin using a single dedicated timer on the MCU.

My challenge is really with the I2C channel (which I suppose I can just use for programming the DRV10983s when all motors are off, not while running - see previous paragraph).  My plan is to use a single I2C channel, with SCL wired directly to all 8 DRV10983s, and route SDA from the MCU out to the DRV10983s through a 1:8 multiplexer, which I can then cycle through to program each DRV10983 appropriately.

Does this approach sound ok?  I think I could use, e.g., a single TI MUX36D08 to accomplish both of the multiplexing tasks mentioned above.  Is this essentially the approach that you guys had in mind when not providing a I2C address pins (e.g., {A2,A1,A0}) on the DRV10983?  Alternatively, I could use a pair of TI TMUX1208s, if I wanted to retain the capability of occasionally communicating with the DRV10983s, on at a time, while the system is running (while still using SPEED, DIR, and FG on each DRV10983 to actually control each motor).  Would this latter approach (or, something different entirely) present a significant advantage?

Thanks for the feedback,

Tom

  • Hi Thomas,

    Thanks for posting your question in MD forum. I don't see any issues in your approach of using 2 multiplexers to read back the motor speed and route SDA lines but we have a simpler solution to help resolve this issue. We recommend using an I2C mux that can be used to resolve I2C slave address conflicts.

    We have TCA9548A (Datasheet: www.ti.com/.../tca9548a.pdf) that can be used to communicate to multiple DRV10983s. Pins A0, A1, and A2 in TCA9548A are hardware selectable to set the slave address of the TCA9548A (see Chapter 8.5.2 in datasheet). Channel selection is done using Bits B0 to B7 in the control register (see Chapter 8.5.4 in datasheet). Can you provide more context to reading the speed feedback? If the purpose of reading the speed is to implement a closed loop speed control, then you can use the MUX to read the FG pin from all the eight devices. If the purpose is to just read the speed and not use it in the algorithm then I recommend reading the Motor speed register (address 0x11 and 0x12). This way, you can avoid using the MUX. Reading the speed from FG pin more faster than reading it from the speed register.

    Regards,

    Vishnu