dev.nlited.com

>>

Signal Noise Filter

<<<< prev
next >>>>

2016-04-29 04:31:21 chip Page 1679 📢 PUBLIC

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.

PartIDNameMnfMnfIDDigikeyIDDescription
14CAP-1206-10uFMurataCL31A106KAHNNNE1276-1075-1-ND10µF ±10% 25V X5R CER CAP 1206
15CAP-R10-5-THSusumuUPX1E101MPD1TD493-3190-NDCAP 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".

Adding the filter caps to the motor power line. Added filter caps to JumpMtr layout. JumpMtr layout with caps.

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.

MTR_STEP_X no caps MTR_STEP_X 1 100uF cap. MTR_STEP_X with 2 100uF caps.

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.

And the Real Culprit...

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.

NEMA-8 motor specifications.

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.



WebV7 (C)2018 nlited | Rendered by tikope in 145.378ms | 3.15.145.214