Ganglion hardware design flaw & misunderstanding?

Hi all,

I think these things.  There's some widespread misunderstanding about the Ganglion analog design, maybe even among the designers themselves.  There’s a design flaw that puts our entire signals in the AFE’s unspecified region, though it apparently results in performance that’s at least acceptable enough for the flaw to have gone unnoticed.  (If I'm wrong about all that, I hope my seeming-audacity is forgiven).


The design flaw, in 2 sentences:

The AFE’s negative analog inputs, and the DC component of the AFE’s positive analog inputs, sit at about 1.2 volts.  But the AFE spec says accuracy is unspecified for voltages above 1 volt.


Detail:

I know not everyone “speaks circuit”, others are super-experts.  I hope to write much of this for a broad audience but there will be parts that diverge from that.

First, the signal that's marked GNDA on the schematic, and silkscreened on the board, is "the" ground for the board.  An old but very accessible & still useful schematic for Ganglion is here:  https://github.com/OpenBCI/Ganglion_Hardware_Design_Files/blob/master/Ganglion_SCH.pdf.  If you’re willing to look at it, you can probably see that GNDA is the negative side of the battery.  It’s also the ground for all of the voltage regulators.  It's connected to digital grounds, for example to what the Simblee calls "GND" and the AFE (Analog Front End, MCP3912) calls "DGND".  It's connected to what the AFE considers its analog ground, which it calls AGND.

To sort out what's happening in the signal-input area, I re-drew (in a form that to me is more readable) the analog part of the Ganglion schematic that's associated with just channel 1’s input.  I think you can see it here:  https://drive.google.com/file/d/1Zg9Fn4cOBfgG5YeKsQxh6xKx5fuShm-z/view?usp=sharing.  Also, although the AFE spec is kind of a biggie, it’s at http://ww1.microchip.com/downloads/en/DeviceDoc/20005348A.pdf and I’ll be referring just to specific parts of it.

One thing to notice is that Ganglion is applying at least +1.2V-relative-to-GNDA, onto what the AFE calls CH0- relative-to-its-AGND.  But look at the AFE spec, page 3.  The “Analog Input Absolute Voltage on CHn+/- pins, n between 0 and 3”, measured relative to AGND, isn’t supposed to be as high as +1.2V, it’s supposed to be between -1V and +1V.  

Though there’s no “Note 6” notation with that spec (nor anywhere else in the pdf), it seems that note 6 near the bottom of that page applies to that spec … it says “Outside of this range, ADC accuracy is not specified.  An extended input range of +/-2V can be applied continuously to the part with no damage.”  That echoes what can be seen near the top of that page for Absolute Maximum Ratings, indicating that values higher than +2V or lower than -2V can cause permanent damage.  (I think in our case it’s unlikely, but …).

If you were to analyze the instrumentation amp / high-pass-pole circuitry associated with U2 & U1, you would also see that the AFE’s CH0+ signal hangs out at +1.2V, from which it makes signal- & noise-dependent excursions somewhat above and below that value.  In fact, a moderate-speed +16mV excursion on board-input 1_IN+ relative to 1_IN- could likely cause >2V on AFE CH0, into possible-permanent-damage range.

So relative to GNDA, Ganglion’s U2 & U1 arrange for the mean value of (CH0-) and (time-averaged-CH0+) to be +1.2V.  We call that voltage the common-mode voltage relative to GNDA (in contrast to the differential-mode voltage which is the difference between CH0- and CH0+).  But the AFE’s design intent is to have a common mode voltage of preferably 0 volts (though it accepts +1V at the most, -1V at the least), with excursions going above and below its AGND which again is Ganglion’s GNDA.  The spec makes that clear on page 30, 2nd paragraph, ending with “For best performance, the common-mode signals should be maintained to AGND”.


Comments

  • biomurphbiomurph Brooklyn, NY
    @bpwork
    Thanks for your thoughtful comments and dive into the MCP3912 spec sheet.
    Based on your remarks, it would be advised to use AGND as the 'reference' voltage attached to the inverting inputs of the MCP, as well as the voltage reference for the instrumentation amps on the front end. That would mean that the InAmps would require a differential voltage of their own (+-2V MAX). Does that sound right?
  • Yes based on its spec I'd say that although the MCP3912 doesn't have a negative supply delivered to it, it's designed to perform within specs with incoming signal voltages in the range from -1V to +1V relative to its ground which is our board's AGND.  So if our board's V_REF could be at AGND potential, that would be ideal for the MCP3912.  Our IA outputs can't swing below their 'negative' power supply rail, though, which is our AGND, and we don't have a negative supply on the board to power the InAmps with.

    We don't have info that the issue is causing the MCP3912 to under-perform to expectations.  So not changing anything should be in consideration, in which case it's worth talking to TI applications people to get their take on it.

    Another approach might be to (somehow) reduce our board's V_REF, which is now +1.20 volts, down to +0.50V.  Then our signal range going into the MCP3912 would be from 0 to 1 volt ... 0 volts because the IA can't go lower, and 1 volt because we prefer to remain in the MCP3912 specified region.  Referred to input, that would accommodate almost 20mVpp of in-band signal.  Is that enough?  I'm thinking so.  Much of the out-of-band, undesired-signals-aka-noises such as electrode offsets, wander, ESD-like zaps, etc could exceed 20mVpp at board-input, but they would largely be filtered by our high-pass and low-pass circuits before entry to the A/D.  Correct me if I'm wrong about this, but whatever isn't filtered out, if it exceeds 20mVpp at board-input, it's so big that it wouldn't be very useful anyway, & is probably undesirable.  FWIW, I do know that surface ECG signals, which can be said to be nominally 1+ millivolt p-p, can reach 10mVpp particularly in certain ill children, but a committee of cardiologists/etc has confirmed that that's the max.

    So, if V_REF is to be reduced to +0.50V, how to do it?
    -- Unfortunately the MCP3912 spec cautions that its REFOUT (pin 14) can't drive much current and should be buffered, as we're doing now.  The spec-tables say its output impedance is TYPICALLY 0.6 kOhms.  I don't think we care if we miss the 500mV magnitude by a few 10's of millivolts so I was hoping we could install a divider on that pin 14, like 100K or 1M of resistance; but I see that the LM7332 opamp has up to 1-2ua of bias currents, which would run thru our resistors and generate lots of error on V_REF. (Hmm that means the I_BIAS voltage which is generated by U6A could be "off" by about 100mV).
    -- So an alternative is to follow the existing LM7332 buffer with a divider and then another buffer.  If we look for where there may be an available opamp on the board, it seems that either the I_BIAS or the D_G amplifier might could serve both purposes, freeing up an opamp to do the V_REF buffering.  The two opamps are quite different from each other (bias currents, noise, etc) and I haven't checked it out to decide which should be used for what .... or whether either could/should be replaced with a different part, for that matter.  Right offhand for easier rework it seems using U6A for V_REF might be easier because it's in the same dual package as the existing V_REF buffer.

    But I'm getting ahead of things, don't know if we should do anything at all, don't know whether rework would for any reason be in the cards vs. just a board layout change.  Thoughts?

               -- Bruce P.

  • This is regarding the above-mentioned possibility of reducing V_REF to +0.50V, by dividing the REFOUT pin of the MCP3912.
    What's a pain is that the resistors would need to be large enough in value so as not to unacceptably alter the voltage at REFOUT, which has an output resistance of typically 600 Ohms.  But the "LM7332" opamp has high (1-2 ua) bias currents, so using high-value resistances wouldn't work.

    Good news today, I looked at replacing the "LM7332" -- didn't know all the reasons that part was chosen, but I searched for others in that package with bias currents more like <10na, and similar-or-better noise & supply current.  Found several.  Then looking more closely at the BOM, it seemed that part might not be LM7332, might instead be MCP6L02 !  My board was purchased Feb 2016 and I was able to get a look at it, sure enough U6 is MCP6L02.  Bias currents can be expected to be 10's of picoamps at the most, so megohm-resistances are not a problem.  It would be good to have confirmation that all/which Ganglions have the MCP6L02, and edits to schematic & BOM made.

    On my board I'm thinking I'll do this.
    -- Schematically:  Instead of MCP3912 REFOUT pin 14 going straight into U6 pin 5 and C15, insert a resistor divider of 1.00M and 715K.
    -- Physically:  For the 715K, stack an 0603-size part on top of C15.  For the 1.00M part, on the top side of the board, cut the trace that runs from MCP3912 pin 14 to U6 pin 5, in the nice blank region between the MCP3912 and SW1 & SW2; and install the 1.00M part between the two cut ends.

    It's still not known to what degree, if any, a change may be needed or useful.  But the result should be that the center of the signals going into the MCP3912 will be in the MCP3912 spec'd region.  There should be no effect on digitized-signal offsets or gains, because the input signals are differential if you know what I mean.

            -- Bruce P.

  • I'm planning to copy the basic ganglion AFE circuitry for a barebones 4ch EEG amplifier (see my earlier post),

    I'm wondering if there's been any more update on this issue. It wouldn't be tough for me to add the aforementioned voltage divider between the the MCP3912 REFOUT pin and the U6B noninverting input and to swap the LM7332 for an op amp with less bias current.

  • PrestonPreston Minnesota

    Quick update, I tried implementing the solution @bpwork proposed and it seems to be working well. I'm measuring 0.49 V as my V_REF, and the IA outputs are all pretty stable at 0.49 V when not connected to any inputs.

Sign In or Register to comment.