Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Cyfrowy regulator PID dla początkujących

Tatalek 18 May 2020 21:14 9300 8
Nazwa.pl
  • Chciałbym przedstawić jeden z możliwych sposobów wykonania cyfrowego regulatora PID Przestawiony regulator nie ma konkretnego zastosowania , to do czego zostanie wykorzystany zależy od czytelnika. Opis regulatora kieruję do osób które zaczynają przygodę z automatyką i układami regulacji. Spróbowałem wyjaśnić jak działa cyfrowy regulator PID, czemu ich używamy, do czego służą współczynniki równania regulatora KA, KB, KC , oraz jak zmiana tych współczynników wpływa na sygnał wyjściowy oraz jakie są ograniczenia tego regulatora. Przykłady działania zostały zaprezentowane na regulatorze PID zbudowanym na mikro-kontrolerze Microchip z rodziny dsPIC 33. Widok regulatora na poniższym zdjęciu
    Cyfrowy regulator PID dla początkujących
    Zbudowałem regulator ponieważ nie udało mi się w sieci znaleźć „gotowca” i podczas szukania znalazłem ciekawą i prostą funkcje w kompilatorze XC16. Kiedy go już zbudowałem postanowiłem zweryfikować czy prawidłowo działa o czym napisałem w dalszej części postu do którego przeczytania zachęcam.


    Przedstawię przygotowane w środowisku MPLABX trzy projekty programów w których umieściłem opisany regulator PID.
    1. Reg_PID_Nastawy_Elektroda.X – projekt służy do weryfikacji nastaw regulatora PID oraz obserwacji jak zmienia się sygnał wyjściowy dla różnych współczynników Kp,Ki,Kd z otwartą pętlą sprzężenia zwrotnego.

    2. Reg_temp_PID_obiekt_inercja_Elektroda.X Regulacja napięcia (temperatury) na obiekcie inercyjnym, pozwala obserwować jak przebiega proces regulacji przy zmianie nastaw regulatora, czy się wydłuża, skraca, wpada w oscylacje.

    3. Reg_temp_PID_v1_DS18_Elektroda.X chłodziarko grzałka – z czujnikiem temperatury ds18b28 żeby wykorzystać komplementarny przebieg PWM

    W większości przypadków kiedy sterujemy obiektem ( np. piecem ) chcemy utrzymać na zadanym poziomie jakąś wielkość fizyczną, w przypadku pieca będzie to temperatura. Żeby w piecu wzrosła temperatura należy dostarczyć energii . Rozpoczynając regulację dostarczamy energii do pieca i liczymy na to że temperatura w piecu zacznie od razu wzrastać. W praktyce tak się nie dzieję. Zanim zacznie wzrastać temperatura w piecu minie jakiś okres czasu. Długość tego opóźnienia zależy od elementów uczestniczących w procesie regulacji , zaczynając od grzałek przez obudowę pieca aż do czujnika temperatury. Okazuje się że im dłuższe opóźnienie w stosunku do stałej czasowej pieca tym trudniej regulować temperaturę . Żeby się o tym przekonać można przeprowadzić proste doświadczenie polegające na połączeniu na płytce stykowej prostego układ złożonego z rezystorów , kondensatorów i potencjometru jak na poniższym schemacie
    Cyfrowy regulator PID dla początkujących
    Następnie podłączyć do potencjometru zasilanie np. 5 V i mierząc napięcie na ostatnim kondensatorze kręcić gałką potencjometru tak żeby ustawić 1,000 V. Okazuje się że to zadanie nie jest łatwe i zabiera trochę czasu.
    W przypadku gdy chciałem wyręczyć się prostym regulatorem dwustanowym przedstawionym na poniższym rysunku.
    Cyfrowy regulator PID dla początkujących
    otrzymałem poniższy przebieg
    Cyfrowy regulator PID dla początkujących
    Widać na nim oscylacje wokół wartości odniesienia (czarny wykres) – można powiedzieć ze regulator dwustanowy (czerwony wykres) nie poradził sobie z zadaniem.
    Przeprowadziłem również próbę używając do regulacji napięcia regulatora proporcjonalnego – czyli zwykłego wzmacniacza którego schemat przedstawiłem poniżej.
    Cyfrowy regulator PID dla początkujących
    Uzyskany przebieg regulacji dla wzmacniacza o wzmocnieniu 10 który wygląda obiecująco.Znacznie lepiej niż ten z regulatorem dwustanowym, brak oscylacji i ustalona wartość napięcia . Można by powiedzieć że wzmacniacz przeszedł test pozytywnie i nie ma powodu stosować regulatora PID.
    Cyfrowy regulator PID dla początkujących
    Jednak po rozciągnięciu osi napięcia w okolicy 2,5 V widać że wartość ustalona napięcia na poniższym rysunku nie osiągnęła wartości zadanej 2,500 V, pozostał niewielki uchyb. Ten uchyb to różnica pomiędzy wartością zadaną a tą którą udało się osiągnąć. Ten uchyb to wada wzmacniacza (regulatora proporcjonalnego)
    Cyfrowy regulator PID dla początkujących
    Żeby zmniejszyć uchyb zwiększyłem wzmocnienie wzmacniacza do 20. Okazuje się ze zwiększanie wzmocnienia doprowadziło do oscylacji które widać na zdjęciu
    Cyfrowy regulator PID dla początkujących
    Z tych powodów w wymagających procesach regulacji stosuje się regulatory PID które między innymi sprowadzają uchyb do zera. Za doprowadzenie uchybu do zera odpowiedzialny jest człon całkujący regulatora PID. Odbywa się to w następujący sposób: regulator zwiększa lub zmniejsza swój sygnał wyjściowy w tym kierunku aby osiągnąć uchyb równy zero. Jeżeli uchyb jest duży regulator zmienia sygnał wyjściowy szybko , jeżeli uchyb jest niewielki, powoli. Jeżeli nie ma uchybu (jest równy zero) nie robi nic zamraża sygnał wyjściowy na obecnym poziomie (utrzymuje wartość wyjściową taką jak jest dla uchybu = 0). Rozważę przypadek w którym nagle pojawia się uchyb e(t) = 0,01. Zakładam ze wzmocnienie całkowania ki jest równe 0,1. To na wyjściu regulatora z członem całkującym w pierwszym kroku sygnał wyjściowy będzie równy 0 + e(t)x0,1 po podstawieniu danych 0+ 0,01x0,1 = 0,001 , w drugim kroku wartością początkową nie będzie 0 tylko wcześniej obliczona wartość wyjściowa regulatora 0,001 i wówczas nowy sygnał wyjściowy wyniesie 0,001 +0,01x0,1 = 0,002 w kolejnym kroku 0,003 i jeśli uchyb się nie zmieni , to sygnał wyjściowy regulatora będzie narastał dopóki wartość wyjściowa regulatora dojdzie do maksymalnej możliwej wartości np. 1 . Taka czynność nazywa się całkowaniem czyli sumowaniem. Jeśli w procesie regulacji występuje uchyb różny od zera to człon całkujący regulatora będzie zawsze zwiększał lub zmniejszał sygnał wyjściowy regulatora w celu doprowadzenia uchybu do zera , ten człon liczy (całkuje) zawsze gdy występuje uchyb , nie pracuje tylko wtedy gdy uchyb jest równy zero.
    Człon różniczkujący działa tylko wtedy gdy wartość uchybu się zmienia nie działa gdy wartość uchybu jest stała. Zadaniem członu różniczkującego jest zwiększenie lub zmniejszenie sygnału wyjściowego w momencie zmiany uchybu, takie doładowanie , żeby przez jakiś czas wzmocnić lub osłabić sygnał wyjściowy regulatora w zależności od znaku uchybu oraz szybkości jego zmian.

    Prawdopodobnie każdy kto interesował się regulatorem PID wie że składa się z trzech członów: proporcjonalnego , całkującego i różniczkującego, oraz wiele razy widział poniższe równanie opisujące jak jest obliczany sygnał wyjściowy regulatora oraz schemat blokowy regulatora PID o działaniu ciągłym.
    Cyfrowy regulator PID dla początkujących
    Cyfrowy regulator PID dla początkujących

    W cyfrowym regulatorze PID który zostanie przedstawiony do obliczenia sygnału wyjściowego regulatora PID wykorzystano tzw. algorytm przyrostowy , dostępny w bibliotece DSP dostarczonej z kompilatorem XC16 opisany zależnością
    Cyfrowy regulator PID dla początkujących
    i schemacie blokowym
    Cyfrowy regulator PID dla początkujących
    Schematy blokowe regulatorów PID z rys. 1 i 2 różnią się tym że w regulatorze analogowym sygnał uchybu jest najpierw doprowadzony do członu wzmocnienia Kp , wzmocniony ,następnie doprowadzony do członów całkujących i różniczkujących, natomiast w regulatorze cyfrowym uchyb bez wzmocnienia przychodzi do poszczególnych członów regulatora.
    Dzięki dostępnej w bibliotece DSP funkcji do uruchomienia cyfrowego regulatora PID wystarczy w pętli głównej programu poza zdefiniowaniem i zainicjowaniem struktury danych napisać jedną linijkę kodu: PID(&fooPID); i gotowe.
    Code: c
    Log in, to see the code

    Więcej szczegóły jak wywołać funkcję regulatora PID i jaki sposób wprowadzać do niego dane znajdują się w nocie CE019_PID , w komentarzach programu ,i dokumencie „16-bit language tools libraries - Microchip Technology”.

    Cyfrowy regulator PID działa w następujący sposób: w stałych odstępach czasu mierzy i zapamiętuje wartość uchybu e(n), ten pomiar nazywamy próbkowaniem. Przedział czasowy pomiędzy kolejnymi pomiarami nazywamy okresem próbkowania „T”. Uchyb e(n) jest to różnica pomiędzy wartością zadaną np. temperaturą do której chcemy żeby nagrzał się przedmiot a rzeczywistą wartością temperatury przedmiotu w danej chwili. Litera „n” oznacza kolejną próbkę (kolejny pomiar).
    Regulator żeby wykonać całkowanie i różniczkowanie sygnału wejściowego którym jest uchyb e(n) oraz obliczyć nową wartość sygnału na wyjściu regulatora u(n) potrzebuje trzech kolejnych próbek uchybu e(n), e(n-1), e(n-2) oraz poprzednio obliczoną wartość sygnału wyjściowego u(n-1). Następnie Regulator dodaje do siebie pomnożone przez współczynniki KA , KB , KC wartości uchybu kolejnych próbek e(n) oraz sygnału wyjściowego u(n-1) obliczonego podczas poprzedniego próbkowania. Na podstawie zebranych trzech próbek uchybu e i próbki sygnału wyjściowego u obliczany jest nowy bieżący sygnał wyjściowy regulatora u(n). Poniższy rysunek przedstawia przykładowy przebieg sygnału wejściowego e(n) i wyjściowego regulatora u(n) oraz zaznaczone chwile próbkowania i okres próbkowania.
    Cyfrowy regulator PID dla początkujących

    KA , KB , KC to współczynniki zawierające informacje o wzmocnieniu , całkowaniu i różniczkowaniu.
    u(n) – bieżąca wartość sygnału wyjściowego regulatora PID.
    e(n) – bieżący uchyb (różnica pomiędzy wartością zadaną a rzeczywistą zmierzoną).
    u(n-1) – wartość sygnału wyjściowego regulatora PID obliczona jedną próbkę wcześniej.
    e(n-1) – uchyb obliczony jedną próbkę wcześniej
    e(n-2) – uchyb obliczony dwie próbki wcześniej.
    Po wpisaniu w miejsce współczynników KA , KB , KC informacji o wzmocnieniu ,całkowaniu , różniczkowaniu i okresie próbkowania algorytm regulatora wygląda w następujący sposób:
    Cyfrowy regulator PID dla początkujących

    Na podstawie równia (3) można napisać równania definiujące współczynniki KA , KB , KC.
    KA = Kp + Ki + Kd
    KB = -(Kp + 2*Kd) (6)
    KC = Kd.
    Uwaga: należy pamiętać żeby dobierać współczynniki KA , KB , KC w taki sposób aby zawierały się w przedziale od -1 do 1. Jest to jedno z ograniczeń tego regulatora

    Poniżej przedstawiłem schemat blokowy cyfrowego regulatora PID z nazwami danych
    Do struktury wprowadzamy następujące dane:
    PIDCoeffCalc - ta funkcja oczekuje od nas wpisania nastaw regulatora w postaci kp ki,kd następnie oblicza współczynniki równania KA , KB , KC
    measuredOutput – zmierzona przez przetwornic ADC wartość regulowanej wielkości np. temperatury
    controlReference – zadana (ustawiona) wartość wielkości regulowanej
    ze struktury otrzymujemy:
    controlOutput – sygnał wyjściowy regulatora PID.

    Szczegółowy opis działania funkcji PID(&fooPID) można znaleźć na stronie:
    http://microchipdeveloper.com/pwr3201:pid-basics
    Cyfrowy regulator PID dla początkujących
    Program regulatora PID został napisany w języku C. Obliczenia w funkcji regulatora PID wykonywane są na danych typu fractional Q15. Ten format ma zalety i ograniczania. Do zalet należy szybkość wykonywania obliczeń. Wywołanie funkcji i obliczenie sygnału wyjściowego regulatora zajmuje 30 cykli zegarowych. W naszym przypadku dla mikrokontrolera pracującego z częstotliwością zegara 40 MHz ten czas wyniesie 0,75 µs. Ograniczeniem jest zakres liczbowy od -1 do około 1 a dokładnie do (0.999969482422) w którym muszą się znaleźć wszystkie liczby w formacie fractional Q15.
    Nazwa formatu danych fractional może trochę straszyć , dlatego w tabeli przedstawiono różnice pomiędzy zwykłą liczbą integer (całkowitą ) a fractional (ułamkowy).
    Więcej informacji można znaleźć http://microchipdeveloper.com/dsp0201:numerical-formats
    Cyfrowy regulator PID dla początkujących

    W Regulatorze PID ustawiamy następujące parametry:
    wzmocnienie Kp, stałą czasową całkowania Ti i stałą czasową różniczkowania Td.
    Zmiany tych nastaw dokonuje się przez zmianę wartości kp, ki, kd które zostały opisane w równaniu (4),(5).
    Poniżej przedstawiono schemat regulatora w załącznikach umieściłem schemat z płytką drukowaną wykonanymi w programie Kicad.
    Cyfrowy regulator PID dla początkujących
    Cyfrowy regulator PID dla początkujących

    W eksperymencie regulator pracuje z otwartą pętlą sprzężenia zwrotnego. (Płytka regulatora jest zasilona i podłączona do portu USB komputera przez konwerter FTDI232). Oznacz to że sygnał wyjściowy z regulatora nie zmienia uchybu , nie jest odczytywana i wprowadzana do struktury danych wartość wielkości regulowanej , w ten sposób uchyb pozostaje stały i można obserwować jak działają człony regulatora. Taką sytuacje uzyskano wpisując w strukturze danych stałe wartości controlReference = 0.0 measuredOutput 0.2 daje to stały uchyb e=0,2. Schemat blokowy układu regulacji z zamkniętą (górny) i otwartą pętlą (dolny )sprzężenia zwrotnego
    Cyfrowy regulator PID dla początkujących

    Pierwsze sprawdzenie dotyczy działania członu proporcjonalnego. W tym celu należy uruchomić projekt o nazwie Reg_PID_Nastawy_Elektroda i w pliku PID_main.c w miejscu inicjowania struktury proponuję wpisać wartości: kp= 0.5 , ki=0.0 , kd=0.0 zaprogramować mikrokontroler , nacisnąć reset i dane z wartością sygnału wyjściowego regulatora będą wysyłane przez łącze szeregowe usb do komputera.

    Code: c
    Log in, to see the code

    Cyfrowy regulator PID dla początkujących
    Do odbioru danych użyłem programu Terminal V1.6 następnie wkleiłem dane do arkusza kalkulacyjnego. Dla nastaw (kp= 0.5 , ki=0.0 , kd=0.0) na rys. 21 przedstawiono sygnał wyjściowy regulatora oznaczony literą P , jest to pozioma linia o wartości 0,1 .
    Pozostałe wykresy z tego rysunku oznaczone PI, PI-slow, PI-fast uzyskano przy nastawach :
    PI –(kp=0.5 ki=0,1 kd =0,0) , PI-slow – ( kp=0.5 ki=0,05 kd =0,0) ,
    PI-fast –( kp=0.5 ki=0,2 kd =0,0). Obserwując i porównując uzyskane sygnały wyjściowe regulatora PI widać że zwiększając wartość ki skracamy czas całkowania Ti (szybciej zmienia się sygnał na wyjściu regulatora PI-fast), zmniejszając ki wydłużamy czas całkowania Ti (wolniej zmienia się sygnał na wyjściu regulatora PI-slow) . Wykres PI-fast osiągnął maksymalną wartość równą 1 po 22 próbkach , wykres PI-slow po 90 próbkach. Oznacza to że jeśli chcemy żeby regulator działał „szybciej” wpisujemy większą wartość ki .Mając do dyspozycji wykresy i korzystając z definicji czasu całkowania można zweryfikować czas całkowania dla nastaw regulatora.
    Cyfrowy regulator PID dla początkujących

    Definicja czasu całkowania inaczej nazywania czasem zdwojenia: „jest to czas potrzebny na to aby sygnał składowej całkowej będący wynikiem działania całkującego stał się równy
    sygnałowi będącemu wynikiem działania proporcjonalnego „ i została przedstawiona na poniższym rysunku
    Cyfrowy regulator PID dla początkujących
    Cyfrowy regulator PID dla początkujących
    Dla wykresu oznaczonego PI czas zdwojenia Ti= 0,5/0,1×T , zależy od okresu próbkowania oraz stosunku kp do ki . W przedstawionym powyżej przypadku dla okresu próbkowania T = 0,5 s otrzymujemy czas zdwojenia Ti = 2,5 sekundy . Z wykresu można odczytać że zdwojenie występuję przy piątej próbce co potwierdza czas zdwojenia obliczony ze wzoru.
    Na czas całkowania mają wpływ trzy parametry:
    okres próbkowania T, wzmocnienie kp oraz współczynnik ki , oznacza to że zmieniając wzmocnienie zmieniamy również czas zdwojenia chociaż nie zamierzaliśmy tego robić.

    Żeby sprawdzić i pokazać działanie członu różniczkującego należy na wejście regulatora podać sygnał uchybu narastający liniowo. Czas różniczkowania lub inna nazwa wyprzedzenia definiuje się w następujący sposób : „czas wyprzedzenia jest to czas po którym sygnał wyjściowy z regulatora , związany z działaniem proporcjonalnym zrówna się z sygnałem pochodzącym od działania różniczkowego. Czas zdwojenia Td wyznaczany jest jako odpowiedź na zmienny w czasie uchyb regulacji e(t)”.
    Graficzna definicja czasu wyprzedzenia został przedstawiona na rysunku
    Cyfrowy regulator PID dla początkujących
    Cyfrowy regulator PID dla początkujących
    Weryfikację nastaw regulatora PD wykonano przy następujących warunkach:
    w projekcie Reg_PID_nastawy usunięto komentarz aby uzyskać liniowo narastający uchyb e, wpisano fooPID.controlReference = 0 fooPID.measuredOutput = 0 oraz wpisano nowe wartości do Kp,Ki,Kd
    Code: c
    Log in, to see the code

    uzyskane wyniki dla różnych kd przedstawiono na wykresie
    kd-0 dla Kp=0.1 Ki=0,0 Kd =0,0 liniowo narastający sygnał uchybu
    kd-0,1 dla Kp=0.1 Ki=0,0 Kd =0,1 dla tych nastaw Td = 0,5 s przy T = 0,5 s
    kd-0,2 dla Kp=0.1 Ki=0,0 Kd =0,2 dla tych nastaw Td = 1,0 s przy T = 0,5 s
    kd-0,3 dla Kp=0.1 Ki=0,0 Kd =0,3 dla tych nastaw Td = 1,5 s przy T = 0,5 s
    kd-0,4 dla Kp=0.1 Ki=0,0 Kd =0,4 dla tych nastaw Td = 2,0 s przy T = 0,5 s
    Cyfrowy regulator PID dla początkujących
    Uzyskane wyniki obliczone z zależności (5)pokrywają się z odczytanymi z wykresu. Zwiększając współczynnik kd zwiększamy czas różniczkowania, odwrotnie jak to ma
    miejsce w przypadku całkowania gdzie zwiększanie ki skraca czas całkowania.
    Na kolejnym rysunku przedstawiono odpowiedź regulatora PD dla zakłócenia w postaci skoku jednostkowego. W tym w celu wyłączono liniowo narastający uchybu wstawiając znaki komentarza w liniach programu Reg_PID_nastawy_Elektroda i ustawianąc następujące parametry controlReference = 0.0 measuredOutput 0.2 .
    Cyfrowy regulator PID dla początkujących
    Z wykresu wynika że przy stałym uchybie (nie zmieniającym się ) człon różniczkujący nie działa , działanie widoczne jest tylko na początku kiedy regulator po raz pierwszy próbkuje i uzyskuje różnice uchybu 0,2 pomiędzy poprzednią a kolejną próbką. W kolejnych próbkach różnica uchybu pomiędzy kolejnymi próbkami wynosi 0, człon różniczkujący nie wpływa na sygnał wyjściowy regulatora , na wykresie widzimy tylko działanie tylko członu proporcjonalnego. Wykres potwierdza ze wzrostem kd rośnie amplituda sygnału wyjściowego regulatora w pierwszej próbce.
    Na zakończenie badania regulatora przedstawiono odpowiedź regulatora PID dla zakłócenia w postaci skoku jednostkowego z otwartą pętlą przy nastawach :
    PID-1 dla Kp=0.5 Ki=0,1 Kd =0,2 fooPID.measuredOutput = 0 fooPID.controlReference = 0,2
    PID-2 dla Kp=0.2 Ki=0,1 Kd =0,35 fooPID.measuredOutput = 0 fooPID.controlReference = 0,2
    PID-3 dla Kp=0.1 Ki=0,1 Kd =0,425 fooPID.measuredOutput = 0 fooPID.controlReference = 0,2
    Cyfrowy regulator PID dla początkujących


    Kolejną czynnością którą wykonałem było sprawdzenie czy regulator działa w zamkniętej pętli sprzężenia zwrotnego. W tym celu zbudowałem obwód elektryczny który ma udawać obiekt. Obiekt został zbudowany z kondensatorów i rezystorów . Schemat przedstawia 4 obiekty o inercji pierwszego rzędu połączone ze sobą szeregowo tworząc w ten sposób kolejne obiekty wyższego rzędu . Stała czasowa obiektu o inercji 1 rzędu
    wynosi 10s. Ja na wyjściu każdego „obiektu” wlutowałem goldpin .Dzięki takiemu połączeniu możliwe są eksperymenty z obiektami o różnej inercji.
    Cyfrowy regulator PID dla początkujących
    Podłączenie obiektu do płytki mikro-kontrolerem (regulatorem PID) należy wykonać w następujący sposób: masy łączymy ze sobą , wejście obiektu (pin 2 złącza P1 ) łączymy z nóżką 17 mikro-kontrolera (PWM_H_OUT wyjście PWM mikro-kontrolera) , wyjście obiektu (P2- P5) podłączmy do wejścia AN5 mikro-kontrolera ( złącze P1 pin 7 na rys 6 wejście przetwornika A/D).W tym przykładzie wielkością wejściową dla regulatora PID jest napięcie przeliczone na temperaturę , wyjściem przebieg komplementarny PWM o częstotliwości około 1200 Hz. Kolejnym krokiem jest otwarcie w MPLAB X IDE projektu „Reg_temp_PID_obiekt_inercja_Elektroda” i zaprogramowanie mikrokontrolera
    Cyfrowy regulator PID dla początkujących

    Po zaprogramowaniu i włączeniu zasilania powinniśmy otrzymać następujący widok jak na rzdjęciu. Program został przygotowany w taki sposób że napięcie 0 V na kondensatorze odpowiada temperaturze -125 °C natomiast 3,3V +125 °C
    Do obsługi regulatora mamy cztery przyciski :
    S- zapisuje ustawienia w pamięci flash mikrokontrolera (podczas zapisu na ułamek sekundy gaśnie dioda LED).
    M- przycisk menu naciśnięcie (około 3 s) powoduje negację ekranu i możliwość edycji parametrów Kp, Ki,Kd ,set. Przejście do edycji kolejnego parametru ponowne wciśnięcie M
    aż do wyjścia z menu edycji.
    Znak „<” wskazuje edytowany parametr. Zmiana parametrów przyciskami ↑↓. Widok ekranu regulatora w trybie menu na rys 21.
    ↑↓ - zmieniają „set” wartość zadaną poza trybem menu.
    RST – przycisk resetu mikrokontrolera
    PIDout – sygnał wyjściowy regulatora PID od -1 do 1.
    proc – wielkość regulowana (napięcie na kondensatorze przeliczone na temperaturę)
    set – wielkość ustawiona (zadana wartość temperatury).
    Przebiegi na wyjściu regulatora dla różnych wartości sygnału PIDout przedstawiłem na poniższych rysunkach.
    Cyfrowy regulator PID dla początkujących Cyfrowy regulator PID dla początkujących Cyfrowy regulator PID dla początkujących
    Domyślne nastawy regulatora po włączeniu zasilania Kp = 0,5 Ki = 0,1 ,Kd = 0,0 działają z obiektem o inercji 1 ,2 rzędu , nie działają z obiektami o inercji 3 i 4 rzędu , temperatura cały czas oscyluje nie może osiągnąć zadanej wartości. Żeby uzyskać ustaloną wartość temperatury należy dobrać właściwe nastawy. W Internecie jest wiele sposobów opisujących dobór nastaw regulatorów PID dla obiektów z opóźnieniem.
    Ja skorzystałem z poniższej tabeli którą znalazłem w Internecie. Na rysunku przedstawiłem odpowiedź badanego obiektu o inercji czwartego rzędu na skok jednostkowy.
    Cyfrowy regulator PID dla początkujących Cyfrowy regulator PID dla początkujących
    Posługując się zależnościami z tabeli i wartościami odczytami z wykresu τ = 17 s i T = 121 s
    dla kryterium regulacji k = 0% i tr → min dla regulatora PID wyznaczono następujące nastawy:
    kp = 0,35 x T/ τ = 2,6
    Ti = 2,4 x τ = 40,8 s
    Td = 0,4 x τ = 6,8 s
    Niestety takich nastaw nie uda się nastawić w przedstawionym regulatorze wzmocnienie Kp jest większe od jedności.
    W tej sytuacji rozpocząłem od kp = 0,5 następnie obliczyłem ki=(kp×T)/Ti = 0,006 i na koniec maksymalną możliwą wartość dla kd pamiętając żeby nie przekroczyć dopuszczalnego zakresu (-1 - 1) podanego w zależności (6) ustawiłem kd = 0,245.
    Obliczone nastawy wpisałem do regulatora i otrzymałem stabilny przebieg regulacji jak poniższym wykresie . Zachęcam do eksperymentów ze zmianą nastaw i prób które pomogą uzyskać krótszy czas regulacji oraz eksperymentowania z obiektem o inercji 1 ,2 i 3 rzędu.
    Cyfrowy regulator PID dla początkujących

    Załączam jeszcze jeden projekt wykonany w MPLABX o nazwie Reg_temp_PID_v1_DS18_Elektroda
    W tym przykładzie zastosowania regulatora PID chciałbym przedstawić układ który chłodzi i podgrzewa. Wielkością wejściową jest temperatura odczytywana z czujnika ,wielkością wyjściową komplementarny przebieg PWM .Pomiar temperatury układu zrealizowano czujnikiem ds18B20. Układ zbudowany jest z ogniwa peltiera do którego z jednej strony przymocowano czujnik temperatury zaś z drugiej radiator z wentylatorem. Ogniwo peltiera zostało zasilone z mostka zbudowanego z czterech tranzystorów popularnie nazywanego „mostkiem H” .Schemat podłączenia ogniwa peltiera i mostka H do płytki z mikro-kontrolerem przedstawiono na rysunku
    Cyfrowy regulator PID dla początkujących
    Cyfrowy regulator PID dla początkujących
    Do sterownia ogniwem peltiera wykorzystano gotową płytkę z układem scalonym L298 od arduino który w swej strukturze posiada dwa mostki H.
    Cyfrowy regulator PID dla początkujących
    Mostek jest sterowany z komplementarnych wyjść mikro-kontrolera . Częstotliwość przebiegu wyjściowego wynosi około 1200 Hz. W zależności od współczynnika wypełnienia przebiegu sterującego mostkiem na jego wyjściu zmienia się zwartość średnia napięcia oraz jego biegunowość . Zmieniając biegunowość powodujemy że strona ogniwa peltiera do której jest przyłożony czujnik temperatury będzie się grzała lub chłodziła . Zmieniając wartość średnią napięcia na ogniwie będzie ono chłodziło lub grzało mocniej lub słabiej. Przebieg sterujący mostkiem H przedstawiono na rysunku
    Cyfrowy regulator PID dla początkujących
    Kiedy współczynniki wypełnienia PWM2H i PWM2L wynoszą 50% wyjściowe napięcie mostka H = 0V.
    Jeśli współczynnik wypełnienia PWM2H > PWM2L napięcie wyjściowe mostka H jest dodatnie , a ujemne gdy PWM1H < PWM1L. W taki prosty sposób mogłem zmienić polaryzację napięcia i doprowadzić do grzania lub chłodzenia czujnika.
    Zdaję sobie sprawę że nie jest to optymalne rozwiązanie ponieważ gdy wartość średnia napięcie na wyjściu mostka wynosi zero niepotrzebnie prąd przepływa przez ogniwo peltiera raz w jedną stronę (grzejąc) a później w drugą (chłodząc).
    Ale eksperyment się powiódł.

    Uwagi wymaga konfiguracja projektów MPLABX gdy używamy biblioteki dsp. Przypominają o tym komentarze w programie. Aby dokonać konfiguracji należy wykonać następujące czynności:
    Otwarty projekt ustawić jako projekt główny W tym celu wybieramy projekt a następnie klikamy prawym klawiszem myszki i z rozwiniętego menu wybieramy set as main project .
    Cyfrowy regulator PID dla początkujących
    W kolejnym kroku określamy ścieżkę dostępu do biblioteki dsp.
    z paska menu wybieramy: production \ set Project configuration \ customize
    Cyfrowy regulator PID dla początkujących
    Otworzy się kolejne okno z którego wybieramy libraries , naciskamy przycisk Add library/object file i wskazujemy ścieżkę dostępu do pliku libdsp-elf.a który znajduje w katalogu o nazwie wersji użytego kompilatora XC16.Jak widać użyłem v1.5
    Cyfrowy regulator PID dla początkujących
    W tym samym oknie wybieramy XC16( global options) ustawiamy format pliku wyjściowego na ELF/DWARF.
    Cyfrowy regulator PID dla początkujących

    W załączonych programach dokonałem uproszczenia . Funkcja regulatora PID jest wywoływana w głównej pętli z opóźnieniem programowym , lepszym rozwiązaniem jest umieszczenie jej w przerwaniu żeby regulator działał dokładniej . Pozwoliłem sobie na takie uproszczenie ponieważ okres próbkowania to 0,5 s , jest to długi czas w porównaniu z innymi operacjami wykonywanymi w pętli i ich wpływ na dokładność działania regulatora jest niewielka . W przypadku chłodziarko grzałki czas przetwarzania temperatury czujnika ds18b20 to około 750 ms i to jest w przybliżeniu okres próbkowania.

    Cool? Ranking DIY
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
    About Author
    Tatalek
    Level 11  
    Offline 
    Tatalek wrote 25 posts with rating 235. Live in city Gdansk. Been with us since 2008 year.
  • Nazwa.pl
  • #3
    __Maciek__
    Level 20  
    Nieźle .. Ale Moim zdaniem brakuje właśnie takiego prostego układu wykonawczego jaki zaprezentowałeś na schematach uzupełniających ... aby można było od razu siąść i próbować coś ustawić. Wersja z regulacją napięcia o tyle ciekawa że efekty widać bardzo szybko.

    Kiedyś też popełniłem regulator do celów edukacyjnych - regulowana temperatura za pomocą modułu peltiera ( opis niestety mniej ciekawy ) :
    https://www.elektroda.pl/rtvforum/topic3078409.html
  • Nazwa.pl
  • #4
    wniedzie
    Level 14  
    Czołem
    Mam uwagę dot. modelu opartego na drabince rezystory+kondensatory. Wydaje mi się, że jeżeli miał on symulować piec, to wejście sygnały sterującego powinno być typu "otwarty kolektor", tzn. albo zwarte do plusa zasilania, albo otwarte. Ponadto równolegle do woltomierza powinien być rezystor rozładowujący cały układ.
  • #5
    Tatalek
    Level 11  
    Podczas testów model jest podłączony do wyjścia mikro-kontrolera które o ile się nie mylę jest typu push-pull i moim zdaniem rozładowuje układ.
    Dodanie rezystora przy woltomierzu ciekawy pomysł mógłby symulować dodatkowe chłodzenie pieca lub z przełącznikiem zakłócenie .
    Jeśli miałbym zaproponować wartość to 4,7 Mohma powinno pasować
  • #6
    wniedzie
    Level 14  
    Tatalek wrote:
    Dodanie rezystora przy woltomierzu ciekawy pomysł mógłby symulować dodatkowe chłodzenie pieca

    Piec chłodzi się cały czas, niezależnie czy go zasilasz, czy nie. Wiec energia jest stale wytracana. W dodatku chłodzi się w innym tempie (wolniej), niż nagrzewa. Dlatego dodatkowy rezystor załatwiłby sprawę.
    Zauważ, że w Twoim układzie z regulatorem proporcjonalnym, kiedy stan się ustabilizuje, kompletnie nic się nie dzieje. Błąd wynosi zero. Taki układ jest OK, ale w przypadku, gdy nie ma żadnych czynników zewnętrznych (np. chłodzenie pieca poprzez nagrzewanie wody/powietrza). Zakładając straty energii w układzie układ proporcjonalny nigdy nie ustali żądanej wartości, bo musi być stały sygnał wejściowy do układu sterowanego, który zrekompensuje te stałe straty. Żeby był stały sygnał z regulatora proporcjonalnego to musi być stały błąd, czyli musi istnieć stała różnica pomiędzy wartością zadaną a rzeczywistą. Dlatego układ nigdy nie może dojść do wartości zadanej.
    Dlatego stosuje się człon całkujący, który zapewnia stałe wysterowanie rekompensujące stałe "straty".
  • #7
    __Maciek__
    Level 20  
    Pięknie .. coraz lepiej ... jeszcze tylko "windup lock" i chyba będzie komplet ;)

    Do tego delikatne wejście w Q format - pięknie ;-) brakuje takich tekstów na elektrodzie
    Dziś często nawet temperatura zapisywana jest do floatów .. a tu taka finezja .. naprawdę bardzo mi się podoba.
  • #8
    _lazor_
    Moderator of Designing
    Bardzo obszerny i dobrze wprowadzający do podstaw materiał.

    Mi tutaj brakuje tylko wykresu Bodego, aby zobaczyć stabilność regulatora oraz dobrać tak współczynniki aby przestał być stabilny.
  • #9
    elektronikq
    Level 25  
    Najlepszy artykuł który czytałem na elektrodzie. Zazdroszczę.