0
\$\begingroup\$

I am trying to run a robot with two wheels using two identical stepper motors and step drives. The motors are Nema 34 and the step drives are RMS R710 Step Drive. The problem I am running into is that while one side works perfectly (or at least without any noticeable issues), the other side starts stalling after running for a while (usually around the 5000 step mark).

I am using an Arduino Uno to send the step and direction signal using the Stepper library, and the drivers are powered by a 24 V battery. The resistor on the drive is appropriate for the current required by the motor.

I have tried everything I can think of to pinpoint the problem, but I ran out of ideas. I have swapped the drivers and the pin connections. I have also used another motor in place of the stalling one, and it still runs into the same problem. It does not make sense for one of the identical sides to be running fine and the other side having issues.

What could the problem be? What else can I try out to see if it solves the issue?

\$\endgroup\$
7
  • \$\begingroup\$ Is it still receiving the driving signals? Do you have any gears? \$\endgroup\$
    – Eugene Sh.
    Aug 9, 2017 at 15:07
  • \$\begingroup\$ It does not have any gears. There are wheels mounted on the motor shaft, but also I can see that the shaft is having difficulty turning. The wheels are not touching the ground, they are suspended in air at the moment so I can see what is going on. It is receiving the signals, and I have checked with an oscilloscope the step signal of the drive. It is a square wave with 6ms for each cycle. \$\endgroup\$
    – Burcu K
    Aug 9, 2017 at 15:21
  • 2
    \$\begingroup\$ Definitely. Steppers don't like to jump right to high rates of steps. If you think of how they work, you will see why. \$\endgroup\$
    – Eugene Sh.
    Aug 9, 2017 at 15:30
  • 1
    \$\begingroup\$ I agree with @EugeneSh. however, even a great profile will not help you in a variable load situation. You really need encoders for that. \$\endgroup\$
    – Trevor_G
    Aug 9, 2017 at 15:31
  • 1
    \$\begingroup\$ @Trevor I agree. Feedback is needed for such an application. \$\endgroup\$
    – Eugene Sh.
    Aug 9, 2017 at 15:32

1 Answer 1

2
\$\begingroup\$

Ok, first of all there is no such thing as identical anything. Each motor will have it's own set of torque and friction and inductance characteristics. Further, whatever you are driving on each side will also differ in terms of the load applied to the motor. Further still, with open loop systems, two motors can actually interfere with each other mechanically.

You could try switching motors from either side and see if the problem follows the motor, i.e. it stays on the same side. If it's the latter then I would be investigating what is different about the loads on that side.

However, in general, driving stepper motors without commutational feedback is actually a rather unreliable thing to attempt especially at any considerable speed. The phase angle at which you step the motors is crucial to dictating whether your motor will accelerate, run, or just stall. This is problematic is a fixed load scenario, and is critical in a variable load application.. like a robot.

enter image description here

The image above shows you how the shaft torque varies depending on it's position relative to the selected phase coil. As you can see the torque is sinusoidal and zero when the shaft and selected coil are aligned. When driving a stepper motor you want to maintain the torque somewhere in the peak section. For maximum acceleration you want to switch phases when the shaft reaches half a step away from the selected phase position. At that point, then next phase will be 1.5 steps away and the torque will grow on the other side of the peak.

If you switch phases too early you will actually apply negative torque which of course slows the motor and everything gets out of phase, the torque becomes directionally random, and the shaft will stall and just sit there screaming at you.

In order to get steppers to work reliably, you either use a phase stepping time profile which is calculated based on the measured acceleration profile of the system, or you use positional feedback generated by an encoder which has the same, or multiple, pulses per rev as the stepper motor has steps.

The acceleration profile method tends to be more problematic since you have to figure out a profile for the best AND worst case loads and those loads need to be relatively constant. Often best and worst case are so different that a common step profile is impossible to obtain. The encoder method is much more reliable but does of course add extra complexity and cost to the system.

Encoders can vary in cost depending on your requirements, especially if they need to be hermetically sealed. If your stepper motors are low steps per revolution, a do it your-self "slotted" wheel and optical, or magnetic interrupter is also an option.

Your are describing a robot application which will, presumably, have high load variability. As such, you really need rotary encoders on each motor adjusted to give you the best phase angles and torque so you can control each motor appropriately.

enter image description here

If you ARE using phase angle feedback already and it's still stalling, either you have a software or feedback issue, or the load is simply too much for the motor. It is unlikely to be a driver issue.

ADDITION: Since you are using two motors to drive this robot along, even with shaft encoders, you will need some clever control algorithms to keep both motors in synch so the thing drives in a straight line.

This usually entails monitoring the speed of each motor on a step by step basis and "braking" or "idling" one motor while the other one catches up. More complex torque/current control methods are also possible that will provide smoother operation at the cost of slower response time. Which is best for your particular application is of course at your discretion.

It is normal to also include acceleration and deceleration profiles as an upper control layer here too. The encoder feedback system gives you the maximum acceleration and deceleration possible with the load setup, you then use the profiles to modulate those forces to de-rate the acceleration curves into a controlled subset. That way you can accurately stop your robot at a required step position.

\$\endgroup\$
6
  • \$\begingroup\$ I meant identical in the sense that they have the same brand, type and specs for the lack of a better word (English problems, I apologize). I could not switch the motors around because they are mounted but I swapped the drivers they are connected to. The same side is still stalling. \$\endgroup\$
    – Burcu K
    Aug 9, 2017 at 15:24
  • \$\begingroup\$ @BurcuK yes I realized that but I had to mention it because the reason for the stall could be anything, and least likely is the driver. Bottom line though, if you are driving it open loop then you are setting yourself up for a nightmare of weird phenomenon. Your max reliable speed will also be severely limited. \$\endgroup\$
    – Trevor_G
    Aug 9, 2017 at 15:29
  • \$\begingroup\$ Is there any current limit feature. Did you try that? \$\endgroup\$
    – CNA
    Aug 9, 2017 at 15:30
  • 1
    \$\begingroup\$ @Trevor I am looking into converting to closed loop but I will not be able to try that for a few days unfortunately. I was almost sure the drivers were fine but it's good to know that it's not likely that the problem was there. \$\endgroup\$
    – Burcu K
    Aug 9, 2017 at 15:37
  • \$\begingroup\$ @Dhans I have the appropriate resistor connected on the driver for the current control \$\endgroup\$
    – Burcu K
    Aug 9, 2017 at 15:38

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.