1 2 3 4 5 6 7 8 9 10 8.5/10 8,50оценок: 6

"Народный контроллер" для теплового насоса - 3

Тема в разделе "Геотермальные тепловые насосы", создана пользователем vad711, 26.11.19.

  1. vad711
    Регистрация:
    30.04.14
    Сообщения:
    5.305
    Благодарности:
    5.023

    vad711

    Живу здесь

    vad711

    Живу здесь

    Регистрация:
    30.04.14
    Сообщения:
    5.305
    Благодарности:
    5.023
    Адрес:
    МО
    Пока нет, да и все равно нужно управляемый ТП делать, он там на втором этаже не постоянно нужен и пока только ночью.
    Пока сделал так, посмотрю как будет в реале:

    upload_2021-11-30_9-21-28.png
     
  2. Pskovsat
    Регистрация:
    04.12.12
    Сообщения:
    2.500
    Благодарности:
    1.231

    Pskovsat

    Живу здесь

    Pskovsat

    Живу здесь

    Регистрация:
    04.12.12
    Сообщения:
    2.500
    Благодарности:
    1.231
    Адрес:
    Псков
    У меня ведь еще датчики давления читаются по модбас.
    Может действительно из за этого.
     
  3. Vrvkrd
    Регистрация:
    30.11.19
    Сообщения:
    463
    Благодарности:
    472

    Vrvkrd

    Живу здесь

    Vrvkrd

    Живу здесь

    Регистрация:
    30.11.19
    Сообщения:
    463
    Благодарности:
    472
    Какой перепад по температуре подачи и обратки в контуре второго этажа?
     
  4. vad711
    Регистрация:
    30.04.14
    Сообщения:
    5.305
    Благодарности:
    5.023

    vad711

    Живу здесь

    vad711

    Живу здесь

    Регистрация:
    30.04.14
    Сообщения:
    5.305
    Благодарности:
    5.023
    Адрес:
    МО
    Если плата TTL-RS485 работает без ошибок, то дело не в прошивке. Ей, конечно, можно обойти острые углы конкретного железа, но кто этим будет заниматься?
    Это как я вместо ПИД для ЭРВ использую свой хитрый алгоритм, потому как ПИД на моем железе работает не очень, на контроллере от производителя было еще хуже.
    Почему не хочешь плату TTL-RS485 воткнуть?
    А нет раздельного контура, вся разводка ПП по полу второго этажа.
    Отдельно две параллельные ветки ТП и батареи+фанкойлы.
     
  5. Vrvkrd
    Регистрация:
    30.11.19
    Сообщения:
    463
    Благодарности:
    472

    Vrvkrd

    Живу здесь

    Vrvkrd

    Живу здесь

    Регистрация:
    30.11.19
    Сообщения:
    463
    Благодарности:
    472
    Ну пусть будет ветка, перепад на ветке батарей есть возможность заменить?
     
  6. vad711
    Регистрация:
    30.04.14
    Сообщения:
    5.305
    Благодарности:
    5.023

    vad711

    Живу здесь

    vad711

    Живу здесь

    Регистрация:
    30.04.14
    Сообщения:
    5.305
    Благодарности:
    5.023
    Адрес:
    МО
    Можно примотать датчик к крану металлическому, будет не очень точно.
     
  7. Vrvkrd
    Регистрация:
    30.11.19
    Сообщения:
    463
    Благодарности:
    472

    Vrvkrd

    Живу здесь

    Vrvkrd

    Живу здесь

    Регистрация:
    30.11.19
    Сообщения:
    463
    Благодарности:
    472
    Необходимо определить перепад и если будет возможность сократить его. Тем самым вы увеличите подаваемую мощность по теплоносителю.
     
  8. vad711
    Регистрация:
    30.04.14
    Сообщения:
    5.305
    Благодарности:
    5.023

    vad711

    Живу здесь

    vad711

    Живу здесь

    Регистрация:
    30.04.14
    Сообщения:
    5.305
    Благодарности:
    5.023
    Адрес:
    МО
    Не понял как, мне казалось, что увеличить мощность отопления можно одним способом - открыть по-шире батареи или их добавить еще.
    В тех комнатах, в которых нужно греть, батареи и так на максимум открыты, а в других - закрыты термоголовками.
     
    Последнее редактирование: 03.12.21
  9. Альтермолог
    Регистрация:
    29.03.11
    Сообщения:
    8.499
    Благодарности:
    6.236

    Альтермолог

    Живу здесь

    Альтермолог

    Живу здесь

    Регистрация:
    29.03.11
    Сообщения:
    8.499
    Благодарности:
    6.236
    Адрес:
    Москва
    Я примерно понимаю откуда ноги растут, но тут по другому, дельтаТ * проток, чем меньше дельта, тем меньше тепловая мощность.
     
  10. Vrvkrd
    Регистрация:
    30.11.19
    Сообщения:
    463
    Благодарности:
    472

    Vrvkrd

    Живу здесь

    Vrvkrd

    Живу здесь

    Регистрация:
    30.11.19
    Сообщения:
    463
    Благодарности:
    472
    Ну к примеру, если у вас перепад по температуре теплоносителя, скажем 10С, то в нижней части батареи она будет самой холодной и тепловой напор от батареи к воздуху в этой точке будет самым маленьким. А если вы путем увеличения расхода теплоносителя уменьшите дельту температур на нем, то заполняемость батареи увеличится и в самой нижней точке батареи тепловой напор увеличится равно как и мощность самой батареи.
    По этому, я сразу спросил какой у вас перепад по теплоносителю на батареях ? Есть ли там куда двигаться?
     
  11. Pskovsat
    Регистрация:
    04.12.12
    Сообщения:
    2.500
    Благодарности:
    1.231

    Pskovsat

    Живу здесь

    Pskovsat

    Живу здесь

    Регистрация:
    04.12.12
    Сообщения:
    2.500
    Благодарности:
    1.231
    Адрес:
    Псков
    Если есть варианты, я поддержу решения.
    Нет места в корпусе, а там должны еще быть модуль с парочкой реле.
    Также, еще нужно впихнуть TTL-RS485 под дисплей некстион.
    Кстати может этот глючный интерфейс использовать тогда для некстиона, но управлением прием передача тут берет на себя DUE, как с этим быть не очень понимаю. Но мысля уже посещала.
    Да и хотел избавится от всех этих проводочков, в итоге от чего бежал...
    Опять же это железо денег стоило, оно впаяно жрет вольты от стабилизатора.
    Как то бросать на полпути не правильно.
     
  12. Sheeny
    Регистрация:
    25.05.10
    Сообщения:
    740
    Благодарности:
    881

    Sheeny

    Живу здесь

    Sheeny

    Живу здесь

    Регистрация:
    25.05.10
    Сообщения:
    740
    Благодарности:
    881
    Адрес:
    Ивантеевка
    А почему TTL-RS485, а не HC-12 SI4463?

    https://www.forumhouse.ru/posts/24393999/
     
    Последнее редактирование: 06.12.21
  13. Pskovsat
    Регистрация:
    04.12.12
    Сообщения:
    2.500
    Благодарности:
    1.231

    Pskovsat

    Живу здесь

    Pskovsat

    Живу здесь

    Регистрация:
    04.12.12
    Сообщения:
    2.500
    Благодарности:
    1.231
    Адрес:
    Псков
    @Sheeny, Приветствую...
    Ну можно попробовать, эта связка просто работала на самосборе.
    Подключил сейчас к плате Pav2000, тоже работает.
    Тут с тем что есть еще не разобраться, в час по чайной ложке.
    Сейчас переделал работу супербойлера, как на танке прет, одним словом нравится.

    Вообще честно, не реклама :|: плата очень понравилась, по сравнению с моим самосбором...

    Зы... Посмотрел, не не стоит игра свеч, питание к некстиону все равно тянуть.
     
    Последнее редактирование: 06.12.21
  14. dimex2015
    Регистрация:
    25.10.15
    Сообщения:
    1.947
    Благодарности:
    372

    dimex2015

    Живу здесь

    dimex2015

    Живу здесь

    Регистрация:
    25.10.15
    Сообщения:
    1.947
    Благодарности:
    372
    Адрес:
    Минск
    Расскажи что с супербойлером замутил.
     
  15. Pskovsat
    Регистрация:
    04.12.12
    Сообщения:
    2.500
    Благодарности:
    1.231

    Pskovsat

    Живу здесь

    Pskovsat

    Живу здесь

    Регистрация:
    04.12.12
    Сообщения:
    2.500
    Благодарности:
    1.231
    Адрес:
    Псков
    Протоком воды через предконденсатор управляет трех ходовой.
    До недавнего времени было, увеличение открытия или закрытия с оглядкой на температуры выхода фреона с предконденсатора и расчетную температуру подачи.
    Код:
    #ifdef RSUPERBOILER    // Режим одновременного нагрева бойлера с отоплением
      if(GETBIT(Prof.Boiler.flags, fBoilerTogetherHeat)) {
      if(is_flow_gvs()) {                                   // Поток ХВС в предконденсатор
         if(GETBIT(flags, fHP_BoilerTogetherHeat)) {
            journal.jprintf("Flow HVS.\n");
            Gvs_ocs(true, BoilerTogetherHeat-BoilerTogetherHeatSt);
            SETBIT0(flags, fHP_BoilerTogetherHeat); }       // Минимум циркуляции через предконденсатор
      }
       else if(!GETBIT(flags, fHP_BoilerTogetherHeat)){
            if(!GETBIT(dRelay[RSUPERBOILER].flags, fR_StatusMain)) dRelay[RSUPERBOILER].set_ON(); // насос супербойлера - включить
                SETBIT1(flags, fHP_BoilerTogetherHeat);     // флаг включения режима одновременного нагрева отопления и ГВС
                Gvs_ocs(true, BoilerTogetherHeat);          // Минимальная позиция клапана для подогрева ГВС
              }
       else if(n3w > BoilerTogetherHeat-BoilerTogetherHeatSt && (CalcTargetPID(Prof.Heat) > sTemp[TCONIN].get_Temp()-SUPERBOILER_HYST)) Gvs_ocs(true, n3w-1);  // ПР. холодный прикрываем
       else if(n3w < BoilerTogetherHeat+BoilerTogetherHeatSt && (CalcTargetPID(Prof.Heat)+(2*SUPERBOILER_HYST) < sTemp[TCONIN].get_Temp())) Gvs_ocs(true, n3w+1); // ПР. нагрелся, открыть 3w.
    }
    #endif
    Пока бойлер не прогреется до температур 20 и выше, когда кто то открывает ГВС клапан сильно часто и мимо тыркался.
    Можно и было сделано проще, по температуре на входе в бойлер или можно будет ппоробовать по температуре выхода фреона с предконденсатора.
    Код:
    #ifdef RSUPERBOILER    // Режим одновременного нагрева бойлера с отоплением
      if(GETBIT(Prof.Boiler.flags, fBoilerTogetherHeat)) {
      if(is_flow_gvs()) {                                   // Поток ХВС в предконденсатор
         if(GETBIT(flags, fHP_BoilerTogetherHeat)) {
            journal.jprintf("Flow HVS.\n");
            Gvs_ocs(true, BoilerTogetherHeat-BoilerTogetherHeatSt);
            SETBIT0(flags, fHP_BoilerTogetherHeat); }       // Минимум циркуляции через предконденсатор
      }
       else if(!GETBIT(flags, fHP_BoilerTogetherHeat)){
            if(!GETBIT(dRelay[RSUPERBOILER].flags, fR_StatusMain)) dRelay[RSUPERBOILER].set_ON(); // насос супербойлера - включить
                SETBIT1(flags, fHP_BoilerTogetherHeat);     // флаг включения режима одновременного нагрева отопления и ГВС
                Gvs_ocs(true, BoilerTogetherHeatSt);        // Минимальная позиция клапана для подогрева ГВС
              }
       else {
            t1 = sTemp[TPCDIN].get_Temp();
    uint8_t m = BoilerTogetherHeat + BoilerTogetherHeatSt;
    
        if(t1 <= TPCDINMINO) { if(n3w > BoilerTogetherHeatSt) Gvs_ocs(true, BoilerTogetherHeatSt); } // низкая Tin закрываем в 15 сек.
          else if(t1 >= TPCDINMIN) { if(n3w < m) Gvs_ocs(true, m); }                                 // Высокая Tin открываем в 40 сек.
              else { m = (t1 - TPCDINMINO) * BoilerTogetherHeat / (TPCDINMIN - TPCDINMINO) + BoilerTogetherHeatSt;  // ПРЯМОЙ пересчет температуры предконденсатора в положение 3х-к
                     if(m != n3w) Gvs_ocs(true, m); }  // Если нужно, установка 3х-к
            }
    }
    #endif
    То есть, функции управления клапаном, постоянно скармливается позиция куда ехать, определенная опытным путем. Так точнее и железно.
    Код:
    // Открытие, закрытие, остановка, регулировка трехходового клапана предконденсатора.
    // b==false двигать точно для регулировки, b==true двигать для перемещения к позиции пример на 31сек открытия
    // g==0 остановить или остановлен, g==-128 закрть или закрывается, g==127 открыть или открывается,
    // от -127 до -1 регулировать закрывая, от 1 до 126 регулировать открывая. -128 = 126 = 0 = 126 = 127
    void HeatPump::Gvs_ocs(boolean b, int8_t g)
    {
    calc:
      if (dRelay[R3WAYOPEN].get_Relay()) gocs += xTaskGetTickCount() - n3w;  // Если клапан, открывается. Новая позиция в +
      else if (dRelay[R3WAYCLOS].get_Relay()) gocs -= xTaskGetTickCount() - n3w; // Если клапан, закрывается. Новая позиция -
    
      if (gocs > int32_t(PGVS_OPEN_END)) gocs = int32_t(PGVS_OPEN_END);      // Ограничить рассчет открытия 60.000ю tick
      else if (gocs < int32_t(PGVS_CLOS_END)) gocs = int32_t(PGVS_CLOS_END); // Ограничить рассчет закрытия -60.000ю tick
    
      n3w = uint32_t((gocs - PGVS_CLOS_END) * (PGVS_OPEN - PGVS_AVERAGE) / (PGVS_OPEN_END - PGVS_CLOS_END) + PGVS_AVERAGE);
    
      if (g == PGVS_AVERAGE || (b && n3w == uint32_t(g))) {
        dRelay[R3WAYOPEN].set_OFF(); _delay(DELAY_AFTER_SWITCH_RELAY); dRelay[R3WAYCLOS].set_OFF();  // Стоп
    
    #ifdef DEBUG_MODWORK
        journal.jprintf("SB3-way POZ: %d sec\n", n3w);
    #endif
        return;
      }
    
      if (b) g -= int8_t(n3w);        // пересчет, для прямого указания позиции 0-120 сек
    
      if (g > PGVS_AVERAGE) {
        dRelay[R3WAYCLOS].set_OFF();
        _delay(DELAY_AFTER_SWITCH_RELAY);
        dRelay[R3WAYOPEN].set_ON();   // Открыть
      }
      else if (g < PGVS_AVERAGE) {
        dRelay[R3WAYOPEN].set_OFF();  // Закрыть
        _delay(DELAY_AFTER_SWITCH_RELAY);
        dRelay[R3WAYCLOS].set_ON();
      }
    
      n3w = xTaskGetTickCount();      // время начала движения клапана
      if (g == PGVS_OPEN || g == PGVS_CLOSED) return;  // Полностью открыть или закрыть. Мотор уже крутится, выходим из функции.
    
      while (g != PGVS_AVERAGE) {
        _delay((b) ?  1000 : 100);   // два типа регулировки, путем ожиданий в цикле.
        if (g > PGVS_AVERAGE) {
          g--;
          if ((!b && PressToTemp(PCON) < PGVS_CONDENCATE_HING) || bk()) break;  // PGVS_CONDENCATE_SR
        }
        else if (g < PGVS_AVERAGE) {
          g++;
          if ((!b && PressToTemp(PCON) > PGVS_CONDENCATE_LOW) || bk()) break; // PGVS_CONDENCATE_SR
        }
      }                                                       // ждем отработки команды
      g = PGVS_AVERAGE;
      goto calc;
    }