Меню

Настройка пид контроллера температуры



Простой метод настройки ПИД регулятора


Есть два похода к настройке ПИД регулятора. Первый – синтез регулятора, то есть вычисление параметров регулятора на основании модели системы. Данный метод позволяет очень точно рассчитать параметры регулятора, но он требует основательного погружения в ТАУ.

Второй метод – ручной подбор параметров (коэффициентов). Это метод научного тыка проб и ошибок. Берем готовую систему, меняем один (или сразу несколько коэффициентов) регулятора, включаем регулятор и смотрим за работой системы. В зависимости от того, как ведет себя система с выбранными коэффициентами (недо/пере регулирование) опять меняем коэффициенты и повторяем эксперимент. И т. д. Ну, такой метод имеет право на жизнь, главное представлять как изменение того или иного коэффициента повлияет на систему (что бы не действовать совсем наугад).

Есть более «оптимизированный» метод подбора коэффициентов – метод Зиглера–Никольса.

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

Суть метода состоит в следующем:

1. Выставляем все коэффициенты (Kp, Ki, Kd) в 0.
2. Начинаем постепенно увеличивать значение Kp и следим за реакцией системы. Нам нужно добиться, чтобы в системе начались устойчивые колебания (вызванные перерегулированием). Увеличиваем Kp, пока колебания системы не стабилизируются (перестанут затухать).
3. Запоминаем текущее значение Kp (обозначим его Ku) и замеряем период колебаний системы (Tu).

Все. Теперь используем полученные значения Ku и Tu для расчета всех параметров ПИД регулятора по формулам:

Kp = 0.6 * Ku
Ki = 2 * Kp / Tu
Kd = Kp * Tu / 8

Готово. Для дискретных регуляторов нужно еще учесть период дискретизации – T ( умножить на Ki та Т, разделить Kd на Т).

Еще раз повторюсь, ТАУ изучать нужно, синтез регуляторов рулит, описанный метод годится для базовой настройки, подходит не для всех систем и т. д. Но данный метод очень простой, и вполне годится для «бытового» уровня.

Источник

Настройка ПИД-регулятора

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

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

Задача настройки

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

Допустим текущая температура в помещении 10 °С, а мы хотим, чтобы было 25°С. Мы включаем регулятор и он начинает управлять мощностью обогревателя таким образом, чтобы температура достигла требуемого уровня. Посмотрим как это может выглядеть.

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

Чёрным цветом показан график изменения температуры в том случае, если коэффициенты подобраны совсем плохо. Система теряет устойчивость. Регулятор при этом идёт «в разнос» и температура «уходит» от заданного значения.

Рассмотрим более благоприятные случаи.

На этом рисунке показаны графики, далёкие от идеального. В первом случае наблюдается сильное перерегулирование: температура слишком долго «скачет» относительно уставки, прежде чем достичь её. Во втором случае регулирование происходит плавно, но слишком медленно.

А вот и приемлемые кривые:

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

В процессе настройки регулятора, пользователю необходимо стремиться получить кривую, близкую к идеальной. Однако, в реальных условиях сделать это не так-то просто — приходится долго и мучительно подбирать коэффициенты. Поэтому зачастую останавливаются на «приемлемой» кривой регулирования. Например, в нашем примере нас могли бы устроить коэффициенты регулятора, при которых заданная температура достигалась бы за 15-20 минут с максимальным перерегулированием (максимальными «скачками» температуры) 2 °С. А вот время достижение уставки более часа и максимальные «скачки» температуры 5 °С — нас бы не устроили.

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

Настраиваем пропорциональный коэффициент

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

Далее нужно задать значение уставки температуры отличное от текущей и посмотреть, как регулятор будет менять мощность обогревателя, чтобы достичь заданного значения. Характер изменения можно отследить «визуально», если у вас получится мысленно представить этот график. Либо можно регистрировать в таблицу измеренное значение температуры каждые 5-10 секунд и по полученным значением построить график. Затем нужно проанализировать полученную зависимость в соответствии с рисунком:

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

Настраиваем дифференциальный коэффициент

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

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

Настраиваем интегральный коэффициент

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

Читайте также:  Настройка nat на linksys

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

Заключение

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

Источник

Настройка ПИД-регулятора. Метод Циглера-Никольса.

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

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

Наиболее часто использующимся методом настройки коэффициентов является метод Циглера-Никольса. Заключается он в следующем…

Метод Циглера-Никольса.

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

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

А из него получаем и остальные:

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

Что же делать, если метод Циглера-Никольса не сработал? Тут придет на помощь “аналитический” метод настройки 🙂

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

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

Вот некоторые правила, которые могут помочь при настройке ПИД-регулятора:

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

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

На этом на сегодня все, возможно, как-нибудь рассмотрим практическую реализацию ПИД-регулятора!

Источник

PID РЕГУЛЯТОР НА ARDUINO

ПИД регулятор – мощный инструмент, позволяющий удерживать заданную величину (температура, скорость вала, положение) при помощи управляющего устройства (обогреватель, контроллер мотора, линейный привод). Вот отличная статья по теории, что такое ПИД регулятор, как он работает и как его настроить. А я предлагаю свою библиотеку для работы с PID на Arduino.

ПИД регулятор выдаёт на выходе сигнал для плавного управления управляющим устройством (диммер, транзистор), если вам нужно реле – используйте библиотеку GyverRelay.

Алгоритм ПИД регулятора выглядит так, можете использовать его напрямую в скетче:

БИБЛИОТЕКА GYVERPID

GyverPID v3.0

Библиотека классического PID регулятора для Arduino

  • Быстрая и лёгкая библиотека
  • Время одного расчёта около 70 мкс
  • Режим работы по величине или по её изменению (для интегрирующих процессов)
  • На выбор целочисленная или float модель вычисления
  • Возвращает результат по встроенному таймеру или в ручном режиме

Поддерживаемые платформы: все Arduino (используются стандартные Wiring-функции)

Версии

Версия 1.1 – убраны дефайны
Версия 1.2 – возвращены дефайны
Версия 1.3 – вычисления ускорены, библиотека облегчена
Версия 2.0 – логика работы чуть переосмыслена, код улучшен, упрощён и облегчён
Версия 2.1 – integral вынесен в public
Версия 2.2 – оптимизация вычислений
Версия 2.3 – добавлен режим PID_INTEGRAL_WINDOW
Версия 2.4 – реализация внесена в класс
Версия 3.0
– Добавлен режим оптимизации интегральной составляющей (см. доку)
– Добавлены автоматические калибровщики коэффициентов (см. примеры и доку)
Версия 3.1 – исправлен режиме ON_RATE, добавлено автоограничение инт. суммы

ДОКУМЕНТАЦИЯ

Документация

Логика работы

ПИД регулятор принимает на вход две величины:

  • Входной сигнал input – сигнал с датчика: температура, скорость, положение, и т.д;
  • Установку setpoint – величина, к которой регулятор будет стараться регулировать входной сигнал (температуру, скорость, положение…)

С ПИД регулятора выходит выходной (управляющий) сигнал output – безразмерная величина, которая подаётся на управляющее устройство. Это может быть транзистор с ШИМ сигналом, диммер, сервопривод, и т.д. Выходной сигнал должен влиять на входной сигнал: нагреватель нагревает объект с датчиком температуры, мотор крутится и даёт значения для датчика оборотов, и т.д.

Закон управления регулятора устанавливается при помощи коэффициентов Kp , Ki и Kd .

  • Kp – пропорциональный коэффициент, выходная величина будет увеличиваться пропорционально разнице входного сигнала и установки.
  • Ki – коэффициент интегрирующей составляющей, отвечает за накапливающуюся ошибку, позволяет сгладить пульсации и нивелировать маленькую ошибку.
  • Kd – коэффициент дифференциальной составляющей, отвечает за скорость изменения величины, позволяет уменьшить раскачку системы.

Инициализация

Можно инициализировать объект тремя способами:

  • GyverPID regulator; // инициализировать без настроек (всё по нулям, dt 100 мс)
  • GyverPID regulator(kp, ki, kd); // инициализировать с коэффициентами. dt будет стандартно 100 мс
  • GyverPID regulator(kp, ki, kd, dt); // инициализировать с коэффициентами и dt (в миллисекундах)
Читайте также:  Rebel galaxy настройка управления

Режимы и настройки

Направление регулирования: зависит от того, в какую сторону направляется управляемая величина input при увеличении управляющего сигнала output . Например: охлаждение или нагрев, разгон или торможение, и т.д. По умолчанию стоит NORMAL – регулятор считает, что увеличение управляющего сигнала output увеличит входной сигнал input . Устанавливается командой

setDirection(dir); // dir – NORMAL или REVERSE

Режим работы: режим регулирования по ошибке входного сигнала ON_ERROR или по изменению входного сигнала ON_RATE . По умолчанию стоит ON_ERROR , его рекомендуется использовать в большинстве случаев, потому что большинство процессов – самоустанавливающиеся (температура нагревателя сама установится в своём максимуме, скорость мотора – тоже). Режим ON_RATE рекомендуется использовать в интегрирующих процессах, в которых выходная величина влияет на скорость изменения входной величины, например положение моторизированного слайдера, который не остановится при управляющем сигнале, отличном от нуля. Таким процессом будет проще управлять в режиме ON_RATE . Устанавливается командой

setMode(mode); // mode – ON_ERROR или ON_RATE

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

Пределы выхода: ограничение значения выходного сигнала, по умолчанию: 0-255 (для 8 бит ШИМ). Может быть установлено 0-180 для угла сервопривода, и т.д. Устанавливается командой

setLimits(min, max); // установить пределы

Время итерации: время итерации можно изменить в процессе работы (не знаю, зачем, но возможность есть). Время устанавливается в миллисекундах и влияет на функцию getResultTimer() , которая с этим периодом делает новый расчёт управляющего сигнала. Также это время входит в расчёт управляющего сигнала (в И и Д составляющей). Устанавливается командой

setDt(dt); // установка времени итерации в мс

Установка/чтение параметров

Основные величины регулятора можно менять в любом месте программы любым удобным способом (кнопки, энкодер, передача через UART/GSM/WiFi, как угодно). Коэффициенты регулятора Kp , Ki и Kd можно устанавливать и читать напрямую как члены класса, например

Время итерации меняется при помощи метода setDt() (см. выше).

Величины регулятора (вход, установка, выход) также являются членами класса и к ним можно обратиться напрямую для чтения и записи:

Тип вычислений

Библиотека имеет режим целочисленных вычислений. Скорость вычислений особо не меняется, но код занимает меньше места и всё-таки должен выполняться быстрее. По умолчанию стоит режим чисел с плавающей точкой, в заголовочном файле библиотеки смотрите ключевое слово datatype , datatype будет float или int в зависимости от настройки: это некоторые переменные и функции. Настройка осуществляется дефайном перед подключением библиотеки:

Как работать с библиотекой?

Нужно скормить регулятору текущее значение величины в input , нужное значение в setpoint , провести расчёт при помощи getResult() или getResultTimer() , и после этого выходную величину output подать на управляющее устройство. Делать это нужно часто для быстрых процессов (стабилизация частоты оборотов шпинделя станка под нагрузкой: dt берём около 10-50 мс), и не очень часто для медленных процессов (удержание заданной температуры бойлера: dt можно взять пару секунд, процесс очень инерционный). Функция getResult() делает расчёт в каждый свой вызов и возвращает output , а getResultTimer() делает расчёт только при срабатывании встроенного таймера. То есть getResult() нужно вызывать по своему таймеру (для продвинутых пользователей), а getResultTimer() нужно вызывать как можно чаще, он посчитает только тогда, когда это будет нужно по своему таймеру. После расчёта можно подавать управляющий сигнал (выходную величину output ) на управляющее устройство. Смотрите пример!

Как настроить коэффициенты?

Подбор коэффициентов ПИД регулятора – индивидуальная задача, зависящая от конкретных условий и “железа”. Можно почитать статьи на эту тему: например эту, вот эту попроще, и вот эту посложнее. Первым делом нужно установить dt – об этом я писал выше. Маленький dt для быстрых процессов и побольше для медленных (инертных). Dt влияет на расчёты при неизменных коэффициентах, поэтому dt лучше не менять во время настройки, чтобы не пришлось пересчитывать все остальные коэффициенты. Диапазон коэффициентов: 0.01 – 100, т.е. довольно широк и зависит напрямую от инертности системы и выбранного времени dt. Коэффициенты должны быть положительные, противоположное направление регулирования задаётся в setDirection() .

В версии 3.0 появился автоматический тюнер коэффициентов, читай ниже.

Оптимизация интегральной суммы (экспериментально)

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

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

Ручная оптимизация

В версии 2.1 интегральная сумма вынесена в публичный доступ как член класса, к ней можно обратиться как regulator.integral (где regulator – ваше имя объекта). Интегральная составляющая суммирует ошибку по времени, и при слишком сильном накоплении может приводить к перерегулированию (например для инерционных систем, таких как обогреватель). Для наблюдения за её состоянием можно прочитать integral , и при необходимости, например, ограничить её диапазон ( regulator.integral = constrain(regulator.integral, -500, 500); каждый раз после вызова getResult() ) или даже обнулить ( regulator.integral = 0; ) по условию.

Режим интегрального окна

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

Будьте внимательны, внутри библиотеки будет создан массив указанного размера и займёт память! Используйте только в том случае, если понимаете как это работает и для чего оно нужно, а также есть возможность наблюдать за графиком и делать выводы!

Режим оптимизации интегральной суммы

В версии 3.0 появился новый режим автоматической оптимизации интегральной суммы: она автоматически ограничивается так, чтобы выходной сигнал не превышал установленные в setLimits() пределы, то есть инт. сумма не будет бесконечно расти или уменьшаться. В то же время резкие скачки значения с датчика (вход регулятора) вблизи пределов могут приводить к обнулению интегральной суммы, поэтому входной сигнал рекомендуется фильтровать. Для активации режима оптимизации интегральной суммы нужно прописать в скетче дефайн #define PID_OPTIMIZED_I до подключения библиотеки.

Режим “пропорционально скорости”

Выше была описана смена режима работы при помощи setMode(mode); , в режиме ON_RATE регулятор лучше справляется с интегрирующими процессами (например позиция вала мотора), но иногда хорошо работает и с нагревателями, уменьшая переполнение интегральной суммы и перерегулирование в целом. В этом режиме коэффициенты ведут себя иначе и их оптимальные значения отличаются от обычного режима, логика ручной настройки также отличается: коэффициент Kp теперь работает только в паре с Ki и настраивать их нужно вместе, причём в некоторых процессах Kp не даёт никакого эффекта при нулевом Ki, либо работает неадекватно. Смотри пример simulation_linear, в котором симулируется идеальный интегрирующий процесс.

Читайте также:  Pri30 настройка внутренних линий

Реализация режима взята отсюда, там же есть теоретическое обоснование.

Автоматический тюнер коэффициентов 1

Тюнер тип 1

Автоматический калибровщик коэффициентов ПИД регулятора, метод “реле” http://auto-controls.blogspot.com/2009/10/pid-controllers-auto-tuning-relay.html. Данный тюнер лучше настраивает коэффициенты для удержания величины и парирования внешних возмущений.

Примечание: тюнер позволяет найти более-менее приемлемые коэффициенты, при которых система будет работать. Эти коэффициенты не являются идеальными и их всё равно придётся покрутить вручную.

Примечание: тюнер выдаёт коэффициенты для ПИ и ПИД регулятора. ПИ регулятор подразумевает, что коэффициент Д будет равен 0.

Как это работает?

  1. Тюнер подаёт управляющий сигнал и ждёт стабилизации значения с датчика
  2. Тюнер изменяет сигнал на некоторую величину (ступеньку)
  3. Ждёт заданное время, затем меняет сигнал на ту же ступеньку, но в другую сторону
  4. Начинается раскачка системы: при прохождении значения с датчика через значение стабилизации сигнал снова переключается
  5. Производится анализ периода раскачки и её амплитуды, на основании этих данных вычисляются рекомендуемые коэффициенты

Как пользоваться библиотекой?

1. Инициализация и настройка

tuner.setParameters(направление, сигнал, ступенька, период, точность стабилизации, продолж. импульса, период итерации);

  1. Направление :
    – NORMAL : увеличение выходного сигнала увеличивает сигнал с датчика (например обогреватель, мотор)
    – REVERSE : увеличение выходного сигнала уменьшает сигнал с датчика (например холодильник, тормоз)
  2. Cигнал : базовый сигнал на управляющее устройство. Система будет ждать стабилизации по величине этого сигнала, и от него будет откладываться ступенька
  3. Ступенька : величина, на которую будет изменяться сигнал в обе стороны от базового
  4. Период : период опроса в ожидании стабилизации
  5. Точность стабилизации : скорость изменения значения с датчика, ниже которой система будет считаться стабильной
  6. Продолж. импульса : время в миллисекундах на первую раскачку
  7. Период итерации : dt системы в мс, желательно должно совпадать с периодом ПИД регулятора

Пример: tuner.setParameters(NORMAL, 130, 40, 2000, 1, 2000, 30);

Калибруем нормальный процесс (увеличение сигнала увеличивает значение с датчика), базовый сигнал 130, ступенька 40 (в процессе калибровки сигнал будет меняться от 130-40 до 130+40, сразу думаем о том, чтобы это не превысило допустимый максимум), на этапе стабилизации хотим, чтобы система считалась стабильной при изменении сигнала с датчика менее, чем на 1 (условная величина датчика) за 2000 миллисекунд. На этапе первоначальной раскачки мы задали длину импульса 2000 мс, период работы всей системы – 30 мс.

2. Структура цикла
Библиотека сделана универсальной для любого датчика и управляющего устройства, цикл тюнинга организуется вот так:

3. Отладка и получение значений
3.1 Во время работы тюнера можно вызвать tuner.getAccuracy() – чем ближе его значение к 100, тем стабильнее на данный момент качается система и
тем вычисляемые коэффициенты будут более близки к идеальным
3.2 Для наблюдения за тюнером через Serial есть готовые методы:
– tuner.debugText() выводит текстовые данные (смотри скриншот в папке docs библиотеки)
– tuner.debugPlot() выводит данные для построения графика через плоттер Arduino IDE (смотри скриншот в папке docs библиотеки)
3.3 Чтобы получить коэффициенты внутри программы (без Serial) желательно задать условие if (tuner.getAccuracy() > 95) и при наступлении этого условия получить коэффициенты:

Смотрите примеры в examples/autotune

Автоматический тюнер коэффициентов 2

Тюнер тип 2

Автоматический калибровщик коэффициентов ПИД регулятора, метод Cohen-Coon https://pages.mtu.edu/

tbco/cm416/cctune.html. Данный тюнер лучше настраивает коэффициенты для переходного процесса, например разогрев с одной температуры до другой.

Примечание: тюнер позволяет найти более-менее приемлемые коэффициенты, при которых система будет работать. Эти коэффициенты не являются идеальными и их всё равно придётся покрутить вручную.

Примечание: тюнер выдаёт коэффициенты для ПИ и ПИД регулятора. ПИ регулятор подразумевает, что коэффициент Д будет равен 0.

Как это работает?

  1. Тюнер подаёт стартовый управляющий сигнал и ждёт стабилизации значения с датчика
  2. Тюнер запоминает минимальное значение и подаёт конечный сигнал, ждёт стабилизации
  3. Тюнер запоминает максимальное значение, снова подаёт начальный сигнал и ждёт стабилизации
  4. Тюнер снова подаёт конечный сигнал
  5. Зная полное время процесса, тюнер измеряет сигнал в определённых точках и по специальным формулам считает коэффициенты

Как пользоваться библиотекой?

1. Инициализация и настройка

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

  1. Направление :
    – NORMAL : увеличение выходного сигнала увеличивает сигнал с датчика (например обогреватель, мотор)
    – REVERSE : увеличение выходного сигнала уменьшает сигнал с датчика (например холодильник, тормоз)
  2. Начальный сигнал : стартовый сигнал на управляющее устройство
  3. Конечный сигнал : конечный сигнал на управляющее устройство
  4. Период : период опроса в ожидании стабилизации
  5. Точность стабилизации : скорость изменения значения с датчика, ниже которой система будет считаться стабильной
  6. Период итерации : dt системы в мс, желательно должно совпадать с периодом ПИД регулятора

Пример: tuner.setParameters(NORMAL, 150, 200, 1000, 1, 50);

Калибруем нормальный процесс (увеличение сигнала увеличивает значение с датчика), начальный сигнал 150, конечный 200, на этапе стабилизации хотим, чтобы система считалась стабильной при изменении сигнала с датчика менее, чем на 1 (условная величина датчика) за 1000 миллисекунд. Период работы всей системы – 50 мс.

2. Структура цикла
Библиотека сделана универсальной для любого датчика и управляющего устройства, цикл тюнинга организуется вот так:

3. Отладка и получение значений
3.1 Во время работы тюнера можно вызвать tuner.getState() – вернёт номер текущего этапа работы. На 7-ом этапе можно забирать коэффициенты
3.2 Для наблюдения за тюнером через Serial есть готовые методы:
– tuner.debugText() выводит текстовые данные (смотри скриншот в папке docs библиотеки)
– tuner.debugPlot() выводит данные для построения графика через плоттер Arduino IDE (смотри скриншот в папке docs библиотеки)
3.3 Чтобы получить коэффициенты внутри программы (без Serial) желательно задать условие if (tuner.getState() == 7) и при наступлении этого условия получить коэффициенты:

Смотрите примеры в examples/autotune2

Источник

Adblock
detector