new here. I have a question regarding sending a PWM signal to a brushless motor ESC using a 555 timer. I'm using an Arduino Uno to control it currently, but I'd like to simplify my setup. I have an underwater thruster that I only care to run on/off at a constant set speed, and I'm currently accomplishing thus using the Arduino servo library to send a 2ms fixed pulse width @ 50hz (10% duty cycle). I've seen schematics on other posts here using a 555, an assortment of parts, and a potentiometer to modulate pulse width. Does anyone know how a schematic would look to accomplish what I'm currently doing, but with a 555 timer? Any and all help is greatly appreciated.

  • \$\begingroup\$ Am I correct in thinking you want to make a 555 oscillator with variable pulse width (duty cycle) controlled by a potentiometer and a frequency of 50Hz? Is the 50Hz critical, or could it vary with the duty cycle? I also presume that the output of the timer drives some sort of power transistor and thence the motor. Have you considered just using the potentiometer to vary the output voltage (or current) of the power device directly and do away with the variable duty cycle. Why are you going from analogue (the potentiometer) to digital (the 555) and back to analogue (the motor)? \$\endgroup\$ Commented Mar 23, 2022 at 0:30
  • \$\begingroup\$ Google 555 servo tester and you'll find plenty of beginner-oriented writeups. All you need is something like 1-2ms pulse width at around 50Hz. \$\endgroup\$ Commented Mar 23, 2022 at 0:30
  • \$\begingroup\$ @PeterJennings my intent is to send a PWM signal to an electronic speed controller for a brushless 3-phase motor. That's the only way those can run off DC. I don't want my setup to include a potentiometer (which is the only thing I've seen with tutorials I've found) since those are used to modulate the pulse width which in turn controls the speed that the ESC is spinning the motor at, and I want the same fixed pulse width that I'm currently getting using the Arduino. \$\endgroup\$ Commented Mar 23, 2022 at 0:37
  • \$\begingroup\$ Additionally, the 50hz freq is critical since that's what ESCs operate at. \$\endgroup\$ Commented Mar 23, 2022 at 0:42
  • \$\begingroup\$ by the way, I'm not convinced removing the microcontroller and keeping the 555 is what I'd call the most simplified version of your circuit – for this job, your microcontroller plus a single decoupling capacitor would do, for a 555-based solution the 555 plus seven or eight (GodJihyo's answer is missing the decoupling cap you'd want on VCC) component solution is necessary, which is way more complex. \$\endgroup\$ Commented Mar 23, 2022 at 6:30

2 Answers 2


If all you need is a 2 mS pulse every 20 mS you could use the standard 555 astable multivibrator circuit and calculate the timing capacitor and resistor values to do that.

555 astable multivibrators image from wikipedia

With a 0.1uF capacitor R1 works out to 230880 ohms and R2 is 28860.

The formula for the pulse with is Tpulse / (0.693 * C1)
R2 = 0.002 / (0.693 * 0.1E-6) = 28860

For the total cycle time it's (Tcycle / (0.693 * C1)) - (2 * R2)
R1 = (0.02 / (0.693 * 0.1E-6)) - 57720 = 230880

You can use standard resistors that are close to those values with something like a 10 turn pot in series with each one to trim the values to what you need.

This will give you an output where the 2 mS pulses are negative going, so you will need to invert the output if you want positive going pulses. I have added a transistor inverter on the output of the 555 as a basic example, but you would need to design something that would give you the correct polarity and signal level necessary to drive your ESC.

Circuit in LTspice with inverted output: enter image description here

  • \$\begingroup\$ Thank you so much! I'll give it a shot and see what happens. \$\endgroup\$ Commented Mar 23, 2022 at 2:48
  • \$\begingroup\$ @JosephAtilano Please note I have made some edits to my answer regarding the interfacing of the 555 to the ESC. \$\endgroup\$
    – GodJihyo
    Commented Mar 23, 2022 at 13:33
  • \$\begingroup\$ Caught that. Thanks! \$\endgroup\$ Commented Mar 23, 2022 at 21:24

There is a problem with the answer posted by GodJihyo.

Q1 probably will be on continuously, never pulsing. The upper half of the NE555 output stage is a Darlington pair. This cannot pull up to the positive rail close enough to turn off Q1. Per the datasheet, the minimum output headroom is 0.9 V, more than enough to keep Q1 on during the high portions of the output cycles.

Separate from that, if you set R1 and R5 to the nearest standard 1% tolerance (E-96) values, the output waveform changes from 90% to 90.08%.

Your current system has a mark/space ratio of 9. You don't say what kind of adjustment range you want on the output pulse width, and there are several ways to modify the circuit for this. The most simple is to replace R5 with two resistors in series, one fixed and one variable. For example, a 24K 5% resistor combined with a 10K pot gives a mark/space ratio adjustment range of from 7.824 to 10.67. In terms of the percentage change from what you have now, the range is -13% to +18%.

The tradeoff is that the overall frequency no longer is fixed. The frequency will not change as much as the ON pulse width, varying from -4% to +3%. There are other circuit options that vary the mark/space ratio while holding the frequency closer to constant.

  • \$\begingroup\$ LTspice needs to fix their 555 model.. apparently. I changed it to an NPN, hopefully that's a better example circuit. Obviously the load is going to dictate the interface between the 555 and itself, it could be a mosfet or a logic gate, or whatever. If you're going to want to vary the on/off ratio without affecting frequency it will need to be more complicated, but the OP did say it was to be fixed so I based my answer on that. \$\endgroup\$
    – GodJihyo
    Commented Mar 23, 2022 at 5:29
  • \$\begingroup\$ I don't know what a "brushless motor ESC" is, so my assumption is that your output transistor is driving the motor directly. Either transistor polarity will work, but a PNP would keep the turn-off transient current surges off of the power rail. \$\endgroup\$
    – AnalogKid
    Commented Mar 23, 2022 at 13:06
  • \$\begingroup\$ Electronic Speed Controller. It controls the speed of a motor based on the width of the pulses supplied to it. A 1 mS pulse is the lowest speed, 2 mS is the highest, and the pulse repetition rate is usually 50 Hz. It should just need a logic level signal, the OP said they are currently using an Arduino to generate the pulses. With the 555 circuit they will need to come up with a circuit to match the output level and polarity to what the ESC input takes. \$\endgroup\$
    – GodJihyo
    Commented Mar 23, 2022 at 13:23
  • 1
    \$\begingroup\$ In that case, an open-collector NPN gets you the correct output polarity plus logic level conversion in one part. \$\endgroup\$
    – AnalogKid
    Commented Mar 23, 2022 at 13:37

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.