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