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

Автоматика управления ТТ котлами своими руками

Тема в разделе "Котлы, горелки, котельное об-е своими руками", создана пользователем Senkiivan, 28.03.14.

Метки:
  1. V757V
    Регистрация:
    23.11.11
    Сообщения:
    1.682
    Благодарности:
    633

    V757V

    Живу здесь

    V757V

    Живу здесь

    Регистрация:
    23.11.11
    Сообщения:
    1.682
    Благодарности:
    633
    Адрес:
    Москва
    Я думаю это (библиотеки) основная причина того, что плюются на DS18B20, при работе с ардуиной.
    Дело в том, что протокол поддерживается программно при помощи функций delay(). Если при этом возникает прерывание в тот момент, когда мы должны читать датчик, то все, привет - прочитаем всегда 0, потому что к задержке прибавится время отработки прерывания, как минимум 30-50 мкС. Этого достаточно чтобы протокол разрушился. И датчик "отвалился". Эту проблему я на ПИК я решаю так, что в прерывании поднимаю флажок, когда знаю, что у меня есть время на чтение - запись в OW. И работаю с датчиком, когда флажок поднят.
     
  2. Senkiivan
    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.502

    Senkiivan

    электронщик

    Senkiivan

    электронщик

    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.502
    Адрес:
    Боровичи
    Сделал костыль. Запрос на чтение датчиков раз в 1.5 сек, опрос четырёх, потом если какойто не ответил опрашиваем персонально, если после этого не ответил тогда авария.
    В таком виде на прогоне сбоев не было.
    Прописываю непосредствено адресса.
    без костылей сбой был не системный то каждые 25с, то 1м20с, то 40сек. Не накавырял.
    На костылях пока шуршит.
     
  3. Senkiivan
    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.502

    Senkiivan

    электронщик

    Senkiivan

    электронщик

    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.502
    Адрес:
    Боровичи
    Пришлось выкинуть библиотеку SERVO.
    тоже на 1 таймере.
    Сделал подцикл запускаем его каждые 20мс держим в начале включаем выход на (544-2400мкс) потом выключаем. В основной программе перегоняе градусы в мкс.
    Шуршит.
     
  4. Atm67
    Регистрация:
    26.11.12
    Сообщения:
    27
    Благодарности:
    7

    Atm67

    Участник

    Atm67

    Участник

    Регистрация:
    26.11.12
    Сообщения:
    27
    Благодарности:
    7
    Адрес:
    Набережные Челны
    Давно не писал в данной теме, впитываю так сказать информацию. Возникло пару вопросов.
    Почему такие маленькие временные рамки, например для опроса DS18B20. По идеи ТТкотел довольно инертен, (как мне кажется). Наверное достаточно будет читать датчики по отдельности, непосредственно перед обработкой их показаний.
    Далее, какой алгоритм работы связки дымосос-заслонка. ПИД уменьшил/увеличил обороты дымососа, потом пробуем играть заслонкой. Если заслонка не помогла, снова переходим к дымососу... И так туда сюда пока не поймаем какую-то дельту?
    Схемку накидал в протеусе. Кнопки, меню, опрос датчиков "работают". Даласы правда читаются не стабильно то один не ответит то другой. Надо "прикручивать" дымосос с заслонкой, а с принципом связки у меня туман. Разжуйте пожалуйста.
     
  5. Senkiivan
    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.502

    Senkiivan

    электронщик

    Senkiivan

    электронщик

    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.502
    Адрес:
    Боровичи
    Выше дважды приводил код с привязкой заслонки, вентилятор (дымососа) к ПИД регулятору и дымовым газам.
    Читаете не внимательно. ;)
    Котел агрегат повышеной опасности:aga:
    Поэтому чем чаще опрашиваем температуру тем больше спим спокойно. :)]
     
  6. Atm67
    Регистрация:
    26.11.12
    Сообщения:
    27
    Благодарности:
    7

    Atm67

    Участник

    Atm67

    Участник

    Регистрация:
    26.11.12
    Сообщения:
    27
    Благодарности:
    7
    Адрес:
    Набережные Челны
    Стараюсь читать внимательно, пишу на С в AVR Studio. Чтобы подробнее разобрать Ваши коды, ,за что безмерно благодарен, начал изучать "ардуно-язык".
    Еще вопрос по датчику погоды. В моем видении он излишен, например в помещении котел поддерживает 20 град., зачем ему знать какая температура на улице?
     
  7. russian12
    Регистрация:
    26.12.11
    Сообщения:
    2.830
    Благодарности:
    578

    russian12

    Живу здесь

    russian12

    Живу здесь

    Регистрация:
    26.12.11
    Сообщения:
    2.830
    Благодарности:
    578
    Адрес:
    "Кузбасс" Белово
    Чтобы нивелировать тепловую инерцию помещения. При уставке ВКЛ\ВЫКЛ допустим в 1 гр., реальная дельта будет гораздо больше...
     
  8. Senkiivan
    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.502

    Senkiivan

    электронщик

    Senkiivan

    электронщик

    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.502
    Адрес:
    Боровичи
    Простой пример. вечером у вас на улице -5, вы выставили температуру на котле на 60 град.
    Под утро бахнуло -25 котел работает на заданной температуре а помещению не хватает. ;)

    Во всех теплоснабжающих организациях утверждены графики температуры сетевой воды на выходе в зависимости от температуры на улице.

    В алгоритме применена плавающая уставка температуры на подаче привязанная
    1. Температура на улице.
    2. Температура обратки
    3. Комнатный термостат.

    Котёл выдаёт от 55 до 85 градусов в зависимости от потребностей.
     
  9. Senkiivan
    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.502

    Senkiivan

    электронщик

    Senkiivan

    электронщик

    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.502
    Адрес:
    Боровичи
    Вот такое получилось программное решение по включению и выключению одной кнопкой.
    Работает со всеми прерываниями. Работает корректно

    if (Feature=4&&pog=0){pogoda=HIGH; EEPROM_write_byte (11,pogoda);} / включить погодозависимую автоматику нажать кнопку влево
    if (Feature!=4&&pogoda=HIGH){pog=1;}
    if (Feature=4&&pog=1){pogoda=LOW; EEPROM_write_byte (11,pogoda);} / выключить погодозависимую автоматику нажать кнопку влево
    if (Feature!=4&&pogoda=LOW){pog=0;}
    if (avaria4=HIGH){pogoda=LOW;}
     
  10. Senkiivan
    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.502

    Senkiivan

    электронщик

    Senkiivan

    электронщик

    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.502
    Адрес:
    Боровичи
    Управление сервоприводом без библиотеки серво. В качестве таймера использована библиотека
    #include "leOS2.h"

    создаём запрос подцикла каждые 20мс.
    myOS. addTask (servo, myOS. convertMs (20);
    myOS. haltScheduler();

    Раз в 10 сек вызываем подцикл не перемещение сервы из основного цикла

    if (currentTime>=(time3+10000){time3=currentTime;
    stepe=map (z2,0,180,544,2400);
    myOS. restartScheduler();
    delay (2000);
    myOS. haltScheduler();
    }

    void servo()
    {
    digitalWrite (SERVO_1,HIGH);
    delayMicroseconds (stepe);
    digitalWrite (SERVO_1,LOW);
    }
     
  11. Senkiivan
    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.502

    Senkiivan

    электронщик

    Senkiivan

    электронщик

    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.502
    Адрес:
    Боровичи
    Ну и костыли с даласами.
    OneWire oneWire (ONE_WIRE_BUS);
    DallasTemperature ds(&oneWire);

    / адресса датчиков температуры забивать вручную
    DeviceAddress sensor1 = {0x28, 0x8C, 0x4E, 0xBE, 0x05, 0x0, 0x0, 0x73};
    DeviceAddress sensor2 = {0x28, 0xE6, 0xBD, 0x3B, 0x05, 0x0, 0x0, 0xCF};

    В сетап прописываем разрешение и отключаем ожидание при измерении.
    ds. begin(); / Start up the library
    ds. setWaitForConversion (false);
    ds. setResolution (sensor1, RES_TEMP); / установить разрешение (точность)
    ds. setResolution (sensor2, RES_TEMP); / установить разрешение (точность)
    ds. setResolution (sensor3, RES_TEMP); / установить разрешение (точность)
    ds. setResolution (sensor4, RES_TEMP); / установить разрешение (точность)
    ds. requestTemperatures();

    В основном цикле
    if (currentTime>=(loopTime+3000){loopTime=currentTime;

    ds. requestTemperatures();

    temp1 = ds. getTempC (sensor1);
    delay_ms (10);
    temp3 = ds. getTempC (sensor2);
    delay_ms (10);
    temp4 = ds. getTempC (sensor3);
    delay_ms (10);
    temp5 = ds. getTempC (sensor4);}
    if (temp1 =(-127){ds.requestTemperatures();temp1 = ds. getTempC (sensor1); }
    if (temp3 =(-127){ds.requestTemperatures();temp3 = ds. getTempC (sensor2); }
    if (temp4 =(-127){ds.requestTemperatures();temp4 = ds. getTempC (sensor3); }
    if (temp5 =(-127){ds.requestTemperatures();temp5 = ds. getTempC (sensor4); }
    if (temp1 =(-127){lcd.init();lcd.setCursor (0,0);lcd.print("Avaria T1");avaria1=HIGH;delay_ms (1000);}
    if (temp1 !=(-127){avaria1=LOW;}
    if (temp3 =(-127){lcd.init();lcd.setCursor (0,0);lcd.print("Avaria T3");avaria2=HIGH;delay_ms (1000);}
    if (temp3 !=(-127){avaria2=LOW;}
    if (temp4 =(-127){lcd.init();lcd.setCursor (0,0);lcd.print("Avaria T4");avaria3=HIGH;delay_ms (1000);}
    if (temp4 !=(-127){avaria3=LOW;}
    if (temp5 =(-127){lcd.init();lcd.setCursor (0,0);lcd.print("Avaria T5");avaria4=HIGH;delay_ms (1000);}
    if (temp5 !=(-127){avaria4=LOW;}

    Вот такие костыли пока.
     
  12. Senkiivan
    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.502

    Senkiivan

    электронщик

    Senkiivan

    электронщик

    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.502
    Адрес:
    Боровичи
    Вот общий вид.
    Завершено на 95%

     
  13. StF
    Регистрация:
    06.06.09
    Сообщения:
    426
    Благодарности:
    344

    StF

    Nobody is perfect

    StF

    Nobody is perfect

    Регистрация:
    06.06.09
    Сообщения:
    426
    Благодарности:
    344
    Адрес:
    Москва
    @V757V,
    можно просто на время каждого действия с датчиком запрещать прерывания и потом разрешать. (cli/sei команды). На такие глюки да, тоже напарывался.
    @Atm67. По инертности котла вы правы - я на пеллетной горелке опрашиваю 1 раз в цикл (цикл=подача+ пауза) и исходя из измеренных результатов управляю вентилятором и подачей. Протеус мой код работы с единственным датчиком вообще не переваривает, при этом в железе все работает прекрасно :)
    Хотя если котел простой и в нем горит вся закладка дров сразу, то возможно имеет смысл и относительно частом измерении температуры.
    По опыту могу сказать, у меня на номинале (около 16квт) температура максимально росла со скоростью градус/минуту. При этом датчик температуры, прикрученный к трубе отопления стяжками (в 20см от выхода из котла трубы подачи, труба и датчик - в теплоизоляции). Запаздывал при таком росте в измерениях относительно встроенного в котел индикатора температуры, т. е. подвирал в меньшую сторону градусов на 7, при обычном режиме подвирает где то на 1 градус.
     
  14. Лёхич 20
    Регистрация:
    22.10.13
    Сообщения:
    12
    Благодарности:
    4

    Лёхич 20

    Участник

    Лёхич 20

    Участник

    Регистрация:
    22.10.13
    Сообщения:
    12
    Благодарности:
    4
    Адрес:
    Киров
    Может стоит поместить датчик в гильзу, а гильзу вкрутить в трубу подачи ближе к котлу. Думаю врать будет меньше.
     
  15. Оксфорд
    Регистрация:
    12.04.12
    Сообщения:
    9.356
    Благодарности:
    1.859

    Оксфорд

    Живу здесь

    Оксфорд

    Живу здесь

    Регистрация:
    12.04.12
    Сообщения:
    9.356
    Благодарности:
    1.859
    Адрес:
    Уфа
    image.jpg Собрал все в коробку. Отладил на столе. Т. к. идет замер теплоносителя заманчиво сделать программу регулирования по температуре теплрносителя, типа" аля РТ". Причем можно сделать жесткую связь, точно по РТ, а можно менять уставку Тг.