Seltsamer Messwert von NAU7802 ADC

Ich verwende einen NAU7802 ADC mit eingebautem Verstärker. Ich versuche, es zu verwenden, um einen Dehnungsmessstreifen zu lesen, aber es gibt mir immer wieder seltsame Messwerte.

Schließlich habe ich die beiden Differenzeingänge kurzgeschlossen, sodass sie 0 anzeigen sollten. Dies sind jedoch die Messwerte, die ich tatsächlich erhalte (bei 80 Hz, Verstärkung = 128):

ADC-Ergebnis

Wie Sie sehen können, ist der Messwert meistens korrekt, aber alle 0,4 Sekunden oder so gibt es einen Ausbruch von Unsinn.

Ich bin mir ziemlich sicher, dass mein Code korrekt ist (ich kann ihn nicht posten, sorry). Beachten Sie, dass ich das Gerät auf DRDY (Daten bereit) abfrage, anstatt es zu unterbrechen. Das sollte keinen Unterschied machen, aber ich bin irgendwie ratlos, woran das liegt.

Hat jemand irgendwelche Vorschläge? Ich habe fast überall, wo ich kann, Kondensatoren hinzugefügt und alles in eine Metallbox gesteckt, damit ich nicht glaube, dass es EMI ist.

Ich werde verrückt.

Update, es wird seltsamer

Also habe ich meinen Code ein wenig geändert, damit er den DRDY-Interrupt verwendet, wie folgt (ich konnte I2C aus irgendeinem Grund nicht dazu bringen, innerhalb der ISR zu arbeiten, daher der boolesche Wert):

    // In setup()
    attachInterrupt(1, adcIsr, RISING);
}

volatile bool dataReady = false;

void adcIsr()
{
    dataReady = true;
}

loop()
{
    if (dataReady)
    {
        Serial.println(adc.readADC());
        dataReady = false;
    }
}

Und jetzt bekomme ich diese Grafik. Die Größe der Dreiecke ist unabhängig von der Verstärkung!

mysteriöse dreiecke

Ich habe ernsthaft keine Ahnung, was jetzt los ist. Es scheint eine Art Timing-Problem zu sein, aber das Datenblatt sagt, wann immer Sie den ADC-Ausgang lesen, verriegelt er und gibt Ihnen den letzten.

Bei der Fehlerbehebung einiger ADC-Probleme schlug jemand anderes auf dieser Website vor, eine bekannte, feste Spannung an den Eingang zu speisen. Sehen Sie, was Ihnen das bringt
Ein Schema Ihrer Schaltung und ein Foto, das Ihre Konstruktionstechnik zeigt, könnte uns helfen zu verstehen, was los ist.

Antworten (2)

Aha, ich habe endlich die Antwort in diesem Code gefunden !

Das Datenblatt erwähnt ein paar "Zerhacker" - ADC-Zerhacker und PGA-Zerhacker, sagt aber nicht wirklich, was sie sind, und zumindest im Fall des ADC-Zerhackers gibt es nur einen Wert, der nicht reserviert ist (aus). Es stellt sich heraus, dass der nicht reservierte Wert nicht der Standardwert ist! Wenn Sie den ADC-Chopper ausschalten, wird er die seltsame Dreieckswelle los. Es bleibt eine Sinuswelle mit kleiner Amplitude, aber wenn Sie den PGA-Chopper ausschalten, geht das auch. Hier ist der relevante Code ( writeRegist die offensichtliche Implementierung).

writeReg(OTP_B1, 0x30);
writeReg(PGA, PGA_OUTPUT_BUFFER_ENABLE | PGA_PGACHPDIS);

Blödes Datenblatt.

Ohne weitere Informationen ist es schwierig, ein bestimmtes Problem zu diagnostizieren, aber es gibt ein paar Dinge, die Sie ausprobieren können:

  • Wenn Sie ein Oszilloskop haben, können Sie das Eingangssignal zum ADC direkt messen, um festzustellen, ob das Rauschen in Ihrer Schaltung liegt (und somit der ADC ordnungsgemäß funktioniert) oder intern im ADC.
  • Wird Ihr Design von einer externen Versorgung mit Strom versorgt? Wenn dies der Fall ist, koppeln Sie möglicherweise Rauschen über das Stromversorgungssystem in Ihr System ein.
  • Auf Seite 26 des von Ihnen bereitgestellten Datenblatts befindet sich eine Referenzschaltung. Wie nah ist Ihre Schaltung daran, insbesondere in Bezug auf die Platzierung von Kondensatoren?
  • 128 ist eine riesige Menge an Verstärkung; Wie ändert sich der Signalpegel, wenn Sie ihn herunterfallen lassen?

  • Sie sagten, Sie hätten die Diff-Eingänge zusammengebunden; Hast du sie an einen bestimmten Schaltungspunkt gebunden? Ohne das ist es möglich, dass Sie Probleme mit der Gleichtaktunterdrückung haben.

Lärm ist ein wirklich schwierig zu lösendes Problem; Wenn Sie seine Quelle nicht isolieren können, stecken Sie ein wenig fest. Suchen Sie nach Signalen, die mit etwa 1 oder 2 Hz laufen, oder nach Signalen mit noch höherer Frequenz, die mit dieser Rate platzen oder darauf gleichgerichtet werden könnten. Unter der Annahme, dass Ihre y-Achsen-Beschriftungen die 24-Bit-Ganzzahlwerte sind, die Sie von Ihrem ADC erhalten, sieht es so aus, als ob Ihr Grundrauschen immer noch bei ~ -55 dBFS liegt; Ich weiß nicht, wie hoch Ihre Signalpegel sind, aber haben Sie versucht, anstelle des internen PGA einen schönen, leisen Operationsverstärker für Ihr Eingangssignal zu verwenden? Je nach Lärmquelle könnte Ihnen das das Leben erleichtern.

EDIT: Neue Idee: Sie sagen nicht, ob Sie den ADC kalibriert haben. Das Datenblatt enthält ein ziemlich umfangreiches Kapitel über Kalibrierungsverfahren, das es wert wäre, durchgelesen zu werden, um einige potenzielle interne Fehler zu beseitigen. Moral der Geschichte: Lesen Sie im Zweifelsfall das Datenblatt erneut.

Siehe meine aktualisierte Frage. Es sieht aus wie ein seltsames Timing-Problem oder I2C-Problem ... Auf jeden Fall bin ich ziemlich zuversichtlich, dass es jetzt angesichts der Form des Diagramms und seiner Unabhängigkeit von der Verstärkung nicht um Rauschen oder Kalibrierung geht.