spark controller dropping voltage in reverse

We are using spark controllers to run CIM motors is our shooter. However, output voltage drops below 3V through the spark when operated in reverse. What could cause this?

Is the Spark calibrated?

Please confirm that you are using a DVM to measure the output of the motor controller. It seems from your post that you feel the output voltage of the motor controller should be larger.

Have you calibrated your motor controllers yet?

Do a quick check and substitute another SPARK and see if the result is the same. Substitute a PWM motor controller of a different type. If they all do the same thing (low output voltage), you should probably take a very close look at your software, going line by line. You will have to put aside what you THINK the software SHOULD be doing and look at what it really IS doing.

Through the magic of PWM, you should always get a voltage on the output of a DC motor controller that is between zero and your instantaneous battery voltage. The polarity will depend on whether you are commanding forward or reverse.

We found that measuring the voltage with a DVM on the Victor speed controllers was unreliable because of the square waveform. Ours had a similar issue where the forward voltage looked like maybe 3 volts at a low speed and the reverse voltage at the same speed looked like 0.2 volts on the DVM. Clearly the motors were moving and we actually had a mentor look at the signal on an O-scope to measure the pulse widths instead.

You can also use a DVM to measure the PWM signal command going into the motor controller.

Let’s say the PWM command is 5ms period, 1.5ms pulse width, and 3V pulse height (see note below).

If your DVM is set to measure average DC you should get a reading of 1.5/5*3 = 0.9 volts


When commanded by a roboRIO PWM output, the pulse height at the motor controller inputs will vary from ~1.7 volts to ~4.8 volts, depending on the type of motor controller (the load is different). Here are the rough calculated pulse voltage and mA numbers based on info I’ve been able to gather and test so far:

Vic888 = 1.7V 10mA; Spark = 2.6V 7mA; VicSP = 4.8V 0.6mA;

If anyone would be willing to scope the waveform on the PWM input terminals of the above motor controllers (while being commanded by roboRIO) to confirm (or correct) these numbers it would be appreciated.

What model DVM were you using, and what setting (i.e. DC or AC, average or RMS etc) ?

I don’t recall for sure the models but we tried a couple of different meters. I think one was a Fluke. While it was measuring you could see that it was trying to “lock onto” the signal somehow (showed moving bars constantly) and it wasn’t doing a good job averaging the voltage I suspect. Could be that we didn’t have all the right modes selected as it seemed like “average voltage” should be possible somehow.

Sorry to hear you’re having trouble fmercier!

Could you describe what the status LED is indicating when you go into reverse? For example, are you commanding full reverse, seeing a solid red LED, but still not getting full voltage out of the SPARK?

If the LED is blinking red in reverse, the SPARK may not be receiving a full reverse pulse, or as other have stated it may not be calibrated to your pulse range.

The SPARK shouldn’t need calibration out of the box to operate with the roboRIO PWM ports. The first thing I would try is resetting the SPARK to the factory defaults by:

  1. With power off, press and hold the mode button.
  2. Turn power on while still holding the mode button.
  3. The SPARK should blink white and green indicating a successful reset.

If you still need to calibrate to a different pulse range, the instructions are listed in both the SPARK Quick Start Guide and the SPARK User’s Manual.

Please let us know how your troubleshooting goes. Feel free to send me a private message or send us an email through our website

With a cheap $3 DVM from Harbor Freight I am able to accurately measure the PWM signal voltage and the PWM output voltage. So I would imagine your Fluke (a very reputable brand) ought to have a way to do the same.

Cheap DVMs use averaging; expensive are selectable averaging or true RMS.

Cheap DVMs on AC scale use a diode to rectify the signal, average the rectified half wave, and then multiply that by some fudge factor (based on an assumed sine waveform). It works OK for sine waves but gives nonsense readings for square waves or PWM.

Expensive DVMs (your Fluke might be one such) with true RMS do not assume a sine wave, do not throw half the wave away by rectifying, and can measure the actual rms value of any periodic AC waveform (within reason).

If you have one of those $3 Harbor Freight DVMs and a battery, you can see this in action:

  1. using the DC mode, measure the battery voltage and write it down.

  2. using the AC mode, measure the battery voltage (with red lead to +) and write it down.

  3. using the AC mode, measure the battery voltage (with black lead to +) and write it down.

If the voltage in (3) is zero, you very likely have a “average of half-wave rectification multiplied by fudge factor” meter, and you probably got a reading in (2) of about 28 volts !!

Now let’s do some math to see why.

The true RMS of a sine wave is peak/sqrt(2)

The half-wave-rectified average of a sine wave is peak/pi

The ratio is the fudge factor: f = (peak/sqrt(2)) / (peak/pi) = pi/sqrt(2) = ~2.2

So a AC voltage in (2) will be approx DC*2.2


Thanks for all the comments.
We have reset the Spark. LED still has intermittent blinking in reverse. The actual motor speed is slow, matching the low output signal. Per our program, we are sending a value “1” for forward and “-1” for reverse. The result is the same with a second Spark. We have also tried a jaguar, and the drop off is less, but there is still a clear difference between forward and reverse. ???

Do you have, or can you borrow, a DVM to measure the PWM signal at the Spark’s PWM input terminals when you are commanding forward and reverse? See posts 9 and 10 below.

If it is doing the same thing on a different SPARK, I am not suspecting that there might be something else wrong with your setup.

Here are a few things to try.

  • Check that your battery is fully charged
  • Change your PWM cable
  • Change the port your PWM cable is plugged into on the roboRIO
  • Ensure that your power wires are secured to the SPARK and your Power distribution board.

Please let me know if you need additional help, send me a PM or email me at Contact [at] REVrobotics [dot] com

We need to know how you are generating the full reverse throttle. If you are simply using a joystick then you have to calibrate to that joystick. If you are using a code generated full throttle reverse then I would double check your code.
What color is your controller blinking? There is a whole list of possibilities if you examine the manual. If it is blinking Red then that is an indication that you are not at full throttle but are commanding a reverse proportional output. That sounds like what you describe. The full on LED Green would indicate a full throttle forward output.

I’m going to make a wild guess that you’re using buttons to run the shooter motor. One button runs the motor forward when pressed, and stops it when released. The other button runs the motor in reverse when pressed, and stops it when released. Is this what you’re doing?

If so, you need to change it. Have one button run the motor forward. Have the other button run it in reverse. Stop the motor only when neither button is pressed.