Massive electrical noise issues. Please help.

I am building a robotic platform that is a skid-steer drive. Each motor is 24v and loaded draws 25 amp. the motor controllers that I am using two pololu 24v23 simple motor controllers. The motor controllers are set to a pwm frequency of 21 kHz I am using serial ttl to communicate between the micro and the motor controllers. As the motors pull more current, the signal errors get worse. I also have servos and an RC receiver wired up to the micro.
when the motors are powered up the servos twitch and jump. when the motors are heavily loaded the servos do not respond at all. I have a rc switch that is plugged up to the rc and its just an rc controlled relay. again when the motors are running it will randomly turn on and off regardless off the rc signal. The rc receiver gets its power from the micro, the micro gets its power from the 12v battery. the motor controllers get their power from two 12v batteries. the servos get their power from two step down dc to dc converters (one 5v one 7v). everything shares a common ground. My question is, how do i go about removing all the electrical noise.

Physical separation is a good way to start. It definitely sounds like the high current switching from the motors is interfering with the RC receiver. Try to separate those components as much as possible.

Having a common ground for everything in a 25A system is also a possible source of trouble. If possible, I would optoisolate the motor drivers and keep the motor power supply completely separate from the micro and RC.

--
The MegaRAM shield: add 128 kilobytes of external RAM to your Arduino Mega/Mega2560

In the RC-world we often use ferrit rings on the servoleads and other leads that is connected to potentially noisy components like motors etc. to supress the noise.

It could be worth a try.

Example:

http://robotbirds.com/catalog/product_info.php?products_id=2112

That is a lot of current switching going on, you need heavy decoupling with inductors:-
http://www.thebox.myzen.co.uk/Tutorial/De-coupling.html

RuggedCircuits:
Physical separation is a good way to start. It definitely sounds like the high current switching from the motors is interfering with the RC receiver. Try to separate those components as much as possible.

Having a common ground for everything in a 25A system is also a possible source of trouble. If possible, I would optoisolate the motor drivers and keep the motor power supply completely separate from the micro and RC.

--
The MegaRAM shield: add 128 kilobytes of external RAM to your Arduino Mega/Mega2560

There is not too much that I can do about moving the components apart. I am using a 14''x 18''x 8'' steel electrical box that I am using to shield the electrical components from the environment. As for separating the grounds/power supply, I cant. I am using two 55 amp/hr batteries in series to provide the 24v that the motor controllers need. With the grounds, I don't know if I can separate them because the motor controller, RC receiver, and the servos all need to have a common ground back to the micro for the the serial and RC communication. I have a dc-dc converter that I can use to take the 24v to 7v to power the mirco and RC receiver. that way I wont be pulling 12 volts and 24 volts from the batteries at the same time. this is how i have it now( see picture)

batteries.jpg

Hmmm....that's a definitely bad way to do it :slight_smile:

I would try the DC-to-DC converter approach as long as it's an isolated converter.

--
The DIN Rail Mount kit for Arduino: quickly attach your Arduino to standard DIN rail

RuggedCircuits:
Hmmm....that's a definitely bad way to do it :slight_smile:

I would try the DC-to-DC converter approach as long as it's an isolated converter.

--
The DIN Rail Mount kit for Arduino: quickly attach your Arduino to standard DIN rail

The device that I have in mind is http://www.ti.com/lit/ds/symlink/ptn78020w.pdf

Grumpy_Mike:
That is a lot of current switching going on, you need heavy decoupling with inductors:-
http://www.thebox.myzen.co.uk/Tutorial/De-coupling.html

Each of the motor controllers have an 1000uf cap installed.

Unfortunately that's not an isolated converter.

How about the CUI VBSD2-S24-S9-SIP:

http://products.cui.com/adtemplate_child.asp?brand=v-infinity&p=678829&c=126217&catky=328060&subcatky1=248699&subcatky2=459163

It takes ~24V in and outputs 9V at up to 220mA. I don't know how much current your RC receiver takes. CUI has lots of other options though.

--
The Aussie Shield: breakout all 28 pins to quick-connect terminals

RuggedCircuits:
Unfortunately that's not an isolated converter.

How about the CUI VBSD2-S24-S9-SIP:

http://products.cui.com/adtemplate_child.asp?brand=v-infinity&p=678829&c=126217&catky=328060&subcatky1=248699&subcatky2=459163

It takes ~24V in and outputs 9V at up to 220mA. I don't know how much current your RC receiver takes. CUI has lots of other options though.

--
The Aussie Shield: breakout all 28 pins to quick-connect terminals

I dont see how having an isolated dc-dc converter would help because I would still need the common ground with the motor controller for serial ttl. Also the miro would need up to an 800 ma supply.

That's where the optoisolator would come in. If you optoisolate the inputs to the motor controller then you don't need common grounds.

--
Need a custom shield? Let us design and build one for you.

RuggedCircuits:
That's where the optoisolator would come in. If you optoisolate the inputs to the motor controller then you don't need common grounds.

--
Need a custom shield? Let us design and build one for you.

I do have several optoisolator that i can use. but how would i clean the electrical noise.

My guess is that if you use an isolated power supply to power the microcontroller and RC receiver and optoisolator to communicate with the motor controller then you won't need to clean up the electrical noise.

Otherwise: shielding.

--
The Ruggeduino: compatible with Arduino UNO, 24V operation, all I/O's fused and protected

RuggedCircuits:
My guess is that if you use an isolated power supply to power the microcontroller and RC receiver and optoisolator to communicate with the motor controller then you won't need to clean up the electrical noise.

Otherwise: shielding.

--
The Ruggeduino: compatible with Arduino UNO, 24V operation, all I/O's fused and protected

I guess i would use optoisolators for my servos as well?

Probably not...lots of people use a common-ground connection to servos without much trouble. It's really that 25A motor you want to keep separate.

--
The Basic Motor Driver: simple, inexpensive motor driver for 1 stepper motor or 2 DC motors

Each of the motor controllers have an 1000uf cap installed.

It is not enough, you need an inductor as well in a pi circuit, that is cap inductor and cap then motor.

Hi, You've talked about the common ground, but not WHERE it is...

The idea is to keep current in one circuit from flowing in other circuits..

I think the obvious place for the common ground is the single point where the battery negative meets the motor (or motor controller) negative. Personally I would put a 1/4" or larger bolt in that metal box and bring the battery negative and motor controller negative together there. Then I would run separate ground wires from Arduino ground (maybe separate wires from all 3 grounds, the servo grounds, and the RC ground to that common ground point.

The idea is that the large motor currents that flow from battery +, through motor controller, to battery - do not cause ANY current to flow in the other circuits.

Temporarily run Arduino from a 9V battery to isolate that power supply issue (The 12V point in the series connected batteries will "bounce" around under load.

Tell us more about the physical connections....

I am using 10 gauge wires to bring in power from the batteries to a terminal strip. from there 24v power to the motor controllers. 12v power comes from the strip to the micro. 8 gauge wires transmit power to each motor. the micro's internal regulator provides power for the rc receiver. all grounds lead back to the terminal strip to the neg wire.

Everything would be cleaner if you didn't try and derive power for the servos/Arduino from the motor batteries - that way you could keep heavy switching currents away from sensitive circuitry completely and when the motors stall (and draw 100A) the Arduino won't reset.

BTW its very important that the high current battery and motor leads are not run parallel to anything else, that leads to lots of pickup, route the high current wiring together and well away from any signal wires.

Can you suggest any good filter for the rc ppm signals and the serial ttl?