1. PID Контролер

Пропорційно-інтегрально-диференціальний контролер (PID-контролер) є поширеним компонентом контуру зворотного зв’язку в промислових системах управління. Примітка: [Цей підрозділ взято з набагато більш розгорнутої статті, розміщеної за адресою https://en.wikipedia.org/wiki/PID_controller]

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

На відміну від простіших алгоритмів управління, PID-регулятор може коригувати вихідні параметри процесу на основі історії та швидкості зміни сигналу помилки, що забезпечує більш точне та стабільне управління. (Математично можна довести, що PID-контур забезпечить точне та стабільне управління в тих випадках, коли просте пропорційне управління призвело б до стаціонарної помилки або спричинило б коливання процесу).

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

Інтуїтивно, PID-контур намагається автоматизувати те, що зробив би розумний оператор, маючи в своєму розпорядженні вимірювальний прилад і ручку регулювання. Оператор зчитував би показники вимірювального приладу, що відображають вихідні параметри процесу, і за допомогою ручки регулювання коригував би вхідні параметри процесу («дію») доти, доки вихідні параметри процесу не стабілізуються на бажаному рівні, що відображається на вимірювальному приладі.

У старій літературі з питань управління цей процес регулювання називається дією «перезавантаження». Положення стрілки на манометрі є «вимірюванням», «значенням процесу» або «змінною процесу». Бажане значення на манометрі називається «заданим значенням» (також «встановленим значенням»). Різниця між стрілкою манометра і заданим значенням є «похибкою».

Контур керування складається з трьох частин:

  1. Вимірювання датчиком, підключеним до процесу (наприклад, енкодером),

  2. Рішення в елементі контролера,

  3. Дія через вихідний пристрій, такий як двигун.

Коли контролер зчитує дані з датчика, він віднімає це значення від «заданого значення», щоб визначити «похибку». Потім він використовує похибку для обчислення корекції вхідної змінної процесу («дія»), так що ця корекція усуне похибку з вимірювання вихідних даних процесу.

У PID-контурі корекція розраховується на основі помилки трьома способами: безпосереднє скасування поточної помилки (пропорційний), час, протягом якого помилка залишалася невиправленою (інтегральний), та передбачення майбутньої помилки на основі швидкості її зміни з часом (похідний).

PID-регулятор може використовуватися для регулювання будь-якої вимірюваної змінної, на яку можна вплинути шляхом маніпулювання іншою змінною процесу. Наприклад, його можна використовувати для регулювання температури, тиску, швидкості потоку, хімічного складу, швидкості або інших змінних. Круїз-контроль в автомобілях є прикладом процесу поза промисловістю, в якому використовується примітивний PID-регулятор.

Деякі системи управління організовують PID-регулятори в каскади або мережі. Тобто «головний» регулятор генерує сигнали, які використовуються «підлеглими» регуляторами. Типовою ситуацією є управління двигунами: часто потрібно, щоб двигун мав регульовану швидкість, причому «підлеглий» контролер (часто вбудований у привід із змінною частотою) безпосередньо керує швидкістю на основі пропорційного вхідного сигналу. Цей «підлеглий» вхідний сигнал подається з виходу «головного» контролера, який здійснює керування на основі відповідної змінної.

1.2. Теорія

«PID» названо на честь трьох коригувальних обчислень, які додаються до регульованої величини та коригують її. Ці додавання насправді є «відніманнями» похибки, оскільки пропорції зазвичай є від’ємними:

Пропорційний

Для обробки поточного значення помилка множиться на (від’ємну) константу P (від «пропорційна») і додається до (віднімається від) регульованої величини. P дійсна тільки в діапазоні, в якому вихідний сигнал регулятора пропорційний помилці системи. Зверніть увагу, що коли помилка дорівнює нулю, вихідний сигнал пропорційного регулятора дорівнює нулю.

Інтеграл

Щоб вчитися на минулому, похибка інтегрується (сумується) за певний проміжок часу, а потім множиться на (від’ємну) константу I (утворюючи середнє значення) і додається до (віднімається від) регульованої величини. I усереднює виміряну похибку, щоб знайти середню похибку вихідних даних процесу від заданого значення. Проста пропорційна система або коливається, рухаючись вперед і назад навколо заданого значення, оскільки немає нічого, що могло б усунути помилку, коли вона перевищує задане значення, або коливається і/або стабілізується на занадто низькому або занадто високому значенні. Додаючи від’ємну частку (тобто віднімаючи частину) середньої помилки від вхідного значення процесу, середня різниця між вихідним значенням процесу і заданим значенням завжди зменшується. Тому, зрештою, вихідний сигнал добре налагодженого PID-контуру стабілізується на заданому значенні.

Похідна

Для обробки майбутнього значення обчислюється перша похідна (нахил похибки) з часом, яка множиться на іншу (від’ємну) константу D, а також додається до (віднімається від) керованої величини. Похідна величина контролює реакцію на зміну в системі. Чим більша похідна величина, тим швидше контролер реагує на зміни в вихідних даних процесу.

Більш технічно, PID-контур можна охарактеризувати як фільтр, що застосовується до складної системи частотного діапазону. Це корисно для розрахунку того, чи дійсно він досягне стабільного значення. Якщо значення обрані неправильно, вхідний сигнал керованого процесу може коливатися, і вихідний сигнал процесу може ніколи не залишатися на заданому рівні.

1.3. Налаштування петлі

«Налаштування» контуру регулювання — це регулювання його параметрів (коефіцієнт підсилення/пропорційна смуга, інтегральний коефіцієнт підсилення/скидання, похідний коефіцієнт підсилення/швидкість) до оптимальних значень для бажаної реакції системи регулювання. Оптимальна поведінка при зміні процесу або зміні заданого значення залежить від застосування. Деякі процеси не повинні допускати перевищення змінної процесу над заданим значенням. Інші процеси повинні мінімізувати енергію, що витрачається на досягнення нової заданої величини. Як правило, необхідна стабільність реакції, і процес не повинен коливатися для будь-якої комбінації умов процесу та заданих величин.

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

Існує кілька методів налаштування PID-контуру. Вибір методу буде значною мірою залежати від того, чи можна вивести контур з експлуатації для налаштування, а також від швидкості реакції системи. Якщо систему можна вивести з експлуатації, найкращий метод налаштування часто полягає в тому, щоб піддати систему стрибкоподібній зміні вхідного сигналу, виміряти вихідний сигнал як функцію часу і використовувати цю реакцію для визначення параметрів регулювання.

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

Якщо система повинна залишатися в режимі онлайн, одним із методів налаштування є спочатку встановити значення I та D на нуль. Збільшуйте P, поки вихід контуру не почне коливатися. Потім збільшуйте I, поки коливання не припиняться. Нарешті, збільшуйте D, поки контур не досягне прийнятної швидкості для досягнення свого опорного значення. Швидке налаштування контуру PID зазвичай трохи перевищує задане значення, щоб швидше досягти заданої точки; однак деякі системи не можуть прийняти перевищення.

Параметр Час наростання Перевищення Час затвердіння Помилка стаціонарного стану

P

Зменшення

Збільшення

Дрібні зміни

Зменшення

I

Зменшення

Збільшення

Збільшення

Усунути

D

Дрібні зміни

Зменшення

Зменшення

Дрібні зміни

Вплив збільшення параметрів

Метод Циглера-Ніколса Інший метод налаштування офіційно відомий як

«Метод Зіглера-Ніколса», запропонований Джоном Г. Зіглером і Натаніелем Б. Ніколсом у 1942 році. Примітка: [Зіглер, Дж. Г. і Ніколс, Н. Б. (1942), «Оптимальні налаштування для автоматичних контролерів», Transactions of the ASME, посилання: DOI 10.1115/1.2899060 та посилання:https://web.archive.org/web/20170918055307/ Інтернет-архів.]. Починається так само, як і описаний раніше метод: спочатку встановіть коефіцієнти підсилення I і D на нуль, а потім збільште коефіцієнт підсилення P і піддайте контур зовнішньому впливу, наприклад, стукаючи по осі двигуна, щоб вивести його з рівноваги, щоб визначити критичний коефіцієнт підсилення і період коливань, поки вихід контуру не почне коливатися. Запишіть критичне посилення (Kc) і період коливань виходу (Pc). Потім відрегулюйте регулятори P, I і D, як показано в таблиці:

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

P

.5Kc

PI

.45Kc

Pc/1.2

PID

.6Kc

Pc/2

Pc/8

Заключні кроки

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

1.4. Автоматичне налаштування PID-регулятора

Починаючи з версії LinuxCNC 2.9, компонент pid підтримує автоматичне налаштування за допомогою методу реле. Примітка: [Åström, Karl Johan і Hägglund, Tore (1984), «Автоматичне налаштування простих регуляторів із специфікаціями щодо фазових і амплітудних запасів», посилання: DOI 10.1016/0005-1098(84)90014-1]. Це заміна для компонента at_pid, який зараз видалено і який є застарілим.

Компонент pid використовує кілька констант для обчислення вихідного значення на основі поточного та бажаного стану, найважливішими з яких є Pgain', Igain, Dgain, bias, FF0, FF1, FF2 та FF3. Усі вони повинні мати розумне значення, щоб контролер працював належним чином.

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

При автоналагодженні двигуна з типом налаштування 0 алгоритм буде генерувати прямокутну хвилю, центровану навколо значення «зсуву» на вихідному контакті PID-регулятора, рухаючись від позитивного до негативного краю діапазону виходу. Це можна побачити за допомогою HAL Scope, що надається LinuxCNC. Для контролера двигуна, який приймає +-10 В як сигнал управління, це може прискорити двигун до повної швидкості в одному напрямку на короткий період, перш ніж дати йому команду рухатися з повною швидкістю в протилежному напрямку. Переконайтеся, що з обох боків від вихідної позиції є достатньо місця, і почніть з низького значення tune-effort, щоб обмежити використовувану швидкість. Значення tune-effort визначає граничне значення output, яке використовується, тому якщо tune-effort дорівнює 1, значення output під час налаштування буде змінюватися від 1 до -1. Іншими словами, граничні значення хвильового патерну контролюються контактом «tune-effort». Використання занадто високого значення «tune-effort» може призвести до перевантаження драйвера двигуна.

Кількість циклів у патерні налаштування контролюється контактом «tune-cycles». Звичайно, спроба миттєво змінити напрямок фізичного об’єкта (як у випадку переходу від позитивного напруги до еквівалентного негативного напруги в контролері двигуна) не змінює швидкість миттєво, і об’єкту потрібно деякий час, щоб сповільнитися і рухатися в протилежному напрямку. Це призводить до більш плавної форми хвилі на контакті положення, оскільки відповідна вісь вібрувала вперед і назад. Коли вісь досягала цільової швидкості в протилежному напрямку, автотюнер знову змінював напрямок. Після декількох таких змін середня затримка між «піками» і «долинами» цього графіка руху використовується для обчислення запропонованих значень для Pgain, Igain і Dgain і вставляється в модель HAL для використання контролером pid. Автоматично налаштовані параметри не є ідеальними, але можуть стати хорошим відправним пунктом для подальшого налаштування параметрів.

FIXME: Автор цих інструкцій не тестував автоматичне налаштування з типом tune-type, встановленим на 1, тому цей підхід потребує документування.

Озброївшись цими знаннями, можна перейти до розгляду того, як виконати налаштування. Припустимо, що конфігурація HAL завантажує компонент PID для X, Y і Z таким чином, використовуючи імена виводів замість count=3:

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

Якщо компонент використовував count=3, то всі використання pid.x, pid,y та pid.z потрібно змінити відповідно на pid.1, pid.2 та pid.3. Щоб почати налаштування осі X, перемістіть вісь до середини її діапазону, щоб переконатися, що вона ні про що не зачепиться, коли почне рухатися вперед і назад. Також слід розширити межу похибки осі (похибка слідування), щоб LinuxCNC приймав більшу відхилення положення під час налаштування. Розумна межа похибки залежить від машини та налаштувань, але 1 дюйм або 20 мм можуть бути корисними вихідними точками. Далі встановіть початкове значення «tune-effort» на низьке число в діапазоні вихідних значень, наприклад 1/100 від максимального вихідного значення, і повільно збільшуйте його, щоб отримати більш точні значення налаштування. Присвойте значення «tune-mode» 1. Зверніть увагу, що це вимкне частину PID-регулювання і подасть значення «bias» на вихідний контакт, що може спричинити значне відхилення. Може бути доцільним налаштувати драйвер двигуна, щоб забезпечити, що нульова вхідна напруга не спричиняє обертання двигуна, або відрегулювати значення «bias» для досягнення того самого ефекту. Нарешті, після налаштування «tune-mode», встановіть «tune-start» на 1, щоб активувати автоматичне налаштування. Якщо все пройде добре, ваша вісь буде вібрувати і рухатися вперед і назад протягом декількох секунд, а коли це буде зроблено, нові значення для Pgain, Igain і Dgain будуть активними. Щоб перевірити їх, змініть «tune-mode» назад на 0. Зверніть увагу, що повернення «tune-mode» до нуля може спричинити раптове ривкування осі, оскільки вона повертається до заданого положення, від якого вона могла відхилитися під час налаштування. Підсумовуючи, ось інструкції halcmd, які потрібно виконати для автоматичного налаштування:

setp pid.x.tune-effort 0.1
setp pid.x.tune-mode 1
setp pid.x.tune-start 1
# зачекайте завершення налаштування
setp pid.x.tune-mode 0

Скрипт, що допомагає виконати автоматичне налаштування, надається в репозиторії коду LinuxCNC як «scripts/run-auto-pid-tuner». Це забезпечить увімкнення машини та її готовність до роботи, повернення всіх осей у вихідне положення, якщо це ще не зроблено, перевірку наявності додаткових налаштувальних контактів, переміщення осі в її середню точку, виконання автоматичного налаштування та повторне увімкнення pid-регулятора після його завершення. Його можна запускати кілька разів.