Verständnisfrage zu ADC-Wert beim Spannungsteiler

Hallo liebe Community,

ich möchte euch um Rat fragen, da ich nicht im Entferntesten über die Hardware Erfahrung und Verständnis verfüge.

Es geht darum, dass ich vorhabe einen kleinen 3,3V DC-Motor per Taster für ein 1-2 Sekunden zu aktivieren. Außerdem möchte ich eine LED immer dann anschalten, wenn der Motor aktiv ist. Das Ganze möchte ich dann mit einer 3,3V Batterie betreiben. Wenn der Taster nicht gedrückt wird befindet sich der Prozessor (AVR ATtiny-x, dieser Wird noch von mir bestimmt) im Tiefenschlaf, um so die Batterie möglichst wenig zu „belasten“. Per WDT wird der Prozessor alle 125mS geweckt und fragt den Taster ab.

Es soll zusätzlich zur Taster Abfrage auch die Spannung/Kapazität des Akkus „gemessen“ werden. Wenn die Spannung zu tief ist, dann soll die LED in der Farbe Rot kurz aufblinken, um so zu signalisieren, dass der Akku geladen werden soll.

Mein Ansatz ist, dass ich per Spannungsteiler (dieser wird per Transistor „aktiviert“) am Anlog-Pin den analogen Wert auslese und beim unter-, oder überschreiten eines von mir festgelegten Schwellwert die LED entsprechen aktiviere.

Soweit so gut…

Ich habe mich jetzt an die Arbeit gemacht und mir als Test mein UNO geschnappt. Zusätzlich habe ich ein OLED angeschlossen, um mir den analogen Wert und die berechnete Spannung darstellen zu lassen.

Es ist folgendes passiert, was ich ehrlich gesagt nicht nachvollziehen kann:
Wenn ich den Arduino per USB-Kabel mit Strom versorge, dann bekomme ich eine fast genau Spannung angezeigt. Auf dem Display wird mir 4,79 und ein analoger Wert von 510 angezeigt. Mit meinen Multimeter messe ich eine Spannung von 4,91V.

Wen ich jetzt aber den Arduino mit meinem Labornetzteil amit 5V bestrome, dann erhalte ich ganz andere Werte. Mein Multimeter misst 4,96V, aber auf dem Display wird mir eine Spannung von genau 6V angezeigt. Auch der analoge Wert hat sich auf 639 geändert.

Woran liegt es, das sich beide Werte geändert haben. Klar, der Spannungswert ist per Formel berechnet, aber der ADC-Wert wird ja am Spannungsteiler gemessen. Da habe ich auch noch mit meinem Multimeter nachgemessen. Mit USB-Kabel messe ich 2,401V und mit Labornetzteil messe ich 2,476V.

Führt die Differenz von 0,075V zu dieser starken Veränderung am ADC?

Danke für deine Anteilnahme.
Gruß

Beim UNO gibt es analogReference() zur Einstellung der Referenzspannung, beim ATtiny könnte es anders sein, weiß ich gerade nicht.

Zumindest ist die Wahl der Referenzspannung wichtig, um das Verhalten einschätzen zu können.

danke für deine Anteilnahme.

Für mich ist es unverständlich, warum sich bei nahezu dem gleichen Spannungswerten der ADC-Wert so stark verändert?

Wobei sich wie erwähnt die Spannung am Spannungsteiler und damit am Eingang des ADC nicht groß ändert.

Gruß

Das liest sich merkwürdig, das kann ich mir nicht vorstellen. Daher bitte

  • Schaltplan
  • Programm

zeigen.

Na ja, üblicher Spannungsteiler mit 2x 10K Ohm Widerstände. Außer das ich mit der Spannung vom Labornetzteil in den Vin-Pin vom UNO gehe ändert sich nicht.

Für mich auch!
Code geheim, Schaltplan geheim.
Woher soll ich wissen was du tust?

Deine Prosa, ist da nicht wirklich aussagekräftig. Denn wenn deine Annahmen so richtig wären, bräuchtest du nicht zu fragen.

schön, das man hier so angegangen wird.

Darf ich euch ein Schaltplan zeichnen, auf dem man ein Spannungsteiler sieht?
Und mein Programmcode, auf dem man sieht wie man ein anlogen Pin auslese?

Kein Problem, mach ich eich fertig. Aber dann bitte nicht weiter zeigen, ist sehr geheim!

Nach mehreren Jahren in diesem Forum teile ich mit @combie die Erfahrung, daß sich der Fehler irgendwo zwischen Deiner Beschreibung und der Realität versteckt. Bewährte Suchhilfsmittel sind Programmlistings, Schaltpläne und Fotos.

Ich muß Dir nicht helfen, werde jetzt mein Mittagessen in Angriff nehmen.

Ich weiß, dass man mit dem ADC eines AVR durchaus brauchbare Spannungsmessungen hin bekommt!
Leider scheint dir das mit deiner Schaltung und deinem Programm nicht zu gelingen.

Natürlich darfst du das geheim halten.
Nur:
Wie soll man dir dann helfen?

Natürlich darfst du den Hinweis auf diese Diskrepanz persönlich nehmen!
Ist deine Entscheidung.
Aber hilft dir das aufs Pferd?

Linkes Bild:
Oled mit 9V verbunden
Resultat: Rauch! (ohne Gewähr)

Rechtes Bild:
Vin mit 5V verbunden
Resultat: Rauch! (ohne Gewähr)

Ich sehe den versprochenen Transistor nicht.

Ratiometrische Messung
Absolute Messung
Tipp: Dazwischen wirst du dich entscheiden müssen.

Ich habe meinen Fehler gefunden!

Dazu habe ich euch ein Schaltbild hinzugefügt. Ich hoffe man kann gut nachvollziehen, wie ich den Fehler enteckt habe.

Das Schaltbild zeigt 2x den fast identischen Schaltplan. Mein UNO wird per Labornetzteil mit 5V betrieben. Der analoge Pin A0 misst am Spannungsteiler.

Wie man sehen kann ist auf der linken Darstellung der Spannungsteiler NICHT mit dem 5V-Pin der UNOs verbunden. Und bei dieser Variante misst der ADC einen anderen Wert.

Bei der rechten Darstellung habe ich den Spannungsteiler zusätzlich mit der 5V-Spannung des UNOs verbunden. Jetzt spukt mir der ADC den selben Wert aus, als wenn der UNO nicht mit dem Labornetzteil, sondern per USB betrieben wird.

Das war das Problem.

Wobei ich noch mal erwähnen möchte, dass die Spannungsmessung am ADC-Eingang A0 beim UNO sich dadurch quasi nicht verändert hat!

ABER!

Wenn ich jetzt an meinem Labornetzteil die Spannung von 5V Schrittweise um 0.001V runter regel, dann tut sich bei dem rechten Aufbau nichts am Wert des ADC. Jedenfalls zeigt mir das Display keine Änderung an. Die Messung per Multimeter zeigt am ADC-Eingang A0 eine Spannungsänderung an.

Bei dem linken Aufbau hingegen gibt es eine Änderungsdarstelleung auf dem Display des ADC-Wertes.

#include <Arduino.h>
#include <U8x8lib.h>
U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(U8X8_PIN_NONE);   
int var = 112;

#define PIN_TEST A0
#define REF_VOLTAGE    4.8
#define PIN_STEPS   1023.0

void setup(void) {
    Serial.begin(9600);
    pinMode(PIN_TEST, INPUT);
    
    u8x8.begin();
    u8x8.setPowerSave(0);
}

void loop(void) {  
    u8x8.setFont(u8x8_font_chroma48medium8_r);
    u8x8.setCursor(5,10);
    u8x8.print(analogRead(PIN_TEST));    
    u8x8.setCursor(5,20);
    u8x8.print((analogRead(PIN_TEST)*(REF_VOLTAGE/PIN_STEPS)) * 2);    
    u8x8.refreshDisplay();    // only required for SSD1606/7  
    delay(2000);
}

Die Batterie soll nur das Labornetzteil darstellen. Ich weiss nicht, wie man bei fritzing ein Labornetzteil am besten darstellen kann.

Ja, weil da kein Transistor verbaut ist.

Versprochen!?!

Den hast Du aber in #1 beschrieben. Was stimmt denn nun?

Gruß Tommy

Bei ratiometrischen Messung ist das so!

Vieles ist relativ, Spannungen sind es auch, siehe Link in #2.

Das wesentliche beim rechten Bild dürfte sein, dass der 5V-Pin des Arduino mit dem Netzteil verbunden ist. Mit 5V am Vin funktioniert der UNO nicht richtig. Da werden mindestens 7V benötigt.
Beim linken Bild hängt zwar der Spannungsteiler an den 5V, der Prozessor auf dem UNO bekommt aber keine stabile Spannung, die auch deutlich unter 5V liegt.

@MicroBahner

Danke für dein Tipp.
Wie beschrieben misst der UNO bei 9V korrekt die Spannung vom Spannungsteiler. Sobald ich den UNO mit 5v betreibe misst der unkorrekt.

So wie ich das sehe, sind alle Lösungen und Probleme schon benannt worden.
Aber da du das wohl übersehen hast, gerne nochmal:

  1. Bei beiden Bildern sehe ich Brandgefahr! (Rauch und Zerstörung)
  2. Solltest du absolute Messungen machen, wenn du absolute Werte bekommen möchtest.

Aber dann hoffentlich nur nach dem linken Bild ! Der UNO darf nur mit 5V betrieben werden. Die Spannung am Vin wird auf dem UNO über einen Spannungsregler auf 5V gebracht.
Im rechten Bild hast Du Vin und 5V kurzgeschlossen. Wenn Du da dein Labornetzteil auf >5V einstellst, geht dein UNO schnell in die ewigen Jagdgründe ein.