СЕНСОРНЫЕ ПРОГРАММЫ. Часть 1.

… в начале славного пути.

Как мы все знаем, сенсорных программ для мультиварок пока не существует. Существует сенсорная программа «РИС» для рисоварок, которую более 20 лет придумали ушлые японцы, чтобы обидеть русского человека. Китайцы и корейцы бережно скопировали и сохранили эту программу, после чего российский коммерсант, не разобравшись, что к чему, написал на кнопке «РИС» слово «КАША», обозвал прибор мультиваркой и продает это своим соотечественникам с пожеланиями долгой и счастливой жизни. Бог ему судья.

Что такое сенсорная программа? В чем отличие сенсорной программы от автоматической? Что можно и что нельзя готовить на сенсорных программах? Это вопросы — интересующие многих, и мы считаем своим долгом разъяснить эту тему, перед тем как перейдем к инженерной зауми. Так вот, оказалось, что «Сенсорное» и «Автоматическое» — синонимы, то есть, если мы говорим «Сенсорная программа», то должны подразумевать «Автоматическая программа» и наоборот. Технический термин «Автомат» — это любая машина, принимающая решение на основании данных, полученных от сенсоров, то есть, работающая без оперативного управления человеком, по программе, которая меняется произвольно в зависимости от реакции сенсоров (датчиков) на изменяющиеся условия. Основным признаком сенсорной программы является невозможность установки времени выполнения — программа сама определяет время окончания своей работы, что естественно. В быту можно встретить не так уж много программ-автоматов — это модные сейчас «роботы-пылесосы», системы фокусировки фото и видео камер, некоторые стиральные машины. В просторечном русском языке слово «автомат» очень часто употребляется некорректно — автоматами называют множество устройств, которые не имеют никакого отношение к значению этого термина. Слово «автоматически» часто употребляется как синоним к повторяющемуся, бездумному, чередующимуся, заученному, сомо-собой-разумеющемуся, что не верно по сути. Но это уже вопрос к филологам. Также, вероятно, требуется разъяснить термин «FUZZY logic», который тоже прочно вошел в наш быт. Fuzzy Logic (Нечеткая Логика) — всего лишь математический алгоритм обработки данных, поступающих от сенсоров, и является неотъемлемой частью любой сенсорной программы. Если в приборе есть сенсорная программа, значит, там уже есть алгоритм Нечеткой Логики. Просто рекламисты и маркетологи от большого ума и недостатка фантазии решили почему-то вынести это словосочетание на коробки и в рекламные буклеты.

Тем не менее, как мы выяснили ранее, сенсорных программ, кроме программы «РИС», нет, но очень хочется. Мы хоть и наполовину азиаты, но разнообразие каш и гарниров у нас гораздо шире. Мы с удовольствием уминаем и перловку, и гречку, и овсянку, и пшенку, да еще хотим выбрать на воде или на молоке, да еще добавить изюму, яблочка или тыквы… и мы тоже хотели бы иметь для этого сенсорные программы. А наши скрепы — Йогурт и Творог? Создавать такие программы, как вы уже наверное поняли, придется с нуля и почти вслепую — скопировать не у кого, а ноосфера молчит.

Самая важная и ответственная часть разработки сенсорной программы — калибровка сенсоров и ПИД регулятора. Выглядит это так (далее прямая речь нашего инженера, орфография и артикуляция сохранены):

Для ПИД регулятора была написана функция (финальный код):

003

Основой служила формула:

002

Никаких оптимизаций и упрощений не проводилось. Предоставлено решение «в лоб». Единственное, в ходе тестирования было решено наложить ограничение на накопленную невязку равную 10Ki.
Функция вызывалась раз в полсекунды. В качестве данных она получает уставку и текущую температуру. Выдает процент мощности, который должен быть в данный момент.
Следует заметить, ввиду несовершенства примененной цепи синхронизации с сетью, а также конечным временем включения симисторов, существуют «мертвые зоны» в диапазоне управления. Это около 4% снизу и около 2% сверху. Т.е. на управляющие воздействия в 4%,3%,2%,1%,0% ТЭН выдает одно и тоже значение  около 15Вт. ТЭН не отключается полностью, и это — существенный недостаток при хорошей теплоизоляции мультиварочной чаши. Так же и сверху: 98%, 99%, 100% всегда одно и тоже воздействие около 780Вт. Всего этого неудобства планируется избежать, применив число-импульсное (вместо текущего фазового) управление мощностью в последующих вариантах.
Было решено тестирование проводить на 1л воды. Управляющий термодатчик был установлен в крышке мультиварки.
В ходе тестирования дополнительно фиксировались температура воды и потребляемая устройством мощность сторонними приборами.
Первым включением ненастроенного регулятора (коэффициенты не фиксировались), был получен следующий график. Уставкой была выбрана температура 90С:

001

Несмотря на поспешность эксперимента, графики дают полезную информацию:
Ни температура крышки, ни температура внутренней поверхности чаши не равна температуре воды в чаше.
Наш термодатчик на базе NTC-резистора имеет некую температурную инерцию по сравнению с К-термопарой логгера Fluke. Видимо сыграло различие масс датчиков. Также имеются небольшие разногласия в их показаниях.
График температуры крышки имеет определенный «пик», соответствующий образованию конденсата на крышке и, как следствие, изменению его теплоемкостных характеристик. Полезный эффект для автоматического (сенсорного) определения момента кипения.
Ненастроенный регулятор «пошел в разнос»: на графике видны колебания, увеличивающие свою амплитуду.
Первой «пристрелкой» были коэфф-ты Kp=20 Ki=0.002. Здесь и впоследствии уставка равна 80С. Результат получился следующий:
Image 2

Наблюдается большое перерегулирование, а в нашем случае, перегрев воды в начале. Также видны колебания. Понятно, что настройку двух параметров одновременно вести не стоит. Было решено настраивать пропорциональный коэффициент.
Ввиду программной ошибки наблюдалось отсутствие регулирования здесь:
004

Эта ошибка была исправлена.
В следующем эксперименте Кп=10, остальные коэфф-ты равны нулю:

Image 3

Опять большое перерегулирование, но колебаний нет и точность поддержания температуры достаточно высока. Температура воды в этом эксперименте не фиксировалась. Поясню образовавшуюся ступеньку на графике:
005

В это время произошло зависание скрипта, который забирал данные с регулятора. Поэтому небольшая часть данных потеряна. Также были приняты меры по устранению последующих зависаний скрипта.
В целях борьбы с перерегулированием было решено уменьшить Кп до 2. Результат:

Image 5

Перерегулирования нет, но и нагрев затянулся. Как и положено пропорциональному регулятору – наличие статической ошибки, которая с уменьшением Кп только увеличилась. Статическая ошибка около 5С. Теория рекомендует вводить интегральную составляющую в регулятор, что мы и сделаем в следующем эксперименте.
В этой попытке коэфф-ты были следующие Kp=2 Ki=0.0001 Kd=0:

Image 6

Появилось небольшое перерегулирование и статическая ошибка не успела скомпенсироваться за время эксперимента, хотя и характер изменения температуры верный. Очевидно, необходимо увеличивать величину коэфф-та интегральной составляющей.
Коэфф-ты следующего эксперимента Kp=2 Ki=0.001 Kd=0:
Image 7

Наличествует перерегулирование и колебания, но точность высока. Статическая ошибка скомпенсирована!
Пояснить нехарактерный вид графика не могу. Вероятнее всего конденсат попал на датчик. По крайней мере, так было, когда я проверял его, желая найти причину.
В следующем эксперименте в программный код было добавлено ограничение на интегральную составляющую. Сделано этого для снижения перерегулирования. Также был добавлен дифференциальный коэфф-т по той же причине.
Эксперимент с коэфф-тами Kp=2 Ki=0.001 Kd = -10:
Image 8

Видим, что перерегулирование осталось на прежнем уровне, но качество стабилизации улучшилось. Точность около 0.5С. Виден «шум» потребляемой мощности. Это эффект от введения Kd.
После консультации с поваром было решено остановить такие «общие» эксперименты и подгонять коэффициенты под каждый рецепт индивидуально.
Поваром было замечено, что для приготовления йогурта перегрев недопустим. Так как регулятор с интегральной составляющей всегда работает с перерегулированием ( хотя и малым ), вероятно для режима «йогурт» придется отказаться от интегральной составляющей, а ограничиться только пропорциональной с соответствующей коррекцией уставки (на величину статической ошибки) либо очень точно подобрать все коэффициенты.

____________________________________________

Как вы понимаете, уважаемые читатели, это самое начало создание прибора, который будет иметь право называться «МУЛЬТИВАРКОЙ». И будет иметь право носить на себе кнопку «Йогурт»… Йогурт — это очень не просто, ибо как говорил еще Конфуций: «Творожная масса — это творожный импульс, деленный на творожную скорость».

____________________________________________

Данный пост явлется логическим продолжением серии постов о создании Идеальной панели управления Идеальной мультиваркой. Предыдущие посты про это тут, тут и здесь. Или просто выбрать все записи по тэгу «Клуб Разработчика»

Комментарии к статье “СЕНСОРНЫЕ ПРОГРАММЫ. Часть 1.”

  1. Andrey23:

    Создавать такие программы, как вы уже наверное поняли, придется с нуля и почти вслепую — скопировать не у кого, а ноосфера молчит.
    Полностью согласен. Ждать от азиатов сенсорных программ под наши блюда бесполезно, нужно самим разрабатывать.

    Следует заметить, ввиду несовершенства примененной цепи синхронизации с сетью, а также конечным временем включения симисторов, существуют «мертвые зоны» в диапазоне управления. Это около 4% снизу и около 2% сверху.
    Надо бы учесть эти зоны в коде регулятора, т.е. задать там ограничения мощности сверху и снизу отличные от 100% и 0%, тогда бы насыщение чаще обнаруживалось с обнулением накопленной невязки. Правда надо смотреть как это повлияет на результат, может и несущественно.

    График температуры крышки имеет определенный «пик», соответствующий образованию конденсата на крышке и, как следствие, изменению его теплоемкостных характеристик. Полезный эффект для автоматического (сенсорного) определения момента кипения.
    Про этот пик я уже раньше писал: К этому моменту начала закипать вода, и крышка стала интенсивно покрываться конденсатом, при конденсации выделяется тепло, которое дополнительно нагрело крышку, а затем пошло вторичное испарение конденсата, которое привело к ее некоторому охлаждению, охлаждение остановилось при установлении динамического равновесия между конденсацией и испарением.
    Мне кажется со вторичным испарением конденсата я перемудрил, с какой радости ему испаряться? Я думаю здесь более полезным для определения закипания является не пик, а излом на графике из-за изменения теплоемкостных характеристик крышки из-за добавления конденсата. Пик является всего лишь результатом перерегулирования, когда сначала подводили все возрастающую мощность (увеличивалось испарение по мере нагрева), а затем мощность стабилизировалась (кипение). Резкий останов роста мощности и дал некоторое перерегулирование в виде пика. Пик исчезает, если постепенно снижать мощность к точке кипения (уменьшение пропорционального коэффициента). Сравните картинки:

    Кп явной большой, фиолетовый график:
    http://wonderwerk.ru/wp-content/uploads/2014/05/001.jpg (800×886, 156.5Kb)
    и Кп=2, красный график:
    http://wonderwerk.ru/wp-content/uploads/2014/05/Image-5.png (800×600)
    На второй картинке у температуры крышки уже нет никакого пика (только его след), а вот излом остается.

    Поваром было замечено, что для приготовления йогурта перегрев недопустим. Так как регулятор с интегральной составляющей всегда работает с перерегулированием ( хотя и малым ), вероятно для режима «йогурт» придется отказаться от интегральной составляющей, а ограничиться только пропорциональной с соответствующей коррекцией уставки (на величину статической ошибки) либо очень точно подобрать все коэффициенты.
    Вот это правильно, продукты и их количество в разных блюдах разные, подобрать раз и навсегда коэффициенты не удастся, поэтому есть смысл делать индивидуальный подбор коэффициентов под каждую программу. Однако даже на одной программе можно готовить разный объем блюда, и по-хорошему коэффициенты надо подбирать и под количество заложенных продуктов, либо мириться с неоптимальностью (например подобрали коэффициенты из условия отсутствия перерегулирование на минимальном объеме блюда, и получили сниженную скорость нагрева на большом объеме). Выходом могло бы быть использование не классического алгоритма ПИД регулирования, а вариантов с самоадаптацией, когда алгоритм сам проводит идентификацию системы и корректирует свои коэффициенты.

    1. Евгений:

      На второй картинке у температуры крышки уже нет никакого пика (только его след), а вот излом остается.

      Наверное, мы с Вами говорим о разных «пиках». Давайте тот пик, который получился в результате появления конденсата, называть «пичек». Он малый. А тот «горб», который появился в результате перерегулирования — выброс или пик перерегулирования.
      На первом графике «пичек» виден очень четко, так как налицо, при неизменной подводимой мощности, локальный спад температуры с последующим подъемом. На последующих этот локальный «пичек» размазан и виден не четко. Виной этому уменьшение подводимой мощности в процессе регулирования. «Пичек» преобразовался в излом. Распознать этот излом определенным алгоритмом, при различных условиях — нетривиальная задача, с которой придется столкнуться. Но это правильное направление. Кстати: при тестировании температура кипения воды варьировалась с 98.5С до 99.8С. Видимо, сказывается давление.

      Выходом могло бы быть использование не классического алгоритма ПИД регулирования, а вариантов с самоадаптацией, когда алгоритм сам проводит идентификацию системы и корректирует свои коэффициенты.

      Классический ПИД может быть самоадаптируемый. Возможно оценивать коэффициенты по скорости нагрева пищи и по транспортной задержке. Оценка производится при подаче измерительного «импульса» мощности.
      Насчет идентификации не так ясно… Вариант двух попыток приготовления: первый для идентификации, а второй контрольный — не очень радует.

      1. Andrey23:

        Кстати: при тестировании температура кипения воды варьировалась с 98.5С до 99.8С. Видимо, сказывается давление.
        Имеется в виду давление в чаше мультиварки из-за затрудненного выхода пара через маленькое отверстие клапана? Но я наблюдал у себя флуктуации температуры и при кипении с открытой крышкой. Мне кажется они связаны с турбулентностью при кипении и из-за этого неравномерной передачей тепла между дном чаши и водой (и ее случайным характером). В месте образования пузырька кипения дно чаши получается покрыто паром, а не водой и теплосъем со дна ухудшается, что приводит к локальному перегреву. После отрыва пузырька, дно опять контактирует с водой и охлаждается. В совокупности это приводит к регистируемым флуктуациям температуры. Как только ТЭН выключается и кипение успокаивается и затухает, температура на короткий момент времени повышается до 100С (т.к. пузырьки пара уже не мешают нормальной конвекции и выравниванию температуры в придонном слое воды), и только затем плавно спадает.

        Еще в статье не затронута тема сглаживания шумов измерения температуры, для более качественной и устойчивой работы регулятора. Тема зоны нечувствительности из этой же оперы тоже не раскрыта.

        1. Евгений:

          Имеется в виду давление в чаше мультиварки из-за затрудненного выхода пара через маленькое отверстие клапана?

          Нет, имелось в виду атмосферное пониженное.

          Еще в статье не затронута тема сглаживания шумов измерения температуры, для более качественной и устойчивой работы регулятора

          В регуляторе применено самое банальное усреднение по 16-ти выборкам и загрубление результата до одного знака после запятой.

          Тема зоны нечувствительности из этой же оперы тоже не раскрыта.

          Не знаю, что могу еще добавить. Что конкретно интересует?

          1. Andrey23:

            По поводу зоны нечувствительности, т.к. с статье про нее ничего не сказано, делаю вывод, что она нулевая, т.е. ее нет. Наличие небольшой зоны нечувствительности позволяет регулятору не обращать внимание (т.е. не изменять мощность в процессе регулирования) на маленькие флуктуации и выбросы температуры, имеющие кратковременный случайный характер, что способствует большей устойчивости его работы.

          2. Евгений:

            Абсолютно верно. Зона «нечувствительности» отсутствует. Не вижу причин ее вводить.

      2. Andrey23:

        Насчет идентификации не так ясно… Вариант двух попыток приготовления: первый для идентификации, а второй контрольный — не очень радует.

        Имелась в виду идентификация прямо в процессе регулирования, начатом с некоторыми начальными коэффициентами. К управляющему воздействию примешивается практически незаметный испытательный сигнал и на основе реакции системы на него корректируются коэффициенты. Сам не пробовал и подробностей не знаю, но читал, что такие регуляторы есть. Две попытки приготовления не вариант конечно.

        1. Евгений:

          Идею понял. В принципе, настройку коэфф-тов по методу Циглера-Никольса по реакции на входной скачек ( http://logic-bratsk.ru/radio/pid/irt/main1_10.htm ) можно автоматизировать. Будет ли это самоидентификацией? Но, честно говоря, «вручную» этим методом настроить регулятор не получилось.

          1. Andrey23:

            Но, честно говоря, «вручную» этим методом настроить регулятор не получилось.

            Я думаю метод Циглера-Никольса нам лучше забыть. Дело в том, что в нем критерием является декремент затухания колебаний 4 (отношение первого выброса ко второму), т.е. регулятор, настроенный таким методом, будет всегда с перерегулированием и достаточно медленно затухающими колебаниями, означающими малый запас устойчивости. Лучше уж использовать модификацию метода CHR с критерием максимальной скорости нарастания при отсутствии перерегулирования http://www.bookasutp.ru/Chapter5_5.aspx .

            В принципе, настройку коэфф-тов по методу Циглера-Никольса по реакции на входной скачек ( http://logic-bratsk.ru/radio/pid/irt/main1_10.htm ) можно автоматизировать. Будет ли это самоидентификацией?

            Я имел в виду нечто подобное описанному тут http://www.bookasutp.ru/Chapter5_6.aspx#Basics. Можно заранее рассчитать коэффициенты для разных объемов блюда на одной программе, а потом производить пассивную или активную идентификацию в ходе работы ( http://www.bookasutp.ru/Chapter5_1_4.aspx#MinimizationMethods ) и подставлять их из таблицы.
            Если производительности процессора хватит, то можно замахнуться и на http://www.bookasutp.ru/Chapter5_6_5.aspx .

  2. Andrey23:

    Сорри, задублировал предыдущий комментарий. Несколько непривычная система после форумов.

  3. Сергей:

    По технической стороне: йогурт готовится многие часы, я думаю, никому не важно будет набирала мультиварка нужную температуру 10 минут или 15 минут. И ради отсутствия перегрева можно отказаться от интегральной составляющей регулятора. Тем более, что йогурт часто готовят в различных количествах, коэффициенты точно подобрать не получится.

    По поводу литературного «вступления»: «сенсорная» программа может легко обойтись без нечёткой логики. Жду следующих статей! :)

    Ну и «само собой разумеющийся» ;)

    1. Евгений:

      Спасибо за комментарий!
      Да, по йогурту пока других соображений нет, кроме как описанных Вами. Не понятно еще, какой перегрев максимально допустим. Положим, +0.5С еще допустимо, тогда можно применять интегральную компоненту невязки, но нужно будет реализовать алгоритм оценки количества того же йогурта. Чтобы не изобретать «велосипед» разыскиваются похожие примеры из техники и других областей знаний :)

    2. Andrey23:

      Перегрев возможен и с чисто пропорциональным управлением, все зависит от правильного соотношения коэффициента пропорциональности и инерционности системы. Но в нашем случае планируется очень малоинерционный нагрев, это облегчает задачу.

      1. Евгений:

        Перегрев возможен и с чисто пропорциональным управлением,

        Все верно. Только с пропорциональным управлением отсутствие перегрева также возможно, когда с интегральным перегрев будет всегда ( но возможно допустимо малым ).

        Но в нашем случае планируется очень малоинерционный нагрев, это облегчает задачу

        Малоинерционным нагрев (имею ввиду малый интегральный коэфф-т) ведет за собой медленный выход на режим. Допустимо ли это? Пока непонятно, надо ставить эксперимент.

        1. Andrey23:

          Малоинерционным нагрев (имею ввиду малый интегральный коэфф-т) ведет за собой медленный выход на режим.

          Я имел ввиду малоинерционный излучающий карбоновый нагреватель, в таком случае, в отличие от массивного ТЭНа, вся инерция заключается только в чаше, и в случае чисто пропорционального регулирования можно без риска перегрева увеличить коэффициент пропорциональности, ускоряя выход на режим и уменьшая смещение.
          Сейчас, я так понимаю, идет отработка концепции регулятора и программ на макете в виде обычной мультиварки с ТЭНом. С карбоновым нагревателем этот этап нужно будет пройти еще раз.

          1. Евгений:

            Да, все верно…

Добавить комментарий