Пид регулятор температуры своими руками

Добавил пользователь Алексей Ф.
Обновлено: 10.09.2024

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

Ниже схемы подключения и исходные коды проекта.

О датчиках температуры:

Исходные коды проекта написаны нескольких типов датчиков:

    — датчик температуры с интерфейсом I2C, подробнее про работу с датчиком написано тут. Возможно датчик потребует корректировку температуры. — не дорогой и распространенный, достаточно точный аналоговый датчик температуры, подробнее про него тут. — высокоточный датчик температуры с интерфейсом I2C. Оптимальный выбор.

Имея навыки программирования ардуино, изменить код под другие датчики температуры труда не составит.

О ЖКИ индикаторе:

Решил не усложнять и взял стандартный текстовый экран WH1602A, про подключение подобных экранов к ардуино уже написано тут. Подключается напрямую, без переходников на I2C. Указанные в проекте номера выходов для подключения ЖКИ совпадают с китайским LCD Keypad Shield, я его использовал на стадии отладки.

Органы управления:

Настройка температуры терморегулятора осуществляется с помощью энкодера, удобно использовать модуль KY-040 по китайской номенклатуре ?

О реле:


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


Правильным решением будет использование твердотельного реле, либо модуль с симистором (что по сути является одним и тем же) на необходимый ток. Например SSR-25DA на 25А, если мощность нагревателя в районе нескольких киловатт, OMRON G3MB 202P держит до 2А или 440Вт.

Схема подключения:


Возможно на этой будет понятней.


Схема подключения актуальная для датчиков с интерфейсом I2C (MCP9808, TMP102), в случаи использования аналогового LM35, его выход подключается к аналоговому входу А5.

Эту тему я решил выложить, потому, что долго искал простое описание и практическую реализацию ПИД регулятора. Толкового описания для “чайников” я так и не нашел, а практическая реализация сводится либо к использованию библиотек, либо сравнима с запуском ракеты на луну. Про подбор коэффициентов для регулятора вообще скромно умолчу, потому что это сродни танцам с бубном. Причем в каждом конкретном случае и недай бог изменятся какие-то начальные условия…

Выношу на ваш суд своё видение и реализацию ПИД регулятора. Может я и изобрел влосипед… Но если все попробуют и протестируют предложенный тип регулятора, а потом выскажут свое мнение, будет очень интересно. Возможно это облегчит кому-нибудь жизнь.

Алгоритм работы ПИД регулятора.

Теория:

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

Предлагаемый регулятор имеет следующие особенности и характеристики;

  1. Высокая скорость нарастания выхода мощности регулирования при большой разнице между заданной величиной и измеренной.
  2. Высокая точность и плавность изменения мощности при небольшой разнице между заданной величиной и измеренной.
  3. Стабильность работы на всех краях диапазона регулирования.
  4. Простота математического расчёта.
  5. Малая зависимость от способа и типа прикладываемой мощности и количества или обьема регулируемого тела.

Можно представить, что величиной регулирования управляет оператор, который основывается только на показаниях измеряемой величины. Например: необходим нагрев тела неизвестной массы нагревательным элементом неизвестной мощности. Из величин, мы имеем измеренную, текущую температуру нагреваемой массы и заданную температуру. Мощность нагревательного элемента оператор может регулировать или включать и выключать по своему усмотрению. Если реальная температура ниже заданной, то оператор будет постепенно добавлять мощность нагрева следя за показаниями реальной температуры. Если разность заданной и реальной температур будет оставаться относительно большой, а скорость нарастания температуры маленькой или не меняться, то оператор постепенно доведет мощность нагрева до максимума. После начала повышения температуры, оператор начнет экстраполировать скорость нарастания температуры, чтобы вовремя уменьшить мощность нагрева, так чтобы при существующей скорости нарастания температуры, реальная температура была-бы близка к заданной. Таким образом наступит баланс между мощностью нагревательного элемента и реальной температурой, которая будет стремиться к заданной. Чем точнее будут измерения реальной температуры и чем чаще оператор будет производить экстраполяцию и регулирование мощьности нагревателя, тем точнее будет поддерживаться заданная температура. Из за того, что в реальности скорость нарастания температуры всегда разная, то частота экстраполирования и регулирования мощности подбирается соответственно такой, что-бы получить приемлемое приближение к заданной температуры и минимальное ее изменение по величине (синусойда).

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

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

Практическое описание:

Рассмотрим классический пример регулировании температуры от 0 до 100* при регулировании прилагаемой мощности от 0 до 100% с временем интегррования 1сек. При регулировании неважно количество, масса, теплоемкость и тепло потери нагреваемого тела, а также прилагаемая мощность нагрева. Главное условие, что при прилагаемой мощности нагрева равной 100% , нагрев нагреваемого обьекта достигает или превышает заданное значение температуры, а при прилагаемой мощьности равной 0% происходит остывание обьекта.

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

Приращение температуры – И, сначала будет небольшое и будет проверяться с начала времени интервала интегррования и по окончании. В нашем случае время интегрирования принято 1 сек. И = (Т.нач.интегр. - Т.кон.интегр.)*И.коэффициент

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

Полная формула расчета будет выглядеть следующим образом:

Р.вых = Р.вых + П – И

Р.вых = Р.вых + (Т.зад-Т.реал)*П.коэф – (Т.нач.интегр. - Т.кон.интегр.)*И.коэф

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

Структурная схема ПИД

Продолжим разработку контроллера элемента Пельтье начатую в уроке 36. Добавим к проекту регулятор температуры.

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

Еще раз приведу структурную схему связи регуляторов мощности и температуры.

Структурная схема

Регулятор температуры получает измеренное значение температуры в камере, сравнивает его с заданным и формирует значение заданной мощности для регулятора мощности. Итак, в регуляторе температуры:

  • регулируемый параметр – температура в камере;
  • регулирующий элемент – заданная мощность для регулятора мощности.

Для того, чтобы стабилизировать температуру надо ее измерять. Поэтому первое, что добавим в программу - это измерение температуры в камере. Заодно реализуем измерение температуры радиатора горячей стороны элемента Пельтье.

Реализация измерения температуры в камере и температуры радиатора горячей стороны модуля Пельтье.

Температуру измеряем интегральными датчиками DS18B20. Достаточно подробно о подключении датчиков такого типа к Ардуино рассказано в уроке 26. Для тех, кто не знает, как работать с этими термодатчиками следует внимательно прочитать урок 26.

Подключим датчики DS18B20 к плате Ардуино по стандартной схеме. Еще в начале разработки мы решили, что будем использовать аналоговые выводы A2 и A3 в дискретном режиме.

Схема подклюючения термодатчиков DS18B20

Собранная схема у меня выглядит так.

Ардуино контроллер холодильника

Теперь будем дорабатывать программу.

Добавим переменные для измеренных температур:

float measureTempRef; // измеренная температура в камере (
float measureTempRad; // измеренная температура радиатора (

Создадим объекты OneWire (датчики температуры).

OneWire sensTempRef (16); // датчик температуры в камере подключен к выводу 16 (A2)
OneWire sensTempRad (17); // датчик температуры радиатора подключен к выводу 17 (A3)

При измерении температуры могут возникнуть аппаратные ошибки датчиков DS18B20. Для индикации этих ошибок не будем заводить отдельные признаки. Договоримся, что значение температуры менее – 200 C° говорит об аппаратной ошибки измерения.

Последовательность действий для измерения температуры с помощью датчиков DS18B20 описана в уроке 26. Она состоит из трех операций:

  • инициализация измерения температуры;
  • пауза не менее 750 мс;
  • чтение результата измерения из датчика и проверка контрольной суммы.

sensTempRef.reset(); // сброс шины 1-Wire
sensTempRef.write(0xCC, 1); // пропуск ROM
sensTempRef.write(0x44, 1); // инициализация измерения

Чтение результата измерения из датчика и проверки контрольной суммы требует следующих функций:

Понятно, что блок инициализации надо выполнить в начале длинного цикла (1 сек) программы, а блок чтения результата ближе к концу длинного цикла. Время между выполнением этих блоков должно быть не менее 750 мс.

Но вопрос заключается в том, сколько времени требуется на выполнение функций класса OneWire. Можно ли для выполнения операций инициализации измерения и чтения результата использовать по одному циклу 20 мс или необходимо ”размазать” их на несколько циклов. Не забудем, что мы измеряем температуру с помощью двух датчиков DS18B20.

Я измерил время выполнения функций библиотеки OneWire. Методику измерения и результаты привел на форуме сайта в этой теме. Получилось, что:

  • операция инициализации измерения температуры требует 2063 мкс;
  • чтение результата с проверкой контрольной суммы занимает 6,8 мс.

В результате я решил инициализацию измерения температуры для обоих датчиков выполнить в одном цикле 20 мс на интервале 5.

// --------------------------- интервал 5, инициализация измерения температуры
// датчик в камере
sensTempRef.reset(); // сброс шины 1-Wire
sensTempRef.write(0xCC, 1); // пропуск ROM
sensTempRef.write(0x44, 1); // инициализация измерения
// датчик радиатора
sensTempRad.reset(); // сброс шины 1-Wire
sensTempRad.write(0xCC, 1); // пропуск ROM
sensTempRad.write(0x44, 1); // инициализация измерения
>

А чтение результата с проверкой контрольной суммы для датчиков температур в камере и радиатора сделал в отдельных интервалах 45 и 46.

if (cycle20mcCount == 45)
// --------------------------- интервал 45, чтение датчика температуры камеры
sensTempRef.reset(); // сброс шины 1-Wire
sensTempRef.write(0xCC, 1); // пропуск ROM
sensTempRef.write(0xBE, 1); // команда чтения памяти датчика
sensTempRef.read_bytes(bufData, 9); // чтение памяти датчика, 9 байтов

if (cycle20mcCount == 46)
// --------------------------- интервал 46, чтение датчика температуры радиатора
sensTempRad.reset(); // сброс шины 1-Wire
sensTempRad.write(0xCC, 1); // пропуск ROM
sensTempRad.write(0xBE, 1); // команда чтения памяти датчика
sensTempRad.read_bytes(bufData, 9); // чтение памяти датчика, 9 байтов

Полученные результаты проверяются еще на верхнее и нижнее максимальное значение. Если температура в нашей системе больше 100 или ниже 40 C° это явная ошибка.

Осталось вывести измеренные температуры на компьютер для проверки.

Полностью скетч программы с измерением температур в камере и радиатора можно загрузить по этой ссылке:

Зарегистрируйтесь и оплатите. Всего 60 руб. в месяц за доступ ко всем ресурсам сайта!

Загружаем скетч в плату, открываем монитор последовательного порта. Все работает.

Результаты измерения

Температура измеряется правильно.

Реализация ПИД регулятора температуры.

При разработке регулятора мощности (урок 39) я совершил небольшую ошибку. Для быстрого выключения регулятора я использовал условие setPower == 0. Т.е. при заданной мощности равной 0 регулятор мгновенно выключался, интегральное звено сбрасывалось. Быстрое выключение требуется для реализации в будущем аварийных режимов.

Но заданная мощность может на короткое время стать равной 0 под действием дифференцирующей составляющей. Я изменил условие аварийного выключения регулятора мощности:

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

Итак. Создаем все переменные и константы, необходимые для регулятора температуры.

float regPwrInt=0; // интегральное звено регулятора мощности
float maxSetPower=MAX_POWER; // максимальная заданная мощность
float regTmpInt=0; // интегральное звено регулятора температуры
float regTmpPr; // пропорциональное звено регулятора температуры
float regTmpDif; // дифференциальное звено регулятора температуры
float regTmpErr; // ошибка рассогласования температуры
float regTmpErrPrev; // предыдущая ошибка рассогласования температуры
float setTempRef; // заданная температура в камере

Поясню только параметры для ограничения мощности.

Константа MAX_POWER определяет максимальную мощность, которую способен создать контроллер. Это аппаратные ограничения на блок питания, ключевой стабилизатор, модуль Пельтье и т.п.

Переменная maxSetPower задается пользователем и в любой момент может быть изменена кнопками контроллера. Она вводит дополнительное ограничение на выходную мощность. Например, кто-то хочет ограничить потребляемую мощность для экономии электроэнергии.

Сам регулятор выполним в цикле 20 мс на интервале 47, сразу после получения результатов измерения температуры.

if (cycle20mcCount == 47)
// --------------------------- интервал 47, регулятор температуры в камере

setTempRef= 20.; // временно заданная температура

regTmpErr= measureTempRef - setTempRef; // вычисление ошибки рассогласования

regTmpInt= regTmpInt + regTmpErr * koeffRegTmpInt; // интегральная часть
if ( regTmpInt > maxSetPower) regTmpInt= maxSetPower; // ограничение сверху
if ( regTmpInt ограничение снизу

regTmpPr= regTmpErr * koeffRegTmpPr; // пропорциональная часть
regTmpDif= (regTmpErr - regTmpErrPrev) * koeffRegTmpDif; // дифференцирующая часть
regTmpErrPrev= regTmpErr; // перегрузка предыдущей ошибки

setPower= regTmpInt + regTmpPr + regTmpDif; // сумма составляющих
if ( setPower > maxSetPower) setPower= maxSetPower; // ограничение сверху
if ( setPower ограничение снизу
>

Я даже не знаю, что в нем пояснять. Все “разжевано” в предыдущем уроке. Обратите внимание на полярность ошибки рассогласования регулятора.

  • В регуляторе мощности при реальной мощности меньше заданной надо было увеличивать ШИМ. Больше ШИМ, больше мощность.
  • В регуляторе температуры мощность надо увеличивать при реальной температуре больше заданной. Мы охлаждаем, а не нагреваем. И чем больше мощность, тем меньше температура.

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

  • ошибку рассогласования;
  • заданную мощность;
  • интегральную составляющую;
  • пропорциональную составляющую;
  • дифференциальную составляющую.

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

С выводом данных на компьютер через последовательный порт все не так просто. Функция Serial.print() помещает данные в передающий буфер последовательного порта. А встроенный класс Serial передает эти данные через аппаратный интерфейс UART. Но размер буфера Serial не безграничен.

Для Arduino UNO R3 размеры буферов приема и передачи составляют 64 байт. Поэтому при большем размере передаваемых данных мы должны делать паузы на передачу данных через аппаратный интерфейс UART. Т.е. для того, чтобы данные ”ушли” из буфера в UART. В нашем случае скорость передачи данных 19200 бод. Один байт передается за 0,5 мс. За цикл 20 мс будет передано 40 байтов.

За один цикл 20 мс все данные не передать. Надо передачу данных на компьютер разбивать на интервалы по 20 мс. Пока я выбрал 10 и 11 интервалы.

Все. Регулятор температуры готов. Можете загрузить итоговый скетч программы:

Зарегистрируйтесь и оплатите. Всего 60 руб. в месяц за доступ ко всем ресурсам сайта!

Проверка ПИД регулятора температуры.

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

А сейчас мы проверим принципиальную работу всех составляющих регулятора. Собственно системы с элементом Пельтье у нас еще нет.

Выбор коэффициентов регулятора.

Выберем коэффициенты, заодно разберем их физический смысл в нашей системе.

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

Самый инерционный вариант это радиатор холодной стороны Пельтье в камере, который охлаждает воздух. Самый быстрый – датчик температуры, расположенный непосредственно на холодной поверхности элемента Пельтье. В первом случае время реакции измеряется десятками минут, во втором – секундами. Поэтому регулятор настраивается на реальный объект. В будущем я затрону эту тему. А сейчас я выберу коэффициенты эмпирически для инерционного варианта холодильника. Возможно, я ошибусь. Истину покажет эксперимент. Сейчас важнее проверить работоспособность регулятора.

Пропорциональный коэффициент. Я выбрал значение koeffRegTmpPr = 0,5. Это значит, что при ошибке рассогласования 1 C° пропорциональное звено даст 0,5 Вт на элементе Пельтье. Допустим, мы включили нагретый холодильник. Разница между заданной и реальной температурами 10 C°. В этом случае пропорциональная составляющая мгновенно задаст регулятору мощности 5 Вт.

Интегральный коэффициент. Я выбрал koeffRegTmpInt = 0,002. Это значит, что при ошибке рассогласования 1 C° каждые 1 сек выходная мощность будет увеличиваться на 0,002 Вт. За 8 минут она увеличится на 1 Вт. При ошибке рассогласования 10 C° мощность будет увеличиваться в 10 раз быстрее, т.е. на 1 Вт за 50 сек.

Скорее это слишком большой коэффициент. В реальной системе я бы сделал его еще на порядок меньше.

Дифференцирующий коэффициент. Я задал koeffRegTmpDif = 50. Это значит, что при изменении ошибки рассогласования на 0,1 C° мощность изменится на 5 Вт.

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

Представьте себе. Температура увеличилась на 0,1 C°. Дифференцирующая составляющая выдала уменьшение заданной мощности на 5 вт. Но уменьшение мощности будет сформировано только в течение одной единицы временной дискретности регулятора, 1 сек. Вряд ли система охлаждения успеет отработать. Еще есть регулятор мощности. В принципе его быстродействие позволяет отработать за такое время, но мы значительно снизили скорость его работы из соображений щадящего режима для модуля Пельтье.

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

Есть еще проблема с дифференцирующим звеном. Датчик температуры у нас дискретный, с разрешением 0,0625 C°. Как и любой узел преобразования аналоговой величины в цифровую он имеет особенность, связанную со значением выходного кода на границе ступеней преобразования. Код на границах ”скачет” на плюс минус единицу преобразования. В нашем случае значение температуры будет ”дергаться” на 0,0625 C°. Это будет воспринято дифференцирующим звеном и не лучшим образом повлияет на работу регулятора в целом. Ниже я покажу этот эффект.

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

Проверка ПИД регулятора температуры на реальной схеме.

К прежней схеме добавились два датчика температуры. А в остальном все также: блок питания, плата Ардуино, импульсный регулятор, нагрузка 20 Ом.

Ардуино контроллер холодильника

Установил в программе заданную температуру 20 C°.

setTempRef= 20.; // временно заданная температура

Загрузил скетч с выбранными коэффициентами в плату.

Зарегистрируйтесь и оплатите. Всего 60 руб. в месяц за доступ ко всем ресурсам сайта!

Запустил монитор последовательного порта. Блок питания 12 В пока не подключал.

Результаты испытаний

Ошибка рассогласования E = 3.22 C°.

Пропорциональная составляющая должна быть 3,22 * koeffRegTmpPr = 3,22 * 0,5 = 1,61 Вт. Так и есть P=1.61.

Интегральная составляющая должна увеличиваться каждую секунду на 3,22 * koeffRegTmpInt = 3,22 *0,002 = 0,0064 Вт. То же все правильно. За 20 секунд (20 строчек) I увеличилось с 0 до 0,13.

В последних строчках видно, что ошибка рассогласования увеличилась на 0,08 C°. Дифференциальная составляющая должна быть 0,08 * koeffRegTmpDif = 0,06 * 50 = 3 Вт. Регулятор отработал правильно D=3,13. Небольшая неточность, объясняется тем, что мы выводим только 2 знака после запятой.

Установил заданную температуру 25 C° и увидел, что ошибка рассогласования стала отрицательной E=-1.53 C°, регулятор отключился, пропорциональное звено дало правильное значение -1,53 * 0,5 = -0,765 Вт.

Результаты испытаний

Вернул заданную температуру 20 C°. Подключил блок питания 12 В. Увидел, как меняется реальная мощность на нагрузке.

Результаты испытаний

Мощность растет и останавливается на заданном в программе пределе 5 Вт. Все правильно.

Скачек температуры на 0,07 C° дифференциальное звено отработало правильно, но на выходной мощности это не отразилось.

Результаты испытаний

А вот те самые ”скачки” температуры на границе ступеней преобразования датчика.

Результаты испытаний

Видно, как они отражаются на интеграторе регулятора мощности p, т.е. на ШИМ. Выше я писал об этом.

Как я уже сказал, полную проверку и настройку регулятора температуры будем производить на реальном объекте с программой верхнего уровня, регистрирующей состояние системы.

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

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

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

Что такое ПИД регулятор?

ПИД регулятор — прибор, встроенный в управляющий контур, с обязательной обратной связью. Он предназначен для поддержания установленных уровней задаваемых величин, например, температуры воздуха.

Устройство подает управляющий или выходной сигнал на устройство регулирования, на основании полученных данных от датчиков или сенсоров. Контроллеры обладают высокими показателями точности переходных процессов и качеством выполнения поставленной задачи.

Что такое ПИД регулятор для чайников?

Три коэффициента ПИД регулятора и принцип работы

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

Возьмем в качестве объекта регулирования ёмкость с водой, в которой необходимо поддерживать температуру на заданном уровне с помощью регулирования степени открытия клапана с паром.

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

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

Интегральная составляющая пытается на основе прошлых значений температуры, вернуть её значение, если оно поменялось. Подробнее процесс описан в видео ниже.

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

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

Читайте также: