Diesen Beitrag löschen

bitte löschen Sie diesen Beitrag

Either let your Aref float or place a 0.1uf to ground and your problem should go away. Currently you are connecting the battery voltage to the output of the regulator on the Arduino where it has no clue as to what is happening. At that point you can try without the ADS1115. All of the parts will run on 5V but the Nano is limited to 3V3 on its inputs. I believe you can use the Nano 3V3 out to power the ADS1115 and eliminate level translators. These are best guesses as I do not really know what you have and your schematic only shows some lines and a 5V battery (I have never seen one). What is U2?

Lassen Sie entweder Ihren Aref schweben oder legen Sie einen 0,1uf auf Masse und Ihr Problem sollte verschwinden. Derzeit verbinden Sie die Batteriespannung mit dem Ausgang des Reglers auf dem Arduino, wo er keine Ahnung hat, was passiert. An diesem Punkt können Sie es ohne den ADS1115 versuchen. Alle Teile werden mit 5 V betrieben, aber der Nano ist an seinen Eingängen auf 3 V3 begrenzt. Ich glaube, Sie können den Nano 3V3-Ausgang verwenden, um den ADS1115 mit Strom zu versorgen und Pegelübersetzer zu eliminieren. Dies sind die besten Vermutungen, da ich nicht wirklich weiß, was Sie haben, und Ihr Schaltplan nur einige Leitungen und eine 5-V-Batterie zeigt (ich habe noch nie eine gesehen). Was ist U2?

In welcher Zeile steht das? Die interne Referenzspannung ist nicht angegeben, und ist vermutlich kleiner als 2V. Im DB sind auch genaue Angaben über internes Rauschen.

The ADS111x perform conversions at data rates up
to 860 samples per second (SPS). The PGA offers
input ranges from ±256 mV to ±6.144 V, allowing
precise large- and small-signal measurements. The
ADS1115 features an input multiplexer (MUX) that
allows two differential or four single-ended input
measurements. Use the digital comparator in the
ADS1114 and ADS1115 for under- and overvoltage
detection.
Der ADS111x führt Konvertierungen mit Datenraten von bis zu
bis zu 860 Abtastungen pro Sekunde (SPS). Der PGA bietet
Eingangsbereiche von ±256 mV bis ±6,144 V und ermöglicht
präzise Groß- und Kleinsignalmessungen. Der
ADS1115 verfügt über einen Eingangsmultiplexer (MUX), der
zwei differentielle oder vier Single-Ended-Eingänge ermöglicht
Messungen ermöglicht. Verwenden Sie den digitalen Komparator im
ADS1114 und ADS1115 zur Unter- und Überspannungserkennung
Erkennung.


Übersetzt mit www.DeepL.com/Translator (kostenlose Version)

Und Deine Spannung quelle ist auch Minimum 3 Nachkommastellen stabil?
oder wir das im Programm berücksichtig ?

Ein ADC verstärkt überhaupt nichts. Er vergleicht eine Eingangsspannung mit einer vorgegebenen Referenzspannung. Bei einer Referenzspannung von 5V hast Du eine Auflösung von ≈4,88 mV je Bit. Liegen beispielsweise 2V am analogen Pin an wird das einen Wert von 2V/4,88mV ≈ 410 ergeben.

Arbeitest Du mit einer Referenzspannung von 1,1V hast du eine entsprechend höhere Aufllösung (1,1V/1024).

Mehr dazu gibt es hier zu lesen:
https://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC

Vielleicht, weil das ein 16 Bit ADC ist und Du 2^15 statt 2^16 rechnest? Und der Maximalwert eigentlich 65535 (ab 0 gezählt) und nicht 32767 ist? Vielleicht weil in der Schaltung sonst noch etwas nicht so ganz "koscher" ist? Ich weiß es nicht. So genau habe ich mir Dein Problem nicht angeschaut.

Ich habe nur versucht klar zu stellen, dass ein ADC kein Verstärker ist. Außerdem habe ich auf die Mikrocontroller.de Seite verlinkt, damit du dich mit der Funktionsweise eines ADCs auseinander setzen kannst und Du vielleicht selber auf die Lösung kommst.

Ok, bei bipolarer Spannungsmessung passt das mit 2^15.
Vielleicht hilft dir ja dieser Link weiter:

Das hilft Dir jetzt wahrscheinlich auch nicht konkret bei Deinem Problem weiter, aber der von Dir verwendete Chip hat einen PGA (programmable gain amplifier eingebaut). Daher kommen die 6,144V. Was aber wohl auch von einer Betriebsspannung abhängt die hochgenug sein muss:

Daraus zitiert:

PGAs finden vor allem im Bereich der Messtechnik Anwendung, um die Empfindlichkeit einer Messung mit ADC (die Signale nur diskret und von deren Betriebsspannung abhängig, verarbeiten können) zu verbessern. Die Möglichkeit einen internen Multiplexer zu verwenden, hat den Vorteil, dass nur wenige Pins des steuernden Elements (Mikrocontroller) verwendet werden müssen.

1 Like

Es gibt Spannungsvervielfachungsschaltungen:

Das ist für Wechselspannung. Für Gleichspannung gibt es aber sehr ähnliche Ladungspumpen wie sie bei DC-DC-Wandlern zum Einsatz kommen. Oder z.B. bei RS232 Pegelwandlern um die +/-12V zu erzeugen. Die basieren aber auch dem gleichen Dioden + Kondensator Prinzip und einer Rechteckspannung.

@Serenifly hat es in seinem Posting erwähnt. Mit einer Ladungspumpe kann eine Spannungserhöhung oder Negierung bei Gleichstrom erfolgen.

https://dewiki.de/Lexikon/Ladungspumpe

Als (praktischen) IC wäre da z.B. der TC962 zu nennen. Mit dem kann man beispielsweise aus einer positiven Spannungsquelle bipolare Spannung für z.B. einen OpAmp erzeugen, oder auch, je nach Beschaltung, eine Spannungserhöhung (ohne Trafo) erreichen.

Aber ich vermute, im Prinzip hast Du das auch schon gewusst :wink: . Wie das konkret auf dem A1115 funktioniert weiß ich nicht. Wie ein PGA im Detail funktioniert weiß ich ebenfalls nicht.

Praktisch ist es natürlich ein wichtiger Unterschied. Aber um das Prinzip zu verstehen ist es nicht schlecht wenn man damit anfängt und das dann auf eine rechteck-förmige Gleichspannung erweitert. Auch bei der Wechselspannung wird diese ja durch die Diode sofort gleichgerichtet, was ähnlich ist.

Stichwort: Sample and Hold Kondensator

Es kann sein dass der Strom zu gering ist (oder auch dass sich ein Signal zu schnell ändert) so dass der S&H Kondensator nicht schnell genug umgeladen werden kann. Das kann man durch einen Impedanzwandler beheben

Du verwechselst dauerhaft was
Die 6,144 ist die Maximale Eingangspannung bei SPS von 860, und keine Referenzspannung die Eingangspannung ist einstellbar, wen irgend wo was anderes schreiben ist das Unsinn hoch 2.
Nicht um sonst scheribt TI sehr genauen Datenblatt, an das sollte man sich halten

"Bausteine enthalten eine Spannungsreferenz mit geringer Abweichung und
einen Oszillator. Die ADS1114 und ADS1115 enthalten außerdem
einen programmierbaren Verstärker (PGA) und einen
einen digitalen Komparator. Diese Merkmale, zusammen mit einem
weiten Betriebsspannungsbereich ist der ADS111x gut für
für Sensor-Messanwendungen mit begrenztem Strom- und Platzbedarf
Messanwendungen.
Der ADS111x führt Konvertierungen mit Datenraten von bis zu
bis zu 860 Abtastungen pro Sekunde (SPS). Der PGA bietet
**Eingangsbereiche** von ±256 mV bis ±6,144 V und ermöglicht
präzise Messungen von großen und kleinen Signalen. Der
ADS1115 verfügt über einen Eingangsmultiplexer (MUX), der
zwei differentielle oder vier Single-Ended-Eingänge ermöglicht
Messungen ermöglicht. Verwenden Sie den digitalen Komparator im
ADS1114 und ADS1115 zur Unter- und Überspannungserkennung
Erkennung."

"The ADS111x perform conversions at data rates up to 860 samples per second (SPS). The PGA offers input ranges from ±256 mV to ±6.144 V, allowing precise large- and small-signal measurements. The ADS1115 features an input multiplexer (MUX) that allows two differential or four single-ended input measurements" .

Versuch mall damit

[code]
//
//    FILE: ADS_continuous.ino
//  AUTHOR: Rob.Tillaart
// VERSION: 0.1.1
// PURPOSE: read analog input
//

// test
// connect 1 potmeter
//
// GND ---[   x   ]------ 5V
//            |
//
// measure at x (connect to AIN0).


#include "ADS1X15.h"

// choose you sensor
// ADS1013 ADS(0x48);
// ADS1014 ADS(0x48);
// ADS1015 ADS(0x48);
// ADS1113 ADS(0x48);
// ADS1114 ADS(0x48);
ADS1115 ADS(0x48);


void setup()
{
  Serial.begin(115200);
  Serial.println(__FILE__);
  Serial.print("ADS1X15_LIB_VERSION: ");
  Serial.println(ADS1X15_LIB_VERSION);

  ADS.begin();
  ADS.setGain(0);      // 6.144 volt
  ADS.setDataRate(7);  // fast
  ADS.setMode(0);      // continuous mode
  ADS.readADC(0);      // first read to trigger
}

void loop()
{
  Serial.println(ADS.getValue());
}

// -- END OF FILE --
[/code]
1 Like

Das macht Sinn...

Ich verstehe nicht was der TO macht der ADS kann auch direkt in Volt die werte ausgeben.
Vermute das der ADS das genauer macht als den Procesor mit float quellen

unittest(test_Voltage)
{
  ADS1115 ADS(0x48);
  assertTrue(ADS.begin());

  // should test all values?
  ADS.setGain(0);
  float volts = ADS.getMaxVoltage();
  float delta = abs(6.144 - volts);
  assertMoreOrEqual(0.001, delta);

  ADS.setGain(16);
  volts = ADS.getMaxVoltage();
  delta = abs(0.256 - volts);
  assertMoreOrEqual(0.001, delta);
}

Na ja nicht mein Problem.

Ich habe nun auch mal ins Datenblatt geschaut. Die Dinge erscheinen mir jetzt etwas klarer.

Dort steht u.a. in 9.3.3 folgendes:

Die analogen Eingangsspannungen dürfen die in den absoluten Maximalwerten angegebenen Grenzwerte für die analoge Eingangsspannung nicht überschreiten. Wenn eine VDD-Versorgungsspannung von mehr als 4 V verwendet wird, können die Eingangsspannungen dank des Skalenendwertes von ±6,144 V bis zur Versorgungsspannung reichen.

Allerdings kann in diesem Fall (oder immer dann, wenn die Versorgungsspannung unter dem Skalenendwert liegt, z. B. VDD = 3,3 V und Skalenendwert = ±4,096 V) kein ADC-Ausgangscode mit vollem Skalenendwert erzielt werden.

Beispielsweise können bei VDD = 3,3 V und FSR = ±4,096 V nur Signale bis VIN = ±3,3 V gemessen werden. Der Codebereich, der Spannungen |VIN| > 3,3 V darstellt, wird in diesem Fall nicht verwendet.

Der Bereich bis 6.144V wird also nur dann ganz ausgenutzt, wenn die Versorgungsspannung des ICs >= 6,144V und <= 7V ist. Und dann natürlich auch das Messsignal bis 6,144V gegeben ist

Das bedeutet, wenn die Schaltung mit 5V Versorgungspannung betrieben wird, wird (logischer Weise) auch nur eine AD-Eingangsspannung bis 5V gemessen und somit nicht die ganzen 15 (positiven) Bit ausgenutzt. Der Maximalwert wird dann ≈ 26.667 betragen -> (5 / 187,5)*10^6

Um die Messgenauigkeit zu erhöhen ist es dann evtl. sinnvoll den ADC Eingang mit einem Spannungsteiler zu versehen. Beispielsweise so:

Messignal (max 5V) >--[68k]----[47k]--- GND
	                        |
                         2.0435V
                            |
                         ADS1115

Der Messbereich des ADS1115 wird auf 2.048V eingestellt und somit erreicht man eine Auflösung von 62,5µV und einen Maximalwert von 32688. Für den wahren Spannungswert muss das Teilerverhältnis vom Programm eingerechnet werden. Also Messwert/V * (1+68/47).

Temperaturabhängigkeiten, Toleranzen der Widerstände, Rundungsfehler mal nicht berücksichtigt.

Da aus dem Teil die gemessene Spannung, wie in diesem Thread bereits erwähnt, direkt auslesen kann, muss nur diese umgerechnet werden.

@Serenifly: Der AD-Wandler ist ein Delta-Sigma AD. Kein Sample and Hold. Dagegen spricht schon die hohe max. mögliche SPS Rate.

Wir wissen nicht wie der TO das rechnet, und den Spannungs bereich = welche Temperaturen gemessen werden. Die Max SPS hat das größtes Rauschen.

Wir wissen nicht wie der TO das rechnet, und den Spannungsbereich

Ja das ist richtig. Der TO wahrscheinlich auch nicht. In dem Schaltbild im Eröffnungspost ist AREF unnötiger Weise an VCC angeschlossen.

Wird eine externe Referenz verwendet, so wird diese an AREF angeschlossen. Aber aufgepasst! Wenn eine Referenz in Höhe der Versorgungsspannung benutzt werden soll, so ist es besser, dies über die interne Referenz zu tun. Außer bei anderen Spannungen als 5V bzw. 2,56V gibt es eigentlich keinen Grund, an AREF eine Spannungsquelle anzuschließen. In Standardanwendungen fährt man immer besser, wenn die interne Referenzspannung mit einem Kondensator an AREF benutzt wird. Die 10µH-Spule L1 kann man meist auch durch einen 47Ω-Widerstand ersetzen.

Quelle: https://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC

Das könnte evtl. für seine Probleme mit der Messung direkt am Controller mit verantwortlich sein.

Außerdem lässt der Eröffnungspost vermuten, dass alle Messungen mit dem später verwendeten AD1115 immer auf die volle 6.144V Spanne bezogen wurden.

Auf 1/1000 genau messen zu wollen erscheint mir auch sportlich.

Ich fürchte, dass ich da nicht mehr weiterhelfen kann.

Das verstehe ich nicht. Mit den 3-4 mV Schwankung kannst Du leben, aber nicht "mit den Bytes"?
Die "Bytes" sind doch nur die Representation der Spannung, also grob gesagt, das Gleiche. Wo konstruierst Du Dir da ein Problem?

Gruß Tommy

5V Referenz Spannung hat immer VCC Wert und der ist selten 5V, und den nehmt man zu Berechnung, was für Referenz hat dein Board keine Ahnung.
Noch was float rechnen mit Procesor ist nicht optimal, es wird per Software gerechnet, dadurch passiert das es bei Bit Rechnung Letze stelle floatet. Hat dein Board Coprozessor?