I have a VEX 29 motor controller (u1 in the schematic) that takes a pwm signal as input to drive a dc motor in forward or reverse (with varying speed). Unfortunately VEX is not very generous with information about it's electronics. I managed to run this controller at 5V from an arduino PWM pin. But the motor controller should be able to run at higher voltages than 5V which would also increase the motor speed. So I want to instead run the motor controller at 10V, where the PWM input signal needs to be 0V-10V. How can I step-up the arduino 5V PWM signal to become a 10V PWM signal?

I was thinking of using a regular NPN bipolar transistor to switch the 10V voltage on and off with the frequency of the PWM signal, translating the 5V pwm signal into a 10V pwm signal. Is this possible? And if so, what is the type of parameters I need to choose the right transistor (I have a bag of various NPN and PNP transistors lying around)? My motor controller only takes around 10 micro-amps or something from the PWM pin when hooked up directly to the arduino (so at 5V). Updated arduino/motor controller schematic

  • 2
    \$\begingroup\$ Most motor controllers are controlled by logic level signals and do not require a PWM voltage equal to the motor supply voltage. Which motor controller are you using? Do you have a schematic for it? BTW in your fritzing schematic there is no common ground between the Arduino and motor controller, and the 10V supply is connected to the controller with reverse polarity. You won't get far in electronics by being sloppy - please correct these errors! \$\endgroup\$ Commented Feb 7, 2017 at 6:42
  • \$\begingroup\$ I just edited the question with info about the controller and updated the schematic. You think I don't need to step-up the PWM voltage? So a 5V voltage level from the Arduino might work even if the controller itself is powered with 10V? I guess internally in the motor controller the PIC µC might actually run at a much lower voltage? I will check this out and also the solution by @Çetin Köktürk. \$\endgroup\$ Commented Feb 8, 2017 at 1:47
  • \$\begingroup\$ @BruceAbbott you're right, I don't need to adjust the PWM voltage at all. \$\endgroup\$ Commented Feb 8, 2017 at 5:30
  • \$\begingroup\$ With the placement of your transistor the PWM input on the controller will still only get about 5V. The Transistor will only conduct if the Base voltage is higher than the Emitter Voltage which limits the Emitter to a bit below 5V. Look up source follower to learn more. But really I would try powering the controller with 10V and the PWM pin with 5V first. You may be surprised to see the controller works fine. \$\endgroup\$ Commented Jun 26, 2018 at 18:06

2 Answers 2


As Bruce said, 5 Volts are usually enough to control the motor driver. But, for some reason if you need 10 Volts, and since this is a simple switching application, any transistor should work. You should do this:


The value of the resistor will affect the current flowing, and the bandwidth.

p.s. the modulation will be inverted with this configuration, which means you deliver more power with less pulse width, and delivering less power with more. You need to change the PWM length through the software.

  • 2
    \$\begingroup\$ This also inverts the signal (i.e. the input can be 20% duty cycle, and the output will have 80% duty cycle). \$\endgroup\$
    – Whit3rd
    Commented Feb 7, 2017 at 9:23
  • \$\begingroup\$ I still have a bit of trouble understanding transistors very well (even though reading up on them a few times). Since a BJT is current controlled, I guess I need to make sure the current into the base is high enough to make the transistor open fully, right (not in the linear range)? So that is controlled by the 100ohm resistor. Which current do you mean with "the" current flowing is controlled by the other transistor. Into the PWM output? Which bandwidth do you mean? The PWM voltage level or current into PWM? I also assume that the emitter of the BJT is connected to GND right? \$\endgroup\$ Commented Feb 8, 2017 at 1:58
  • 1
    \$\begingroup\$ @DolfAndringa yes, you guessed it right, and this operation mode is called saturation region. Most of the time, this isn't a problem though, biasing in saturation mode is fairly easy, you just need to make sure that you are flowing enough current through base-emitter. The base resistor determines this current. By the way, you may want to raise the resistor value to something about 300 ohms, because 100 ohm resistor will cause the base current (which Arduino supplies) to approach to max. current rating of an Arduino pin. And yeah, I meant the collector current. \$\endgroup\$
    – C K
    Commented Feb 8, 2017 at 5:11
  • \$\begingroup\$ I meant both values when I talked about bandwidth. Higher the resistor value, slower the PWM signal changes levels, which means less high frequency components. Btw, I will edit the resistor value today. \$\endgroup\$
    – C K
    Commented Feb 8, 2017 at 5:15
  • \$\begingroup\$ @ÇetinKöktürk You're right that I don't need to adjust the PWM voltage at all. I can just keep it 5V and increase the supply voltage. I guess internally the PIC runs at a much lower voltage than the supply voltage and sees 5V as high, whatever the supply voltage. \$\endgroup\$ Commented Feb 8, 2017 at 5:32

Your schematic cannot work because MCU ground is not connected to the motor controller ground. Because of this, no current can flow from the MCU pin into Q1.

Also, V2 is connected backwards: negative terminal to Vin+ and positive terminal to Vin-.

These issues have to be resolved before any analysis on PWM signals amplitude could be done. Currently, you simply have no PWM signal.

  • \$\begingroup\$ You're right, I fixed the schematic. I actually knew that and was just sloppy as @Bruce Abbot guessed. \$\endgroup\$ Commented Feb 8, 2017 at 1:45

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.