DRV8825: FAULT always low - why?

Hello,

I have bought this purple RDV8825 bipolar stepper motor controller board (pololu.com/product/2132), and I am having some problems using it. Perhaps I can get some help on these forums? Here’s the story. I’ve placed the driver into a breadboard, and connected the pins like so:

  • ENABLE: Disconnected
  • M0, M1, M2: Connected to three microcontroller output pins
  • RESET: Connected to Vcc (+5VDC)
  • SLEEP: Connected to Vcc (+5VDC)
  • STEP: Connected to microcontroller PWM output
  • DIR: Disconnected
  • VMOT: Connected to +12VDC, has a 0.1 uF decoupling cap, and another 100 uF, 63V closeby.
  • GND: Gnd
  • B2, B1, A1, A2: Connected to a bipolar stepper motor
  • FAULT: Has a 0.1 uF decoupling cap to GND, otherwise connected to oscilloscope
  • GND: Gnd

The microcontroller is configured to output a waveform equivalent to that of a 50% duty cycle PWM whose frequency can be changed at will. I’ve tested this setup, and oscilloscope confirms that a proper waveform is being generated. Now here’s something I don’t understand. Whenever I power on the board, the stepper motor will spin with appropriate frequency, but the FAULT pin will always show LOW signal and I have no idea why. I’ve tried to replace/reposition the caps, I’ve even swapped the stepper motor for another bipolar one with a lower coil resistance. I’ve tried to change microstepping, and I’ve changed the frequency. While all these changes worked for the motor, the FAULT pin was logic LOW all the time. The board was connected to a laboratory power supply, and the +12VDC voltage near the board had no dropouts or spikes according to the oscilloscope.

Here are the datasheets for my two stepper motors (both work fine, but the FAULT pin stays low all the time):
sparkfun.com/datasheets/Robo … 011-25.pdf
phidgets.com/documentation/P … asheet.pdf

So why is the FAULT low? According to the DRV8825 datasheed this scenario means that there is something wrong with the controller chip. It’s not overvoltage, and it can’t be overheating (board chip was cool to the touch). From the looks of the board schematics I understand the FAULT pin has a 10K resistor connected to the SLEEP pin. So since this SLEEP pin needs to be pulled high for the driver to work I assumed no other pullup resistors were needed on the FAULT pin. I even disconnected the STEP pin from the uController (motor stopped) and reconnected it (motor started spinning again), I tried raising the power supply voltage to 18V, I changed the driver board current limit (300 to 800 mAmps). Nothing worked, FAULT stayed low the entire time.

Either I’m missing something dumb or the board is acting strange. Any ideas?

Hello.

Could you clarify which DRV8825 stepper motor carrier you have, the original md20a or the newer md20b version? The original version does not have a resistor between the sleep and fault lines.

- Jeremy

Thank you very much for your reply.

I had no idea there were multiple versions of this board. I literally typed the “DRV8825” into google, and found this page among the first results, so I followed the guide. By the looks of it my board is missing the pullup resistor next to the driver IC, so it must be the md20a version. This explains the low signals I’ve been getting all the time. So it seems the solution would be to add an external pullup resistor to the FAULT pin. I knew it was something dumb! I’ll test the updated setup once I get home.

Speaking of faults, I have another question. I was trying to get my stepper motor to run smoothly, and I failed miserably. Well basically some vibrations are expected at low speeds without microstepping, but the thing was that I tried to enable various microstepping options at different rotation speeds to ease the movement. The motor spinned fine at higher RPM settings, but there was a problem at lower speeds. With microstepping set to 1/16 and even 1/32 the motor was spinning erratically at low RPM. I was expetcing to get slow continuous rotation of the shaft, but instead the motor went like several micrsteps forward at once, then stopped, then turned for several microsteps forward and stopped again, etc. It went like bzzt… sllence… bzzt… sllence… bzzt… sllence… bzzt… sllence… etc. It would seem as if the microsteps weren’t distributed evenly over the 1.8° step, but were rather groupped together. Could this be the motor non-linearity or am I using the driver in a wrong way? Should I use a higher voltage supply (18V) for a 12V rated stepper (see datasheet above)?

Also, can this driver detect resonant frequencies where the motor loses torque, and counteract it by introducing damping? I’ve seen some drivers that can do this.

Regards!

It sounds like you might not have the current limit set correctly. For the microstep modes to function correctly, the current limit must be set low enough so that current limiting gets engaged. What did you set the current limit to?

Since you are having issues at slow step speeds, I do not think raising the voltage will help, but with the current limit set correctly, you can use a higher voltage to ramp up the current faster, allowing you to achieve higher step rates. You can read more about this under the FAQs tab of the DRV8825 product page.

The DRV8825 does not have a feature for detecting resonant frequencies.

- Jeremy

Thanks for the information.

So then a CC is needed for microstepping… Okay, so suppose everything is powered on 12V, and the motor’s rated voltage is also 12V, 0.33A. I’ve connected the motor to a 12VDC supply, and measured the current - it was in the neighbourhood of the rated current. So technically by setting the current limit to the motor’s specs, the driver cannot become a constant current source. I would either have to raise the voltage or reduce the current limit. This explains why only the bigger motor had these problems, but not the smaller one. The total current consumption was about 0.67A without microsteps, and decreased down to 0.47A with certain uStep settings.

I will test this and report the findings once I get back home.

Regards!

Hello again.

I’m reporting back to let you know that your suggestion was in fact correct. Reducing the current limit on the driver board and/or increasing the power supply voltage both helped reduce the uneven rotation, and eventually eliminated it. I was going to use a 12VDC adapter to power the device I’m building, but it would seem I’m going to need a better power supply, since reducing the current isn’t an option (I lose torque).

As a final request would you be so kind to share any hints or information about detecting, reducing and/or eliminating the resonating frequencies? Since I’m driving a precision dosing pump, I’d like to run the motor at constant frequency.

Thanks.

I am glad you are getting better results, but it sounds like you might not be setting the current limit correctly. For the best performance out of your stepper motors, you should set the current limit to match the rated coil current by using one of the methods described on the product page. I recommend the method using the reference pin on the DRV8825 carrier. You can read more about this in the “Current limiting” section of the driver’s product page.

I do not have any recommendations for dealing with the resonance frequency of the stepper motor.

- Jeremy

Perhaps you’re right.

Question: If I set the current to that of the rated value, is it still recommended to increase the supply voltage beyond the rated number? I’ve watched a seminar where the person giving the speech suggested that the supply voltage be set higher than the motor rated voltage. The higher the better, but not too high (i.e. 3 to 25 times the rated voltage). Then the current limit is reduced to a safe value where the motor doesn’t overheat after a while in operation. If you can hold the motor with your hand then it’s not overheating. If not, reduce the current.

Comments?

As long as the current limit is set at or below the rated current of the stepper motor, using a higher voltage can increase the stepper motors performance.

I do not think using the temperature of the motor to set the current limit is reliable or precise. Instead, I strongly recommend setting the current limit by measuring the reference pin, as described on the product page.

- Jeremy