That only gets you to 10 motors. 12 motors requires a Y cable some place.
@Techno gave some spot on advice. @1530RoboWarriors gave some good advice too to use slew rate. Helps on the edge conditions, but if you are asking for too much from the poor little motors then you are still up a creek.
This bit of code from @jpearman on implementing slew rate is all over our many of club’s robots. You only then need to start the task and reference the motor via motorReq instead of motor. The slew rate task takes it from there.
The only changes I suggest are going to a 20ms task delay and we’ve gotten away with steps of 15 to be slightly more aggressive per time slice. This sends it to 0.75 PWM steps per millisecond versus his default of 0.66.
#define MOTOR_DEFAULT_SLEW_RATE 15
#define MOTOR_TASK_DELAY 20
You can also use the @jpearman smart motor library and put in the LED lights to see when the current and temperature is too high. It requires a bit of recoding of your program but good to do as an experiment on the side. That library will flash some LED’s when it thinks the temperature has gotten too high for your motor and preventively limits it. Then you will know it is overworking the motors versus a wire short (wire shorts can be very hard to find, but start with sharp corners or cut edges of metal).