Motor - Unwanted Regeneration Causing Voltage Spikes


I recently purchased two motor drivers:

-Arduino Motor Driver Shield 24v14 G2

-Motor Driver 36v20 CS

I have only used the Arduino shield driver so far. I am using it to drive a large brushed servo motor using a table-top switching power supply. I have tested the motor driver by setting the voltage of the power supply anywhere from 12-15V. I eventually want to use the driver with the power supply set to 36V.

When I use the example code provided with the Arduino shield board, there is a transient voltage spike upon deceleration, which I think is due to regeneration voltage. The spike causes the voltage to rise to 30+V at the power supply when it is set to 15V. This means I cannot use the power supply at 36V, since a voltage spike will fry the driver (maximum is 40V).

When I let the motor coast, or decelerate it slowly by increasing the delay time within the loops of the example code, it does not spike. However, in my application, acceleration in both directions is important.

The 24v14 Arduino board has spots for additional capacitors to be installed. Is there a chance adding capacitors will help?

The 36v20 board has different control options, including “drive-brake” and I am wondering if this method will still cause the voltage spikes?

Is there any other solution available? Some say a battery in parallel with the power supply will help absorb the regeneration current returning from the motor. Would this work?



The drive-brake mode is already used by the 24v14 G2 shield you have. The 36v20 board additionally has a drive-coast mode that would likely avoid the regenerative current issue, though that approach also usually gives you worse control than the drive-brake approach. Since you already have it, you should try it to see if it gives you acceptable results.

We would generally not recommend a driver with a 40V max for your 36V nominal system, anyway.

The approach that will probably be best is to use the higher-voltage driver and then to solve for your regenerative voltage spike problem. It probably won’t be practical to put on capacitors big enough to handle the energy from your motor. If you can get a lead-acid battery on there, that would likely be best and simplest, though you will still have to think about issues like what happens when you turn your power supply on and off. If that doesn’t work for you, the problem will probably be a lot harder to handle, and you will likely need to do some calculations or measurements of how much mechanical energy you need to dissipate when you are decelerating in order to properly size whatever energy dissipation system you use.

- Jan

Okay, so I tested the Arduino shield and it is working well enough for our system even with only 30V nominal. However, if it’s possible I’d like to get the 36v20 board to work.

To solve the regeneration issue, I put a DC electronic load in parallel with the supply, and it draws 150W of power when I operate the system. I do not see a spike in the voltage anymore.

I could not get the 36v20 to work, even though the wiring, assembly and code seems simple enough. I connected it as follows
Motor Side:
V+ to 30V positive
OutA to motor
OutB to motor
GND to Power supply ground

Control Side:
PWMH to Arduino pwm pin analog output
DIR to Arduino digital output pin
GND to Arduino Ground
All other connections left disconnected

My code was very simple, the DIR was held low and the PWMH was held at 255. I also tried other duty cycle values from 0 to 255, and a loop to vary the values, and I also tried adjusting the Arduino pwm frequency to higher frequencies. However none of it worked, all resulted in the following behavior. I was able to verify the PWM signal is correct using lab view and another data acquisition unit.

The driver draws 0.06A when powered on with an external power supply and the output motor disconnected, and I get a constant 6.3V output voltage reading on my multimeter regardless of the PWMH signal or DIR signal. With the motor connected it drops to 0V. Checking the fault flag indicators it appears both are high, if I reset by shorting the reset pin to GND the driver draws less amps until after I stop shorting the reset pin, but immediately both are high.

Checking the fault table with both fault flags high it appears there is an under voltage condition, but the power supply can supply 30V and 20A so this doesn’t make sense to me. I also tried another power supply. These supplies work with the other driver.

I also tried resetting the pin programmatically with the Arduino using another digital output, holding the pin output low for 5 seconds and then holding the pin high, but it does not work that way either. However on the power supply shows the drop in current draw when the reset pin is held low, indicating the reset is being correctly done.

I used both capacitors that came with the driver and thought maybe the capacitors were incorrectly wired but I double checked the polarity, and even tried removing them completely and just testing the output with a multimeter and still no luck getting the driver to output what I expect.

I checked all of the solder joints and the reset pin reads 6-7V, FF1 and FF2 read 4V usually, the 5V output reads 5V, ground is connected to the Arduino Ground and all other grounds on the board are connected, all V+ pins were connected and all read 30V when compared to ground (power supply voltage). All of it seems to be fine. I even checked the legs of the capacitor to make sure there was a voltage drop across them before removing and they were seeing the 30V. Checking the voltage drop of any V+ pin on the board against ground shows the 30V from the power supply, so an under voltage condition doesn’t make sense.

If there seems to be something obviously wrong with the setup here then please let me know, otherwise as I am approaching a deadline I will continue to use the Arduino shield driver instead, but disappointed in the 36v20 driver.


I will let the usual tech support staff address your problems with the 36v20 board. Regarding your load setup, the 150W seems really high. It sounds like you might have it on constantly (maybe doing something where it kicks in only when the voltage gets higher is not practical). Ideally, you would do something like set your supply to 30V and then have the load kick in only if the voltage exceeds something like 33V.

We have these fairly new shunt regulators for this kind of application:

However, they would definitely not be large enough if your system actually requires dissipating 150W of regenerated power.

- Jan


I do not see anything wrong with the connections you described. If you are seeing both fault lines go high on the 36v20 motor driver, the most likely explanation is that your motor is drawing more current than the supply can handle. Could you look at the power supply voltage with an oscilloscope? Could you post a picture of your motor and a link to a datasheet or product page for it?

When you switch between using the 36v20 and 24v14 does everything else in the system stay exactly the same? Do you have a smaller motor you can try?