Messgerät bis 16 und 45 Volt DC

Fertige Geräte mit Bilden, Schaltungen, Programmen vorstellen.
Der Alte
Beiträge: 35
Registriert: So 28. Jun 2020, 09:07
Kontaktdaten:

Re: Messgerät bis 16 Volt DC

Beitrag von Der Alte »

Ich habe folgenden Test gemacht:

Rechteckspannung 1 kHz, 0 - 4,8 Volt:

Testprogramm auf dem Uno:

Code: Alles auswählen

char Name[] = "(CIK) Voltmeter" ;

#include <Adafruit_ADS1015.h>
Adafruit_ADS1115 ads0 (0x48);

#include <Wire.h>


int16_t adc0, w, l ;

void setup() {
    Serial.begin(9600);
    Serial.println(Name);
    Wire.begin();
    
    pinMode(A0,INPUT);
}

void loop() {
  adc0 = analogRead(A0);  // A0
  //adc0 = ads0.readADC_SingleEnded(0); // ADS1115
  if (adc0 > w) { w = adc0; } 
  l++; if(l>50) {Serial.println(w); l=0; w=0; }
  delay(1);
}
Ergebnis:

beim ADS1115 liegt die max. Abtastrate bei 800 Hz

bei 2,5 Volt (Ref 2,500 V) habe ich eine Ausgabe von 13320 Digit erechnete Abweichung -0,0002 Volt
Für die Rechteckspannung ist die Abtastrate zu niedrig, es gibt kein eindeutiges Ergebnis. Die Abtastrate müsste um den Faktor 10 höher sein, als die Frequenz des Rechtecksignals. Im Audiobereich gibt es sehr schnelle D/A-Wandler.

bei Verwendung des Port A0 liegt die Abtastrate bei max 10000 Hz

bei 2,5 Volt (Ref 2,500 V) habe ich eine Ausgabe von 523 Digit erechnete Abweichung -0,06 Volt
Für die Rechteckspannung ergibt sich eine Ausgabe von 955 Digits mit Schwankung von ca. 6 Digits entspricht 4,67 Volt (Referenz = 4,8 Volt)

Ingo
Der Alte
Beiträge: 35
Registriert: So 28. Jun 2020, 09:07
Kontaktdaten:

Re: Messgerät bis 16 Volt DC

Beitrag von Der Alte »

Hallo Franz,

ich fasse zusammen: Es geht darum die max. Spannung eines PWM-Signals unabhängig vom Tastverhältnis und der Frequenz (ohne Ozi) festzustellen - es geht nicht um ein allgemeines Rechteck-Signal!

Nur für PWM nicht für Recheck!
Deshalb möchte ich mal einen anderen Messansatz vorstellen: Am Messeingang (z.B. A0 gegen GND) befindet sich ein Kondensator, der über einen Widerstand mit dem PWM-Signal aufgeladen wird. Egal wielange (durch die Impulsbreite) aufgeladen wird, die Spannung am Kondensator kann nicht höher werden als die max. Impulsspannung. Ich messe nun die Spannung am Kondensator. Sie wird, vermutlich, etwas geringer sein wie im Ozi zu sehen ist.

Ingo
Benutzeravatar
Franz54
Beiträge: 56
Registriert: Mo 20. Apr 2020, 10:12
Wohnort: 82441 Ohlstadt / Garmisch
Kontaktdaten:

Re: Messgerät bis 16 Volt DC

Beitrag von Franz54 »

Nein ZUM BEISPIEL PWM. UND PWM IST ein Rechtecksignal!!
Das mit dem Kondensator habe ich mir schon mal gedacht. Aber der braucht zuviel Leistung, da wird das Signal runtergezogen. 40k Ohm oder gar 110k Ohm ist rel hochohmig und reicht um so ein Signal beim Messen nicht nach unten zu ziehen. Ein Kondensator ist da ganz im Gegenteil eher dazu im Stande. Also das wird ausscheiden. Ist aber auch nicht nötig. Es funktioniert ja wunderbar, so wie ich es mache. Ich dachte nur, ob dein ADC das vielleicht auch kann. Dann wäre das einfacher, weil da nur noch ein Spannungsteiler also zwei Widerstände dran müßten. Es geht doch darum dass man gar nicht weiß was für ein Signal man am Pin erwarten kann. Das sind doch keine Hellseher, sondern Leute die sich keinen Oszillographen für ein paar Hundert Euro leisten können, aber trotzdem eine Möglichkeit brauchen
Der Alte
Beiträge: 35
Registriert: So 28. Jun 2020, 09:07
Kontaktdaten:

Re: Messgerät bis 16 Volt DC

Beitrag von Der Alte »

Hallo Franz,

ich habe gerade deine Mail gelesen und stimme dir zu. Welche Genauigkeit ist erforderlich? 0,01 Volt sollte reichen.

Ich würde versuchen diese Genauigkeit softwaremäßig zu bekommen.
d.h. keine Messwiderstände und auch keine Referenzspannungsdiode:

Code: Alles auswählen

  float V_33, Volt;
  const byte VOLT_IN = A0;
  const byte VOLT33 = A1;
  
//Spannung in
  float R1_IN = 2200000.0;  // Wert meines Widerstandes in Ohm
  float R2_IN = 1000000.0;
  float R_TOLERANZ_IN = 1.13; // Wert durch Vergleichsmessung einmal bestimmen
Die Spannung 3,3 Volt ist beim Uno ist sehr konstant.
Ich verbinde den 3,3 Volt Ausgang mit A1.
R_TOLERANZ_IN = 1.13 - dieser hat sich bei meinem Test mit einer bekannten Spannung ergeben

Code: Alles auswählen

   V_33 = (float) 3.30 / analogRead(VOLT33) * 1023.0;
   Volt = (analogRead(VOLT_IN) * V_33) / 1023.0 ;    
   Volt = (Volt / (R2 / (R1 + R2))) ; 
   Volt = Volt * R_TOLERANZ;         
Durch diese Maßnahme, die interne 3,3 Volt-Spannung als Referenz zu nehmen, ist die Messtoleranz von 0,01 Volt locker einzuhalten.

Ingo
Benutzeravatar
Franz54
Beiträge: 56
Registriert: Mo 20. Apr 2020, 10:12
Wohnort: 82441 Ohlstadt / Garmisch
Kontaktdaten:

Re: Messgerät bis 16 Volt DC

Beitrag von Franz54 »

Ja, die 0,01 Volt Tolleranz reicht vollkommen. Das ist sicher kein Problem. Es geht ja nur darum zu erkennen ob auf einen Pin eine für den Arduino gefährlich Spannung ist.

Ich habe jetzt mal zwei Messungen gemacht. Die Messung 1 ist Recheckspannung 1000Hz DC, die Messung 2 ist Sinusspannung 1000Hz DC. Hier mal die Ergebnisse. Bei Sinus wird es einfach schwierig die Scheitelspannung zu bekommen. Auch wenn ich die Messzeit von einer Sekunde auf fünf Sekunden erhöhe bekomme ich keinen höheren Wert vor die Flinte.
Also die Messung 1 Recheck DC:
Messung1_Recheck_1000Hz_Oszi.jpg
Messung1_Recheck_1000Hz_Oszi.jpg (209.6 KiB) 2232 mal betrachtet
Messung1_Recheck_1000Hz_Arduinoi.jpg
Messung1_Recheck_1000Hz_Arduinoi.jpg (152.28 KiB) 2232 mal betrachtet
Dann die Messung 2 Sinus DC:
Messung2_Sinus_1000Hz_Oszi.jpg
Messung2_Sinus_1000Hz_Oszi.jpg (209.98 KiB) 2232 mal betrachtet
Messung2_Sinus_1000Hz_Arduino.jpg
Messung2_Sinus_1000Hz_Arduino.jpg (127.57 KiB) 2202 mal betrachtet
Wenn ich mit einem normalen Messgerät messe, und dann vom gemessenen Durchschnittswert auf den echten MaximalWert zurückrechne, bekomme ich allerdings auch diesen Niedrigen Spannunswert. Somit scheint die Messung O.K. zu sein?

PS: Ich habe das Messproblem gefunden. Der Frequenz Generator hat den Sinus unter der Nulllinie angesetzt. also ins Minus. Ich habe den Sinus am Generator dann hochgezogen dass er sauber auf der Null-Linie beginnt, dann habe ich mit dem Arduino auch wieder die 4,62 Volt gemessen. Also alles gut.

Also Egal ob ich Sinus / Rechteck / oder echte DC vor der Flinte habe, das Ergebnis entspricht immer den Tatsachen. Hier oben war die Messung tatsächlich niedriger, weil der Sinus im Minus beginnt. Erkennt man auch am Oszi.
Benutzeravatar
Franz54
Beiträge: 56
Registriert: Mo 20. Apr 2020, 10:12
Wohnort: 82441 Ohlstadt / Garmisch
Kontaktdaten:

Re: Messgerät bis 16 Volt DC

Beitrag von Franz54 »

Sooooo, das Programm ist jetzt nochmal gründlich geändert und funktioniert jetzt wunschgemäß. So sieht es jetzt aus.

Hier lege ich es auch mal ab:

Code: Alles auswählen

/**************************************************************************/
/*
   Bei einer Ref. Spannung von 4,096 Volt
   und einem Messteiler von 3 zu 1 ist die Rechnung
   4,096 x 4 = 16,384 / 1024 = 0,016
   Ist 0-1023 x 16 / 1000
   !! Höchte Messspannung ist 16,384 Volt !! bei 3 zu 1 Teiler
*/
/**************************************************************************/
#include <LiquidCrystal_I2C.h> // LCD Display
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

const byte ANALOG_PIN = A0; // Hier wird der Name vom Messeingang festgelegt
float max31 = 0;      // Der Speicher für den ausgelesenen Analogwert vom Messbuchse
float max31alt = 0;
float max32 = 0;       // Der Speicher für den ausgelesenen Max-Analogwert vom ADC
float min31 = 0;      // Der Speicher für den ausgelesenen Analogwert vom Messbuchse
float min31alt = 1023;
float min32 = 0;       // Der Speicher für den ausgelesenen Max-Analogwert vom ADC
float durchschnitt = 0;
unsigned long startzeit = 0;
unsigned long endzeit = 0;
unsigned long Sekundenablauf01 = 0; // Messung erneuern nach eine Sekunde
const unsigned long Pausezeit01 = 1000;
//====================================================================================
void setup(void) {
  analogReference(EXTERNAL); // Externe Referenzspannung am AREF 4,096Volt
  Serial.begin(9600);

  pinMode(ANALOG_PIN, INPUT); // Input vom Messteiler
  lcd.begin(20, 4);
  lcd.backlight();
  lcd.clear();
  // Display Maxwert
  lcd.setCursor (0, 0);
  lcd.print (F("Maximalwert"));
  lcd.setCursor (18, 0);
  lcd.print (F("V"));
  // Display Minwert
  lcd.setCursor (0, 1);
  lcd.print (F("Minimalwert"));
  lcd.setCursor (18, 1);
  lcd.print (F("V"));
  // Display Durchschnitts Wert
  lcd.setCursor (0, 2);
  lcd.print (F("Normalwert"));
  lcd.setCursor (18, 2);
  lcd.print (F("V"));
}
//===================================================================================
void loop(void) {
  //--------------------------Zeit für die Durchlaufmessung------------------------------------------------
  startzeit = micros();

  //-----------------------Nach einer Sekunde neue Messung starten-----------------------------------------
  if (millis() - Sekundenablauf01 >= Pausezeit01) {
    max32 = ((max31alt * 16) / 1000); // 0-1023 x 0,016
    lcd.setCursor (13, 0);
    lcd.print (F("     "));
    lcd.setCursor (13, 0);
    lcd.print (max32);
    max31alt = 0;
    min32 = ((min31alt * 16) / 1000); // 0-1023 x 0,016
    lcd.setCursor (13, 1);
    lcd.print (F("     "));
    lcd.setCursor (13, 1);
    lcd.print (min32);
    min31alt = 1023;
    lcd.setCursor (13, 2);
    lcd.print (F("     "));
    lcd.setCursor (13, 2);
    durchschnitt = (max32 - min32) / 2;
    if (max32 == min32) {
      durchschnitt = 0;
    }
    lcd.print (durchschnitt);
    Sekundenablauf01 = millis();
    //Serial.println(F("Datenausgabe aufs Display"));
  }
  // -----------------------------Maximalwert messen und sichern--------------------------------------
  max31 = analogRead (ANALOG_PIN); // Analogen Eingang A0 auslesen
  if (max31 >= max31alt) {
    max31alt = max31;
  }
  // -----------------------------Minimalwert messen und sichern--------------------------------------
  min31 = analogRead (ANALOG_PIN); // Analogen Eingang A0 auslesen
  if (min31 <= min31alt) {
    min31alt = min31;
  }
  // -----------------------------------Laufzeittest--------------------------------------------------
  endzeit = micros();
  //Serial.println(endzeit - startzeit);
}
Morgen bringe ich hier noch neue Bilder zur Funktion und die neue Beschreibung dazu. Heute will ich erst mal Schlaaaaaaaaaaafen :eek:

Mal vorab, ich habe jetzt Min/Max anzeige gleichzeitig, und den Durchschnittswert auch. Aber der passt noch nicht ganz. (Max - Min) / 2 wäre ein bischen einfach :(oo): Aber ich wollte heute das Display noch füllen und trotzdem dem Bett näher kommen. :(iii):
Zuletzt geändert von Franz54 am So 12. Jul 2020, 09:06, insgesamt 1-mal geändert.
Der Alte
Beiträge: 35
Registriert: So 28. Jun 2020, 09:07
Kontaktdaten:

Re: Messgerät bis 16 Volt DC

Beitrag von Der Alte »

Hallo Franz,

ich habe da noch mal eine Verständsnisfrage:

Es geht dir darum, einen Arduinoport vor einem zu hohen PWM-Signal zu schützen. Könntest du mal ein konkretes Beispiel nennen. Aus welcher Quelle könnte das PWM-Signal kommen und was soll der Arduino damit machen? Ohne eine Anwendung kann man sich das schlecht vorstellen.

Ingo
Benutzeravatar
Franz54
Beiträge: 56
Registriert: Mo 20. Apr 2020, 10:12
Wohnort: 82441 Ohlstadt / Garmisch
Kontaktdaten:

Re: Messgerät bis 16 Volt DC

Beitrag von Franz54 »

Nicht vor einem zu hohen "PWM - Signal". Sondern z.B. PWM Signal. Das wichtige ist DC. Ansonsten kann das sein was es eben ist. Was die User mit dem Signal machen wollen, das musst du die fragen, nicht mich. Ich sorge ja nur dafür, dass sie merken, dass das heilige Messgerät ganz schön scheinheilig sein kann, und geben ihnen eine Möglichkeit an die Hand, das zu erkennen.

Wenn jemand schon weiß, welches Signal ihn erwartet, dann ist er meistens kein unwissender Anfänger mehr, sondern einer der z.B. weiß, dass bei einem Akkuschrauber ein PWM Signal zu erwarten ist (das hört man meistens schon am Motorgräusch) und dass er die Messung mit einem normalen Messgerät verdoppeln muss, um einen realistischen Wert zu haben. Wenn der Akku 12 Volt ist, dann wird es wohl ein 12 Volt PWM sein. Aber so mancher Anfänger, hat das nun mal nicht gewusst und wollte einfach nur das Signal für irgendwas verwenden. Nach dem dritten Arduino hat er dann gemerkt, dass es wohl am Signal liegt, weswegen seine Arduinos den Geist aufgeben. Die denken da wohl nicht so dran, dass der Arduino leicht verderbliche Ware ist, wenn er an mehr als 5 Volt hängt. Es geht also nur darum, IST AN DEM PIN MEHR ALS 5 VOLT. Welches Signal, ist eigentlich egal. Ich habe nur diese DC Rechtekspannung 1000Hz genommen, um vergleichbar zu sein mit den Messergebnissen anderer im Forum. Z.B. die Messung mit dem Fluke 110. Die war ja nicht von mir, weil ich kein solches Gerät habe. Um wirklich mit anderen Geräten vergleichen zu können, kann man ja nicht Äpfel und Birnen vergleichen, sondern muss sich auf ein Signal verständigen. Ich habe auch immer diese DC 1000Hz Recheck verwendet. Nur einmal um den Usern deutlich zu machen, wie es gehen kann, habe ich einmal 10 Volt DC 1000Hz mit Oszi und 08/15 Messgerät gemessen. Da sagte das Normale Messgerät 5 Volt, und der Oszi zeigte ganz klar, dass es 10 Volt sind, und somit das Ende eines Arduinos besiegelt wäre, wenn man mit diesem vermeindlichen "5 Volt" auf den Eingang eines Arduinos geht. Nur darum geht es. Ein Gerät nur für eine bestimmte Signalform, was soll das bringen??
Zuletzt geändert von Franz54 am Fr 17. Jul 2020, 20:33, insgesamt 5-mal geändert.
Benutzeravatar
Franz54
Beiträge: 56
Registriert: Mo 20. Apr 2020, 10:12
Wohnort: 82441 Ohlstadt / Garmisch
Kontaktdaten:

Re: Messgerät bis 16 Volt DC

Beitrag von Franz54 »

Ich habe jetzt mal ein paar Bilder vom Ergebnis meiner spätabendlichen Arbeit gemacht :)

Die ersten hier sind eine normale Recheckspannung bei der die untere Linie auf der Nullinie ist. Also so wie es eigentlich grundsäzlich ist.
Messung1_Recheck_1000Hz_Arduinoi.jpg
Messung1_Recheck_1000Hz_Arduinoi.jpg (129.48 KiB) 2211 mal betrachtet
Messung1_Recheck_1000Hz_Oszi.jpg
Messung1_Recheck_1000Hz_Oszi.jpg (198.06 KiB) 2211 mal betrachtet
Und für die zweite Variante habe ich am Generator die untere Kurve nicht auf der Nullinie beginnen lassen, sondern deutlich über Null Volt. Das wird jetzt auch schön dargestellt.

Hier wieder die Bilder dazu:
Messung Rechteck Oszi Start über der Nullinie.jpg
Messung Rechteck Oszi Start über der Nullinie.jpg (191.65 KiB) 2199 mal betrachtet
Messung Rechteck Arduino Start über der Nullinie.jpg
Messung Rechteck Arduino Start über der Nullinie.jpg (132.34 KiB) 2199 mal betrachtet
Hier habe ich noch eine DC Sägezahn Spannung. Da ist der Maximale Pegel besonders schwer zu kriegen, weil es ja nur eine kurze Spitze ist. Ist aber auch völlig Easy.

Hier die Bilder dazu:
Messung_Saegezahn_DC_Oszi.jpg
Messung_Saegezahn_DC_Oszi.jpg (200.4 KiB) 2197 mal betrachtet
Messung_Saegezahn_DC_Aeduino.jpg
Messung_Saegezahn_DC_Aeduino.jpg (134.5 KiB) 2197 mal betrachtet
Benutzeravatar
Franz54
Beiträge: 56
Registriert: Mo 20. Apr 2020, 10:12
Wohnort: 82441 Ohlstadt / Garmisch
Kontaktdaten:

Re: Messgerät bis 16 Volt DC

Beitrag von Franz54 »

Die Software macht übrigens in der Sekunde 7500 Messdurchgänge. Ich habe das Programm so geändert, dass das Ding eine Sekunde lang also 7500x Messungen durchführt und die beiden Maximal-Werte für Min und Max wegschreibt, dann nach Ablauf der Sekunde die Werte aufs Display gibt und wieder die nächsten 7500 Messungen startet. Das ist ein ordentliches Tempo. Ein Messdurchgang dauert 128 Millionstel Sekunden, und einmal in der Sekunde die Werte aufs Display ausgeben dauert 32.236 Millionstel Sekunden.

Franz
Antworten

Zurück zu „Fertige Projekte Vorstellen“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast