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:
    134
    Zustimmungen:
    94
    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:
    8.248
    Zustimmungen:
    3.040
    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:
    442
    Zustimmungen:
    427
    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:
    134
    Zustimmungen:
    94
    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:
    442
    Zustimmungen:
    427
    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:
    8.248
    Zustimmungen:
    3.040
    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:
    134
    Zustimmungen:
    94
    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:
    442
    Zustimmungen:
    427
    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:
    134
    Zustimmungen:
    94
    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:
    134
    Zustimmungen:
    94
    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:
    442
    Zustimmungen:
    427
    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
     
  12. #72 flo_ffb, 27.04.2021
    flo_ffb

    flo_ffb Mitglied

    Dabei seit:
    13.08.2017
    Beiträge:
    134
    Zustimmungen:
    94
    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:
    134
    Zustimmungen:
    94
    Der Schuldige ahnt scheinbar, dass es ihm bald an den Kragen geht. Er hat sich heute nicht gemeldet:mad:. Reibungsloser Betrieb...
     
  14. flo_ffb

    flo_ffb Mitglied

    Dabei seit:
    13.08.2017
    Beiträge:
    134
    Zustimmungen:
    94
    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. flo_ffb

    flo_ffb Mitglied

    Dabei seit:
    13.08.2017
    Beiträge:
    134
    Zustimmungen:
    94
    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
     
    Dale B. Cooper gefällt das.
  16. Yoku-San

    Yoku-San Mitglied

    Dabei seit:
    23.08.2017
    Beiträge:
    803
    Zustimmungen:
    554
    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.
     
    flo_ffb gefällt das.
  17. Pflunz

    Pflunz Mitglied

    Dabei seit:
    24.01.2017
    Beiträge:
    442
    Zustimmungen:
    427
    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.
     
    Yoku-San und flo_ffb gefällt das.
  18. flo_ffb

    flo_ffb Mitglied

    Dabei seit:
    13.08.2017
    Beiträge:
    134
    Zustimmungen:
    94
    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 um 22:28 Uhr
    Zuletzt bearbeitet: 04.05.2021 um 23:16 Uhr
    Pflunz

    Pflunz Mitglied

    Dabei seit:
    24.01.2017
    Beiträge:
    442
    Zustimmungen:
    427
    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. Dale B. Cooper

    Dale B. Cooper Mitglied

    Dabei seit:
    24.01.2009
    Beiträge:
    8.248
    Zustimmungen:
    3.040
    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. [Verkaufe] Ascaso Steel Duo PID, inox (kleiner Transportschaden)

    Ascaso Steel Duo PID, inox (kleiner Transportschaden): Hallo Zusammen, aufgrund eines Transportschadens (s. Bild) biete ich hier die im Titel genannte Espressomaschine an. Der Schaden ist auf dem Bild...
  2. Probleme Quickmill Silvano: PID, und andere

    Probleme Quickmill Silvano: PID, und andere: Hallo Kaffeenetzler Mein erster Beitrag im Forum... und gleich Sorgen :( Meine Quickmill Silvano macht in letzter Zeit Probleme: - Nach einem...
  3. Benötige Hilfe, Kaufempfehlung - Einkreiser, PID,

    Benötige Hilfe, Kaufempfehlung - Einkreiser, PID,: Liebe Mitglieder, ich benötige eure Erfahrungen, um endlich eine Kaufentscheidung zu treffen. Nach wochenlanger Recherche weiß ich endlich...
  4. [Erledigt] ASCASO Steel Duo PID, Weiß matt

    ASCASO Steel Duo PID, Weiß matt: Auch wenn es mir schwer fällt - hiermit biete ich meine Ascaso Steel DUO PID zu Verkauf an. Grund: Das „Nutzungsverhalten“ passt einfach nicht...
  5. Kaufberatung: PID, Dualboiler, E61, Isolierung, ...

    Kaufberatung: PID, Dualboiler, E61, Isolierung, ...: Hallo Leute, bin schon seit vielen Jahren hier im Forum - und auch bewusst nicht all zu aktiv, um den "haben-will-Reflex" etwas im Zaum zu...