Sensoren spielen verrückt bei halber PWM-Leistung

Hallo an alle,

aktuell baue ich an einer Anlage herum um damit später Milch zu pasteurisieren (zusammen mit einem Kollegen wird daraus später dann Käse hergestellt). Die Elektronik, Pumpen und Verbindungen sind schon alle gelegt und zudem habe ich ein passendes Steuerprogramm mit leicht bedienbarer GUI per Visual Studio programmiert. Um dann später entsprechend über Wärmetauscher die erforderliche Temperatur der Milch zu erreichen ist eine ständige Überwachung der Durchflussrate und der Temperaturen an verschiedenen Stellen (insgesamt 8 Temperatursensoren (DS18B20) und 2 DFS) nötig um auch entsprechend die Brennerleistung für den Heißwasserkreislauf zu regeln.

Nachdem alles soweit fertig war hab ich nach und nach einige Tests damit gemacht, aber leider kommt es zu einigen Probleme:

Er werden insgesamt 3 Pumpen benötigt (eine für den Milchkreislauf, eine für den Heißwasserkreislauf, und eine Luftpumpe für den Feststoffbrenner) die über die Pins 9-11 mit Pulsweitenmodulation und einer Transistorsteuerung (samt Glättkondensatoren) gesteuert werden.

Wenn die Leistung der PWM auf 100% gefahren wird treten soweit keine Probleme auf, allerdings wenn sie sich unter einen Wert von ca. 80% absenkt kommt es immer wieder zum Stottern der Pumpenmotoren so als ob die Spannung plötzlich abbricht und die Temperatursensoren und DFS zeigen extrem schwankende Werte an.

Dabei reicht der Wert von den DFS zwischen 0 und 100 und bleibt nicht stabil (außer bei 100% Leistung)
und die Temperatursensoren zeigen als besondere Werte immer wieder 85° und -127°. In einem anderen Thread hab ich schon gelesen, dass diese Werte anzeigt werden wenn der Sensor gerade erst an die Spannung angeschlossen wird (85°), oder eben eine Fehlfunktion hat (-127°). Die Sensoren sind mit einem Pull-Up-Widerstand an der 5V Versorgungsleitung angeschlossen.

Da die Probleme nur bei PWM-Leistungen kleiner als 100% auftreten weiß ich nicht wirklich wo der Fehler liegt, eine Unterversorgung des Boards schließe ich aus da es mit einer externen Stromversorgung ausgestattet ist und bei 100% Pumpenleistung (und damit auch maximalem Ausgangsstrom der Pins) am stabilsten läuft.

Ein Filter wäre zwar für die Temperatursensoren eine Möglichkeit (wenn auch keine alzu gute) aber die Werte des DFS schwanken teilweise derart stark das eine Filterung dafür schlichtweg unmöglich ist (von 0 auf 90 und dann alles dazwischen).

Hier noch der Arduino-Sketch:

#include <OneWire.h>            
#include <DallasTemperature.h> 

#define DS18B20_PIN 13 //Temperatursensoren an PIN 13 anschließen!

int T1; //Temperatur Milch vor WT1
int T2; //Temperatur Milch nach WT1
int T3; //Temperatur Milch nach WT2
int T4; //Temperatur Milch vor WT1*
int T5; //Temperatur Milch nach WT1*
int T6; //Temperatur Wasser vor Brenner
int T7; //Temperatur Wasser nach Brenner
int T8; //Überwachungssensor Elektronik

int MaxTemp=80; //Maximale Kühlkörpertemperatur

int F1; //Frequenz DFS 1
int F2; //Frequenz DFS 2
volatile float flow_frequency_1;  //Frequenz DFS 1
volatile float flow_frequency_2;  //Frequenz DFS 2

int P1=0;  //Leistung Milchpumpe zwischen 0-255
int P2=0;  //Leistung Wasserpumpe zwischen 0-255
int P3=0;  //Leistung Luftpumpe zwischen 0-255


unsigned long currentTime;        //Aktuelle Zeit in ms
unsigned long cloopTime;          //Zeitzähler für DFS

unsigned long currentVentilTime;
unsigned long cloopVentilTime;

String UploadString="";
String Ventilstatus="VE";





OneWire oneWire(DS18B20_PIN);
DallasTemperature sensors(&oneWire);

void flow_1 () 
{
  flow_frequency_1++;
}

void flow_2 () // Interrupt function
{
  flow_frequency_2++;
}



void setup() {

Serial.begin(9600); //Serielle Kommunikation starten
sensors.begin();    //Sensoren initialisieren

  attachInterrupt(0, flow_1, RISING); // Setup Interrupt
  attachInterrupt(0, flow_2, RISING); 
sei(); // Enable interrupts
  currentTime = millis();
  cloopTime = currentTime;




//Pin 13 für Temperatursensoren
pinMode(12,OUTPUT);
pinMode(11,OUTPUT); //PWM für Milchpumpe   
pinMode(10,OUTPUT); //PWM für Heißwasserpumpe 
pinMode(9,OUTPUT);  //PWM für Luftpumpe
pinMode(8,OUTPUT); //Magnetventil Erhitzer
pinMode(7,OUTPUT); //Magnetventil Erwärmer
pinMode(5,OUTPUT); //Summer
pinMode(4,INPUT); //Füllstandssensor
pinMode(3,INPUT); //DFS 1
pinMode(2,INPUT); //DFS 2

digitalWrite(5,HIGH);
delay(300);
digitalWrite(5,LOW);

}

void loop() {

//DFS auslesen

currentTime = millis();
  if(currentTime >= (cloopTime + 1000))
  {
     cloopTime = currentTime;
     F1 = flow_frequency_1; 
     F2 = flow_frequency_2;
     flow_frequency_1 = 0; 
     flow_frequency_2 = 0;
  
  }

//Temperatursensoren auslesen

sensors.requestTemperatures(); 

T1=sensors.getTempCByIndex(0);

T2=sensors.getTempCByIndex(1);

T3=sensors.getTempCByIndex(2);

T4=sensors.getTempCByIndex(3);

T5=sensors.getTempCByIndex(4);

T6=sensors.getTempCByIndex(5);

T7=sensors.getTempCByIndex(6);   

T8=sensors.getTempCByIndex(7);

if (T8<0)
{T8=0;}

//Upload-String zusammenfügen


String StringT1= String(T1);
if(StringT1.length()==1)
{StringT1=0 + StringT1;}

String StringT2= String(T2);
if(StringT2.length()==1)
{StringT2=0 + StringT2;}

String StringT3= String(T3);
if(StringT3.length()==1)
{StringT3=0 + StringT3;}

String StringT4= String(T4);
if(StringT4.length()==1)
{StringT4=0 + StringT4;}

String StringT5= String(T5);
if(StringT5.length()==1)
{StringT5=0 + StringT5;}

String StringT6= String(T6);
if(StringT6.length()==1)
{StringT6=0 + StringT6;}

String StringT7= String(T7);
if(StringT7.length()==1)
{StringT7=0 + StringT7;}

String StringT8= String(T8);
if(StringT8.length()==1)
{StringT8=0 + StringT8;}
if(StringT8.length()>2)
{StringT8="00";}

String StringF1= String(F1);
if(StringF1.length()==1)
{StringF1=0 + StringF1;}

String StringF2= String(F2);
if(StringF2.length()==1)
{StringF2=0 + StringF2;}

//Füllstandsüberwachung
String StringER="00";
if (digitalRead(12)==HIGH)
{StringER="00";}
if (digitalRead(12)==LOW)
{StringER="ER";}

UploadString = StringT1 + StringT2 + StringT3 + StringT4 + StringT5 + StringT6 + StringT7 + StringT8 + StringF1 + StringF2 + StringER;
Serial.print(UploadString);


//Download-String analysieren

if (Serial.available() > 0){

String DownloadString;

while (Serial.available() > 0) {

DownloadString += (char) Serial.read(); 
        delay(2);}
        
String VentilString=DownloadString.substring(0,2);         
String PUMString=DownloadString.substring(2,5);
String PUWString=DownloadString.substring(5,8);
String PULString=DownloadString.substring(8,11);
String SUMString=DownloadString.substring(11,13);

//Zuweisung der Motorleistung zu den Pumpen 

P1=PUMString.toInt();
P2=PUWString.toInt();
P3=PULString.toInt();

analogWrite(11,P1);
analogWrite(10,P2);
analogWrite(9,P3);

//Ventil einstellen

if (VentilString=="VP" && Ventilstatus=="VE")
{digitalWrite(7,HIGH);
delay(5000);
digitalWrite(7,LOW);
Ventilstatus="VP";}

if (VentilString=="VE" && Ventilstatus=="VP")
{digitalWrite(8,HIGH);
delay(5000);
digitalWrite(8,LOW);
Ventilstatus="VE";}

//Wenn Summer aktiviert diesen bei einem Fehler anschalten
if (SUMString=="ON")
{digitalWrite(5,HIGH);
delay(300);
digitalWrite(5,LOW);}
if(SUMString="OF")
{digitalWrite(5,LOW);}
}
}

Weiß vielleicht jemand eine Lösung für das Problem?

Mfg

Michael

Michael2706:
Weiß vielleicht jemand eine Lösung für das Problem?

Setze deinen Sketch bitte in Code-Tags, damit wir den vernünftig lesen können.

Verwende dazu die Schaltfläche </> oben links im Editorfenster.
Das kannst du auch nachträglich machen.
Dazu den Sketch markieren und die Schaltfläche klicken.

Damit wird dieser für alle besser lesbar.

Und warum verwendest du bei PWM einen “Glättungskondensator” ?

Ich vermute darin dein Problem.

Die Kondensatoren sorgen dafür das meine Spannung an den Motoren nicht permanent abfällt durch die PWM, bei einem anderen Projekt hatte ich damit auch keine Probleme und ohne gab der Motor nur ein unerträgliches Summen von sich ohne richtig anzulaufen.

Die Kondensatoren sorgen dafür das meine Spannung an den Motoren nicht permanent abfällt durch die PWM,

Ist es nicht gerade der Trick bei PWM, dass die Spannung dauernd abfällt?

Mit welchen Strömen werden diese Kondensatoren geladen?

Michael2706:
Die Kondensatoren sorgen dafür das meine Spannung an den Motoren nicht permanent abfällt durch die PWM, bei einem anderen Projekt hatte ich damit auch keine Probleme und ohne gab der Motor nur ein unerträgliches Summen von sich ohne richtig anzulaufen.

Dann sieht es danach aus, dass die Motoren nicht für PWM geeignet sind, bzw. die Frequenz zu niedrig.

Und setze deinen Sketch in Code-tags.

Welche Motore Hast Du? Mit welcher Spannung betreibst Du sie? Wie Steuerst Du sie an?

Was ist DFS?

Grüße Uwe

Ok das mit den Pumpen kann man mal nach hinten schieben woran das liegt, hat vielleicht jemand eine Idee wieso die Sensorwerte derart stark schwanken?

DFS= Durchflusssensor

Michael2706:
Ok das mit den Pumpen kann man mal nach hinten schieben woran das liegt, hat vielleicht jemand eine Idee wieso die Sensorwerte derart stark schwanken?

DFS= Durchflusssensor

Schwanken die Sensorwerte auch, wenn keine Motoren angeschlossen sind ?

Wenn die Pumpen nicht laufen schwankt es nicht (oder höchstes einmal alle paar Minuten was noch ok wäre für die Auswertung) und halt wenn sie auf voller Leistung laufen.

PWM und Kondensatoren ergeben eine Spannungsregelung und keine Leistungsregelung. Und damit ist klar: deine Motoren erzeugen keine Leistung mehr und stottert. Dazu kommt, das die Kondensatoren extrem hohe Einschaltströme ziehen, ein Kondensator ist ein Kurzschluss im ersten Moment. Das erzeugt massive Störungen in deiner gesamten Stromversorgung aus der sich auch die Sensoren speisen.

Lass einfach die Kondensatoren am Motor weg und wenn sie Brummen kauf dir neue Motoren. Brummen heist das Blechpaket auf dem gewickelt wurde ist Scheisse verarbeitet. Dazwischen ist Luft. Typisch für Billige Motoren. Luftspalte sind Effizienzkiller und brummen eben. Da muss es passen, dann kosten die Motoren halt ein bischen mehr. Mit einem Kondensator hört das brummen natürlich auf, logischerweise.

Solche Ströme zusammen mit feiner Sensorig und 5V Datenübertragung sind immer ein Problem. Vermutlich läuft alles im selben Kabel.

Also hör einfach auf, zu behaupten das was du da bastelst passt schon alles. Das zeigt nur, das du keinen Plan hast was da abläuft. Deine Probleme löst du so jedenfalls nicht, stattdessen vergraulst du hier die Fachleute.

allerdings wenn sie sich unter einen Wert von ca. 80% absenkt kommt es immer wieder zum Stottern der Pumpenmotoren so als ob die Spannung plötzlich abbricht und die Temperatursensoren und DFS zeigen extrem schwankende Werte an.

Wenn die Pumpen nicht gleichmäßig laufen (stottern) dann wird der Durchfluß und Wärmeübertragung im Wärmetauscher auch nicht gleichmäßig sein.
Grüße Uwe

Wenn die Pumpen nicht gleichmäßig laufen (stottern) dann wird der Durchfluß auch nicht gleichmäßig sein.
Grüße Uwe

Ach ne wirklich Einstein??

Die Werte schwanken von 0 bis 100 und dann wieder auf alles mögliche zurück, das kurze stottern trägt nicht zu einer derartigen Veränderung des Masseflusses bei.

Also hör einfach auf, zu behaupten das was du da bastelst passt schon alles. Das zeigt nur, das du keinen Plan hast was da abläuft. Deine Probleme löst du so jedenfalls nicht, stattdessen vergraulst du hier die Fachleute

Hab ich das behauptet? Ich hab nur gesagt das die Schaltung in der Form bereits bei einem anderen Motor reibungslos funktioniert hat. Den Ton kannst du dir außerdem sparen, abgesehn von dir hat keiner was wirklich nützliches gepostet also kannst du dir deine Fachleute in den Arsch schieben.

PS: Accountlöschung darf gern der Moderator übernehmen, mit derart unfreundlichen Kanacken in dem Forum hab ich keinen Bock mich länger abzugeben und such mir lieber ein anderes

Michael2706:
PS: Accountlöschung darf gern der Moderator übernehmen, mit derart unfreundlichen Kanacken in dem Forum hab ich keinen Bock mich länger abzugeben und such mir lieber ein anderes

Jetzt wird es hier lustig.

Der einzige der hier unfreundlich ist, bist du.
Wenn du meinst, hier hilft dir keiner, dann liegt auch das an dir, da du dir nicht helfen lässt.

Viel Spaß bei der Suche…

Hallo Michael2706

Jetzt hast Du Dir mal 7 Tage Bann eingehandelt.
Danach sehen wir weiter.

Grüße Uwe