Suggestions on filtering DC Motor noise?

Hey Everyone,

Thanks in advance for any help offered, as I have been pulling my hair out a bit on this problem.

I am currently working on a mobile project using a 6,000 ma/h 3.3v lipo power source, a funnel I/O arduino, and the arduino motor shield found here. http://www.arduino.cc/en/Main/ArduinoMotorShield

I'm also using a couple really small blue servos (trying to remember where I got them) to move a ping sensor.

I know the Motor shield needs a +5v source to power the controlling chips on it, and the ping sensor requires +5v for it's power needs. To solve this problem I pulled the circuit board off of a spark fun 2xAA to 5 volt step up dc to dc adapter and wired it up to my 3.3 volt line. (http://www.sparkfun.com/commerce/product_info.php?products_id=8249)

Everything seems to be working just fine, but when I tell the Funnel I/O to drive the motor shield, I get a huge amount of noise on my 3.3v/ground line which causes the servos to jitter all over the place.

(At least I believe that's the problem. I disconnected the signal wire to the servos, and the motor noise still caused the servos to jitter a lot).

I have tried a couple things trying to filter the noise, but must admit, I'm just not experienced enough to know how to proceed. I'm open to any and all ideas. The motors are the same from the spark fun dual motor gearbox kit found here: http://www.sparkfun.com/commerce/product_info.php?products_id=319

Any thoughts, suggestions? I'm not at the project right now, but will be happy to post pictures, or answer any questions.

Thanks,

-Chris G.

I have tried a couple things trying to filter the noise, but must admit, I'm just not experienced enough to know how to proceed.

What have you tried?

I'm going to guess that the right value of capacitor, in parallel with the motor, should do it. I just know that Grumpy_Mike is going to jump in with his helpful links to decoupling tips and techniques.

Go figure after hitting the post button, I stumble upon Grumpy Mike's motor and de-coupling page. I will read it again when I'm next to the project and double check some of the things I've tried. (Motors 1)

What I tried:

I thought that maybe the the Funnel I/O was getting the noise due to it's input on the 3.3v feed. So I added a 100uF electrolytic capacitor right before it's power connection, no change.

I then thought, maybe I need to put it closer to the servo power connections to help filter the noise from there. Still no change.

I'm pretty sure my thinking was that if the shield already had 100nF ceramic capacitors on the output lines to the motor, that one probably wasn't needed on the motor itself. Not wanting to rip apart the whole project to access the motors (Yeah, I know, I will have to do this anyway) I held a 100nF ceramic capacitor on the terminals of the motor to see if it helped in any way. No change, but again, that could be due to poor contact.

I did notice another symptom that I didn't post earlier. The amount of noise seems to be really high at the motor start and motor stop transitions. Things stabilize out once the motor is up to speed or at a stop. My hunch tells me I need to add a ceramic capacitor to the motor terminals, but I'm still a bit confused as to the sizing. If I have a large 100uF capacitor on the power bus to the Funnel I/O, (And another one for each chip on the motor shield). Do I go with a small .1 uF capacitor on the motor?

Thanks again for the help!

-Chris G.

Not sure your DC/DC converter can deliver enough current to power the system.
The DC/DC can deliver at max 200mA (as seen on Sparkfun's site). How much current does your servo need?

If the system needs too much current the 5V could decrease to 4V or perhaps less. This could leads to unpredictable behaviour.

If I have a large 100uF capacitor on the power bus to the Funnel I/O, (And another one for each chip on the motor shield). Do I go with a small .1 uF capacitor on the motor?

You need a combination of large and small capacitors, plus maybe even inductors.

Good news, taking everything apart, and putting some 10nf cermaic capacitors on the motors cleared the jitter problem I was running into. I should have been more careful in my earlier testing. With that said let me answer some of the questions.

The DC/DC can deliver at max 200mA (as seen on Sparkfun's site). How much current does your servo need?
If the system needs too much current the 5V could decrease to 4V or perhaps less. This could leads to unpredictable behaviour.

To clarify, I'm not running the motors with the 5V DC/DC adapter. The motor shield has 5V to power the chips (SN754410NE and SN74HC00N) and a second voltage input to pass along to the motors.

In this case, I'm running my motors and servos at about 3.3-4.2V, and the Ping sensor and my motor shield control chips on the 200ma 5V bus.

Grumpy Mike, Thanks first for your great motor and de-coupling pages. They helped quite a bit once I found them. Right now everything is working pretty good. I did have a little noise trouble on my signal lines to the servos when I ran the wires on my circuit board. I will sort that out but for now I am using some jumper cables to keep things away from the noisy wires.

As promised, I have a couple pictures of my "yet another tank based first robot".

Thanks everyone for your help. Any suggestions or ideas would be great.

-Chris G.

Use a scope! Otherwise it is very difficult to see whats wrong.

The Lipo should have no problem to deliver much current. I never have got so many protection diodes so fast and easily bringing me fire and thunder than with a LiPo! LiPo´s you should always use with respect!

My first tip: the DC/DC converter get´s down when the servos suck current. You can see that only with a scope easily.
Get a boost converter with a higher current rating. You have to look for that at linear.com or some other factory ...
like a LT 1072 delivers enough current 1.25A for example. You have to read the datasheets for a decision. For the circuit there are also design manuals for many chips at linear available, where EVERYTHING is explained in depth. In 90% percent of our needs we can use the example circuit. Use the right inductor and diode if needed!!!
What frequeny does your booster work with? Take one with an higher frequency. Add a ripple filter. Look for that in the data sheet of the chip.

2nd: The servos are crap?

3rd: Take care of your analog(motor) and your digital power ground! Split them close to the power connector into the digital and the analog ground. Avoid a ground circle. Only one connection point for them. Don´t take the power directly from the Arduino board.
Avoid tantalums at the analog lines, make that ground cable fatter, for your servos they have not to be too fat. But for a performance stepper you can take 1mm up or so. Thats for the current to flow without restriction.
Than i would try to put 2 bigger elcos between ground and V+ (470u - 2200u 10V), one in the analog line and one into the digital line close to their circuits - mainly as a power reservoir but also for smoothing power. Ad also a 100n cerco, mainly for getting rid of higher frequency disturbation. You can try to add also additionally two 1u - 10u cercos or small elcos. But no condensator at your PWM line!

4th: Twirl flying cables together. - Better noise immunity in absorbation and radiation.

5th: Get a 2Cell Lipo! (7.4V or so), it the easiest way to get rid of the DCDC Problem, you may have to add an additonal low drop voltage regulator for the servos - aren´t servos to use with 6V?? - , but thats easier than the boost converter. BUT: the efficiency is worse, depends how good your usage of the batteries has to be. The "overvoltage" will become mainly heat. A boost converter is more efficient there.

I know thats not easy, i have a similar problem with a 297/298 stepper controller where i have to get 30 to 40V for the motor. Thats one of my playgrounds at the moment where i learn a bit of DCDC converters, motors and LiPo.

good luck!

I have a somewhat similar problem. I'm using an arduino to control a large linear actuator off a car battery.

On grumpy's site, he suggests using a choke along with large capcitors on the motor leads. Could I add a choke to both lines, as I am using two relays to control which motor lead sees power (normaly both are tied to ground), similar to the last circuit seen at grumpy's motor tutorial page.

Also, when I have put large cremaic caps on the motor leads, they explode quite spectaculary even though they are susposdly rated for higher voltages than I am giving the motor (12v dc). Should I just up the voltage rating on the caps or is this indicating some other problem?

The little .01 uF cap I have on the motor leads has not exploded, just the 220 and 47uf caps.

Edit: Another bit of info, with the motor not actualy connected, the circuit works without fail, so I am pretty certain it is the nosie generated by the motor causing the issue.

they explode quite spectaculary

Yes a motor when it is running generates noise that can be in the region of several hundreds of volts even though you are only feeding it with 12V. So I would up the rating, better yet get a scope and measure what it is and then apply at least double what you see.

Could I add a choke to both lines,

If you mean the positive and the negative then I wouldn't. However if you mean one choke to drive one motor and another choke to drive the other one then yes this is a good idea.

just the 220 and 47uf caps.

These are polarised capacitors so make sure there is a diode across the motor to take out the back EMF otherwise you are reverse polarising the capacitor. The other point is that if it is a big motor then you might be exceeding the ripple current rating of the capacitor, that is a very good way to make them explode.