ACS712-5 DC-Motor Strom Messung ESP32 Dev Module

Mehr
15 Feb 2021 17:50 - 15 Feb 2021 17:55 #732 von Nils
Nils erstellte das Thema ACS712-5 DC-Motor Strom Messung ESP32 Dev Module
Hallo zusammen,

Ich möchte mit meinem ESP32 einen Strom von einen DC-Motor messen.

Dafür nutze ich ein ACS712-5 Stromsensor, der einen Spannungswert abhängig vom Strom zurückgibt.
Zum Auslesen dieser Spannung benutze Ich die analogRead-Funktion auf ADC-Channel 1 (GPIO 36).
An dem ACS712-5 liegen 3.3V des ESP32.

Beim Auslesen von Strömen über einen Widerstand mit Hilfe eines Labornetzgerätes, gelingt die Erfassung des Stromes ohne Probleme. Leider funktioniert es nicht bei einem DC-Motor, hier stürzt der ESP32 immer dann ab, wenn der Motor ein- bzw. ausgeschaltet ist. Der ESP32 bricht außerdem dann die USB-Verbindung zu meinem PC ab. In Betracht kommt für mich nur die hohen Einschalt bzw. Ausschaltströme des Motors. Warum jedoch doch erklärt sich mir nicht. Der Sensor arbeitet mit dem Hall-Effekt, so dass es zu einer galvanischen Trennung kommt. Wird der Strom zu hoch, dürfte lediglich die Grenze von 3.3V erreicht werden als Ausgang.

Teilweise gelingt sogar eine Messung, so dass 0,3A gemessen werden kann.
Zur Vereinfachung habe ich dann (da es sich um einen komplexen Aufbau handelt) den Gesamtstrom durch die Batterie gemessen und sogar durch eine Diode sichergestellt, das keine induktiven Rückströme entstehen. Das brachte jedoch auch keinen Erfolg.

Hat jemand einen Lösungansatz für mein Problem? So dass ich mit dem Sensor einen DC-Motor Strom messen kann?
const int analog_pin = 36;
int adc_wert[5];                //ADC Wert
double spannung = 0;            //Spannung über ADC
double strom = 0;               //berechneter Strom
double nullpunkt = 1830;        //Nullpunkt, wenn keine Stromstärke vorhanden
double faktor = 118;            

void setup() {
  Serial.begin(115200);

}

void loop() {
  double adc_mittel = 0;
  for(int i = 0; i < 100; i++) {
    adc_wert[i] = analogRead(analog_pin);
    adc_mittel = adc_mittel + adc_wert[i];
  }
  adc_mittel = adc_mittel / 100;
  Serial.print("adc_mittel = \t");
  Serial.print(adc_mittel);
  
  spannung = (adc_mittel * 3.3) / (4095);
  Serial.print("  Spannung = \t");
  Serial.print(spannung);
  Serial.print("V");
  
  strom = ((adc_mittel - nullpunkt) / faktor);
  Serial.print("  Strom = \t");
  Serial.print(strom, 1);
  Serial.println("A");
  
  delay(250);
}

Gruß
Letzte Änderung: 15 Feb 2021 17:55 von Nils.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
15 Feb 2021 20:16 #733 von Greenhouse
ACS712-5 DC-Motor Strom Messung ESP32 Dev Module
Hallo Nils,

in Deinesm Sketch definierst Du das Array adc_wert mit 5. In der Schleife läufst Du von 0 bis 100 in dem gleichen Array.
Das dürfte schon einmal dazu führen, daß Messwerte in Speicherbereiche geschrieben werden, wo sie nicht hingehören.

Um auszuschließen, daß der ESP wegen Spannunsspitzen oder ähnlichen Störungen in der Stromversorgung seinen Dienst quittiert, würde ich versuchen, den Motor zunächst ohne Messung zu betreiben. Sprich an Stelle der Messung läuft nur eine Schleife, die einen Zähler erhöht und aussgibt. Wenn dies auch abbricht, sollte Deine Fehlersuche Richtung Spannungsversorgung für den ESP gehen. Wenn er weiter läuft würde ich die Ursache in der Anwendung vermuten.
Obwohl dort derzeit nichtg viel drin ist, lässt sich auch hier die Komplexitätreduzieren indem z.B. nur gemessen und ausgegeben wird, ohne Mittelwert Bildung.
Je öfter ich Deinen Text lese, desto eher sehe ich allerdings den Überlauf in der Schleife als Fehlerursache.
Ändere doch mal die zweite Zeile von int adc_wert[5]; in int adc_wertb]100[/b;

Viel Erfolg
Gruß Greenhouse

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
19 Feb 2021 15:46 - 19 Feb 2021 20:15 #735 von Nils
ACS712-5 DC-Motor Strom Messung ESP32 Dev Module
Danke für den Hinweis.
Leider hat das nicht geholfen, obwohl da ja eigentlich ein Overflow im Array entstehen müsste.

Kurzer Hand habe Ich meine Schaltung umgebaut, so das nun der ESP über ein Transistor, ein Relais, welches ein Motor schaltet, steuert. Hier stürzt der ESP jedoch auch immer im Einschalt und Ausschalt Moment immer wieder ab.

Masse der beiden Platinen ist mit einer verbunden.

Edit: Das Programm läuft weiter, lediglich die USB Schnittstelle bricht ab.
Letzte Änderung: 19 Feb 2021 20:15 von Nils.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
20 Feb 2021 09:48 #736 von Greenhouse
ACS712-5 DC-Motor Strom Messung ESP32 Dev Module
Hallo Nils,

vor Deinem Edit hätte ich vorgschlagen, die Spannungsversorgung erneut zu prüfen und eventuell einen Stabilisierungs-Kondensator zu spendieren.

Nach Deiner Anmerkung, daß nur die Verbindung zum PC abbricht, sieht es aus als würde irgendetwas die TX/RX Ports zernageln.
Der Begriff "Ports zernageln" kann auch sein, daß die Übertragunsparameter (Baudrate, ...) intern verändert werden.
Aus dem oben stehenden Sketch würde ich das aber nicht ableiten können.

Ich vermute, wenn Du innerhalb von Loop die serielle Schnittstelle neu initialisiert, bricht die Kommunikation ebenfalls ab.
Auf die Schnelle habe ich auch nicht gefunden, wie die UART Parameter ausgelesen werden können um zu prüfen, was geändert wurde.
Sorry, da fällt mir aktuell nichs kreatives ein.

Gruß Greenhouse

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Powered by Kunena Forum