Cutting the USB gnd "UGND" from the from GND for noise reduction in A/D?

Hi to the Arduino forum,

Before anyone sets their hair on fire from screaming that I need to have a common ground, please rest assured, I will have a resultant common ground for both GND and UGND. Please let me explain.

My intention is to ultimately have as quiet a situation for Analog to digital conversion with the Arduino within reason. Ignore for now the issues of resolution and accuracy. I am just attempting to eliminate the most obvious causes of noise introduction via ground returns.

Of course, I need to use the USB input from the PC for control. That, of course, has all of the inherent noise from the cable and the switching power supplies and digital signals on the PC. Therefore, I think that the best way to isolate the UGND from the GROUND on the PCB at a point which seems to be specifically designed into the layout for such a thing. Attached are two screen shots, from Altium, one is the schematic component and one is the layout. This schematic component appears to be a way to point out a place for a good cut.

Once the cut is made, and UGND is isolated from GROUND, I have a small copper conductive bar that I am going to use as a separate COMMON point for connecting the two grounds, with heavy wire (or at least as heavy as I can attach to the Arduino).

The USBVCC still needs to be attached to the USB tranceiver and the UGND is still also attached to this tranceiver. I can, if necessary, depopulate T1, the FET that can transfer power to the +5 supply to make sure that the USB connection does not supply +5V.

I will have an low noise linear power supply generate +5V, decoupled properly and referenced to the external copper plane that is the common for all voltages.

That’s my plan. Please let me know if you think that this is a viable plan or that this is complete overkill.

Thank You
Tom

GROUND_CUT.gif

UGND.gif

Hi,
Can you do a test for me.
Before cutting anything, connect two 10K resistors to the, what model Arduino are you using?
One resistor from gnd to an analog input.
The other from that analog input and the 3V3 or 5V pin.

Then run some code reading the analog input and via the IDE serial monitor output the raw count from that analog pin.
Then tell me how much noise you register.
What level of noise do you want the reduction to minimise?
What is the application that needs this sort of analog modification?

Thanks... Tom.... :slight_smile:

Hi Tom,

Thank you for your reply and your suggestion.

I'm using the Arduino Mega 2560. Actually, the application was not developed by me. Just FYI, I'm an "older" electronics engineer having done a lot of noise and EMI reduction in circuits. But this is my first experience with the Arduino. Fortunately, I have the schematic and layout files.

The application is for use in a flight simulator. The short story is that I acquired this venerable 25 year old flight simulator console from Precision Flight Controls. That is, a very realistic feeling Yoke and pedals. The ancient electronics would not enable it to run modern flight simulation software like X Plane. Not good enough for me.

There is a "cottage industry" in using Arduino to interface with the old hardware. The old hardware uses rotary potentiomenters. That's it. The "middle" pin of the potentiomenter is tied to an A/D pin of the Arduino. The input ranges from like .1V to 5 V, depending upon the position of the yoke or pedal. So, the input to the A/D is kind of like DC that changes every once in a while.

So, with that out of the way... There are wires and cables in the system which contribute to what I am calling "noise" in the system. In terms of the flight simulator, the noise manifests itself in an unstable aircraft flight. I have not measured it yet due to the lack of a good oscilloscope (used to be my primary tool but in retirement I don't have one). I have one of those mini-pocket sized oscilloscopes, but have not yet spent the time required to work the bloody thing. But I know that the noise is there.

I am revising the electronics with shielded cable and a copper ground bar but it seems as if it would be futile if I simply used the USB power from my PC. With all of the switching noise and digital noise it seems to me that cutting the plane in the Arduino and rewiring would make the most sense.

In addition, since the old analog guy in me is coming out, I am thinking of using a low pass filter just prior to the A/D input, in order to reduce noise further. I realize that because of quantization and resolution that there is only so far that I can go with that but I am hoping for some kind of improvement.

Thank you for the suggestion and I WILL take it. Measurement is always good to do. It may be early next week before I am able to do that particular test. I will keep you in mind and let you know of the results.

Best Regards
Tom

Hi, Tom.
Interesting project, we have had some posting here with similar applications.
Have you seen this YouTube about adapting a fullsized simulator to modern tech?
Very fascinating from Dave EEVBlog. He has done a series on this machine.

Tom... :slight_smile:
PS, I'm off to bed.. (Australia)

Where does the 5volt supply for the pots come from.
That should be from the 5volt pin of the Mega.

If it comes from another 5volt source, then there is no ratiometric relationship between pot and A/D any more.
Any variation in the 5volt supplies will also show up in the A/D value.

What are the values of the pots.
The A/D expect a source impedance <= 10k.
Higher than that creates cross-talk between channels (pots).

Make sure there is no other current flowing over the pot’s VCC/GND wires.

If you still have ‘noise’ after that, then remove it with code.
Example attached.
Leo…

// converts the position of a 10k lin(B) pot to a byte (0-255)
// pot connected to A0, 5volt and ground

int rawValue; // raw reading
int oldValue; // for deadband
byte Byte; // final byte
byte oldByte; // for printing

void setup() {
  Serial.begin(9600);
}

void loop() {
  rawValue = analogRead(A0); // read pot
  if (rawValue < (oldValue - 2) || rawValue > (oldValue + 2)) { // add some deadband
    oldValue = rawValue; // update value
    Byte = oldValue >> 2; // convert 10-bit to 8-bit
    if (oldByte != Byte) { // only print if value changes
      Serial.print("Byte is: ");
      Serial.println(Byte);
      oldByte = Byte; // update value
    }
  }
}

What kind of noise ? 50/60hz, high frequency

I would start off by adding a capacitor, 0.1uF ceramic in parallel with a 10uF between the Aref input and ground. That will improve the noise you are seeing.

Grumpy_Mike:
I would start off by adding a capacitor, 0.1uF ceramic in parallel with a 10uF between the Aref input and ground. That will improve the noise you are seeing.

Grumpy_Mike, this is the second time at this reply so I hope that it sticks.

I finally had a chance to look at this, as I have Altium designer and was able to import the Eagle files. I am also a retired EE and familiar with placement and decoupling issues.

I could not believe it but the decoupling cap for Aref was over an inch away from where it was supposed to be in my opinion. Actually, the signals that were coupled in the area of Pin 98 could have been moved sufficiently to allow for a 0402 0.1uF cap at least. I used to be able to do this kind of rework when I had a microscope and other equipment for doing fine work.

I took some other extreme measures to "take out" some of the noise in the system. I used shielded Cat 7 cable with the shields grounded at only one point in order to not create ground loops. I also got rid of the switching 5 volt power supply in favor of a linear supply that was used for Audio applications. Finally, I used a 1/2 inch copper bar, insulated from the chassis, as a ground bar, and did the same for the +5V supply. Also, +5V and Ground were connected at only one point (other than the power supply connector). That took out most of the noise that was giving me trouble.

I really should have measured noise before and after but I was really in a hurry and figured that if it worked it worked.

The application that I was using it for was the rewiring of an old flight controller console. So, the noise was making flight in the flight simulation create some instability in flight.

Works much better now.

Did you understand the 'ratiometric behaviour' part I explained in post#4.

Resulting A/D values depend on two things.

  1. input
  2. reference

Higher input (same reference) = higher A/D value
Higher reference (same input) = lower A/D value

If you power the pot and the A/D (Vref) from the same voltage, then variations are cancelled out.

So did you?
Leo..

Wawa:
Did you understand the 'ratiometric behaviour' part I explained in post#4.

Resulting A/D values depend on two things.

  1. input
  2. reference

Higher input (same reference) = higher A/D value
Higher reference (same input) = lower A/D value

If you power the pot and the A/D (Vref) from the same voltage, then variations are cancelled out.

So did you?
Leo..

Wawa, thank you for your post and your advice.

Just a couple of things.

Firstly, I would like to use the code that you presented in an experiment with my "spare" Arduino, when I get the time. But, I can not use it in the application that I am working on since I do not have the source code for it. It is purchased third party software and it is as good as it is going to get.

Secondly, in an ideal world, if the noise on Vref was exactly the same distribution as that from the "pot" then most if not all of that noise would cancel out "ratiometrically" as you put it. There would probably be a differential in amplitude but the distribution would probably cancel out. If all of the circuitry were on the same substrate then the noise would probably be "common mode". But, in my case, there was cabling involved of between 1 and 2 feet (depending upon the signal source). That kind of cabling allows for all kinds of "radiated emissions" from sources near and far to be introduced into the signals on their travel from source to destination. As mentioned in my previous post I used some extreme measures, probably overkill, to reduce the chances of external noise getting into the system.

Third, also as I mentioned, I was pretty much shocked to see how far the decoupling for Vref was from the pin 98 on the IC. I was thinking about putting the requisite Caps on this pint but as it turned out, when tested, the application is now working good enough for my needs. Had to "call it a day" at some point.

Best regards and thank you again
Tom

Wawa:
Did you understand the 'ratiometric behaviour' part I explained in post#4.

Resulting A/D values depend on two things.

  1. input
  2. reference

Higher input (same reference) = higher A/D value
Higher reference (same input) = lower A/D value

If you power the pot and the A/D (Vref) from the same voltage, then variations are cancelled out.

So did you?
Leo..

Wawa, thank you for your post and your advice.

Just a couple of things.

Firstly, I would like to use the code that you presented in an experiment with my "spare" Arduino, when I get the time. But, I can not use it in the application that I am working on since I do not have the source code for it. It is purchased third party software and it is as good as it is going to get.

Secondly, in an ideal world, if the noise on Vref was exactly the same distribution as that from the "pot" then most if not all of that noise would cancel out "ratiometrically" as you put it. There would probably be a differential in amplitude but the distribution would probably cancel out. If all of the circuitry were on the same substrate then the noise would probably be "common mode". But, in my case, there was cabling involved of between 1 and 2 feet (depending upon the signal source). That kind of cabling allows for all kinds of "radiated emissions" from sources near and far to be introduced into the signals on their travel from source to destination. As mentioned in my previous post I used some extreme measures, probably overkill, to reduce the chances of external noise getting into the system.

Third, also as I mentioned, I was pretty much shocked to see how far the decoupling for Vref was from the pin 98 on the IC. I was thinking about putting the requisite Caps on this pint but as it turned out, when tested, the application is now working good enough for my needs. Had to "call it a day" at some point.

Best regards and thank you again
Tom