Knowledge base: Warsaw University of Technology

Settings and your account

Back

PID controller library in C ++ language for Arduino platform with the self-tuning procedure

Przemysław Jan Cabaj

Abstract

It is already a common practice to use a cheap and easy to program microcontrollers as a PID controller for unrelated to the industry purposes. The number of libraries converting the Arduino platform into a standard PID controller is huge, but most of them do not provide the possibility of automatic settings selection. That is the reason I decided to write a library implementing the PID controller with the auto-tuning function. In the beginning of the essay I have described the Arduino platform with dedicated Arduino IDE programming environment. I have also reviewed a few of the most popular Arduino models available on the market and then I focused on control systems and PID controllers dynamic properties. In the next two parts I mentioned about anti-saturation filters, popularly used in industrial implementations of regulators and described selecting settings methods based on the boundary of cycle method. To implement a selection settings methods I decided to use a the Ziegler-Nichols method and it’s modification - the Pessen method. In practical part of the essay I wrote a PID controller library with the auto-tuning function in C ++ language. The PID algorithm, responsible for object regulation, was embedded in the main class PID::Process. In order to implement the self-tuning algorithm, the APID class was created in which the method of determining parameters is based on the assumptions of the classic Zieglers-Nichlos experiment. I have tested the correctness of the library's operation on a self-made control system, based on the LED diode and photoresistor. The PID controller results were presented in diagrams generated by the Arduino IDE environment. Basing on the results of these tests, Ziegler-Nichols and Pesen selecting settings methods provides very similar results. The auto-tuning function, in which the algorithm based on the assumptions of the classic Ziegler-Nichols experiment was applied, enabled the autonomous selection of parameters for which the tuned system was obtained.
Diploma type
Engineer's / Bachelor of Science
Diploma type
Engineer's thesis
Author
Przemysław Jan Cabaj (FM) Przemysław Jan Cabaj,, Faculty of Mechatronics (FM)
Title in Polish
Biblioteka C++ regulatora PID dla platformy Arduino z procedurą samostrojenia
Supervisor
Paweł Wnuk (FM/IACR) Paweł Wnuk,, The Institute of Automatic Control and Robotics (FM/IACR)Faculty of Mechatronics (FM)
Certifying unit
Faculty of Mechatronics (FM)
Affiliation unit
The Institute of Automatic Control and Robotics (FM/IACR)
Study subject / specialization
, Automatyka i Robotyka (Automation and Robotics)
Language
(pl) Polish
Status
Finished
Defense Date
16-12-2019
Issue date (year)
2019
Reviewers
Paweł Wnuk (FM/IACR) Paweł Wnuk,, The Institute of Automatic Control and Robotics (FM/IACR)Faculty of Mechatronics (FM) Bartłomiej Fajdek (FM/IACR) Bartłomiej Fajdek,, The Institute of Automatic Control and Robotics (FM/IACR)Faculty of Mechatronics (FM)
Keywords in Polish
Arduino, regulator, PID, autostrojenie, regulacja, biblioteka, C++
Keywords in English
Arduino, regulator, PID, autotuning, controller, library, C++
Abstract in Polish
Zastosowanie tanich i łatwych w programowaniu mikrokontrolerów, jako regulatora PID dla celów niezwiązanych z przemysłem jest już rzeczą powszechną. Ilość bibliotek przekształcających platformę Arduino w standardowy regulator PID jest ogromna, ale większość z nich nie zapewnia możliwości automatycznego doboru nastaw. Stąd zaistniała potrzeba napisania biblioteki implementującej regulator PID z funkcją autostrojenia. Na początku pracy została opisana platforma Arudino wraz z dedykowanym dla niej środowiskiem programistycznym Arduino IDE. Dokonano również przeglądu kilku najpopularniejszych modeli Arduino dostępnych na rynku. Następnie uwagę poświęcono układom regulacji oraz własnościom dynamicznym regulatorów PID. W dalszej części omówione zostały filtry przeciwnasyceniowe, popularnie wykorzystywane w przemysłowych implementacjach regulatorów. Kolejnym krokiem w pracy było przedstawienie metod doboru nastaw opartych na metodzie cyklu granicznego. Do implementacji sposobu doboru nastaw wybrano metodę Zieglera-Nicholsa oraz metodę Pessena, będącą modyfikacją pierwszej. Część projektowo-praktyczna pracy obejmowała napisanie biblioteki regulatora PID w języku C++ z funkcją autostrojenia. Algorytm PID, odpowiedzialny za regulację obiektu, osadzono w metodzie głównej klasy PID::Process. W celu realizacji algorytmu samostrojenia utworzono klasę APID, w której metoda wyznaczania parametrów oparto na założeniach klasycznego eksperymentu Zieglersa-Nichosla. Poprawność działania biblioteki sprawdzono na własnoręcznie zbudowanym układzie do regulacji, opartym na diodzie LED oraz fotorezystorze. Wyniki pracy regulatora PID zostały przedstawione na wykresach wygenerowanych przez środowisko Arduino IDE. Na podstawie wyników, stwierdzono ze zaimplementowane metody doboru nastaw Zieglera-Nicholsa oraz Pesena zapewniają rezultaty bardzo zbliżone do siebie. Funkcja samostrojenia, w której zastosowano algorytm oparty na założeniach klasycznego eksperymentu Zieglera-Nicholsa, umożliwiła autonomiczne dobranie parametrów, dla których uzyskano nastrojony układ.
File
  • File: 1
    Praca_inżynierska_-_Przemysław_Cabaj.pdf
Request a WCAG compliant version
Local fields
Identyfikator pracy APD: 36486

Uniform Resource Identifier
https://repo.pw.edu.pl/info/bachelor/WUT8c3e9e97e2324069aa35afa0bb66c0d8/
URN
urn:pw-repo:WUT8c3e9e97e2324069aa35afa0bb66c0d8

Confirmation
Are you sure?
Report incorrect data on this page