Bastelstunde: PID, pressure-, flowcontroll Bluetooth mod...

Diskutiere Bastelstunde: PID, pressure-, flowcontroll Bluetooth mod... im Espresso- und Kaffeemaschinen Forum im Bereich Maschinen und Technik; Zum schnell mal Testen hast du ein Test-System? nein, das Testsystem ist die Maschine. Es funktioniert ja auch aufs Grad genau. Nur manchmal...

  1. #61 flo_ffb, 27.04.2021
    flo_ffb

    flo_ffb Mitglied

    Dabei seit:
    13.08.2017
    Beiträge:
    184
    Zustimmungen:
    156
    nein, das Testsystem ist die Maschine. Es funktioniert ja auch aufs Grad genau. Nur manchmal steigt es aus. Und zwar nur die Ansteuerung des Relais für die Kesseltemperaturregelung. Alles ander läuft weiter. Der Arduino hängt sich nicht auf, Waage, Bezug, alles geht weiter. Der Ausgang bleibt mal auf HIGH oder LOW hängen hängen. Das ist mein Problem.

    Die Druckregelung läuft extra und funktioniert auch. Die läuft über den PWM Ausgang und Phasenanschnitt der Pumpe. Läuft im Moment auf 0,5bar genau.
     
  2. #62 Dale B. Cooper, 27.04.2021
    Dale B. Cooper

    Dale B. Cooper Mitglied

    Dabei seit:
    24.01.2009
    Beiträge:
    9.194
    Zustimmungen:
    3.934
    hast mal am geschalteten Pin gemessen, wenn das Teil ausgestiegen ist, ob der Arduino aussteigt oder die Elektronik dahinter nicht das tut, was du erwartest? :)
    @flo_ffb
     
  3. Pflunz

    Pflunz Mitglied

    Dabei seit:
    24.01.2017
    Beiträge:
    1.108
    Zustimmungen:
    1.763
    Vielleicht auch mal jede Sekunde im Terminal den Ausgabewert des Temperaturreglers wie auch den Pinzustand ausgeben lassen.

    edit: Du hast immer noch nicht geschrieben wie du den Reglerwert auf das Relais ausgibst.
     
  4. #64 flo_ffb, 27.04.2021
    flo_ffb

    flo_ffb Mitglied

    Dabei seit:
    13.08.2017
    Beiträge:
    184
    Zustimmungen:
    156
    gemessen habe ich noch nicht. Die LED auf dem Relais zeigt aber den Status an und leuchtet nur, wenn ein Schalteingang (sprich die 5V vom Arduino) anliegen. Manchmal macht sie nichts mehr, manchmal hängt sie im dauer an und heizt bis kurz vor Kernschmelze.
    Drum bin ich mir uiemlich sicher, dass am Arduino PIN was falsches anliegt (oder hängt). Den PIN habe ich schon gewechselt.

    // call the PID compute function (update rate determined by PID_SAMPLE_TIME)
    pid.Compute();
    // call relay loop function and update the duty cycle from the dutyCycle variable (which is continuously updated by the PID).
    relay.loop();
    relay.setDutyCyclePercent(dutyCycle);
     
  5. Pflunz

    Pflunz Mitglied

    Dabei seit:
    24.01.2017
    Beiträge:
    1.108
    Zustimmungen:
    1.763
    Die dutyCycle Variable geht bei dir auch von 0-1.0?
     
  6. #66 Dale B. Cooper, 27.04.2021
    Dale B. Cooper

    Dale B. Cooper Mitglied

    Dabei seit:
    24.01.2009
    Beiträge:
    9.194
    Zustimmungen:
    3.934
    So die Hoffnung, ich würd's messen, um zu klären, was da hängt.
     
    flo_ffb gefällt das.
  7. #67 flo_ffb, 27.04.2021
    flo_ffb

    flo_ffb Mitglied

    Dabei seit:
    13.08.2017
    Beiträge:
    184
    Zustimmungen:
    156
    Mein Prinzip war anders rum. %v ran- LED an. 5V weg LED aus. Wenn ichs messen will kommt der Fehler bei meinem Glück den ganzen Tag nicht:-(

    Ich schalt mal ein und häng mir das Multimeter um.

    Die wird in Relay.h beschrieben
    Die Grenzen werden mit
    #define UPPER_LIMIT 1.0 // upper PID output limit. Set to 1.0 (i.e. 100 percent of the duty cycle = full on)
    #define LOWER_LIMIT 0.0
    auf 1 festgelegt

    ::::::::::::::::::::::::::::::::::::::::::::::::::::::
    /*
    * Relay.h
    *
    * Implement a relay controlled by duty cycle.
    *
    * Author: Rob Bultman
    * Sept. 13, 2017
    */

    #ifndef RELAY_H
    #define RELAY_H

    #include <stdint.h>

    typedef enum {
    relayModeManual,
    relayModeAutomatic
    } RelayMode;

    typedef enum {
    relayPositionOpen,
    relayPositionClosed
    } RelayPosition;

    class Relay {
    public:
    Relay(uint8_t pin, uint16_t periodInSeconds);
    void setRelayMode(RelayMode mode);
    RelayMode getRelayMode(void);
    void setRelayPosition(RelayPosition position);
    RelayPosition getRelayPosition(void);
    void setDutyCyclePercent(double dutyCycle);
    double getDutyCyclePercent(void);
    void setPeriodInSeconds(uint16_t periodInSeconds);
    uint16_t getPeriodInSeconds(void);
    void loop(void);

    private:
    uint8_t _pin;
    uint16_t _periodInSeconds;
    double _dutyCycle;
    RelayMode _mode;
    RelayPosition _position;
    uint32_t _periodTime;
    uint32_t _oldTime;
    };

    #endif // RELAY_H
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
     
  8. Pflunz

    Pflunz Mitglied

    Dabei seit:
    24.01.2017
    Beiträge:
    1.108
    Zustimmungen:
    1.763
    Hey, ich habe schon gesehen dass das so sein soll.
    Du hast ja aber einen Regler der dir Werte 0-255 ausgibt.
    Das bedeutet du nimmst den Reglerausgang, teilst in durch 255 und übergibst ihn der Funktion relay.setDutyCyclePercent(dutyCycle)?
     
  9. #69 flo_ffb, 27.04.2021
    flo_ffb

    flo_ffb Mitglied

    Dabei seit:
    13.08.2017
    Beiträge:
    184
    Zustimmungen:
    156
    Völlige Verwirrung.

    Ich habe 2 Regler.
    1. Regler, selbstgebastelt für Druck. Der gibt 0-255 aus, über Phasenanschnitt wird die Pumpe geregelt. --> Schnurrt wie eine Katze

    2. Regler, zusammenkopiertes für Temperatur. SSR und PID aus den obengenannten libaries. pid gibt Werte aus an dutycycle, Relay.h macht 0-1 draus. schnurrt auch wie ne Katze, nur ab und zu setzts aus. -->Der macht die Probleme und mich wahnsinnig
     
  10. #70 flo_ffb, 27.04.2021
    flo_ffb

    flo_ffb Mitglied

    Dabei seit:
    13.08.2017
    Beiträge:
    184
    Zustimmungen:
    156
    wenn der nicht hängen bleiben würde würde ich nichts dran ändern wollen. Regeln tuts sauber
     
  11. Pflunz

    Pflunz Mitglied

    Dabei seit:
    24.01.2017
    Beiträge:
    1.108
    Zustimmungen:
    1.763
    Ich habe das schon verstanden. Aber der PID Regler gibt doch Werte 0-255 aus.
    Relay.h macht nicht 0-1 daraus, sondern erwartet als DutyCycle eine double-Variable mit den Werten 0-1.0 .

    edit: Ah, ich habe gesehen du definierst für den Temperatur-Regler die Range von 0 -1.0
    Das sollte passen.

    Dann würde ich mir auf jeden Fall einfach jede Sekunde den Ausgang des Reglers ausgeben lassen. Dann siehst du ja ob der Regler Quatsch macht oder deine Relay.h
     
    00nix gefällt das.
  12. #72 flo_ffb, 27.04.2021
    flo_ffb

    flo_ffb Mitglied

    Dabei seit:
    13.08.2017
    Beiträge:
    184
    Zustimmungen:
    156
    Das macht Sinn. Dann weiß ich wer der Schuldige ist:)
     
  13. #73 flo_ffb, 28.04.2021
    flo_ffb

    flo_ffb Mitglied

    Dabei seit:
    13.08.2017
    Beiträge:
    184
    Zustimmungen:
    156
    Der Schuldige ahnt scheinbar, dass es ihm bald an den Kragen geht. Er hat sich heute nicht gemeldet:mad:. Reibungsloser Betrieb...
     
    00nix gefällt das.
  14. #74 flo_ffb, 03.05.2021
    flo_ffb

    flo_ffb Mitglied

    Dabei seit:
    13.08.2017
    Beiträge:
    184
    Zustimmungen:
    156
    Für Mittwoch sind die Stunden angekündigt und passend dazu wird das Wetter schlecht:).
    Der Lötkolben liegt bereit. Dann gehts weiter und die Maschine kriegt auch gleich ihr neues schwarzes Kleid. Und der Schuldige wird weiter gesucht
     
  15. #75 flo_ffb, 04.05.2021
    flo_ffb

    flo_ffb Mitglied

    Dabei seit:
    13.08.2017
    Beiträge:
    184
    Zustimmungen:
    156
    Der Fehler trat auf, der serielle Monitor ist mitgelaufen. Hab mich schon lange nicht mehr über einen Fehler gefreut, verrückte Welt.
    Was passiert und ist zu sehen:
    Ich habe die Kesseltemperatur ,dann wie von @Pflunz vorgeschlagen die Variable DutyCycle (das sollte der pid Ausgang der libary pid_h sein) und den Pin-Status mitgeschrieben.
    Der Kessel heizt auf, Dutycycle und PIN sind auf 1, soweit passt alles. Wir kommen Richtung Solltemp,Dutycycle springt zwischen 0 und 1 und das Relais taktet.
    Zwischendrin gibt DutyCycle mal nur 0,5 aus (warum auch immer), der PIN Ausgang reagiert nicht darauf. Macht aber nichts, die Kesseltemperatur passt.
    Dann wird es spannend. Es fehlt mal ein Temperaturwert und es wird ein "nan" ausgegeben, daraufhin gibt DutyCycle auch nur noch "nan" aus und bleibt bei "nan", der Relaisausgang bleibt auf 1, der Kessel heizt bis zum Abschalten.

    Jetzt die spannende Frage:
    WARUM?
    Und die noch spannendere:
    Was mach ich dagegen? Kann man die Not a Value Werte rausfiltern? Warum macht Dutycycle nicht weiter, wenn wieder Temperaturwerte kommen?
    Oder kann man einen automatischen reset am Arduino durchführen falls der Heizfall eintritt?

    Wer weiß rat? (Für den trink ich auch ein Bier)
    Fehler.jpg

    Fehler_groß.jpg
     
    00nix und Dale B. Cooper gefällt das.
  16. #76 Yoku-San, 04.05.2021
    Yoku-San

    Yoku-San Mitglied

    Dabei seit:
    23.08.2017
    Beiträge:
    2.767
    Zustimmungen:
    2.928
    Könntest du ne if Funktion machen für NAN vom Max6675 (oder was nutzt du?), und damit nen pin auf High machen, den Du mit dem Reset pin verbunden hast?

    Weißt Du was ich meine? :rolleyes:

    Ich verstehe selber nicht soviel vom Programmieren. Aber ich hab neulich nen Sketch für honsl geschrieben, der genau so via Seriellem Befehl von Artisan den Arduino so resetted hat.
     
    00nix und flo_ffb gefällt das.
  17. Pflunz

    Pflunz Mitglied

    Dabei seit:
    24.01.2017
    Beiträge:
    1.108
    Zustimmungen:
    1.763
    Das hilft doch schon einmal.

    Warum deine Temperatur ein naN ausgibt kann ich nicht sagen und sollte untersucht werden. Woher du die Temperatur bekommst hast du ja glaube ich nicht geschrieben.

    Der Regler hängt sich daran auf, da er ja als PI-Regler einen I-Anteil drin hat, worin ja der alte Fehler aufsummiert wird. Wenn ich jetzt zum Fehler ein naN hinzuaddiere, wird dieser ebenfalls naN. Du bekommst das also nie mehr los, da ja bei jedem durchlauf der alte naN-Fehler auf den aktuellen addiert wird.

    Also, auf jeden Fall checken woher die "Temperatur" naN kommt.
    Dann, bevor du die Temperatur in den Regler schickst überprüfst du ob es naN ist ( if(isnan(dutyCycle)) ). Falls ja, rufst du die Funktion nicht auf. So funktioniert der Regler nach diesem Fehler weiterhin.
    Außerdem überprüfst du in Zukunft den Reglerausgang auf naN. Falls das passiert, setzt du den Pin auf 0 und setzt ein Errorflag.
     
    00nix, Yoku-San und flo_ffb gefällt das.
  18. #78 flo_ffb, 04.05.2021
    flo_ffb

    flo_ffb Mitglied

    Dabei seit:
    13.08.2017
    Beiträge:
    184
    Zustimmungen:
    156
    Ja weiß ich. Reset wäre der letzte Ausweg zum verschleiern der Softwarefehler :p. Ich werde erst mal versuchen den Fehler zu beheben.

    Danke @Pflunz, da werde ich mal ansetzen, wobei ich noch nicht genau weiß wie.
    Die Temperatur wird über ein TYP K Element direkt im Kessel gemessen und ein MAX6675 einelesen. Warum hier ein naN rauskommt werde ich wohl nicht rausfinden können. Oder hast du eine Idee wie?
    ich werde mich mal über die isnan Funktion belesen, die kannte ich noch nicht.
     
  19. #79 Pflunz, 04.05.2021
    Zuletzt bearbeitet: 04.05.2021
    Pflunz

    Pflunz Mitglied

    Dabei seit:
    24.01.2017
    Beiträge:
    1.108
    Zustimmungen:
    1.763
    Ich vermute du nutzt hier auch eine fertige Library? Wenn ja, schaue ob es ein errorhandling gibt ( MAX6675.readerror() o.ä)
     
    Dale B. Cooper gefällt das.
  20. #80 Dale B. Cooper, 04.05.2021
    Dale B. Cooper

    Dale B. Cooper Mitglied

    Dabei seit:
    24.01.2009
    Beiträge:
    9.194
    Zustimmungen:
    3.934
    Denke ich auch. wenn die Temperatur-Lib. NAN ausliefert, läuft irgednwas grob falsch.

    Viel Erfolg,
    Dale.
     
Thema:

Bastelstunde: PID, pressure-, flowcontroll Bluetooth mod...

Die Seite wird geladen...

Bastelstunde: PID, pressure-, flowcontroll Bluetooth mod... - Ähnliche Themen

  1. Lelit Glenda PID, lange Aufheizzeit nach Bezug

    Lelit Glenda PID, lange Aufheizzeit nach Bezug: Hallo, eigentlich bin ich auch nach einigen Monaten mit meiner Glenda und der DF64 gen2 wunschlos glücklich und mit den Ergebnisssen im Rahmen...
  2. Ascaso steel duo pid, Magnetventile Brühgruppe / Dampfkreislauf

    Ascaso steel duo pid, Magnetventile Brühgruppe / Dampfkreislauf: Hallo zusammen :) Nach langjähriger Nutzung und Modifikationen der Delonghi EC 680 (gedrehte Dampflanze aus Edelstahl, neues Sieb, abgesägter...
  3. Einkreiser, PID, Flow Control - Gibts sowas?

    Einkreiser, PID, Flow Control - Gibts sowas?: Hallo! Meine Pavoni braucht wieder mal ein großes Service. Rost am Standfuß, Dichtungen überall undicht, Presso verstellt… Kurzum es macht...
  4. Kaufberatung: DB oder ZK mit E61 BG, Rotationspumpe, PID, Edelstahlkessel ...

    Kaufberatung: DB oder ZK mit E61 BG, Rotationspumpe, PID, Edelstahlkessel ...: Hallo euch allen! Ich habe im letzten Jahr wegen Zeitmangel den ganzen "Kaffeekram". Nun ist wieder mehr Zeit vorhanden und es steht der Kauf...
  5. Ascaso Steel DUO PID, kein Dampf

    Ascaso Steel DUO PID, kein Dampf: Hallo zusammen, ich habe die Maschine ca. 7 Monate und als ich heute eine Cappu machen wollte, kam da kein Dampf mehr. Vorab habe ich den Dampf...