I have 2 of these 12v motors and a 12v battery http://www.enigmaindustries.com/Motors/Bosch_EV_Warrior.htm

I would like to know what the best solution for controlling this motor with an Arduino Uno would be. Does the motor controller need to have a maximum current of 100A?

I though of a 100A transistor connected to the pwm pin of arduino, and then, control the motor with pwm.

Is voltage regulator better than pwm?

  • $\begingroup$ You might aswell ask in the electronics forum. I think you will need more than just a transistor, I'm no expert but have a look at IGBT $\endgroup$
    – nairyo
    Commented May 20, 2015 at 12:49

2 Answers 2


Yes, as this motor is rated for 100amps stall at 12V you should probably be using a motor controller capable of supplying that amount of current. Regarding how to drive the motor, the following may be of use:

  1. A voltage regulator cannot be used to drive a motor. What it does is convert a certain voltage to another voltage, for example 5v to 12v. It does not provide variable speed control.
  2. A transistor rated for 100amps at 12V would be sufficient to drive one of these motors, however you would only have one direction of control (for example, turning clockwise but not counterclockwise). This may be OK for your application, it also may not be. You could easily hook up the transistor to a PWM pin of your Arduino for control.
  3. If you want dual directional control of your motor, you will need a DC brushed motor driver, or HBridge.

Good luck with your project. Just a note, if you don't have very much experience I don't recommend messing with such high currents: issues with unsafe wiring due to lack of experience could be very dangerous and expensive. I'd recommend starting smaller and working upwards.

  • $\begingroup$ Thanks. Please mark this answer as as correct if you feel your question has been addressed. $\endgroup$
    – nanogru
    Commented May 22, 2015 at 5:45
  • $\begingroup$ I dont know how $\endgroup$ Commented May 22, 2015 at 16:56
  • $\begingroup$ On the left of this answer there's an up arrow, a number, a down arrow, and a check. Click the check. $\endgroup$
    – Chuck
    Commented Jun 23, 2015 at 19:22

Though most of this has already been answered, there are some other core concepts that are still important for you and future people to know, as well as some mistakes in the other answer despite mostly being right.

  1. A voltage regulator can actually be used to drive a brushed dc motor, it just in general is pretty stupid to do, there are many insane disadvantages to doing it that way and almost no advantages, perhaps in some strange medical device where not interference is desired it might work, but circuit isolation (for example, optocoupler for the signal would work better. perhaps in a full analog system it might be suited Voltage regulators are expensive and tend to only handle low current and low voltage, and completely unnecessary.

    But it will work, a DC motor has resistance in the coils, so reducing the voltage will lower the current. and wattage(power) is voltage*amperage.

  2. You can and probably should indeed just hook it up to the PWM output of the Arduino but in such a system using PWM tends to even be more efficient than analog, that is also why type-D amplifiers reach much louder sound with the same power usage.

    For the motor itself especially when the PWM frequency is tuned to things like the coil impedance and such the coil will already automatically turn the PWM signal into a analog voltage over the coil, here the "over the coil" part is important, since efficiency stays up. essentially the coil changes resistance based on the driving frequency. you could even control a motors speed somewhat just by altering the drive frequency even if you always use a 50 % cycle, optimally your PWM frequency should be higher when the motor should go slower, that way there is less shocking and whining, of course probably still quite high. in most cases a general PWM frequency will work just right due to that effect of the coils automatically stabilizing it into a analog voltage.

  3. PWM driving tends to actually be way more efficient. for PWM driving make sure to use square waves. so either on or off, the Arduino output pins output square waves since they only give 1 or 0.

    The reason is because if a MOSFET or transistor is driven at less than full saturation(for the trigger, gate, base) the resistance will increase. this will also create a analog voltage, but in this case where with high frequency PWM the energy is put out in the coil(resistance comes from the coil), in this case when driving it analog the resistance comes from the transistor or MOSFET and so outputting the energy there, not only making it very inefficient, but also directly pumping 100 W of heat into the transistor or MOSFET. you would need a very good transistor and/or MOSFET to even handle that with a very good heatsink.

    So use square wave PWM, and to increase efficiency you might want to tune the drive frequency as well, otherwise, typically increasing the frequency increases the efficiency, however once you increase it to far beyond the perfect point the maximum power going through the motor will decrease, the energy usage will also decrease along with that then but at a certain point it just will increase the coil impedance/resistance to much to still run at the full power. having a to high drive frequency is however easy to see and test, since you can actually see it since changing the speed from 80 % to 100 % will in such a case increase the real speed and power by a lot more than 25 %. you can also measure it by looking at the sound, vibration and current draw, you could even make it so that it is automatically tuned.

    This effect can also be abused to save money. Since, for example, if your motor has a peak startup current 100 A but a normal run current of for example 40 A to 60 A under load then if you have a MOSFET or transistor which can actually only hand for example 80 A continues load, then you could just drive it at a very very high (so one of those way to high/to far beyond optimal) frequency at startup, doing so will greatly increase the motors impedance/relative resistance and so will make it start slower and with less force but also with way less energy, you can also use/abuse this to prevent a motor from burning through at to high load, since you drive it at such a frequency that the max current will never go above the maximum current it can handle(well except for if you run it around 100 % where there not really a frequency in signal since it is just full on).you could also calculate it using some values measured with some basic tools. but using and abusing these effects can be much harder and more tricky than it seems due to that auto-balancing effect of the coils, so it does work, but at the same time it can also be very specific.

    Having a high enough drive frequency is generally good however.

  4. This one is very important but I think I might have forgotten it.

  5. It is true that a single transistor or MOSFET will only allow it to rotate in one direction, so indeed if you need 2 directions of rotation you can buy or make a H-bridge.

    enter image description here

    This is a example for a proper H-bridge design (source), note the capacitor end is connected to the ground so to the bottom, this one seems to require a voltage booster(to above the voltage at which the h-bridge is driven) for the signals to work, due to it probably only being NPN types.

If you use normal transistors instead of MOSFETs you might not need the diodes. the capacitor might not be needed anyway, but you should add it if you don't want your batteries to explode due to overcurrent and if you want your motor to start properly

  • $\begingroup$ It would be good if you can remember point number 4 $\endgroup$ Commented Jul 20, 2023 at 13:24
  • $\begingroup$ yes indeed, it was a important one actually one of the main ones next to that mosfets and transistors are more efficient when used is full open or full closed mode instead of like a analog voltage regulator. but I had to do something in between and forgot it. $\endgroup$ Commented Jul 22, 2023 at 10:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.