Electronic – How to find and remove servo/motor noise from this audio amplifier

audionoiseservo

I am troubleshooting an audio noise problem in project which has several components wired together as follows:

Block Diagram

Overview:

The overall project does some motion control with a servo and has an audio notification that is triggered by one of the servo channels.

For the audio pathway, it uses an Arduino Uno with Wave Shield as the source of audio, a Kemo M034N amplifier of unknown class, and a single 4Ω speaker. On the servo side of things, there is a buck converter to drop the voltage from 12V to 6V, a Spektrum RC receiver, and a generic Futaba servo. One of the RC channels connects to the Arduino so that the audio can be remote triggered.

The 6V from the RC receiver to the Arduino is not connected, but the grounds are tied together.

The Problem:

The amplifier is picking up the noise of the servo motor, but I haven't been able to decouple it. The amplifier has unusual connections in that the ground connection is the same as one of the audio lines (indicated in green on the block diagram).

If I simply disconnect the audio out from the Arduino, the problem goes away (but of course no desired audio reaches the amp in this case). I believe this tells me that the problem is not present on the Vcc and ground connection to the amplifier.

Connecting an oscilloscope to the audio output of the Arduino shows a clean signal, even when the servo is being driven. However if I reconnect them, then connect the scope to the amplifier end of the wires, about 12 cm (~5 in), the waveform is much noisier and has the servo noise present.

What I've Tried:

I tried running a shielded wire from the Arduino to the amplifier, connecting the shield to ground. I've tried adding three capacitors of different sizes (1000μF, 100μF, and 0.1μF) in parallel to both the amplifier and Arduino power input to try and decouple them from the rest of the circuit. Neither of these had any improvement.

If I connect headphones to the Arduino and ignore the amplifier and speaker, the sound is clean and no servo noise is present.

Edit: I've also tried using two separate power supplies; one for the audio components and one for the servo components. That also solves the problem, but ultimately I need to have just one power supply. The problem occurs whether I use a 12V 5Ah battery, a regulated bench power supply, or the intended 12V 10A SMPS.

Question:

I'm not sure what else to try. Is there some sort of ground loop? Am I decoupling improperly/insufficiently? What else should I try to eliminate the noise?

Best Answer

The solution was to physically separate the power connections for the audio components. While @Dave mentioned in the comments something about a star ground topology, the problem was that while the ground connections were all centralized, the Vcc connections were also, and shouldn't have been.

In the original design, power was supplied to the entire assembly via a small PCB with header pins for each separate component. Two rows of male header pins, one for 12V DC and one for ground. In this arrangement, all of the noise was being dumped onto the audio components each time the servo motor was actuated. Adding capacitors helped slightly, but certainly not enough.

The main two wires supplying the small power distribution PCB are about 10 cm long. I added a second pair, and created a second power distribution PCB. The original one was used for the servos and receiver, while the new one was used for audio and amplifier. The "Y" split in the power cable ultimately had the effect of keeping the power clean on the audio side.

I also removed the ground connection between the RC receiver and Arduino, though this was unnecessary. Its presence did not add noise, nor did its absence cause triggering problems.

An electrical engineer coworker advised me that it was important to have separate power supplies for motors versus digital components. While this project still only uses one power supply, the solution was to split the power as early as practical, and dedicate each to its respective purpose.