April 28 2016
While testing the motor wiring ({THREAD_LINK:1447}) I realized there was no filter on the power lines, which caused big problems. I am adding two caps to filter the noise, a big 100uF radial can for the big spikes and a smaller 10uF SMT for the smaller ones.
These parts are being borrowed from the CtrlMtr design.
PartID | Name | Mnf | MnfID | DigikeyID | Description |
---|---|---|---|---|---|
14 | CAP-1206-10uF | Murata | CL31A106KAHNNNE | 1276-1075-1-ND | 10µF ±10% 25V X5R CER CAP 1206 |
15 | CAP-R10-5-TH | Susumu | UPX1E101MPD1TD | 493-3190-ND | CAP ALUM 100uF 20% 25V RADIAL |
I copied the pattern and component for the CAP-R10-5-TH to the EZ430 library, then to the JumpMtr01 library. I added the caps to the X sheet, attached to the motor power connector.
The radial cap is a big part and required bumping the board outline a bit to accommodate it. The board grew from 2x2.7" to 2x2.9".
I found some 100uF radial caps, so I can do some experimenting. Here are pictures of the MTR_STEP_X control signal from the MSP430 to the A3967: without caps, with 1 100uF cap, and with 2 100uF caps in parallel.
See {THREAD_LINK:1446} for a picture of the motor output line.
This smooths out the small spikes and magnifies the large ones, which may be even worse than before.
I need to see how many microsteps are actually making it to the motor. The problem is that if I slow everything down to 1 step per second the steps are too small to reliably notice. I need to speed it up to a theoretical 1 revolution every 10 seconds, then measure how long it actually takes. There are 200 steps per revolution, so 10s/rev * 1rev/200steps= 10s/200steps= 50ms per step. 0.05s * 32768 cycles/s= 1638 cycles per step. This turned out to be an actual 65ms, so I zeroed in on 1260 (25.2 cycles per ms). Each delay is a half step, so I need to use 630 as my actual delay.
Now I can very clearly see that the microstepping is happening very sporadically, in fits. It took roughly 80 seconds for a revolution. ...Which is actually correct since I am microstepping in 1/8th mode! There are 200*8 microsteps per revolution. The microstepping mode may be working, but I am expecting smoother action. Maybe the "glitchy" action is only when stepping very slowly.
I sped up to 5.8ms per step, which should translate to 1600*5.8ms= 9.28 seconds per revolution. My stopwatch says 9.16.
Interestingly, the motor continues to run in microstepping mode without any caps. It seems the microstepping problem was strictly due to the MTR_DIR_X pin being unconfigured.
After discussing the noise problem with Bruce, I have some changes that might help reduce the noise. There is also a fairly good chance the ground plane (omitted in the JumpMtr prototype to reduce cost) will make a big difference.
Other things to research include adding a "snubber (snubbing) circuit", adding an inline resistor to the motor output lines (to disrupt any resonance from the inducting coils).
It may be worth the $20 to buy a genuine EasyDriver from SparkFun for comparison.
After all this, an off-hand remark from Bruce has me thinking this may be a simple case of operator error -- I may have been over-driving the motor by running it at 7V. I looked up the specification for the motor at StepperOnline and found it is actually a 5V motor, not the 12V I had been assuming.
When I turned the power supply down to 3V the noise was reduced to an acceptable level. I'm lucky I didn't burn out the motor.