Довідка

 Зміст

 Бібліотека блоків
   LAD
    Різне
     ПІД регулятор

Блок PID регулятора






Відеоурок на каналі "Ключ до Ардуїно"



Блок призначений для реалізації функції регулювання PID.


ПІД-регулятор. Принцип роботи



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


Отже, що маємо? По-перше, об'єкт, температуру якого необхідно підтримувати на заданому рівні, крім того цю температуру необхідно регулювати ззовні. По-друге, наш пристрій на базі мікроконтролера, за допомогою якого ми вирішуватимемо поставлене завдання. Крім того, у нас є вимірювач температури (він повідомить контролеру поточну температуру) і якийсь пристрій для управління потужністю нагрівача. Ну і оскільки потрібно якось задавати температуру, підключимо мікроконтролер до ПК.


Таким чином, у нас є вхідні дані – поточна температура та температура, до якої необхідно нагріти/остудити об'єкт, а на виході ми маємо отримати значення потужності, яке необхідно передати на нагріваючий елемент.

І для такого завдання, та й взагалі будь-якого схожого завдання, відмінним рішенням буде використання пропорційно-інтегрально-диференціального регулятора


Пропорційна складова.


Тут все просто, беремо значення потрібної нам температури (уставку) та віднімаємо з нього значення поточної температури. Отримуємо неузгодженість (нев'язку). Помножуємо отриману нев'язку на коефіцієнт і отримуємо значення потужності, яке передаємо на нагрівач. Ось і все) Але при використанні тільки пропорційної складової є два великі мінуси – по-перше, ефект від нашої дії настає не миттєво, а із запізненням, і, по-друге, пропорційна складова не враховує вплив довкілля на об'єкт. Наприклад, коли ми домоглися того, щоб температури об'єкта дорівнювала потрібному нам значенню, нев'язка стала дорівнює нулю, а разом з нею і потужність, що видається, стала нульовою. Але температура не може просто залишатися постійною, оскільки відбувається теплообмін з навколишнім середовищем і об'єкт охолоджується. Таким чином, при використанні тільки пропорційної складової температура коливатиметься біля потрібного нам значення.


Давайте розбиратися, як ПІД-регулятор вирішує дві виявлені проблеми.


Диференційна складова


Для вирішення першої використовується диференційна складова. Вона протидіє ймовірним відхиленням регульованої величини, які можуть статися у майбутньому. Яким чином? Зараз розберемося!

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


Інтегральна складова


А з нею нам допоможе впоратися інтегральна складова. Як нам у програмі отримати інтеграл? А легко – просто підсумовуванням (накопиченням) значень нев'язки, на те він і інтеграл) Повертаємось до нашого прикладу. Температура нижче за значення уставки, починаємо підігрівати. Поки ми нагріваємо, значення нев'язки є позитивним і накопичується в інтегральній складовій. Коли температура “дійшла” потрібного нам значення, пропорційна і диференціальна складова стали рівні нулю, а інтегральна перестала змінюватися, та її значення рівним нулю. Таким чином, завдяки накопиченому інтегралу, ми продовжуємо видавати потужність і нагрівач підтримує потрібну нам температуру, не даючи об'єкту охолоджуватися. Ось так просто і ефективно =)

У результаті ми отримуємо таку формулу ПІД-регулятора:




Тут u(t) – шуканий вихідний вплив, а e(t) – значення нев'язки.

Часто формулу перетворюють на такий вигляд, але суть від цього не змінюється:




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

Найчастіше використовується методом налаштування коефіцієнтів є метод Циглера-Нікольса. Полягає він у наступному...


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


Для початку обнулюємо всі коефіцієнти регулятора (пропорційний, інтегральний та диференціальний)

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

Фіксуємо коефіцієнт K, у якому це сталося. Крім того, вимірюємо період коливань системи T.


Власне, у цьому практична частина методу закінчується ) З отриманого коефіцієнта K розраховуємо пропорційний коефіцієнт ПІД-регулятора:




А з нього отримуємо й решту:




Метод досить простий, але застосувати його можна не завжди. Якщо чесно, мені ще жодного разу не доводилося налаштовувати регулятор таким чином Проте, цей метод є основним і, за великим рахунком, єдиним широко відомим. Просто підходить не всім і не завжди.

Що ж робити, якщо метод Циглера-Нікольса не спрацював? Тут прийде на допомогу "аналітичний" спосіб налаштування =)

Знову ж таки обнуляємо всі коефіцієнти і починаємо збільшувати пропорційний. Але тепер не чекаємо появи коливань, а просто фіксуємо поведінку системи для кожного значення коефіцієнта (відмінним варіантом буде побудова графіка величини, яку необхідно стабілізувати, для кожного значення коефіцієнта). Якщо бачимо, що, наприклад, система дуже повільно виходить на потрібне значення, то збільшуємо пропорційний коефіцієнт. Чи система починає сильно коливатися щодо потрібної величини? Значить, коефіцієнт занадто великий, зменшуємо та переходимо до настроювання інших складових.

Розуміючи, як працює ПІД-регулятор в цілому, і уявляючи, як повинна працювати система, що настроюється, можна досить-таки швидко і точно налаштувати коефіцієнти регулятора. Особливо якщо є можливість побудувати графічні залежності і візуально стежити за поведінкою системи.

Ось деякі правила, які можуть допомогти при налаштуванні:


Збільшення пропорційного коефіцієнта призводить до збільшення швидкодії, але зниження стійкості системи

Збільшення диференціальної складової також призводить до значного збільшення швидкодії

Диференціальна складова покликана усунути загасаючілебання, що виникають при використанні тільки пропорційної складової

Інтегральна складова повинна усувати залишкову неузгодженість системи при налаштованих пропорційній та диференціальній складових


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


Джерело


Параметри регулятора задаються у налаштуваннях блоку




“Вхід En” – При встановленні цього чек боксу у блоку створюється вхід “En”. За наявності на цьому вході високого логічного рівня блок працює у нормальному режимі, за відсутності – на виході блоку значення, що відповідає поданому на вхід “SDV”.


Напрямок регулювання


“Пряме регулювання” – при виборі цього режиму реалізується режим, при якому якщо значення параметра більше уставки – відбувається зменшення сигналу на виході, а якщо значення параметра менше сигналу - Збільшення сигналу на виході. Найчастіше застосування – регулювання температури під час нагрівання – управління нагрівачем.

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

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


Параметри.


При виборі пункту Вхід у блоку сформуються входи:

“Time” – цей вхід подається час регулювання (у мілісекундах).
"Кр" - пропорційний коефіцієнт.
"Ki" - інтегральний коефіцієнт.
"Kd" - Диференціальний коефіцієнт.

При виборі пункту “Константи” наведені вище параметри задаються у вигляді констант.


Вихід - "Аналогове управління"


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

"Від:" - значення на виході при 0% регулювання.
"До" - значення на виході при 100% регулювання.


Вихід - "Релейне управління"


При виборі цього режиму вихід блоку має боолево тип і на ньому реалізується "Довгий ШИМ". У налаштуваннях вихідного значення в цьому випадку визначається:

"Від:" - тривалість імпульсу при 0% регулювання в мілісекундах.
"До" - Загальна тривалість періоду ШІМ в мілісекундах.





9

Автор публікації

Офлайн 1 тиждень

Сергей Глушенко

782
Коментарі: 15Публікації: 391Реєстрація: 04-02-2018

54 коментарі до “Довідка”

  1. ошибка в описании блока “Блок обнаружения изменения числа”

    “Блок служит для обнаружения изменения числа подаваемого на вход “EN” . При изменении значении на выходе”Q” формируется импульс длительностью в один цикл программы. Для блока возможно задание зоны нечувствительности раздельно для каждого направления изменения числа. Эти параметры задаются в редакторе блока.”

    вместо первого “EN”  должно быть  “Value”

    0
  2. что то не так с массивами.
    скетч использовал данные из той же строки другого массива.  менял названия (ставил не совпадающие цифры), удалял/ ставил блоки – (не копировал а притаскивал новый), проверял / менял настройки. есть 3 разных массива. заполненных.  но берёт почему то  из одного … созданного первым.
    костыль  – использование не повторяющихся номеров строк (индексов) .  (помогает)
    ардуино uno. версия FLP- актуал.

    0
  3. Здравствуйте ! Спасибо огромное всем кто внес свой вклад в этот проект! Программа сделана интуитивно понятно и за месяц я дошел до коммуникаций но с протоколом Modbus остановился на ошибке 244 . Scada мастер, Uno слейв  соединены через Max485. Задача кнопкой на Scada включать диод на Uno и на оборот. Подскажите пожалуйста возможные решения этой проблемы и еще в каких случаях назначать пин pe-de ?

    С уважением Влад!

    0
  4. Добрый день!

    В справке по блоку SVCM (отправка переменной через коммуникации) показаны активными два устройства: Arduino Ethernet Wiznet 5100  и ESP8266 WiFi Module. В версии программы 4.3.4 можно выбрать только Arduino Ethernet Wiznet 5100.

    В обновлении 6.3.1 ESP8266 WiFi Module также недоступен для выбора.

    Подскажите пожалуйста, может нужно что-то доустановить или настроить?

    3
  5. Добрый день.

    Параметр “Time” – на этот вход подаётся время регулирования (в миллисекундах).” – так и не смог понять на что именно он влияет… Можно где то узнать что это за параметр?

    0
  6. Добрый день! Мне требуется отправка по UART данных для MIDI протокола. Нашёл на просторах интернета готовый скетч, там отправка происходит вот таким образом


    1. void noteOn(int chan, int note, int velocity) {
          Serial.write( (0x90 | chan) );
          Serial.write(note);
          Serial.write(velocity);
      }

    2. Всю голову сломал как сделать это в данной программе, ничего не получается. Подскажите плиз какие есть варианты.
    3. получается там из массива подставляются переменные и пакетом отсылаются на порт
    4. вообщем вот от сюда брал скетч http://forum.amperka.ru/threads/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5-%D0%B1%D0%B0%D1%80%D0%B0%D0%B1%D0%B0%D0%BD%D1%8B-%D0%BD%D0%B0-arduino-%D0%BA%D1%80%D0%B8%D0%B2%D1%8B%D0%BC%D0%B8-%D1%80%D1%83%D0%BA%D0%B0%D0%BC%D0%B8.15477/
    0
  7. Вопрос: плата Arduino Nano strong (т.е. плата и шилд сразу) при использовании блока матричная клавиатура подключение 2 пин основной 3,4,5,6,7 уже исполняющие
    так вот при такой раскладке после прошивки на 4 пине появляется сигнал и ничего с этим не сделать если-же подключать так-же с 8 по 13 то на 10 он наоборот пропадает и ничем его не получить.
    Flprog стоит 5.3.0 для 64 виндовс, это можно как-то решить т.к. проект готов и затык только в этом (не резать-же шлейф да сейчас такие шлейфы что :)))   )
    спасибо

    0
  8. Вопрос: плата Arduino Nano strong (т.е. плата и шилд сразу) при подключении 2 пин основной 3,4,5,6,7 уже исполняющие
    так вот при такой раскладке после прошивки на 4 пине появляется сигнал и ничего с этим не сделать если-же подключать так-же с 8 по 13 то на 10 он наоборот пропадает и ничем его не получить.
    Flprog стоит 5.3.0 для 64 виндовс, это можно как-то решить т.к. проект готов и затык только в этом (не резать-же шлейф да сейчас такие шлейфы что :)))   )
    спасибо

    0
  9. Приветствую! Подскажите пожалуйста, какова длина/(время) импульса на выходе блока “Установка события по часам реального времени” и минимальная длина/(время) импульса на входе для срабатывания блоков типа “Триггер”? Плата, Arduino UNO.  (Осциллографа нет, а монитором COM порта эти величины с нужной точностью замерять затруднительно.) Или существует формула для этих расчетов?

    0
  10. xatabmail250986

    Здравствуйте, у меня такой вопрос, я хочу запрограммировать Ардуинку на определенный алгоритм вращения шагового двигателя. У меня есть шаговик Nema23 и Драйвер DM556. Я столкнулся с проблемой: В вашей программе для управления шаговиком используется 4 вывода а у меня от драйвера на Ардуино только 2

     2019-11-10 12:23:12

    Аватар

    xatabmail250986

    (PUL, DIR) и земля. Подскажите как я могу реализовать мое подключение с вашей программой?

    0
  11. Здравствуйте уважаемый Сергей Глушенко.

    У меня такой вопрос.

    Есть ли способ понизить скорость мне случайных чисел в данном блоке, как например в блоке “Generator”, с функцией “Несимметричный мультивибратор”…? А то данный блок “RANDOM”, меняет случайные числа с бешеной скоростью, из-за чего на дисплее не успеваешь разглядеть эти числа…

    0
  12. Здравствуйте, Сергей!

    Прежде всего хочу поблагодарить Вас за прекрасную программу. Мне, как в пошлом,инженеру, очень комфортно создавать свой проект в Вашей среде.

    Но у меня вопрос, на который не нашел ответа: Я создаю проект с участием нескольких контроллеров ESP8266 NodeMCU с OLED дисплеем. Очень не хватает такого модуля и модуля ESP32 WiFi LoRa с OLED дисплеем в предустановке.Мои контроллеры должны выполнять некоторые действия, и обмениваться между собой данными и информацией по WiFi в реальном времени. Причем, радиус действия  WIFI сети каждого из модулей не должен влиять на передачу данных между конечными контроллерами. Поэтому контроллеры самонастраиваются, и записывают данные для входа всех контроллеров WIFI сети в память для постоянного коннекта по цепи (от начального до конечного).  Вопрос: Можно ли в Вашей среде создать подобный алгоритм взаимодействия между контроллерами сети?

    С уважением, Аркадий

    0
  13. Здравствуйте! Не могу понять в чём причина. В счётчике на уменьшение, при подключении переменных к входу R и выходу <L он не считает вниз, а если убрать с R то счёт идёт но, не совсем правильно(на ноль не сбрасывается). Подскажите, в чём может быть причина?

     

    0
  14. Здравствуйте, На сериал порт приходит сообщение 18 байт, мне нужно использовать несколько байт из него. Какой функцией выделить (извлечь) например 5-й байт? Или присвоить переменной значение 5-го байта из сообщения? Спасибо.

    0
  15. Здравствуйте.

    Скажите как сделать так что бы при достижении времени установленного в настройках блока на выходе установится высокий уровень не на 1 минуту, а до времени отключения будильник?

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

    0
  16. Здравствуйте!

    В FLProg есть блок MCP23017.

    Но ка только в «FLProg» начинает компилировать в «IDE» программа ругается и пишет, что нужны библиотеки MCP23x17.h и MCP23017.h.  Без этой библиотеки блок не рабочий.

    Где их можно скачать?

    0
  17. Здравствуйте.  Не могу запустить версию 5.00

    —————————

    flp.exe – Системная ошибка

    —————————

    Запуск программы невозможен, так как на компьютере отсутствует api-ms-win-crt-runtime-l1-1-0.dll. Попробуйте переустановить программу.

    —————————

    ОК

    —————————

    Что делать.

    1
  18. Доброго времени суток! Скажите пожалуйста, какова максимальная частота счета для этого счетчика? При превышении какой частоты счета, следует выбирать “Скоростной счетчик”? Заранее спасибо.

    0

Залишити коментар

Войти с помощью: