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

Контроллер ЭРВ на ардуино

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

  1. SergCh
    Регистрация:
    23.01.09
    Сообщения:
    3.021
    Благодарности:
    2.129

    SergCh

    Живу здесь

    SergCh

    Живу здесь

    Регистрация:
    23.01.09
    Сообщения:
    3.021
    Благодарности:
    2.129
    Адрес:
    Москва
    @Ledmax, Да уж, хотели изобразить последовательность вкл-выкл обмоток, но как всегда всё перепутали.
    А так действительно при полушаговом режиме в униполярных шаговиках импульсы низкого уровня бегут этакой волной от начала разъёма к его концу или наоборот.
     
    Последнее редактирование: 21.12.16
  2. Ledmax
    Регистрация:
    18.01.15
    Сообщения:
    31
    Благодарности:
    40

    Ledmax

    Участник

    Ledmax

    Участник

    Регистрация:
    18.01.15
    Сообщения:
    31
    Благодарности:
    40
    Может кому пригодится.
    Вкладка управления ЭРВ без доп библиотеки.
    Управление простое - переменная SetStepPos прибавляем / убавляем назначаем итд. крутиться на значение переменной.
    ervRef - если 1, то эрв крутиться на 480 шагов в минус, не учитывая ограничение
    п. с везде где указан step - на самом деле это не шаг а импульс, так было удобнее делать

    #ifdef STEP_FEATURE

    #define stepspeed 32UL /скорость врашения 31,3 пульса/сек
    / Контакты Bl Pi Ye Or
    int pins[] = {5, 4, 14, 12}; /Задаем пины по порядку

    int phases = 8; / колличество фаз
    unsigned int StepLimit = 480; / лимит импульсов+

    String ervPosition;
    unsigned int StepPos;
    int SetStepPos;
    boolean ervRef;
    int ervRefStep;

    / Для полушагового режима
    bool motorPhases[8][4] = { / [phase][pin]
    / - pins -
    / Катушки A B A B
    / Пины разъёма 1 2 3 4
    / Цвета Or Re Ye Bl
    { 1, 0, 0, 0}, / 1, 1, 0, 0},
    { 1, 1, 0, 0}, / 0, 1, 0, 0},
    { 0, 1, 0, 0}, / 0, 1, 1, 0},
    { 0, 1, 1, 0}, / 0, 0, 1, 0},
    { 0, 0, 1, 0}, / 0, 0, 1, 1},
    { 0, 0, 1, 1}, / 0, 0, 0, 1},
    { 0, 0, 0, 1}, / 1, 0, 0, 1},
    { 1, 0, 0, 1} / 1, 0, 0, 0}
    };

    void STEPInit() {
    for (int i = 0; i < 4; i+) pinMode (pins, OUTPUT);
    }

    int phase = 0;
    int _step; / Если у шага поменять знак, на -1 - изменится направление вращения.

    void STEPWorks() {

    ervPosition = map (StepPos, 0, StepLimit, 0, 100); /переменная для отображения 0-100%

    SetStepPos = constrain (SetStepPos, 0, StepLimit); /Ограничиваем установленное значение 0-480 импульсов
    StepPos = constrain (StepPos, 0, StepLimit); /Ограничиваем ход двигателя 0-480 импульсов

    if (ervRefStep = -480){ /после выполнения референс - всё обнуляем
    ervRefStep =0;
    ervRef = false;
    SetStepPos = 0;
    StepPos = 0;
    }

    if (StepPos != SetStepPos) | ervRef){ /Если установленное значение отлично от текущей позиции или реверенс
    #ifdef STEP_DEBUG
    Serial. print("StepPos = "); Serial. print (StepPos);
    Serial. print("\n");
    Serial. print("SetStepPos = "); Serial. print (SetStepPos);
    #endif

    static unsigned long previousMillis = 0; / храним время последнего переключения

    if (millis() - previousMillis > stepspeed) { /проверяем не прошел ли нужный интервал
    previousMillis = millis();

    if (SetStepPos > StepPos){ /если новое значение больше текущего, то крутим в +
    _step = 1;
    StepPos +;
    }
    else if (SetStepPos < StepPos) | ervRef){ /если меньше, то в -
    _step = -1;
    StepPos -;
    ervRefStep -;
    }
    phase += _step;
    if (phase > 7) phase = 0;
    if (phase < 0) phase = 7;

    for (int i = 0; i < 4; i+) {
    digitalWrite (pins, (motorPhases[phase] = 1) ? HIGH: LOW);
    }
    }
    }
    else
    {
    for (int i = 0; i < 4; i+) { /если вышли на позицию, то отключаем выходы
    digitalWrite (pins, LOW);
    }}

    }/STEPWorks

    #endif / STEP_FEATURE
     
  3. delarriver
    Регистрация:
    06.09.16
    Сообщения:
    317
    Благодарности:
    163

    delarriver

    Живу здесь

    delarriver

    Живу здесь

    Регистрация:
    06.09.16
    Сообщения:
    317
    Благодарности:
    163
    @SergCh, а можете поделиться скетчем контроллера для ардуино ?
     
  4. SergCh
    Регистрация:
    23.01.09
    Сообщения:
    3.021
    Благодарности:
    2.129

    SergCh

    Живу здесь

    SergCh

    Живу здесь

    Регистрация:
    23.01.09
    Сообщения:
    3.021
    Благодарности:
    2.129
    Адрес:
    Москва
    Да, вот.
     

    Вложения:

  5. dobrinia
    Регистрация:
    27.12.13
    Сообщения:
    4.435
    Благодарности:
    2.621

    dobrinia

    Живу здесь

    dobrinia

    Живу здесь

    Регистрация:
    27.12.13
    Сообщения:
    4.435
    Благодарности:
    2.621
    Адрес:
    Минск
    @SergCh, пид корректирует положение эрв относительно заданного?
    почему не от текущего?
     
  6. SergCh
    Регистрация:
    23.01.09
    Сообщения:
    3.021
    Благодарности:
    2.129

    SergCh

    Живу здесь

    SergCh

    Живу здесь

    Регистрация:
    23.01.09
    Сообщения:
    3.021
    Благодарности:
    2.129
    Адрес:
    Москва
    @dobrinia, В каком смысле?
    Пропорциональная составляющая корректирует положение относительно 100 шагов в плюс или в минус в соответствии с ошибкой. И интегральная составляющая делает поправку в соответствии с временем присутствия ошибки, её величины и текущего положения эрв. Чем на меньшее количество шагов открыто, тем меньше приращение. интеграла.
     
  7. dobrinia
    Регистрация:
    27.12.13
    Сообщения:
    4.435
    Благодарности:
    2.621

    dobrinia

    Живу здесь

    dobrinia

    Живу здесь

    Регистрация:
    27.12.13
    Сообщения:
    4.435
    Благодарности:
    2.621
    Адрес:
    Минск
    @SergCh, просто почему именно 100 шагов? а что если туда ноль или 500 вписать будет адекватно работать?
    Может туда лучше середину диапазона воткнуть...
     
  8. SergCh
    Регистрация:
    23.01.09
    Сообщения:
    3.021
    Благодарности:
    2.129

    SergCh

    Живу здесь

    SergCh

    Живу здесь

    Регистрация:
    23.01.09
    Сообщения:
    3.021
    Благодарности:
    2.129
    Адрес:
    Москва
    @dobrinia, Это среднестатистическое положение ЭРВ моей системы. Если исходить из аналогии с механическим ТРВ, то надо бы выставлять 66 (или 0) шагов. Тогда для открытия ЭРВ пропорциональной составляющей требуется разница между установленным перегревом и текущим. Чем больше нужно открыться, тем больше должна быть эта разница. Которая кстати потом нивелируется интегралом.
    А если выставить среднее положение 480 то ЭРВ по умолчанию получается открыт, а чтобы закрыть, нужен перегрев меньший чем уставка. ... ну, неправильно это как-то.
    Но работать тоже будет.
     
  9. Ledmax
    Регистрация:
    18.01.15
    Сообщения:
    31
    Благодарности:
    40

    Ledmax

    Участник

    Ledmax

    Участник

    Регистрация:
    18.01.15
    Сообщения:
    31
    Благодарности:
    40
    Как морозы проходят, никто не замёрз?:)
    @SergCh, можете показать какой у вас эрв? В программе вы используете для управления 480 шагов, но если смотреть мануал от того же данфоса, то там указан рабочий диапазон 480 импульсов - если понимать под импульсом 1/8 шага, то это получается 60 шагов. У меня попытке регулировать в этом диапазоне - толку никакого (в приложении график температур и открытия эрв) давление вых 3,1бара
    screen.png
    А вообще собрал контроллер на базе esp8266 + шина i2c pcf8574 и драйвер для шаговика uln2003. Распаял всё на одной плате и засунул на улицу. При минус 25 работать перестало:)]
    Следующая версия будет с контроллером в помещении, а в уличном блоке драйвер для эрв и релюхи связь между блоками по i2c. Ну и one wire для температуры.
     
  10. Чел174
    Регистрация:
    07.02.15
    Сообщения:
    419
    Благодарности:
    354

    Чел174

    Живу здесь

    Чел174

    Живу здесь

    Регистрация:
    07.02.15
    Сообщения:
    419
    Благодарности:
    354
    Адрес:
    Челябинск
    Вообще, имеется в виду количество импульсов в полношаговом режиме, какой смысл в дробных шагах? На Вашем графике от эрв действительно никакого толку. По хорошему, он примерно так должен работать
    2017-01-08_02-36-17.jpg
    Здесь синий график - перегрев (заданный перегрев 4 градуса), красный - шаги эрв (в масштабе 1:20).
     
  11. SergCh
    Регистрация:
    23.01.09
    Сообщения:
    3.021
    Благодарности:
    2.129

    SergCh

    Живу здесь

    SergCh

    Живу здесь

    Регистрация:
    23.01.09
    Сообщения:
    3.021
    Благодарности:
    2.129
    Адрес:
    Москва
    @Ledmax, Температура за бортом минус 32, все системы работают нормально. Похоже это предел для моего тн, ночью ни одной паузы не сделал. Но в доме 24 держит.
    Где то выкладывал фото и ссылку с али своего эрв, санхуа. Сейчас повторить не смогу, интернет не позволяет. У него 480 именно полушагов. То есть 240 полных шагов. На "электрический оборот" приходится 4 полных шага потому что в двигателе 4 полюса или обмотки.
    А температуры у вас не меняются думается от того что эрв не работает. Уверены что всё подключено правильно?
     
  12. Djek 999
    Регистрация:
    10.05.14
    Сообщения:
    2
    Благодарности:
    0

    Djek 999

    Участник

    Djek 999

    Участник

    Регистрация:
    10.05.14
    Сообщения:
    2
    Благодарности:
    0
    Адрес:
    Могилев
    Добрый день. Очень интересная тема с ардуино для управления ЭТРВ.
    Могу ли задать пару вопросов по этому поводу?
    1 при аварийном отключении питания и повторном включении контроллер не потеряет реальное положение вала этрв? для чего спрашиваю в карелах применена схема аварийного питания для закрытия этрв при отключении питания
    2 с датчиком давления это хорошо, но есть ли возможность привязки второго датчика температуры, что менять в скетче?
    3 менять положения среднего положения например не 100 а 200 шагов что менять в скетче?
    под какое ардуино заточен скетч? и можно ли его перекомпилировать под уно?
    Заранее благодарен,
    Евгений
     
  13. Pskovsat
    Регистрация:
    04.12.12
    Сообщения:
    2.155
    Благодарности:
    954

    Pskovsat

    Живу здесь

    Pskovsat

    Живу здесь

    Регистрация:
    04.12.12
    Сообщения:
    2.155
    Благодарности:
    954
    Адрес:
    Псков
    @Ledmax, Получилось, что с ЭТРВ?
     
  14. faids
    Регистрация:
    18.10.15
    Сообщения:
    2.987
    Благодарности:
    784

    faids

    Живу здесь

    faids

    Живу здесь

    Регистрация:
    18.10.15
    Сообщения:
    2.987
    Благодарности:
    784
    Адрес:
    Тамбов
    можно поинтересоваться - в каком состоянии находится проект сейчас?

    насколько контроллер справляется с поставленными задачами?

    ну и возможна ли актуализация под современные реплики ардуинки?
     
  15. SergCh
    Регистрация:
    23.01.09
    Сообщения:
    3.021
    Благодарности:
    2.129

    SergCh

    Живу здесь

    SergCh

    Живу здесь

    Регистрация:
    23.01.09
    Сообщения:
    3.021
    Благодарности:
    2.129
    Адрес:
    Москва
    @faids, Проект уже несколько лет трудится в наружном блоке воздушного теплового насоса.
    По началу часами стоял у контроллера, наблюдал его работу. Ну а сейчас, поскольку вопросов к нему не возникает, не обращаю уже на него внимания.
    Под современные версии ардуино не думал переделывать. Не вижу смысла. Да и интерес к этой теме подостыл.