Noisy ADC on Redboard Artemis ATP

Hi,

I’m making a few devices using Artemis and while doing some prototyping, I noticed that Artemis had a relatively noisy ADC compared to other boards (Arduino Due in this case) that I’m used to using. I put together a simple circuit for measuring an electrocardiogram using an AD623 instrumentation amplifier (INA) and measured the output of the INA with both a Redboard Artemis ATP and an Arduino Due. I was using pin 32 on Artemis (but also tried other pins as well) and pin A0 on the Due. Screenshots of the output from each device’s ADC are attached. The ECG was around 200 mV peak-to-peak. The same signal was sent into both boards (not at the same time), but you can see that I got vastly different outputs from each device. The signal from the Due is what I would expect and is the ECG I’m used to seeing. The signal from Artemis was noisier for sure, though you can see some P and T waves as well as the R-wave. There appear to be some sporadic spikes outputted from Artemis’s ADC.

Yes I did try using another Redboard Artemis ATP as well as a Redboard Artemis.

Arduino Due, 3.3 V AREF, 12-bit

Artemis, 2 V ARED, 12-bit

Baud rate: 9600

Fs = ~200 Hz (using delay(5) function)

There are a couple of aspects with the ADC that I have discovered as well which might help you:

  1. The Channel 0 is connected to pin 16 as an impedance of 720K, where the 1 - 7 are connected to 29,11,31,32,33,34,35 have 3600M. you might want to try pin 16.

  2. There are 2 issues in the core software, both are in ap3_analog.cpp,

The first is that the ADC interrupt is NOT reset correctly before starting reading, the second is that ADC is enabled too early while not all the changes have been made.

While I am trying to provide that feedback to Sparkfun on how to correct, I have posted the adjusted ap3_analog.cpp on https://github.com/paulvha/apollo3/tree/master/analog. You should replace this with the current one in driver directory, not sure you are using WIndows or Linux, …packages/Sparkfun/hardware/apollo3/1.029/cores/arduino/ard_sup/analog

Hi, try changing the baud rate to the highest possible value first. With another board it solved a similar issue for me.

If that does not help much then try to turn off any electronic devices in your room and also unplug all the wall units.

This might hear strange at first but the human body is like an antenna and takes up much EMI from the environment.

To get best possible signal quality you should also try to run your board from a battery and not powering it via the USB cable as also that might conduct some EMI from your computer into your board that can affect your recorded signal. However this means you need to record the signal on an SD card.

The only thing i can alos confirm that using an ADS1292R ECG AFE the signal contains significantly more noise than a recording with another MCU despite same conditions. In my recordings with the Artemis Thing Plus contain an elevated noise level at around 30 Hz which is missing in the signal recorded with another MCU. It seems the current design of the Artemis boards are more prone to picking up EMI than other boards. However for the ultimate answer one would need to do a test recocrding to an SD card while the board is completely unplugged.

Comparison graph, conditions: wall units unplugged, lights turned off, boards driven via USB cable (due lack of SD slot), no ecg cable plugged into ADS1292R. So basically this shows ground noise of the board+ADS1292R. Artemis’ recording shows an extra noise component around 28 Hz.

Interestingly if i also plug the ecg cable into the ECG AFE, in Artemis’ recording(red line) the extra noise component at around 28 Hz disappears and the signal is almost the same as with another board.