- Reichelt Elektronik    Werbung      
Ergebnis 1 bis 8 von 8

Thema: Mehr als eine "if" Abfrage. Programm friert ein?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Es hat geklappt.
    Dadurch, dass ich den Wärmetauscher umgebaut habe, erübrigt sich eine ausgiebige elektronische Steuerung.
    Der Code funktioniert, aber benutzen kann ich ihn nicht.
    Das K Modul schwimmt zu stark.
    Das schein normal zu sein.
    Einen PID REX 100FK02 hatte ich mir zum Testen bestellt.
    Den habe ich nur an den Oszi gehängt.
    Auch hier schwingt es zwischen LOW und HIGH nur so rum. Solange die Temperatur 2°C vor dem Schaltpunkt und 6° hinter dem Schaltpunkt liegt, schalte er sauber durch. Aber in diesem Bereich ist es eine Katastrophe. Merkwürdigerweise gibt es meinem Metrawatt Thermometer (TYP-K) sowas nicht.

    Also warte ich, bis Pollin meinen Kram geschickt hat und baue das mit dem PT1000 auf.

    Danke für Eure Anregungen und Tipps!
    Achim


    Code:
    #include <LiquidCrystal.h>
    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
    const int numRows = 2;
    const int numCols = 16;
    
    #include "max6675.h" //Die MAX6675 Bibliothek
    
    const int max6675SO = 9; // Serial Output am PIN 8
    const int max6675CS = 10; // Chip Select am PIN 9
    const int max6675CLK = 13; // Serial Clock am PIN 10
    
    
    
    // Initialisierung der MAX6675 Bibliothek mit
    // den Werten der PINs
    MAX6675 ktc(max6675CLK, max6675CS, max6675SO);
    const double x1 = A1; //Prog 105 Ausgänge über Transistor
    const double x2 = A2; //Prog 106 zum Umrichter
    const double x3 = A3; //Prog 108
    const double x4 = A4; //Prog 112
    const double x6 = 6;
    //Abgastemperatur
    const float Temp1 = 30;//über 150°
    const float Temp2 = 28;//145°-150°
    const float Temp3 = 26;//140°-145°
    const float Temp4 = 24;//unter 140°
    
    
    
    const long oneSecond = 1000;
    const long oneMinute = oneSecond * 60;
    
    void setup() {
      lcd.begin(numCols, numRows);//Start
      Serial.begin(9600); // Begin der Seriellen Kommunikation mit 9600 Baud
      delay(500); // eine kleine Pause damit der Sensor sich kalibriert
      pinMode(x1, OUTPUT); //Programm 105 Ausgang
      pinMode(x2, OUTPUT);//Programm 106
      pinMode(x3, OUTPUT);
      pinMode(x4, OUTPUT);//Programm 108
      pinMode(x6, OUTPUT);//FWD=Start
    }
    
    void loop()
    {
    
      lcd.setCursor(0, 0); //1. Reihe 1.Zeichen
      lcd.print("Abgastemperatur");  //Schreibt das Wort
      lcd.setCursor(10, 1); //2. Reihe
      lcd.print("Grad");
      lcd.setCursor(2, 1); //2. Reihe 4.Zeichen
      lcd.print(ktc.readCelsius());  //Schreibt den Wert
    
      digitalWrite(x6, HIGH);//Startet den Umrichter
    
    
      // Lesen des Temperaturwertes in Grad Celsius
      double temperatur = ktc.readCelsius();
    
      if (temperatur > Temp1) //über 155°C
    
      {
        digitalWrite(x1, HIGH);//Ist Programm 105 soll auf 40HZ
      }
      else
      {
        digitalWrite(x1, LOW);
    
      }
    
      if ((temperatur < Temp2) ||  (temperatur > Temp1)) //über 145°, aber
        //unter 150°
    
      {
        digitalWrite(x2, LOW);// Programm 106, ca 43 HZ
      } else {
        digitalWrite(x2, HIGH);
      }
      if ((temperatur < Temp3) ||  (temperatur > Temp2)) //über 140°, aber
        //unter 145°
    
      {
        digitalWrite(x3, LOW);// Programm 106, ca 46 HZ
      } else {
        digitalWrite(x3, HIGH);
      }
      if ((temperatur < Temp4) ||  (temperatur > Temp3)) //über 135°, aber
        //unter 140°
    
      {
        digitalWrite(x4, LOW);// Programm 106, ca 50 HZ
      } else {
        digitalWrite(x4, HIGH);
      }
      if (temperatur < Temp4) // unter 135°
      {
        digitalWrite(x4, HIGH);//Programm 108,weniger als 25HZ
    
      }
      else
      {
        digitalWrite(x4, LOW);
    
      }
      Serial.print(temperatur);
      Serial.println("C");
    
    
    
      // 500ms Pause bis zum nächsten Durchlauf
      delay(1000);
    }

  2. #2
    shedepe
    Gast
    Wenn es schwimmt verpass ihm doch einen Tiefpassfilter z.b. in Form eines gleitenden Mittelwerts.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Danke shedepe,
    das ist es!
    Habe ich auch gleich was drüber gefunden.
    Bisher habe ich es mit Pausen versucht. Es geht fast.
    Ein anderes Problem:
    Der Frequenzumwandler hat auf seinen Eingängen eine Spannung von ca 16V. Wenn man diese gegen gnd legt, macht er dass, was ihm eingegeben wurde.
    Aber auf den offenen Ausgängen liegt eine Restwelligkeit. Nun hatte ich schon die Ausgänge(Sind die A1-A4, D`s ist nicht frei.) mit NPN Trans. versorgt. Diese schalten gegen GND.(In meiner grenzwertigen Dösigkeit hoffte ich, dass die NPN so träge reagieren, dass das Problem weg ist. War wohl nichts.)
    Trotz puffern mit 100n. Das muß doch vom flatterigen MAX6675 kommen??
    Das Beste wäre wohl, ich würde Optokoppler verwenden. Dann wäre der Nano total vom Frequenzumrichter getrennt?
    Heute nicht mehr.
    Dankeschön!
    Achim

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Nur noch mal als Rückmeldung.
    Getestet hatte ich ja am Schreibtisch. Kurze Leitungen, Arduino auf dem Steckbrett.
    Spannungsquelle USB oder auch Netzteil.
    Hier schwamm die Anzeige wie beschrieben.
    Dann hatte ich nur am Schluß ein 15 Sekunden Delay eingefügt und den Nano in einen DIN-A4 Blatt großen Kasten gesetzt. Hier sind noch 6 x SSD Relais, Ein Meanwell Netzteil und diverse Bauteile eng verbaut.
    Dadrüber im extra Gehäuse der Frequenzumrichter. Der Fühler im Rauchrohr des Holzvergasers.
    Das verückte ist, nichts schwimmt mehr. Der Nano steuert 1/4° genau, ohne zu zittern, den Umrichter.
    Ich bin natürlich begeistert. Auch wenn es rätselhaft ist.
    Danke für eure Hilfe.
    Es ist schön, nicht alleine da stehen zu müssen.

    Alles Gute und helft weiter so toll.
    Achim

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 31.05.2011, 08:35
  2. Linux SerialStream.h friert ein bei Open("/dev/ttyUSB0")
    Von TomSawer im Forum Software, Algorithmen und KI
    Antworten: 5
    Letzter Beitrag: 19.04.2011, 09:42
  3. Antworten: 10
    Letzter Beitrag: 19.03.2009, 19:13
  4. 20x4Display: Abfrage "Busy-Flag" reagiert nicht
    Von Dolfo im Forum Assembler-Programmierung
    Antworten: 0
    Letzter Beitrag: 17.10.2007, 21:56
  5. Stückliste "Mehr Spass mit ASURO Band II"
    Von gandalfsz im Forum Asuro
    Antworten: 0
    Letzter Beitrag: 25.02.2007, 18:30

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

    Werbung      Solar Speicher und Akkus Tests