Spannung messen mit ADS1115

Hallo,
ich stehe vor einem kleinen Problem.
Ich möchte mit dem ADS1115 die Spannung die an einem Shunt abfällt messen.
Jedoch habe ich das problem, das die Spannung die ich messen will, komplett extern vom arduino ist.
Er zeigt somit beim messen an A2 und A3 komplett willkürliche werte im kompletten eingestellten messbereich an.
der A0 eingang welchen ich zum test mit dem arduino pin 3,3v verbunden habe, der zeigt absolut konstant die gemessenen 3,3v an, nur eben die der externen spannung nicht, hat da jemand einen rat was ich da machen kann?
edit: die spannung die am shunt anliegt sind 5v, der ads1115 kann ja nur bis ~6v messen :wink:

hier mal ein bild welches es in etwa zeigt (sry ist mein erster versuch mit fritzing)

Dann zeig doch mal deine Sketch.
Hats du den ADS1115 auch richtig eingestellt ?
Soweit ich erinnere muss der auf differencial gestellt werden. Hast du das ?

das ist es ja, es ist komplett egal welchen sketch ich nehme, ich habe mitrerweile gefühlte 30 verschiedene probiert
mit 1 verbindung, also nur 1 seite vom shunt messen, 2 seiten etc
unterschiedliche bibiotheken usw

hier mal 2 die ich versucht habe

#include <Wire.h>
#include <Adafruit_ADS1015.h>
 
Adafruit_ADS1115 ads;
const float multiplier = 0.1875F;
 
void setup(void) 
{
  Serial.begin(9600);
 
  // Descomentar el que interese
  // ads.setGain(GAIN_TWOTHIRDS);  +/- 6.144V  1 bit = 0.1875mV (default)
  // ads.setGain(GAIN_ONE);        +/- 4.096V  1 bit = 0.125mV
  // ads.setGain(GAIN_TWO);        +/- 2.048V  1 bit = 0.0625mV
  // ads.setGain(GAIN_FOUR);       +/- 1.024V  1 bit = 0.03125mV
  // ads.setGain(GAIN_EIGHT);      +/- 0.512V  1 bit = 0.015625mV
  // ads.setGain(GAIN_SIXTEEN);    +/- 0.256V  1 bit = 0.0078125mV 
  ads.begin();
}
 
void loop(void) 
{
  int16_t adc0, adc1, adc2, adc3;
 
  
  adc0 = ads.readADC_SingleEnded(0);
  adc1 = ads.readADC_SingleEnded(1);
  adc2 = ads.readADC_SingleEnded(2);
  adc3 = ads.readADC_SingleEnded(3);
  Serial.print("AIN0: "); Serial.println(adc0 * multiplier);
  Serial.print("AIN1: "); Serial.println(adc1 * multiplier);
  Serial.print("AIN2: "); Serial.println(adc2 * multiplier);
  Serial.print("AIN3: "); Serial.println(adc3 * multiplier);
  Serial.println(" ");
  
  delay(1000);
}
#include <Wire.h>
#include <Adafruit_ADS1015.h>

// Adafruit_ADS1115 ads;  /* Use this for the 16-bit version */
Adafruit_ADS1015 ads;     /* Use thi for the 12-bit version */

void setup(void)
{
  Serial.begin(9600);
  Serial.println("Hello!");
  
  Serial.println("Getting differential reading from AIN0 (P) and AIN1 (N)");
  Serial.println("ADC Range: +/- 6.144V (1 bit = 3mV/ADS1015, 0.1875mV/ADS1115)");
  
  // The ADC input range (or gain) can be changed via the following
  // functions, but be careful never to exceed VDD +0.3V max, or to
  // exceed the upper and lower limits if you adjust the input range!
  // Setting these values incorrectly may destroy your ADC!
  //                                                                ADS1015  ADS1115
  //                                                                -------  -------
  // ads.setGain(GAIN_TWOTHIRDS);  // 2/3x gain +/- 6.144V  1 bit = 3mV      0.1875mV (default)
  // ads.setGain(GAIN_ONE);        // 1x gain   +/- 4.096V  1 bit = 2mV      0.125mV
  // ads.setGain(GAIN_TWO);        // 2x gain   +/- 2.048V  1 bit = 1mV      0.0625mV
  // ads.setGain(GAIN_FOUR);       // 4x gain   +/- 1.024V  1 bit = 0.5mV    0.03125mV
  // ads.setGain(GAIN_EIGHT);      // 8x gain   +/- 0.512V  1 bit = 0.25mV   0.015625mV
  // ads.setGain(GAIN_SIXTEEN);    // 16x gain  +/- 0.256V  1 bit = 0.125mV  0.0078125mV
  
  ads.begin();
}

void loop(void)
{
  int16_t results;
  
  /* Be sure to update this value based on the IC and the gain settings! */
  float   multiplier = 3.0F;    /* ADS1015 @ +/- 6.144V gain (12-bit results) */
  //float multiplier = 0.1875F; /* ADS1115  @ +/- 6.144V gain (16-bit results) */

  results = ads.readADC_Differential_0_1();  
    
  Serial.print("Differential: "); Serial.print(results); Serial.print("("); Serial.print(results * multiplier); Serial.println("mV)");

  delay(1000);
}

beim ersten bekomme ich nur beim kanal der mit 3,3v am arduino verbunden ist einen wert der brauchbar ist, die anderen hüpfen umher wie sie wollen

beim zweiten (und ja, der shunt ist an A0 und A1 angeschlossen) kommt immer
10:45:05.608 -> Differential: 0(0.00mV)
10:45:06.611 -> Differential: -1(-3.00mV) >> hin und wieder mal ein ausreißer
und da ist es egal ob am shunt 0a durch gehn oder 5a....

Ich habe es selbst noch nie probiert, aber bei Google finde ich sehr viele nützliche Informationen darüber.

google hab ich auch bereits bis zum abwinken genutzt, daher hab ich ja soviele verschiedene sketche , bibiotheken etc versucht
die messung klappt immer nur dann, wenn ich die spannung am arduino selbst messe, bei externer spannung messen war es immer nur müll, also unbrauchbar.... :frowning:

Ok, sorry, aber direkt kann ich nicht weiter helfen.

Hier ist ein interessanter Beitrag, der weiterhelfen könnte.

danke
hab zum test den ads1115 an den selben ground verbunden wie die zu messende spannung, dann misst er garnichtsmehr....
ich glaub ich lass es und werf alles in die ecke, macht echt keinen spaß ^^

Muss man nicht die GNDs miteinander verbinden?
Sonst hängt das Potential doch in der Luft...?!

Dann gibst du aber schnell auf.
Einfach noch etwas warten, evtl. kommt noch einer, der dir hilft.

Hi,

hast Du mal getestet, ob anstelle des Motors bei einem 50 Ohm Widerstand (oder ähnlich) plausible Werte rauskommen? Wenn ja, dann ist der Motor als induktive Last der Übeltäter. Dann muss die Messspannung über ein RC-Glied gefiltert werden. Wie versorgst Du beide Seiten der Schaltung? Jeweils über Netzteil, oder tatsächlich (wenigstens eine Seite) mit Batterien/Akku?

Gruß André

Hi,
als last habe ich mitrerweile mehrere sachen probiert, motor, widerstand, einstellbare digitale last, .....
spannungsquelle für den arduino ist 5v vom pc (wird jedoch wenn es doch mal funktionieren sollte) durch ein dc dc step down converter dann mit 5v versorgt
die zu messende spannung wird im finalen dann ein dc netzteil sein

Hi,
dann frage ich nochmal anders: Nimst Du derzeit ein Netzteil, oder 2 verschiedene? Bei 2 verschiedenen Netzteilen, PC + zusätzliches Netzteil (o.ä.) kannst Du zwischen beiden GND eine kleine Fehlspannung haben ...
Ein Defekt/Fälschung kommt dann in Frage, wenn du gar keine plausiblen Messungen auf dem Kanal bekommst.

Gruß André

es sind 2 verschiedene
ich werde im laufe der woche nochmal nen testaufbau machen und dann versuchen 1 zu nehmen, mal schauen was dann dabei raus kommt

Hast du dein Problem gelöst???
Du musst die Spannungen auf ein Potential bringen.
Minus der Batterie auf GND. Dann sollte das funktionieren.
Hier wirst du fündig.
https://www.mikrocontroller.net/topic/498668

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.