1. ПИД-контроллер

Пропорционально-интегрально-дифференциальный контроллер (ПИД-контроллер) является распространенным компонентом контура обратной связи в промышленных системах управления. footnote: [Этот подраздел взят из гораздо более обширной статьи, найденной по адресу https://en.wikipedia.org/wiki/PID_controller]

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

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

1.1. Основы контура управления

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

В старой литературе по управлению этот процесс настройки называется действием сброса. Положение стрелки на манометре является измерением, значением процесса или переменной процесса. Требуемое значение на манометре называется уставка (также называемая заданным значением). Разница между стрелкой манометра и заданным значением является ошибка.

Контур управления состоит из трех частей:

  1. Измерение датчиком, подключенным к процессу (например, энкодером),

  2. Решение в элементе контроллера,

  3. Действие через устройство вывода, такое как двигатель.

Когда контроллер считывает показания датчика, он вычитает это измерение из заданного значения, чтобы определить ошибку. Затем он использует ошибку для расчета поправки к входной переменной процесса (действие), чтобы эта поправка устранила ошибку из выходного измерения процесса.

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

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

Некоторые системы управления объединяют ПИД-контроллеры в каскады или сети. То есть главный элемент управления генерирует сигналы, используемые подчиненными контроллерами. Одной из распространенных ситуаций является управление двигателем: часто требуется, чтобы двигатель имел контролируемую скорость, а ведомый контроллер (часто встроенный в преобразователь частоты) напрямую управляет скоростью на основе пропорционального входного сигнала. Этот ведомый вход подается на выход главного контроллера, который управляет на основе связанной переменной.

1.2. Теория

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

Пропорциональная

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

Интегральная

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

Дифференциальная

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

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

1.3. Настройка контура

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

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

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

Простой метод

Если система должна оставаться в режиме онлайн, один из методов настройки заключается в том, чтобы сначала установить значения И и Д на ноль. Увеличивайте П до тех пор, пока выходной сигнал контура не начнет колебаться. Затем увеличивайте И до тех пор, пока колебания не прекратятся. Наконец, увеличивайте Д до тех пор, пока цикл не будет достаточно быстро достигать уставки. Быстрая настройка контура ПИД-регулятора обычно слегка выходит за пределы диапазона, чтобы быстрее достичь заданного значения; однако некоторые системы не допускают перерегулирования.

Parameter (Параметр) Время нарастания Перерегулирование Время урегулирования Устойчивая ошибка

P

Снижать

Увеличивать

Небольшое изменение

Снижать

I

Снижать

Увеличивать

Увеличивать

Устранять

D

Небольшое изменение

Снижать

Снижать

Небольшое изменение

Эффекты увеличения параметров

Метод Циглера-Николса Другой метод настройки формально известен как

Метод Зиглера-Николса, представленный Джоном Г. Зиглером и Натаниэлем Б. Николсом в 1942 году, сноска: [Зиглер, Дж. Г. и Николс, Н. Б. (1942), Optimum Settings for Automatic Controllers, Transactions of the ASME, link: https ://doi.org/10.1115/1.2899060[DOI 10.1115/1.2899060] и link: https://web.archive.org/web/20170918055307/http://staff.guilan.ac.ir/staff/users/chaibakhsh /fckeditor_repo/file/documents/Optimum%20Settings%20for%20Automatic%20Controllers%20(Ziegler%20and%20Nichols,%201942).pdf[Интернет-архив].]. Все начинается так же, как и метод, описанный ранее: сначала установите усиление И и Д на ноль, а затем увеличьте усиление П и подвергайте контур внешнему вмешательству, например, постукиванию оси двигателя, чтобы заставить его выйти из равновесия по порядку. для определения критического усиления и периода колебаний до тех пор, пока выходной сигнал контура не начнет колебаться. Запишите критический коэффициент усиления (Kc) и период колебаний выходного сигнала (Pc). Затем отрегулируйте коэффициенты П, И и Д, как показано в таблице:

Тип управления P I D

P

.5Kc

PI

.45Kc

Pc/1.2

ПИД

.6Kc

Pc/2

Pc/8

Заключительные шаги

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

1.4. Автоматическая настройка ПИД-регулятора

Начиная с LinuxCNC версии 2.9, компонент pid поддерживает автоматическую настройку с использованием метода Relay
[Åström, Karl Johan and Hägglund, Tore (1984), Automation paper Automatic Tuning of Simple Regulators with Specifications on Phase and Amplitude Margins, DOI 10.1016/0005-1098(84)90014-1]
. Это замена уже удаленного и устаревшего компонента at_pid.

Компонент pid использует несколько констант для расчета выходного значения на основе текущего и желаемого состояния, наиболее важными из которых являются Pgain, Igain, Dgain, bias, FF0, FF1, FF2. и FF3. Все это должно иметь разумное значение, чтобы контроллер вел себя правильно.

Текущая реализация автоматической настройки реализует два разных алгоритма, выбираемых с помощью контакта tune-type. Когда тип настройки равен нулю, он влияет на Pgain, Igain и Dgain, в то время как FF0, FF1 и FF2 устанавливаются в ноль. Если tune-type равен 1, он влияет на Pgain, Igain and FF1, при этом Dgain, FF0 и FF2 устанавливаются в ноль. Примечание тип 1 требует установки масштабирования, чтобы выходные данные были в пользовательских единицах в секунду.

При автонастройке двигателя с tune-type 0 алгоритм будет генерировать прямоугольную волну, центрированную вокруг значения bias на выходном контакте ПИД-контроллера, перемещаясь от положительного экстремума к отрицательному экстремуму выходного диапазона. Это можно увидеть с помощью HAL Scope, предоставленного LinuxCNC. Для контроллера двигателя, принимающего +-10 В в качестве управляющего сигнала, это может на короткое время ускорить двигатель до полной скорости в одном направлении, прежде чем дать ему команду двигаться на полной скорости в противоположном направлении. Убедитесь, что по обе стороны от стартовой позиции достаточно места, и начните с низкого значения tune-effort, чтобы ограничить используемую скорость. Значение tune-effort определяет максимальное используемое значение output, поэтому, если tune-effort равно 1, значение output во время настройки изменится с 1 на -1. Другими словами, крайние точки волновой структуры контролируются контактом tune-effort. Использование слишком большого tune-effort может привести к перегрузке драйвера двигателя.

The number of cycles in the tune pattern is controlled by the tune-cycles pin. Of course, trying to change the direction of a physical object instantly (as in going directly from a positive voltage to the equivalent negative voltage in the motor controller case) do not change velocity instantly, and it take some time for the object to slow down and move in the opposite direction. This result in a more smooth wave form on the position pin, as the axis in question were vibrating back and forth. When the axis reached the target speed in the opposing direction, the auto tuner change direction again. After several of these changes, the average time delay between the "peaks" and "valleys" of this movement graph is used to calculate proposed values for Pgain, Igain and Dgain, and insert them into the HAL model to use by the pid controller. The auto tuned settings are not perfect, but might provide a good starting point for further parameter tuning.

FIXME: The author of these instructions have not tested automatic tuning with tune-type set to 1, so this approach remain to be documented.

Armed with this knowledge, it is time to look at how to do the tuning. Lets say the HAL configuration in question load the PID component for X, Y and Z like this, using named pin names instead of count=3:

loadrt pid names=pid.x,pid.y,pid.z

If the component had used count=3 instead, all use of pid.x, pid,y and pid.z need to be changed to pid.1, pid.2 and pid.3 respectively. To start tuning the X axis, move the axis to the middle of its range, to make sure it do not hit anything when it start moving back and forth. You also want to extend the axis ferror limit (following error) to make LinuxCNC accept the higher position deviation during tuning. The sensible ferror limit depends on the machine and setup, but 1 inch or 20 mm might be useful starting points. Next, set the initial tune-effort to a low number in the output range, for example 1/100 of the maximum output, and slowly increase it to get more accurate tuning values. Assign 1 to the tune-mode value. Note, this will disable the pid controlling part and feed the bias value to the output pin, which can cause a lot of drift. It might be a good idea to tune the motor driver to ensure zero input voltage do not cause any motor rotation, or adjust the bias value for the same effect. Finally, after setting tune-mode, set tune-start to 1 to activate the auto tuning. If all go well, your axis will vibrate and move back and forth for a few seconds and when it is done, new values for Pgain, Igain and Dgain will be active. To test them, change tune-mode back to 0. Note that setting tune-mode back to zero might cause the axis to suddenly jerk as it bring the axis back to its commanded position, which it might have drifted away from during tuning. To summarize, these are the halcmd instructions you need to issue to do automatic tuning:

setp pid.x.tune-effort 0.1
setp pid.x.tune-mode 1
setp pid.x.tune-start 1
# wait for the tuning to complete
setp pid.x.tune-mode 0

A script to help doing the automatic tuning is provided in the LinuxCNC code repository as scripts/run-auto-pid-tuner. This will ensure the machine is powered on and ready to run, home all axes if it is not already done, check that the extra tuning pins are available, move the axis to its mid point, run the auto tuning and re-enable the pid controller when it is done. It can be run several times.