Arduino Due noise: Lot's of noise at ADS8339 input and DAC8552 output [SOLVED]

Greetings,

I am working on a project where I need to generate and acquire ECG signals (the signals are stored in .wav files), the problem is the noise that is present at the DAC output (DAC8552) and specially at the input of the ADC (ADS8339). This noise has a very spread spectrum, ranging from a few Hz to kHz or more, it can be heard in the wave files recorded with sampling rates of 1 kHz up to 48 kHz (I'ven't tested any lower or higher sampling rate because for this app I need values of about 1 kHz-10 kHz). I'm not sure, but I think the noise comes from the SPI communications between the uC and the DAC and ADC, and also the communications with an SD card (via SPI) that is recording and playing the ECG files. I need a noise floor at least below -60 dBV and I'm getting about -40 dBV or less. I've tried to twist the SPI wires with ground but there's no use, the noise floor is the same, physically spacing the supply wires coming from the Arduino supply and the SPI wires also doesn't help.

If I don't connect the ADC input to a signal generator the noise floor is about -60 dBV, if I connect a generator the noise floor raises to -39 dBV or more.

I need to know if you there is some solution for this problem, or if it's better to choose another board (now it's very difficult for me to change the plataform because I need to finish this project by September, and I've already a lot of code written).

Regards,
Danny

You want to keep the ADC reference voltage within 1LSB at the start of each conversion, see page 26 of ADS8339 datasheet.

Although it is aimed at the builtin ADC peripheral, there are lots of interesting hints in this blog:

And this:

Hi arb_newbie,

Thank you for the links provided, very important and helpful information.
I think I should try using a cleaner voltage source at the reference pins, I was connecting those pins directly to the Arduino 5V (with decoupling of course, but maybe it's not enough, because the Arduino is supplying power to the noisy SD Card and digital sections of the ADC and DAC). For now I'm thinking about a simple voltage regulator (I know a voltage reference will be better, but I've many regulators available, I need to order to REF5040 or 5045 references), and some filtering using some opamps. Do you think I should use independent references for the ADC and DAC or it's not worth it? They can share the same reference, or it's a bad idea?

Best regards,
Danny

Greetings,

I've tried the circuit shown in page 30, figure 61 of ADS8339 datasheet and the noise remains the same, well I've made a few changes, I've used 0.47 uF instead of 1 uF capacitors, all opamps are OPA350 and the reference is an LM317 but the circuit is mainly the same. There is absolutely no change in the noise floor. I'm almost 100% sure the noise is in fact interfeerence caused by SPI communication with the SD card and ADC. It seems impossible to eliminate this interfeerence, I don't know what I should do. Any advice?

A curious fact is that the noise/interfeerence only appears at -39 dBV when I connect the buffer that drives the ADC input (that is non inverting unlike the one shown on the datasheet) to a signal source , when it's only connected to the buffer (that remains connected to Vref/2) the noise floor is about -66 dBV.

PS: The signal source is the PC audio 3.5mm jack (ALC888S codec output), that I'm testing with sinewaves with frequencies between 50 and 500 Hz, and sometimes without signal, the noise is always the same, even using my my laptop in battery mode, so it's not comming from the power supply.

Regards,
Danny

Some hints when you are using several devices on the same SPI bus:

https://www.dorkbotpdx.org/blog/paul/better_spi_bus_design_in_3_steps

And this thread:

https://forum.arduino.cc/index.php?topic=186522.0

And maybe an issue with your code.

Hi arb_newbie and thanks for your reply

ard_newbie:
Some hints when you are using several devices on the same SPI bus:

https://www.dorkbotpdx.org/blog/paul/better_spi_bus_design_in_3_steps

I'm using different SPIs, I'm using the "normal" SPI (4 wire) with SdFat library for the SD card, USART1 as SPI for the DAC (3 wire), and USART0 as SPI for the ADC (3 wire).

The noise seems to be caused by the SPI communications and seems to be causing AC ground interfeerence.

ard_newbie:
And this thread:

https://forum.arduino.cc/index.php?topic=186522.0

That thread never had an answer (wasn't solved).

ard_newbie:
And maybe an issue with your code.

Maybe, but the noise seems similar to the noise referred on the thread you've mentioned, and affects both ADC and DAC, and I think it's similar to the noise generated in the SimpleAudioPlayer example. That I've tried some months ago.

There is any method to solve this? It is a good idea to use something like a PI network.

I don't know why but the ground in Arduino Due board seems not to be very stiff. And that makes thinks complicated with digital noise/interfeerence.

Regards,
Danny

I think I've solved the problem, at least for the ADC. I'm getting noise levels bellow -60 dBV.

Problem:

  • The Arduino gound is not stiff enough to absorb the large peaks of current demanded by the SPI communications (the voltage level at ground floats).

Solution:

  • Power the Arduino with an external regulated power supply (currently using a fresh 9 V battery)

  • Use a regulator and the filter suggested on the datasheet of the ADC/DAC

  • Use a regulator for the analog supplies with an RC filter network

  • Twist the signal input wires around a gnd wire

  • Keep the SD and noisy wires appart from the signal part

  • Connect the input ground as close to the ADC as possible

  • MOST IMPORTANT: Connect all noisy circuitry and higher power grounds to a low impedance star point with large electrolytic capacitors in parallel with 0.1 uF or 0.22 uF film or ceramic capacitors, use low impedance wires to connect the power supply, and as close as possible to the supply negative (-) terminal

PS:
This works with a crappy breadboard with lots of stray capacitance. With a noise/interfeerence level below about -60 dbV (1 mVrms) :wink:
I will make a PCB board for the regulators/filters and the star ground to achieve even better results, an of course I'm going to order a REF5045 to replace the LM317 that I'm using to power the Vref terminal of the ADC/DAC.

Regards,
Danny