Multiplexing 4 DC motors with arduino

arduinomotormultiplexerpotentiometer

I'm aiming to control 4 motorized faders with an Arduino. However, I'm still trying to figure out how to best multiplex all the inputs/outputs. Each fader has two potentionmeters and one touch capacitive sensor, and even if I discard the touch sensing pin I still need at least 4 inputs per fader (16 in total). On the other hand, I don't know if it would be possible to mux the four DC motors, but I wouldn't discard reserving 4 PWM pins for each indivual motor. I've read that it is possible to achieve this with either multiplexers or shift registers: but what would be the advantage of each approach? I predict each motor would be operating at 10V@0.8A max.

EDIT: I have no actual "fixed" requirements for how fast the motors should run, I'm trying to estimate what kind of speeds I would get with each approach, and if how much I would gain if used dedicated PWM pins for each motor (besides being able to control them "simultaneously")

Best Answer

Why do you need 4 inputs per fader? I presume that one is for sensing position, and one is for the actual gain of the fader (which is supposed to be analog) -- the Arduino only needs to read one of them. If that's a voltage divider between 5V and GND, you only get one analog input per fader for position.

If touch is a digital signal, or can be determined with a comparator, you can then use a digital input for that. Or, as you said, ignore touch.

Finally, you have 6 PWM outputs, but only need 4, and then another output each for direction, assuming you have a reasonable motor controller with enable/direction inputs.

So on an Arduino UNO:

  • position sensor: A0 through A3 (save A4 and A5 for I2C)
  • motor PWM (speed): four of the PWM digital outputs
  • motor direction: four of the non-PWM digital outputs
  • touch sense (if needed/implemented): four non-PWM digital inputs

Total, 12 digital pins, 4 analog pins. Leaves the serial port (D0/D1) free for programming, and I2C (A4/A5) free for I2C.