'6/22/09 (hazen)

Firmware updated to fix duplicate AC measurements and raw waveform readout error. Here is a summary of the precision under various conditions. The precision is defined here as =sd/sqrt(N)= where =sd= is the standard deviation of 100 successive one-cycle measurements, and =N= is 100.

                                              1 second
 Test R    V(s)     Gain    Meas R   Std Dev  Precision
  1.0M     10mV     0.1     1.00      1.2K    0.012%
  9.9M     20mV     0.1     10.4M     0.14M   0.14%
  24M      20mV     0.1     26.4M     0.9M    0.34%
  33M      20mV     0.1     37.M      1.9M    0.51%
  80M      20mV     1.0     82.M      15M     1.8%

There is no apparent systematic error (drift with time, etc) in the measurements, so increasing the integration time increases the measurement precision. For example, if one measures for 100 seconds, one would obtain a factor of 10 improvement in the precision.

'5/22/09 (hazen)

Oops. Found that the waveform readout is flawed somehow. Should only capture one cycle of stimulus, not two. Test by injecting an external waveform at a frequency not equal to 100Hz, i.e. 163Hz.

Here is the result: Ext_WF_163Hz.gif

Turns out that we get the same 128 samples twice. Bill is working on it.

'5/21/09 (hazen)

Initial test setup

   * Setup on bench
   * GigaWare USB/Serial cable to Eric''s Thinkpad T43 laptop running Ubuntu Linux.
   * BioSensor box lid not screwed on.  
   * Daughterboard installed
   * Full lead length 1/4 resistors plugged into PGA socket.  
   * No care for grounding/shielding.  
   * Laptop operating on battery power.

Raw waveform analysis with stimulus

Analysis done with Root The script fits a sine function to the data and makes a histogram of the residuals. The fitted function is:

   y = P(0) + P(1) * sin( P[[2]]*x + P[[3]]

Plot: test_100k_G0.1_10mV.pdf

Plot: test_1M_G0.1_10mV.pdf

Plot: test_1M_G1.0_10mV.pdf

Plot: test_4.9M_G0.1_10mV.pdf

Plot: test_4.9M_G1.0_10mV.pdf

Plot: test_1M_G0.1_10mV.pdf

Plot: test_1M_G1.0_10mV.pdf

Check calibration:

  10mV / 100k = 100nA.  
  With G=0.1, sense R is 100k so we expect 10mV pk/pk at preamp output.  
  After 100x amp, expect 1mV at ADC input.  
  ADC is 2.5V full scale, 16 bits -> 2.5V / 65536 = 38.1uV per LSB
    10mV / 381.uV = 2.62e4 ADC counts pk/pk
  Root analysis for P[[1]]
  Root analysis for P[[1]]

Further, to convert to current

  for G=0.1, 38.1uV per LSB / 100 = 381 nV at preamp / 100k = 3.81 pA per LSB
  for G=1.0, 38.1uV per LSB / 100 = 381 nV at preamp / 1M   = 0.38 pA per LSB

Noise level:

  Root says RMS=261 ADC counts = 10mV at ADC input
  At G=0.1, 261 * 3.81pA = 994 pA or ~ 1nA

Zero-signal waveforms

  • G=0.1, zero stimulus, Register 0 = 0x810 (select "none" for both inputs)

Plots: test_0.pdf

Plots: test_10M_G0.1_0mV.pdf

Plots: test_10M_G1.0_0mV.pdf

Histogram looks non-gaussian.

'Improve grounding – connect box lid and PCB to box GND.

Plots: test_10M_G0.1_0mV_gnd.pdf

Plots: test_10M_G1.0_0mV_gnd.pdf

Plots: test_1M_G0.1_0mV_gnd.pdf

Plots: test_1M_G1.0_0mv_gnd.pdf

Plots: test_100k_G0.1_0mV_gnd.pdf

Plots: test_100k_G1.0_0mv_gnd.pdf

Waveform data after grounding improvement (not much better)

Plots: test_1M_G0.1_10mV_gnd.pdf

Plots: test_1M_G1.0_10mV_gnd.pdf

Noise Analysis

Bill has done some preliminary analysis of the expected noise level. The estimate takes into account the thermal noise of the resistors, the amplifier noise, and the bandwidth limit filter on the input of the ADC.

Gain/Feedback? Input R Vrms at ADC ADC counts
1/1M none 8.4 mV 220
1/1M 10M 8.8 mV 231
1/1M 1M 11.9 mV 312
1/1M 100k 28.6 mV 750
0.1/100k none 2.72 mV 71
0.1/100k 10M 2.73 mV 71
0.1/100k 1M 2.86 mV 75
0.1/100k 100k 2.91 mV 76

An attempt at a general formula is as follows:

  Vo = 0.5859 * sqrt( (1+(G/R))^2 + 204.5*G + 204.5*(G^2/r) )


  Vo = mV rms at the ADC input
  R = measured resistance in Megohms
  G = gain, 1 or 0.1

Measured values are significantly higher than expected; work on grounding.

Last modified 10 years ago Last modified on Nov 8, 2013, 10:17:54 AM