- Labornetzteil AliExpress         
Ergebnis 1 bis 8 von 8

Thema: Regelung Mischer mit Servo (Heizung)

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.12.2006
    Beiträge
    109

    Regelung Mischer mit Servo (Heizung)

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Einen schönen guten Tag an alle!

    Für die Steuerung meiner Heizung möchte ich den Mischer mit einem Servo regeln (was anderes wie mit dem Servo geht nicht, da ich die Originalregelung nicht ändern möchte, um Fehlerfälle abzufangen). Hierzu möchte ich in Abhängigkeit von der Raumtemperatur den Mischer öffnen oder schließen (die Funktionalität habe ich im Grundsatz im Code unten im Bereich Def. von Konstanten beschrieben).

    Kann mir da jemand helfen, wie man das am besten macht (z.B. für Tagbetrieb). oder ist mein Ansatz völlig falsch.

    Danke schonmal
    Martin


    Code:
    $regfile = "M8def.dat"
    $crystal = 3686400
    $hwstack = 46
    $swstack = 40
    $framesize = 40
    $baud = 19200
    '************************************************************
    
    Dim Tagnacht As Bit
    Dim Nachtbetrieb As Byte
    Dim Tagbetrieb As Byte
    
    Nachtbetrieb = 21
    Tagbetrieb = 5
    
    Dim Tempmessstelle(8) As Single
    
    '************************Def. von Konstanten***************
    Const Tagtemp_og = 22.0            ' Mischer ganz zu
    Const Tagtemp_ug = 21.0            ' Mischer ganz auf
    Const Nachttemp_og = 21.5          ' Mischer ganz zu
    Const Nachttemp_ug = 20.5          ' Mischer ganz auf
    '
    'Im Bereich 21.0 bis 22.0 (Tagbetrieb) sowie im Bereich  20.5 bis 21.0 (Nachtb.)
    'soll mit dem Servo der Mischer gesteuert werden.
    'Mischerfunktion für diesen Bereich (y = m*x + n); x = Raumtemp, y = Mischerstellung
                    '                 y = 1200*x - 24600
    ' Bei Tagbetrieb:
    '    y = 1800 für Raumtemp < 21.0 Grad
    '    y =  600 für Raumtemp > 22.0 Grad
    '
    'Bei Nachtbetrieb:
    '    y = 1800 für Raumtemp < 20.0 Grad
    '    y =  600 für Raumtemp > 22.0 Grad
    
    Die ganz Funktion (d.h. die Sub Mischersteuerung) soll nur alle 5 min oder so (am besten einstellbar) gestartet werden. 
    
    '************************************************************
    Config Portc.2 = Output
    
    '--------------------------Funktionen LCD-Display-------------------------------
    
    Config Lcd = 40 * 4
    Config Lcdpin = Pin , Rs = Portb.0 , Db4 = Portd.5 , Db5 = Portd.4 , Db6 = Portd.3 , Db7 = Portd.2 , E = Portd.6 , E2 = Portd.7
    Config Lcdbus = 4
    Config Lcdmode = Port
    
    Dim ___lcdno As Byte
    
    ___lcdno = 0
     Initlcd
     Cursor Off
     Cls
    ___lcdno = 1
    Initlcd
    Cursor Off
    Cls
    
    '--------------------------------Config Timer1----------------------------------
    
    Config Timer1 = Timer , Prescale = 256       '256       'Konfiguriere Timer1
    Enable Timer1                      'schalte den Timer1 ein
    On Timer1 Isr_von_timer1           ' bei Timer1 überlauf zu   Isr_von_Timer1
    Enable Interrupts
    Timer1 = 36835                     'Timer1 soll schon von 65535 - x*14400
    
    '--------------------------------Config 1Wire configurieren---------------------
    
    Config 1wire = Portc.1             'DS1820
    
    Match_rom Alias &H55
    Read_scratchpad Alias &HBE
    Start_conversion Alias &H44
    
    Innen Alias 0
    Vorlauf Alias 1
    Rücklauf Alias 2
    Aussen Alias 3
    Kessel Alias 4
    
    
    Dim Read_temp As Integer
    Dim Sensor_ids(48) As Byte
    Dim Id As Byte
    Dim Offset As Byte
    Dim Ds_array(7) As Byte
    Dim Bruchteil As Single
    Dim Temperatur As Single
    Dim I As Integer
    For Id = 1 To 40                   'Einlesen der 5 Sensoren IDs (5*8 Byte)
       I = Id - 1
       Readeeprom Sensor_ids(id) , I
    Next Id
    
    '--------------------------------Config RTC-------------------------------------
    
    Config Sda = Portc.4
    Config Scl = Portc.5
    
    Const Ds1307w = &HD0               ' Addresses of Ds1307 clock
    Const Ds1307r = &HD1
    
    Config Clock = User                ' this will dim the bytes automatic
    Dim Weekday As Byte
    
    'Time$ = "20:10:00"                 ' to watch the day changing value
    'Date$ = "02.27.07"                 ' erstmaliges stellen der Uhr
    
    '************************************************************
    
    Dim Mischer_max As Integer
    Dim Mischer_min As Integer
    Dim Mischer_ist As Integer
    
    '************************************************************
    Mischer_max = 1800                 ' Vorlaufminimum
    Mischer_min = 600                  'Vorlaufmaximum
    Mischer_ist = Mischer_min
    '***********************************************************
    For I = Mischer_min To Mischer_max Step 10
      Locate 2 , 1 : Lcd "MS:"
      Locate 2 , 4 : Lcd I
      Pulseout Portc , 2 , I           'Mischer_min       'Ist
      Waitms 60
    Next I
    
    '************************************************************
    Do
       Wait 1
       For Id = Innen To Kessel        'Kessel
          Offset = Id * 8
          Offset = Offset + 1          'Offset geht auf 1, 9, 17, 25 und 33
          1wreset                      'hier wird der Temperaturwert eingelesen
          1wwrite Match_rom
          1wwrite Sensor_ids(offset) , 8       '8 Byte ID wird übertragen
          1wwrite Read_scratchpad
          For I = 1 To 7               'nur bis 7, weil 8 und 9 uninteressant
             Ds_array(i) = 1wread()
          Next I
          Read_temp = Makeint(ds_array(1) , Ds_array(2))
          1wreset                      'jetzt wird wieder die Konvertierung gestartet
          1wwrite Match_rom
          1wwrite Sensor_ids(offset) , 8
          1wwrite Start_conversion
          Shift Read_temp , Right
          If 127 < Read_temp Then Read_temp = Read_temp - 32768
          Bruchteil = 16 - Ds_array(7)
          Bruchteil = Bruchteil / 16
          Bruchteil = Bruchteil - 0.25
          Temperatur = Read_temp + Bruchteil
          Temperatur = Temperatur + 0.2
    
          Tempmessstelle(id + 1) = Temperatur
    
           ___lcdno = 0
    
          Select Case Id
          Case Innen:
             Locate 1 , 1 : Lcd "WZ:       "
             Locate 1 , 5 : Lcd Fusing(temperatur , "#.#")
          Case Aussen:
             Locate 1 , 11 : Lcd "AU:     "
             Locate 1 , 14 : Lcd Fusing(temperatur , "#.#")
          Case Vorlauf:                'ausgabe im Display ist dann z.B.
             Locate 2 , 1 : Lcd "VL:       "
             Locate 2 , 5 : Lcd Fusing(temperatur , "#.#" )       '  Inn  Auss  Kess Rück Vorl
          Case Rücklauf:               ' 14.4  52.4 67.3 43.0 62.8
             Locate 2 , 11 : Lcd "RL:       "
             Locate 2 , 14 : Lcd Fusing(temperatur , "#.#")
          End Select
    
            ___lcdno = 1
    
          Locate 2 , 20
          Lcd Time$
    
          Select Case Id
          Case Kessel:
             Locate 1 , 11 : Lcd "KE:     "
             Locate 1 , 14 : Lcd Fusing(temperatur , "#.#")
          End Select
         Cursor Off
       Next Id
    Loop
    End
    '**************************Sub Tagbetrieb**************
    Tagbetrieb:
    Return
    '**************************Sub Nachtbetrieb************
    Nachtbetrieb:
    Return
     '*************************Sub Relais schalten*******
    Mischersteuerung:
    Select Case Tagnacht
      Case 0
        Gosub Nachtbetrieb
      Case 1
        Gosub Tagbetrieb
    End Select
    Return
    
    '************************************************************
    Auswertung_tag_nacht:
      If _hour >= Nachtbetrieb Or _hour < Tagbetrieb Or _hour = 7 Then
        Tagnacht = 0                   'Nachteinstellung
      Else
        Tagnacht = 1                   'Tageinstellung
      End If
    Return
    '**************************Subroutine für Timer1*******
    Isr_von_timer1:                    'ISR von Timer1
      Timer1 = 36835
      Gosub Auswertung_tag_nacht
      Gosub Mischersteuerung
    Return
    '***************Subs für RTC***************************
    Getdatetime:
      I2cstart                         ' Generate start code
      I2cwbyte Ds1307w                 ' send address
      I2cwbyte 0                       ' start address in 1307
    
      I2cstart                         ' Generate start code
      I2cwbyte Ds1307r                 ' send address
      I2crbyte _sec , Ack
      I2crbyte _min , Ack              ' MINUTES
      I2crbyte _hour , Ack             ' Hours
      I2crbyte Weekday , Ack           ' Day of Week
      I2crbyte _day , Ack              ' Day of Month
      I2crbyte _month , Ack            ' Month of Year
      I2crbyte _year , Nack            ' Year
      I2cstop
      _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
      _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
    Return
    
    Setdate:
      _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
      I2cstart                         ' Generate start code
      I2cwbyte Ds1307w                 ' send address
      I2cwbyte 4                       ' starting address in 1307
      I2cwbyte _day                    ' Send Data to SECONDS
      I2cwbyte _month                  ' MINUTES
      I2cwbyte _year                   ' Hours
      I2cstop
    Return
    
    Settime:
      _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
      I2cstart                         ' Generate start code
      I2cwbyte Ds1307w                 ' send address
      I2cwbyte 0                       ' starting address in 1307
      I2cwbyte _sec                    ' Send Data to SECONDS
      I2cwbyte _min                    ' MINUTES
      I2cwbyte _hour                   ' Hours
      I2cstop
    Return
    
    '************************************************************
    '************************************************************
    $eeprom
    
    Data &H10 , &HE8 , &HF4 , &H23 , &H01 , &H08 , &H00 , &HEF       '
    Data &H10 , &H1B , &HD0 , &H23 , &H01 , &H08 , &H00 , &H23       '
    Data &H10 , &H78 , &H37 , &H39 , &H01 , &H08 , &H00 , &H11       '
    Data &H10 , &HC0 , &H46 , &H19 , &H01 , &H08 , &H00 , &H67       '
    Data &H10 , &HBD , &HB6 , &H23 , &H01 , &H08 , &H00 , &H40       '
    Data &H10 , &H56 , &HA3 , &H23 , &H01 , &H08 , &H00 , &H3F

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.08.2004
    Beiträge
    197
    2,3 Fragen, was heißt Steuerung soll bleiben, wie koppelst du es ab und wieder ran. Wie sieht das Mischventil aus (Motormischer oder 0-10 Volt oder....?)
    Die vorhandene Regelung ist doch sicher eine aussentemp-abhängige Regelung der Vorlauftemperatur, dann werden bei dem Eingriff andere Heizkörper mit weggeregelt, oder ist es nur für's Wohnzimmer?

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.12.2006
    Beiträge
    109
    Zu den Fragen!
    Die eingebaute Regelung ist schon etwas älter mit Außentemperaturfühler.
    Diese Regelung hat einen Einstellknopf (Poti) mit dem man die Vorlauftemperetur für die Fußbodenheizung in Abhängigkeit von der Außentemp. steiler oder flacher einstellen kann. Mit einer Veränderung des Potis wird die Regelkurve für die Vorlauftemp. in Abhängigkeit von der Außentemp. steiler oder flacher eingestellt.

    An dieses Potentiometer habe ich ein Servo mechanisch so angekommelt, so dass ich mit dem Servo das Potentimeter einstellen und somit die Vorlauftemp. beeinflussen kann.

    Ich regele also nicht direkt den Mischer sondern über eine mechanische Ankopplung an ein existierendes Potentiometer der Heizungsregelung die Vorlauftemperatur. In folge dessen ist kein "Eingriff" in die Originalsteuerung notwendig. Notabschaltung u.s.w. der Originalsteuerung werden nicht beeinflusst.

    Da der Mischer nur die Vorlauftemperatur der Fußbodenheizung beeinflusst sind andere Heizkörper nicht betroffen.

    Ziel ist es die Vorlauftemperatur nicht nur mit der Außentemp. zu beeinflussen sondern auch bei steigender Raumtemp. zu reduzieren (Raumthermostat funktioniert nicht so richtig, da dieses nur die Durchflussmenge in der Fußbodenheizung beeinflusst; durch elektrisch betätigtes Ventil).

    Ich hoffe meine Ausführungen sind klar genug, um mein Problem näher zu erläutern.

    Grüße
    Martin

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.08.2004
    Beiträge
    197
    Na, das macht es nicht leichter. Eine Fussbodenheizung ist sehr träge, bei Temperaturwertveränderungen vergeht einige Zeit bis deren Auswirkungen feststellbar sind, ich würde auf jeden Fall mal die Zeit messen und in das Programm einfliessen lassen.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.02.2006
    Ort
    München
    Beiträge
    111
    Was für ein Heizungsregler ist es denn eigentlich den Du regeln willst.
    Ein alter Centra-Regler?

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.12.2006
    Beiträge
    109
    Guten Abend.

    Weiß nicht genau. DIe Heizung ist jedenfalls eine DeDietrich mit einer einfachen Regelung.

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.02.2006
    Ort
    München
    Beiträge
    111
    Bei einer Fußbodenheizung geht man (zumindest ich) von einer Verzögerungszeit von ca. 4 Stunden aus.
    Ich würde nicht die Heizkurvensteilheit verändern sondern die sog. Parallelverschiebung. Die Steilheit gibt an um wieviel Grad sich die Vorlauftemperatur ändern soll wenn sich die Außentemperatur um 1 Grad ändert. Bei einer FBH sind es normalerweise 0,8. Bei einer Radiatorenheizung sind es 1.6.
    Wenn Du jetzt die Steilheit änderst und Deine Regelung eine Fehlfunktion hat betreibst Du die Heizung womöglich mit einer viel zu hohen Temperatur. Tempearturen über 55 °C können für den Estrich gefährlich werden. Deshalb sollte jede FBH mit einem STB (Sicherheitstemperaturbegrenzer) ausgestattet sein der bei Übertemperatur den Mischer schließt und die Pumpe abschaltet.
    Wenn Du statt der Steilheit die Parallelverschiebung änderst (sollte eigentlich jeder Regler können) macht Deine Vorlauftemperatur keine so großen Sprünge.

    Ich sehe es bei einer so trägen Geschichte wie einer FBH allerdings etwas problematisch parallel zu einer witterungsgeführten Regelung noch eine raumgeführte Regelung draufzusetzen.
    Ich würde das ganze als rein raumgeführte Regelung machen. Dazu musst Du den Heizungsregler auf Konstanttemperatur umstellen. Wenn der Regler einen eigenen Außenfühler hat würde ich diesen gegen einen Festwiderstand ersetzen und dann mit Deiner raumgeführten Regelung den Sollwert der Parallelverschiebung ändern. Das geht aber nur dann wenn dieser Regelkreis einen eigenen Außenfühler hat.
    Intelligente Raumregler arbeiten übrigens mit einer sog. Selbstadaption d.h. sie optimieren sich selbständig so dass Du genau zu den gewünschten Zeiten die gewünschte Temperatur hast. Der Regler "lernt" im Lauf der Zeit wann und mit welcher Temperatur er die Heizung hochheizen muss.
    Da hast Du ja noch einiges vor Dir.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    27.05.2007
    Beiträge
    67
    Wow. Das wäre mir zu komplex.

    Im Prinzip ist dein Poti nochmals ein Störfaktor.
    Wie machst du das mit der Ansteuerung?
    - Solltemp zu niedrig, ein stückchen auffahren?
    - Solltemp zu hoch, ein stückchen zufahren?

    Wie ist die Verzögerungszeit zwischen verstellen des Potis und dem wirklichen zu-/auffahren des Mischers? Das wäre dein Störfaktor bzw. Verzögerung, das du bei deinem P- bzw. PI- Regler einrechnen musst.

    Aber mit Sicherheit ist das ganze machbar.

    Eisbaeeer

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad