Go Down

Topic: Driving a noisy DC motor (Read 2938 times) previous topic - next topic


Evening all. My first post here, but hopefully a productive one :D

(I have also tried a search, but can't find anything similar to my problem)

I am trying to drive a large (24V, 30-40A) DC brushed motor, on a small electric car.

We are using a proprietory motor driver (a 4QD, if you are interested) which contains far more functionality than we require. This drives our motor at about 20KHz, and in itself works quite effectively.

We have a variety of sensors attached to the arduino, sensing motor speed, wheel speed, motor current, throttle position (in fact a button pressed or not) temperature, etc. We are also logging our data on an SD card logger.

Now, for the problem. No matter what we do, we are getting horrendous noise on the sensors. For example, the motor speed (sensed using an optical sensor and a slotted wheel) will suddenly jump from around 2,000 to 2,750,000 and then back again.

At the same time, the wheel speed (sensed using a magnet and a hall effect sensor) will also jump the same amount.

Bizzarely, the throttle button (push to break button) is now also seeing noise on its line. (jumping from logic 0 to 1 unexpectedly, etc)

Noise wise, we have tried adding a capacitor across the motor to little benefit. Removing the heatsink from the motor has made the noise much worse (the motor is only rated to about 240W, but we are running it much harder.)

The motor also contains 2x 1uF caps, one across the supply and one from +ve to the case.

The 4QD driver contains about 3,700uF of capacitance across its supply.

The noise appears to be airborne RF, rather than ground lift etc, as we have run the logging arduino on a fully isolated system to the motor, with similar results.

Any thoughts? We are getting a bit stumped now... Is the RF likely to be causing the internals of the micro on the arduino to get upset?

Brownouts on the supply are unlikely, as we are powering the arduino from a 11.2V LiPo, through an external and very efficient voltage regulator, capable of a sustained 3amps.

The vehicle isn't chassis grounded, everything is earth returned. Traction batteries are a pair of 12V AGM batteries, similar to large motorcycle batteries.


Oh, I forgot to add, the caps inside the motor appear to be failing in style too... Probably due to the heat within the motor. :)

All thoughts very much apprechiated!


It can get expensive (and bulky, and heavy) but as a last resort, putting the signal and return wires in EM sheilding with its own earth ground usually works (especially if it's possible to put shielding around most of the sensors as well).  These days there are a number of options like wire mesh gaskets, composite EM shielding materials, conductive elastomers, etc....  Here's a link to a company on your side of the pond that specializes in electro-magnetic sheilding to give you some ideas of what's available (Note: I've had no experience with them, they were just the first UK company that popped-up on Google with a large range of EM shielding).

However before you go on a buying spree, some of the venerable forum greybeards may have cheaper and easier, but still effective, solutions.


Interesting idea.

I shall do as you say - investigate and wait :D

I would suggest that the range and physical distance between all the sensors would make this approach tricky, however our arduino is mounted close (6 inches) away from the motor, which probably isn't helping.

Been doing some more online reading too, and lots to be said for adding a choke/different caps to the motor by the looks of things.


I would suggest that the range and physical distance between all the sensors would make this approach tricky, however our arduino is mounted close (6 inches) away from the motor, which probably isn't helping.

There's nothing to prevent you from sheilding each wire, except of course cost and occasionally space and weight concerns. ;)

While it might not be the only source of your issues, you are correct that the proximity is arduino to the motor is a potential culprit.  The good news is shielding the arduino will be cheaper and easier than the wires, basically all you need is a metal box or fine mesh cage to put it in.  It's something anyone with basic hand tools and common materials should be able to build.  Or if you would rather spend money than time, there are metal cases designed to house arduinos.  Just remember, when you mount the arduino board in the enclosure it must be completely electrically isolated from the conductive exterior.  Otherwise you've just created a big antenna for the all the stray EM fields instead of a shield against them!  It also helps to make any access ports (e.g. to feed power and data wires through) as small as possible.


Ok if anyone was insulted by my "greybeard" remark, don't take it out on boydy1989. ;)

Also, bumping because I'd really like to see if there is a non-obvious solution...


Aug 01, 2012, 08:54 pm Last Edit: Aug 01, 2012, 09:12 pm by pito Reason: 1
Decoupling capacitors - it needs to be understood which type of capacitors is suitable for which application.
1. electrolytic aluminum capacitors, almost any size - filtering effect ~100Hz - max few kHz region
2. tantalum capacitors - up to 10-~100kHz region
3. polyester film etc. - up to 100k-1MHz maybe
4. ceramic (it depends on the material and capacitor's shape heavily):
~100nF - few MHz
~1-10nF - <100MHz
~10-100pF - up to 1000MHz
So adding a 3700uF might have zero effect. DC motors get usualy an inductor in each lead (ie 2x10uH, mind the current, usualy ferrite bars with 10-30 turns) and capacitors (on both sides of the inductors - ladder-like) - a parallel combination of ie. ~1nF || 100nF ceramic (mind the voltage), or more (up to 1uF ceramic) when it helps, no electrolytic capacitors pls  :)


Some suggestions:

1. Dedicate one of the Arduino ground pins to connect the ground side of your sensors, and use a different ground pin or pins for providing power to the Arduino and connecting output devices.

2. Use shielded cable to connect the sensors. For sensors that are wired between ground and an Arduino input pin, the cable shield can connect the ground side of the sensor.

3. If you are relying on the internal pullups on the sensor input pins, try using external pullup resistors of lower values, e.g. 1K if the sensors can sink 5mA.

4. Keep the sensor wiring as far away from the motor wiring as you can.

5. Keep the 2 power wires from the controller to the motor as close together as you can (to minimise the 20KHz magnetic field caused by the switching motor current). Preferably make them into a twisted pair.
Formal verification of safety-critical software, software development, and electronic design and prototyping. See http://www.eschertech.com. Please do not ask for unpaid help via PM, use the forum.


Just to add a follow up to this.

We started by replacing the motor with a new, less tortured unit.

This, with its now intact internal capacitors is pulling much less current for the same torque output. Brilliant.

Secondly, (school boy error I know...) we realised that we hadn't connected the motor case (which the internal caps are connected to) to anything, so it was floating.

Connect this to battery earth, and the signals all clean right up. D'oh... :D


Probably the main problem was capacitive coupling from the motor case - it would be coupled by the capacitors to the inductive noise from the commutators (which are basically spark transmitters if not suppressed). 

A grounded chassis was likely to have been an assumption in the motor's previous application...
[ I will NOT respond to personal messages, I WILL delete them, use the forum please ]


Connect this to battery earth, and the signals all clean right up. D'oh... :D

Well no matter what the course of events, I'm glad you got noise problems resolved. :)

Go Up