How to control 8 motors independently

Hey gamers,

I'm currently in the process of designing a functional swerve drive prototype robot. I knew I would run into many many problems during the design and build process, but I didn't expect to face them before even buying any hardware. The design calls for 8 motors total, four DC and four steppers (though the steppers could be swapped for continuous servos if that would solve my problems).


Example of a swerve drive that I did not make.

I've spent the better part of a day looking online but haven't found enough information on cases with more than 2 motors to feel comfortable with my purchases. All of the beginner tutorials run with a single motor controller and two DC motors, and I haven't found any tutorials with more motors than PWM pins. If I'm missing a great guide somewhere I would love to see it.

Based on what I could find, the plan was to run each stepper off of its own DRV8833 motor driver, while the DC motors would get to share bunks. Some of the documentation I read implied that by PWMing two of the four inputs and not crossing your wires, you could keep the DC motors each on their own H bridge. (Actually now that I think about it, I only need them to go forward) Unfortunately, each component still needs their dose of PWM, which adds up to requiring roughly 8 PWM channels, which is too many for a poor Uno.
Should I drive the steppers with the DRV8833 and power the DC motors with some kind of motor shield (which to my understanding, produces it's own PWM off digital inputs and does not rely on the PWM pins of the Uno)? Vice-a-versa and stack two shields? What's the general consensus on powering these movers and shakers?

Or am I going about this completely wrong?

Another option might be to spring for a Mega 2560 instead, and take advantage of those juicy 15 PWM enabled pins, and just drive everything from its own DRV8833 (which frankly sounds like a nightmare but might just be crazy enough to work).

In terms of volts and amps this robot will have a tether because ain't no way I'm messing with batteries and Bluetooth at this point. I'm hoping to scavenge up a suitable power supply from the usual suspects and maybe just toss a 9v at the Arduino, but if the hive mind has any extra info, tips here would be great.

Another concern I have is the speed of the Uno. I have heard many a woeful tale of makers who were unable to coax their Arduino into successfully preforming more than one time-critical task at once. While the exact timings don't matter much for this operation, if the program takes too long to loop it will be unwieldy at best, and stepping the steppers might cause problems (maybe a separate stepper control board could help with this?) The plan (stan) is to take input from joysticks (one for x/y and one for rotation, this drive can do all three simultaneously and that's the beauty of it,) and convert it with some basic trigonometry into 8 different values: power for each motor, and an angle for each stepper. (It appears to me that it won't be this simple to control steppers, but hopefully I can convert the angle into relative steps at some point). I have no idea how many operations like these an Uno will be able to preform in a second, but my napkin math (actually just guesswork) figures that around 20 cycles of the whole thing per second should result in a functional bot. If anybody has had experiences that suggest I won't be able to achieve this, I would very much like to hear your anecdotes.

Related note: I have never used Arduino before. I have experience with FTC and FRC robots, controlled by modern android phones running Java with much beefier (and surprisingly expensive) motor control equipment. If my perception of the capabilities of Arduino control is completely out of line, please throw a sanity check at me.

Thank you to everyone who has taken the time to read up on someone else's project that you don't care about. I appreciate any and all additional information you may have to add, and I hope to learn lots from the wizened experts of the community.

"Related note: I have never used Arduino before."

Well, buy your self a MEGA and start experimenting before you buy more hardware. You will get a better idea of how your project will go and what you will need for completion.

+1 on learning Arduino. Get some hands on experience before choosing the hardware.

Pololu is a great source for motors, modern motor drivers and motion control modules at reasonable prices. The engineers support their products fully.

I have heard many a woeful tale of makers who were unable to coax their Arduino into successfully preforming more than one time-critical task at once.

Most likely, they don't know how to program time-critical tasks properly. If you see delay() statements in their code, don't waste any more of your time. Examples are posted on this forum of doing several timed tasks "at once".