Elektroda.pl
Elektroda.pl
X
Metal Work Pneumatic
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

układ scalony / moduł regulatora PID do sterowania regulacją temperatury

Kubbaz 05 Lis 2015 09:59 7209 34
  • #1 05 Lis 2015 09:59
    Kubbaz
    Poziom 26  

    Witajcie,

    Poszukuję ukłau scalonego lub/i modułu, który realizuję algorytm sterowania PID najlepiej z funkcją autotuningu (dopierania parametrów regulatora PID).
    Nie szukam gotowych kompletnych modułów na panel z wyświetlaczami, tylko układ, który będę mógł sterować z mikrokontrolera.
    Potrzebuję sterować temperaturą pieca za pomocą grzałki i termopary jako czujnika temperatury.

    0 29
  • Metal Work Pneumatic
  • #2 07 Lis 2015 07:34
    Flesz
    Poziom 20  

    Trochę nie rozumiem co by to miał być za moduł.
    Moim zdaniem kup SSR jako końcówkę mocy do grzałki, a PID zaimplementuj w mikrokontrolerze.
    Wzory do autotuningu znajdziesz sieci.
    Grzałkami przez SSR steruje się z reguły czymś w rodzaju PWM z podstawą czasową kilku sekund (w zależności od bezwładności układu)

    0
  • Metal Work Pneumatic
  • #3 07 Lis 2015 07:36
    slawussj
    Poziom 34  

    PID to sposób regulacji, a nie urządzenie. To właśnie program w mikrokontrolerze ma mieć tę funkcję.

    0
  • #4 07 Lis 2015 08:53
    jarek_lnx
    Poziom 43  

    PID mozna zaimplementować w jednej (trochę przydługiej) linijce kodu.

    Zbadanie odpowiedzi na skok jednostkowy i policzenie parametrów nie jest trudne, jeszcze prostsza jest metoda Z-N, więc autotuning nie jest jakąś niezbędną funkcją.
    Chyba że to ma być urządzenie dla niekumatych uzytkowników.

    0
  • #5 07 Lis 2015 12:16
    atom1477
    Poziom 43  

    Jemu chodzi o układ scalony ASIC realizujący funkcję PIDa.

    0
  • #6 07 Lis 2015 12:42
    jarek_lnx
    Poziom 43  

    Cytat:
    Jemu chodzi o układ scalony ASIC realizujący funkcję PIDa.

    Wzmacniacz operacyjny ;) tylko że wymagany autotuning praktycznie wyklucza rozwiązania analogowe.
    A jeśli PID miał by być cyfrowy, to wykonanie takiego ASIC'a wystarczająco uniwersalnego do większości zastosowań PID'ów nie było by łatwe, dlatego mi istnienie takiego układu wydaje sie mało prawdopodobne, no i ostatni argument - implementacja PIDa jest na tyle łatwa że mogło by zabraknąć klientów na takie hardware'owe PID'y.

    0
  • #7 07 Lis 2015 13:03
    atom1477
    Poziom 43  

    No zbyt wielkiego sensu to nie ma.
    Nie mniej jednak coś takiego istnieje:
    http://www.nautilus-integration.com/Datasheets/PIDC120.pdf
    http://www.cyberdata-robotics.com/IC-PID-Controller
    Ale weź to kup.
    Nie jest to dokładnie to co chce Kubbaz, ale jest to ten typ układów. Więc podaję to jako przykłady.
    Ale też myślę że konkretnie tego co on chce raczej nie ma (tamte dwa ledwo się udało znaleźć, a żaden z nich nie ma autotuningu).
    Skoro układ i tak zawiera mikrokontroler to nie ma też sensu pchać tam jeszcze jakiegoś innego układu.

    0
  • #8 08 Lis 2015 11:50
    Kubbaz
    Poziom 26  

    Witajcie po krótkiej przerwie."

    Bardzo dziękuję za żywą dyskusję w tym temacie.

    Flesz napisał:

    Trochę nie rozumiem co by to miał być za moduł.
    Moim zdaniem kup SSR jako końcówkę mocy do grzałki, a PID zaimplementuj w mikrokontrolerze.
    Wzory do autotuningu znajdziesz sieci.
    Grzałkami przez SSR steruje się z reguły czymś w rodzaju PWM z podstawą czasową kilku sekund (w zależności od bezwładności układu)


    slawussj napisał:

    PID to sposób regulacji, a nie urządzenie. To właśnie program w mikrokontrolerze ma mieć tę funkcję.


    jarek_lnx napisał:

    PID mozna zaimplementować w jednej (trochę przydługiej) linijce kodu.
    Zbadanie odpowiedzi na skok jednostkowy i policzenie parametrów nie jest trudne, jeszcze prostsza jest metoda Z-N, więc autotuning nie jest jakąś niezbędną funkcją.
    Chyba że to ma być urządzenie dla niekumatych uzytkowników.


    Tak wiem, że "PID" to sam algorytm (sposób) sterowania polegający na zbadaniu odpowiedzi obiektu sterowanego na zadany pojedynczy impuls, który nim steruje i dokonuje ciągłej korekty sygnału sterującego tym obiektem. Fakt jest taki, że nigdy wcześniej nie implementowałem algorytmu PID w mikrokontrolerze.

    Mój układ - piec - wygląda następująco:
    - grzałka z drutu kantalowego zatopiona w ceramicznej masie, grzałka ma moc ok. 3,5 kW, całość wazy ok. 3-4 kg,
    - temperatura pieca mierzona jest termoparą typu K, stosuję układ kondycjonera AD595AQ do podłączenia termopary typu K do wejścia przetwornika analogowo-cyfrowego (ADC) w mikrokontrolerze.

    Ponieważ piec ma dość dużą masę (jak pisałem wcześniej - ok. 3-4 kg), to posiada on bardzo dużą pojemność cieplną, a tym samym dużą inercję (bezwładność termiczną), to i czasy sterowania są dość duże.

    Postudiowałem nieco o algorytmie sterowania typu PID m.in. na tej stronie. Jednak nie jestem do końca pewien słuszności tego czy dobrze zrozumiałem istotę algorytmu PID i własną implementację algorytmu w kodzie ANSI C.

    Otóż PID zakłada 3 bloki (3 części/elementy) w swojej budowie/strukturze:
    - "P" (proportional): proporcjonalną,
    - "I" (integral): całkującą,
    - "D" (differential): różniczkującą,
    realizowane w takich relacjach między sobą i miedzy sygnałem wejściowym i sterującym:
    Link (ale czy aby na pewno...?)

    Otóż w moim przypadku sygnał wejściowy to żądana temperatura pieca (stała temperatura) uzyskana jak najszybciej, bez przeregulowań i oscylacji.




    Sygnał sterujący to współczynnik wypełnienia sygnału prostokątnego pochodzącego z PWM mikrokontrolera, który steruje przekaźnikiem SSR (półprzewodnikowym).

    Zakładając warunki startowe dla pieca można założyć:
    - sygnał wejściowy (wymagana temperatura): 800 st. C +/-(0,5-1,0) %, temperatura początkowa/startowa pieca to (niech będzie) temperatura otoczenia/pokojowa, czyli np. 25 st. C,
    Teraz jak dobrze rozumiem muszę przede wszystkim całkować i różniczkować sygnał - temperaturę odczytywaną z termopary w funkcji czasu. Do tego potrzebna jest mi jakaś podstawa czasu (czyli "dt").
    Inaczej stały okres czasu, w którym będę pobierał próbkę sygnału, czyli odczytywał temperaturę z termopary i zmieniał wartość sygnału sterowanego (współczynnik wypełnienia sygnału PWM).
    Teraz pytanie, co ile sekund próbkować sygnał i zmieniać wartość sygnału wyjściowego? Skoro obiekt jest mocno inercyjny (ma dużą bezwładność cieplną), to wg moich odczuć raczej potrzebne jest duże "dt" (długi czas) rzędu nawet kilkunastu czy nawet kilkudziesięciu sekund.

    Całkowanie będzie dość proste, bo w wersji najprostszej, mogę zrobić po prostu sumowanie ze sobą kolejnych wartości temperatury w odstępach czasu "dt" i tyle (później mogę zamienić metodę prostokątów na metodę trapezów). Muszę tylko uważać na możliwość przepełnienia się wartości zmiennej przechowującej tę wartość (używam mikrokontrolera ARM 32-bitowego, więc zmieszczę tam liczbę rzędu 2^32 = 4,294... miliarda).
    Różniczkowanie raczej też problemu nie przysparza, bo będzie to różnica (odejmowanie) wartości temperatury z odczytu bieżącego i odczytu poprzedniego, a różnica ta podzielona będzie jeszcze przez wartość "dt" (czyli okres próbkowania). Tym samym uzyskam wartość określającą tempo/prędkość zmian (czyli właśnie ów różniczkę/pochodną).
    Część proporcjonalna algorytmu to po prostu liniowo uwzględniony sygnał wejściowy/sterujący minus sygnał wyjściowy.

    Teraz o ile przydatność różniczki w tym algorytmie rozumiem, bo niesie informacje o prędkości zmian/reakcji obiektu na pobudzenie, to nie mam pojęcia do czego ma posłużyć ta całka...? O czym ona informuje? Tudzież również część proporcjonalna/liniowa...?

    Oprócz tego nie mam większego pojęcia jak właściwie dobrać współczynniki Kp, Ki i Kd (czy też wg innego nazewnictwa: Tp, Ti i Ti) czyli tzw. wzmocnienia odpowiednich członów P, I i D. Wiem, że w gotowych sprzętowych regulatorach PID jest tzw. autotunning tych parametrów.

    Chciałem też zapytać czy wynik matematyczny wszystkich członów P, I i D się ze sobą dodaje? BO spotkałem się z grafem, na którym część różniczkującą się odejmowało...
    Poza tym jak interpretować matematyczny wynik tych wszystkich operacji (członów całkującego, różniczkującego i proporcjonalnego) w odniesieniu do współczynnika wypełnia sygnału PWN, który wynosi od 0 do 1 (0-100 %)?

    Znalazłem stronę www z artykułem "REGULATORY PID NA ARDUINO. WSTĘP"
    Przeczytałem to kilka razy, próbując sobie rozpisywać na kartce poszczególne kolejne cykle obliczeniowe tego algorytmu, ale przyznam się szczerze, że nie wiem "co do czego" jest w tym algorytmie. Niby każdy człon P, I i D jest rozpisany i rozumiem jak jest zaimplementowany, ale co każdy z tych członów robi i jak wpływa na sygnał sterujący.... pojęcia nie mam... Poza tym wcześniej poruszona przeze mnie kwestia odniesienia tego "wyniku sygnału sterującego" do sterowania współczynnikiem sygnału PWM...?

    Będę bardzo wdzięczny za dyskusję i pomoc w tym temacie.

    Pozdrawiam,
    Kuba

    0
  • #9 08 Lis 2015 19:26
    krzysssztof
    Poziom 20  

    Tak króciutko odnośnie roli poszczególnych członów:

    P - część proporcjonalna - odpowiada za wzmocnienie sygnału sterującego - przy zbyt dużej wartości tego wzmocnienia dostaniesz spore przeregulowanie, przy zbyt małej układ będzie działał powoli.
    I - część całkująca - odpowiada za dotarcie do pożądanego stanu układu. Bez niej jest możliwe, że układ nigdy nie osiągnie zadanej wartości.
    D - część różniczkująca - reaguje na dynamiczne zmiany w układzie - dzięki temu możliwe jest szybsze osiąganie zadanego położenia.

    W praktyce najczęściej stosuje się regulatory PI do procesów wolnozmiennych i PID do procesów szybciej zmiennych.
    Regulator P stosowany rzadziej z powodu problemów z osiągnięciem zadanego położenia.
    Regulatora PD się nie stosuje, albo stosuje bardzo rzadko.

    Dużo materiałów można znaleźć w wykładach (często są jakieś PDF'y na googlu) uczelni technicznych. Wpisując "regulator PID, podstawy automatyki" itp. Trzeba tylko odsiać te z nadmierną ilością teorii :P

    0
  • #10 08 Lis 2015 21:55
    Kubbaz
    Poziom 26  

    Witajcie po krótkiej przerwie.

    Otóż pod moją nieobecność tu na forum poszukałem nieco rzetelnych informacji z rzetelnych źródeł nt. istoty i implementacji algorytmów PID.
    Co najciekawszego zwróciło moją uwagę to:

    1. ATMEL AVR221: Discrete PID controller
    2. PID-controller and Ziegler-Nichols Method: How to get oscillation period?

    Właściwie do dużo zrozumiałem, ale mam jeszcze kilak wątpliwości i pytań.
    Nie będę tego pisywał w szczegółach krok po kroku, ale oprócz samego algorytmu PID (czy tudzież samego PI) istotne jest właśnie prawidłowe dobranie współczynników (tzw. wzmocnień) poszczególnych członów P, I i D.
    Z tego co wyczytałem słuzy m.in. temu metoda Zieglera-Nicholsa, która podaje w tabeli pewne mnożniki dla dwóch parametrów Kc i Pc (krytyczne wzmocnienie - critical gain częśći "P" i crytyczny okres oscylacji - critical period), na bazie których bardzo prosto wyliczane są pozostałe trzy współczynniki Kp, Ti i Td.

    Z tego co jest napisane w dokumentacji ATMELa AVR221: Discrete PID controller na stronie 6 w pkt. 2.4 Tuning the parameters w akapicie 2:

    Cytat:
    Several methods for tuning the PID loop exist. The choice of method will depend
    largely on whether the process can be taken off-line for tuning or not. Ziegler-Nichols
    method is a well-known online tuning strategy. The first step in this method is setting
    the I and D gains to zero, increasing the P gain until a sustained and stable oscillation
    (as close as possible) is obtained on the output.
    Then the critical gain Kc and the
    oscillation period Pc is recorded and the P, I and D values adjusted accordingly using
    Table 2-1.


    W tłumaczeniu:
    "Pierwszym krokiem w tej metodzie (Zieglera-Nicholsa) jest ustawienie wzmocnienia członów "I" (całkującego) i "D" (różniczkującego) na zero (0) i zwiększanie wartości wzmocnienia członu "P" (proporcjonalnego) do czasu, aż na wyjściu nie uzyska się trwałych (w czasie) i stabilnych oscylacji sygnału. "

    W tym miejscu mocno zastanawiam się jak to fizycznie wykonać/zrealizować używając grzałki sterowanej sygnałem PWM (oczywiście przez odpowiednie układy po drodze z końcówką mocy w postaci SSR? Tak sobie staram się wyobrazić odpowiedź temperaturową takiej grzałki/pieca, gdy będę co jakiś stały okres/czas zwiększał "wzmocnienie" członu proporcjonalnego, czyli współczynnika wypełnienia sygnału PWM np. od 5 %, co 5 % w czasie np. co 3 min. Na chłopski rozum na wykresie temperatury z termopary pomiarowej uzyskam rosnące "schodki", za każdym zwiększeniem wartości współczynnika wypełnienia PWM sygnał (temperatura) będzie rosła i w końcu się ustalała... a gdzie te oscylacje? Jak wprowadzić grzałkę w oscylacje - trwałe i stabilne w czasie?

    0
  • #11 08 Lis 2015 22:55
    krzysssztof
    Poziom 20  

    Grzałki raczej nie wprowadzisz w oscylacje.

    Tutaj można zastosować inną metodę - wyrysować sobie wykres reakcji grzałki na sygnał skokowy i z niego odczytać parametry. A potem dokładniej dostroić doświadczalnie.

    0
  • #12 09 Lis 2015 19:53
    jarek_lnx
    Poziom 43  

    Cytat:
    Tak wiem, że "PID" to sam algorytm (sposób) sterowania polegający na zbadaniu odpowiedzi obiektu sterowanego na zadany pojedynczy impuls, który nim steruje i dokonuje ciągłej korekty sygnału sterującego tym obiektem. Fakt jest taki, że nigdy wcześniej nie implementowałem algorytmu PID w mikrokontrolerze.

    Poplątałeś, odpowiedź na skok jednostkowy bada się w otwartej pętli aby na tej podstawie wyliczyć nastawy regulatora, metoda Z-N w przypadku pieca zajeła by straszliwie dużo czasu.


    Cytat:
    Tak sobie staram się wyobrazić odpowiedź temperaturową takiej grzałki/pieca, gdy będę co jakiś stały okres/czas zwiększał "wzmocnienie" członu proporcjonalnego, czyli współczynnika wypełnienia sygnału PWM np. od 5 %, co 5 % w czasie np. co 3 min. Na chłopski rozum na wykresie temperatury z termopary pomiarowej uzyskam rosnące "schodki", za każdym zwiększeniem wartości współczynnika wypełnienia PWM sygnał (temperatura) będzie rosła i w końcu się ustalała... a gdzie te oscylacje? Jak wprowadzić grzałkę w oscylacje - trwałe i stabilne w czasie?
    Zmiana wzmocnienia to nie to samo co zmiana wypełnienia choć taki jest skutek, gdy wzmocnienie jest za duże układ sie wzbudzi, tłumacząc na chłopski rozum zmiana wypełnienia spowodowana zmianą temperatury będzie "przesadna" co za chwilę spowoduje zmianę w przeciwnym kierunku.


    Cytat:
    Teraz o ile przydatność różniczki w tym algorytmie rozumiem, bo niesie informacje o prędkości zmian/reakcji obiektu na pobudzenie, to nie mam pojęcia do czego ma posłużyć ta całka...? O czym ona informuje? Tudzież również część proporcjonalna/liniowa...?
    Na wejściu regulatora jest błąd - róznica warości nastawionej i zmierzonej, część proporcjonalna daje tym większe wysterowanie im więcej brakuje do wartości nastawionej, całka po dłuższym czasie redukuje błąd statyczny do zera, rózniczka skraca czas regulacji.


    Cytat:
    Poza tym jak interpretować matematyczny wynik tych wszystkich operacji (członów całkującego, różniczkującego i proporcjonalnego) w odniesieniu do współczynnika wypełnia sygnału PWN, który wynosi od 0 do 1 (0-100 %)?
    Wynik jest sumą wszystkich trzech i jest skalowany do zakresu PWM.

    0
  • #13 09 Lis 2015 21:15
    Kubbaz
    Poziom 26  

    jarek_lnx napisał:

    Cytat:

    Tak wiem, że "PID" to sam algorytm (sposób) sterowania polegający na zbadaniu odpowiedzi obiektu sterowanego na zadany pojedynczy impuls, który nim steruje i dokonuje ciągłej korekty sygnału sterującego tym obiektem. Fakt jest taki, że nigdy wcześniej nie implementowałem algorytmu PID w mikrokontrolerze.


    Poplątałeś, odpowiedź na skok jednostkowy bada się w otwartej pętli aby na tej podstawie wyliczyć nastawy regulatora, metoda Z-N w przypadku pieca zajęła by straszliwie dużo czasu.


    Tak, już wiem. Dzisiaj przeczytałem artykuł Relay Methods and Process Reaction Curves:
    Practical Applications
    .
    Zrobiłem próbnie skok jednostkowy:
    - grzałka 300 W w 0,5 litra wody,
    - sterowanie PWMem o współczynniku wypełnienia 20 %,
    Trwało to ok. 40 min, aż temperatura się ustabilizowała od 8°C do 70°C.
    W załączniku przesyłam wykres tej zmiany.

    Wg metody z ww. artykułu ze strony 5 PDFa, pkt. 4.: "Process reaction curve ", przeprowadziłem taki skok jednostkowy i wyliczyłem z niego wszystkie parametry, które przedstawione są na str. 6 PDFa w celu wyliczenia wszystkich parametrów (wzmocnień członów) P, I i D regulatora.
    Jeszcze nie wiem czy one są dobre, ponieważ nie zaimplementowałem ich w kodzie ANSI C do mikrokontrolera, co być może zrobię jutro.

    jarek_lnx napisał:

    Zmiana wzmocnienia to nie to samo co zmiana wypełnienia choć taki jest skutek, gdy wzmocnienie jest za duże układ sie wzbudzi, tłumacząc na chłopski rozum zmiana wypełnienia spowodowana zmianą temperatury będzie "przesadna" co za chwilę spowoduje zmianę w przeciwnym kierunku.

    To jak regulować wzmocnienie (zwiększać moc grzałki) jak nie wartością współczynnika wypełnienia sygnału PWM?

    jarek_lnx napisał:

    Wynik jest sumą wszystkich trzech i jest skalowany do zakresu PWM.

    Ok, również się zgadzam z tym, ale własnie jak to skalować? Gdy wartość współczynnika wypełnienia sygnału PWM mamy od 0 do 100 (w procentach) czy od 0 do 1000 (w promilach dla większej dokładności i precyzji sterowania), to jak się ma to do liczb które "wychodzą" (które otrzymamy) z obliczeń matematycznych algorytmu sterowania PID? Tu możemy otrzymywac liczby dośc dziwne np. wartości rzędu kilku tysięcy (w przypadku, całkowania wartości błędu)...

    0
  • #14 09 Lis 2015 21:29
    Flesz
    Poziom 20  

    krzysssztof napisał:
    Grzałki raczej nie wprowadzisz w oscylacje.

    Wprowadzisz, wprowadzisz - po prostu zacznie działać jak przy sterowaniu przekaźnikowym. Temp. przekracza zadaną wiec się wyłącza, spada poniżej zadanej więc się włącza. Inaczej mówiąc temperatura zacznie oscylować wokół zadanej.

    PID w uproszczeniu :
    temp. zadana - temp. rzeczywista = uchyb

    P - proporcjonalne do uchybu czyli P to tak naprawdę uchyb
    I - całkujesz uchyb po czasie
    D - różniczkujesz temp. rzeczywistą

    Potem każdy człon mnożysz przez odpowiednie K (KP, KI, KD)
    na końcu sumujesz

    Prościej chyba się nie da :)

    Pamiętaj że PWM do SSR musi mieć podstawę czasową kilku sekund, żebyś tam nie puścił kilohertzów :)

    0
  • #15 09 Lis 2015 22:04
    atom1477
    Poziom 43  

    A wartości wyjściowe z algorytmu PID należy przycinać do zakresu PWMa (czy czegokolwiek co ma być na wyjściu, DACa, itp.).
    Czyli z PIDa może wyjść kilka tysięcy ale jak PWM ma zakres tylko do 1000 to po prostu to przycinasz do 1000.
    I tak samo od strony 0 (jak PID da liczbę ujemną to przycinasz do 0).

    0
  • #16 13 Lis 2015 08:36
    Kubbaz
    Poziom 26  

    Witajcie po krótkiej przerwie (ale nie od regulatora PID...)

    Cały czas nad tym pracuję i myślę jak to przeskalować...
    Otóż przypomnę jeszcze raz jaki mam obiekt ("piec") dla lepszej wizualizacji:

    - szklany słoik o pojemności 0,5 litra, wypełniony wodą o temperaturze ok. 10-20°C (zimna woda z kranu),
    - w wodzie zanurzona jest grzałka o mocy 300 W @ 230 V AC 50 Hz; grzałka sterowana jest sygnałem PWM z mikrokontrolera o okresie 5 s (częstotliwości 0,2 Hz) z regulowanym współczynnikiem wypełnienia sygnału prostokątnego PWM (Duty Cycle, dalej zwanym "DC PWM"), oczywiście pomiędzy mikrokontrolerem a grzałką jest przekaźnik półprzewodnikowy typu SSR; DP PWM mogę sterować dowolnie - od 0 % do 100 %,
    - temperatura początkowa wody ("pieca") zazwyczaj wynosi tak jak wspomniałem wyżej czyli ok. od 10 do 20°C; temperatura maksymalna jaką mogę uzyskać to ok. 92 - 94°C (przy tej temperaturze woda zaczyna się powoli gotować i temperatura wchodzi w nasycenie - stabilizuje się),
    - temperaturę wody mierzę termoparą typu K przez układ kondycjonujący AD595AQ, a sygnał wyjściowy z niego (10 mV/°C) podaję na przetwornik ADC 12-bitów mikrokontrolera (tego samego którym steruję DC PWM - mocą grzałki).


    Jak dotąd cały czas w tej całej metodzie sterowania posługiwałem się wielkością temperatury:
    - Tset - temperatury nastawionej (żądanej),
    - Terr - błędem temperatury (różnicy między temperaturą nastawioną a temperaturą bieżącą/mierzoną),
    - itd. wszędzie w obliczeniach algorytmy PID była temperatura ("jako taka" w [°C]),
    a fakt jest taki, że na wejściu - owszem też ustawiam/żądam temperatury, ale - steruję wartością DC PWM, liczbowo od 0 do 100 [%].

    No i teraz pojawia się kluczowe pytanie jak to przeskalować?


    Zrobiłem skok jednostkowy i zarejestrowałem odpowiedź układu ("pieca"):
    - 0,5 l wody o temperaturze początkowej 9-10°C,
    - grzałka ustawiona na 100 % mocy (DC PWM = 100 %).

    Wykres załączam poniżej:
    układ scalony / moduł regulatora PID do sterowania regulacją temperatury

    Zrobiłem skok jednostkowy i zarejestrowałem odpowiedź układu ("pieca"):
    - 0,5 l wody o temperaturze początkowej 9-10°C,
    - grzałka ustawiona na 20 % mocy (DC PWM = 20 %).

    Wykres załączam poniżej:
    układ scalony / moduł regulatora PID do sterowania regulacją temperatury

    Znalazłem w sieci kilka stron/artykułów na temat właśnie regulacji temperatury przy pomocy algorytmu PID przy użyciu sterowania DC PWM:
    Tuning thermal PID loops, Control Engineering
    WATLOW PRACTICAL PID GUIDE FOR PROCESS CONTROL
    Convert PID to Heater duty cycle
    Translating encoder ticks/PID feedback to pwm

    Także znalazłem kilka filmów na YouTube dotyczących algorytmu PID:

    1. Prosty przykład uniwersalnego kodu algorytmu PID:
    East Bay Guide to PID Loops, Part 2: The math and the coding

    2. Dobór nastaw (Kp, Ki i Kd) dla regulatora PID, na podstawie skoku jednostkowego i odpowiedzi na niego:
    PID Tuning: The Ziegler Nichols Method Explained
    Tuning A Control Loop, ABB Service

    Jednak dalej nie czuję tego jak przeskalować temperaturę do mojego DC PWM?

    ---------------------------------------------------------------------------------------------------------------

    Zatem OK... Sam wpadłem na pewiem pomysł pod wpływem mojego postu powyżej...

    Skoro fizycznie/bezpośrednio steruję DC PWM, a co za tym idzie to i DC PWM reguluję (w zależności od reakcji obiektu - pieca/jego temperatury).
    Wówczas nasuwa mi się taka postać równania na DC PWM:
    (póki co tylko dla członu proporcjonalnego "P" regulatora PID)

    New_DC PWM = Old_DC PWM +/- (?tu jeszcze nei wiem jaki znak) (error * Kp)
    gdzie:
    New_DC PWM - to wartość DC PWM w [%], która będzie w następnym kroku (N+1) regulacji temperatury,
    Old_DC PWM - to wartość DC PWM w [%], która była/jest w bieżącym (N) kroku regulacji temperatury,
    error - to różnica wartości temperatury w [°C] w kroku bieżącym (N) i temperatury ustawionej/żądanej,
    Kp - współczynnik/wzmocnienie członu proporcjonalnego ("P") regulatora PID wyrażonego w jednostce [% DC PWM/°C],

    Idąc dalej:
    (dla wszystkich członów "P", "I" i "D"):

    New_DC PWM = Old_DC PWM ± { (error * Kp) } + { SumError * Ki } + { SlopeRate * Kd }

    gdzie:
    New_DC PWM = Old_DC PWM +/- (?tu jeszcze nie wiem jaki znak) (error * Kp)
    gdzie:
    New_DC PWM - to wartość DC PWM w [%], która będzie w następnym kroku (N+1) regulacji temperatury,
    Old_DC PWM - to wartość DC PWM w [%], która była/jest w bieżącym (N) kroku regulacji temperatury,
    error - to różnica wartości temperatury w [°C] w kroku bieżącym (N) i temperatury ustawionej/żądanej,
    Kp - współczynnik/wzmocnienie członu proporcjonalnego ("P") regulatora PID wyrażonego w jednostce [% DC PWM / °C],
    Ki - współczynnik/wzmocnienie członu całkującego/sumującego ("D") regulatora PID wyrażonego w jednostce [% DC PWM / °C],
    Kd - współczynnik/wzmocnienie członu proporcjonalnego ("D") regulatora PID wyrażonego w jednostce [% DC PWM / °C],

    oraz:
    { (error * Kp) } - człon proporcjonalny "P" regulatora PID,
    { SumError * Ki } - człon całkujący/sumujący "I" regulatora PID,
    { SlopeRate * Kd } - człon różniczkujący "D" regulatora PID,

    Teraz problemem jest dobór właściwych współczynników/wzmocnień poszczególnych członów regulatora PID:
    - Kp,
    - Ki,
    - Kd,

    Z załączonych przeze mnie dwóch charakterystyk temperaturowych mojego "pieca" (woda+grzałka) wynika, że:
    - dla DC PWM = 100 % (tryb ciągłej pracy - na pełną moc grzałki): (ΔDC PWM / ΔT) = (100 [% DC PWM] - 0 [%])/(92 [°C] - 9 [°C]) = 100 [% DC PWM] / 83 [°C] = 1,20 [% DC PWM / °C],
    - dla DC PWM = 20 %: (ΔDC PWM / ΔT) = (20 [% DC PWM] - 0 [%])/(70 [°C] - 9 [°C]) = 20 [% DC PWM] / 61 [°C] = 0,33 [% DC PWM / °C],

    Hmmm... i co mam teraz zrobić? Z jednej strony wiem, że gry grzałka pracowała w trybie ciągłym (tj. DC PWM = 100 %), to obiekt ("piec"/woda) wchodziła w nasycenie - gotowała się, przez co nie mogła osiągnąć większej temperatury niż temperatura nasycenia = ok. 92 °C. A z drugiej strony chciałbym móc mieć możliwość wysterowania DC PWM = 100 % w początkowej fazie grzania "pieca", gdy różnica temperatur żądnej/ustawionej i bieżącej (zmierzonej) jest największa...

    No i dalej nie wiem co zrobić... :?: :idea:

    0
  • #17 13 Lis 2015 11:47
    atom1477
    Poziom 43  

    To jest już niezależne od samego PIDa (wada grzałki w postaci gotowania wody).
    Tutaj musisz ręcznie niezależnie od PIDa przycinać wypełnienie dla większych temperatur.
    Czyli wyjście z PIDa modyfikujesz tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    albo:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Przykładowo. Dla różnicy temperatur 30° (albo temperatury wody 70°C) i wyjścia PIDa skalibrowanego do zakresu 0..100%. A żeby przejść z przykładu do konkretu to musisz sam dostosować do swoich potrzeb zależnie od parametrów grzałki.

    0
  • #18 13 Lis 2015 13:42
    Flesz
    Poziom 20  

    Kubbaz napisał:
    Teraz problemem jest dobór właściwych współczynników/wzmocnień poszczególnych członów regulatora PID:
    - Kp,
    - Ki,
    - Kd,


    To się właśnie nazywa strojeniem PIDa, dobierasz wzmocnienia dla poszczególnych członów korzystając np. z metody Zieglera-Nicholsa, lub implementujesz autotuning, co w tym wypadku byłoby chyba sztuką dla sztuki.

    Najprościej :

    Zakładając że maksymalny uchyb który może powstać w tym układzie = 100 (temp=0 ty zadajesz 100)
    PWM ma okres 5s czyli 5000 ms
    5000/100 = 50

    Ki i Kr ustaw na 0
    zadaj Kp = 50

    PWM = uchyb * Kp

    zadaj wymuszenie (np. wzrost temp. o 10 st C)

    obserwuj czy temp. wpadnie w oscylacje (lub czy przekroczy zadaną)
    Jeżeli nie to zwiększ Kp , jeżeli tak to zmniejsz Kp - aż znajdziesz najwyższe Kp nie powodujące oscylacji
    Jak znajdziesz to tą samą metodą szukaj najwyższego Ki
    Kr nie potrzebujesz, ale możesz poeksperymentować.

    0
  • #19 13 Lis 2015 21:31
    krzysssztof
    Poziom 20  

    Mam pytanie odnośnie wyznaczania odpowiedzi skokowej obiektu w otwartej pętli:

    Jako sygnał sterujący należy podać maksymalny możliwy sygnał, czy dowolny ( a wynik i tak będzie w porządku) ?

    I odnośnie wprowadzania obiektu w oscylacje w zamkniętej pętli: czy zmiana sygnału zadanego jest dowolna, czy należy ją jakoś konkretnie przyjmować ?

    0
  • #20 14 Lis 2015 07:59
    Flesz
    Poziom 20  

    krzysssztof napisał:
    Mam pytanie odnośnie wyznaczania odpowiedzi skokowej obiektu w otwartej pętli:

    Jako sygnał sterujący należy podać maksymalny możliwy sygnał, czy dowolny ( a wynik i tak będzie w porządku) ?


    Wyznaczenie odpowiedzi skokowej obiektu w otwartej pętli nic nie wniesie do rozwiązania problemu, chyba że chcesz się bawić obliczenia akademickie dla własnej satysfakcji, wtedy przy obliczeniach musisz użyć rzeczywistej mocy użytej.

    krzysssztof napisał:

    I odnośnie wprowadzania obiektu w oscylacje w zamkniętej pętli: czy zmiana sygnału zadanego jest dowolna, czy należy ją jakoś konkretnie przyjmować

    Nie za mała, z drugiej strony ogranicza cię temp. wrzenia.
    daj 10 lub 20 st C. Powinno wystarczyć.

    Przy prawidłowo dobranym Kp temperatura będzie dążyła do zadanej, ale jej nie osiągnie.

    0
  • #21 14 Lis 2015 09:59
    krzysssztof
    Poziom 20  

    Cytat:
    Wyznaczenie odpowiedzi skokowej obiektu w otwartej pętli nic nie wniesie do rozwiązania problemu, chyba że chcesz się bawić obliczenia akademickie dla własnej satysfakcji, wtedy przy obliczeniach musisz użyć rzeczywistej mocy użytej.

    Natomiast kilka postów wyżej jarek_lnx pisze:
    Cytat:
    odpowiedź na skok jednostkowy bada się w otwartej pętli aby na tej podstawie wyliczyć nastawy regulatora, metoda Z-N w przypadku pieca zajeła by straszliwie dużo czasu.


    Z moich informacji wynika, że mając odpowiedź skokową układu w otwartej pętli, z wykresu można odczytać parametry takie jak: wzmocnienie obiektu (K), czas opóźnienia (tau), i stałą czasową (T).
    A następnie są tabele, z których można odczytać proste wzory wyznaczające nastawy regulatora PID.
    Czy coś tu źle rozumiem? Albo brakuje mi jakichś informacji?

    0
  • #22 14 Lis 2015 11:04
    Flesz
    Poziom 20  

    W twoim przypadku gdy podgrzewasz pół litra wody metoda Z-N nie zajmie dużo czasu. Co innego piec o wadze kilkuset kilogramów - tam by było trudno.

    0
  • #23 18 Lis 2015 12:22
    Kubbaz
    Poziom 26  

    Witajcie po krótkiej przerwie.
    Bardzo dziękuję za żywą dyskusję w temacie regulatora PID i jego tuningu/strojenia.

    Otóż zrobiłem dobrze działający regulator na tę 300 W grzałkę i 0,5 litra wody w zakresie do temperatury wrzenia. Sprawdziłem go później ustawiając temperaturę zadaną od 30°C do 80°C co 10°C i regulator PID regulował bardzo dobrze - z dokładnością ok. 1°C i całkiem szybką całkowitym czasem doregulowania do wartości żądanej (ustawionej), tu przyjąłem Kp, Ki i Kd (dane na wykresach) i otrzymałem wykresy z regulacji temperatury:
    układ scalony / moduł regulatora PID do sterowania regulacją temperatury

    Tak na "czuja", to czuję że Kp większe niż "1" (tj. 100 %) nie ma sensu zadawać, ponieważ i tak więcej mocy niż 100 % nie dam.
    Można jednak zauważyć "stopień agresywności" działania regulatora oraz lekkie przeregulowanie (górka), która opadła i temperatura ustabilizowała.

    Ponieważ reguluję współczynnikiem wypełnienia sygnału PWM, to na każdy z członów P, I i D nałożyłem ograniczenie wartości maksymalnej do 100 [%] i minimalnej do 0 [%], również na sumę wartości członów P, I i D nałożyłem takie samo ograniczenie.

    Teraz już mam mój właściwy testowy piec, który już posiada dość dużą bezwładność i tu przeregulowanie (które wystąpiło w przypadku grzania 0,5 litra wody nie może wystąpić nadmiernie).
    Ale...
    Znalazłem na YoutTubie filmik prezentujący sposób doboru nastaw regulatora PID:
    PID Tuning: The Ziegler Nichols Method Explained

    Ustawiłem DC PWM na 10 % i zarejestrowałem temperaturę pieca (w załącznikach również Excel):
    układ scalony / moduł regulatora PID do sterowania regulacją temperatury

    Wyznaczyłem linię styczną do punktu przegięcia linii wykresu i wyznaczyłem czasy tL i tT:
    - tL = 70 s,
    - tT = 1750 s,

    Teraz wg tej metody (Zieglera-Nicholsa) obliczyłem współczynnik/wzmocnienia członów P, I i D:
    - Kp = 1,2 x (tT/tL) = 1,2 x (1750/70) = 1,2 x 25 = 30,
    - Ki = 2 x tL = 2 x 70 s = 140 s,
    - Kd = 0,5 x tL = 0,5 x 70 s = 35 s.

    Ale nijak się to odnosi do mojej postaci wzoru na regulator/algorytm PID:

    DC_PWM = [Kp x BłądBieżącyTemperatury] + [Ki x SumaWszystkichBłędówTemperatury] + [Kd x BieżąceNachylenieFunkcjiTemperatury]

    Jak z takiego pomiaru, który wykonałem wyznaczyć współczynniki nastaw do regulatora PID... sam już zgłupiałem...

    =====================================================

    Po krótkiej przerwie:

    Otóż zrobiłem coś prostego:

    Na wejściu (sygnał wejściowy - IN_SIG) mam współczynnik wypełnienie sygnału PWM (DC PWM): od 0 % do 100 %.
    Na wyjściu (sygnał wyjściowy - OUT_SIG) mam temperaturę: od początkowej do końcowej.

    Ustawiłem DC PWM na stałe na 10 % i nie zmieniałem go, tym samym rejestrując temperaturę pieca.
    Uzyskałem:
    - Tpoczątkowa: 240°C,
    - Tkońcowa: 410°C,
    - czas grzania: kilka minut (ok. 10 min),
    - DC PWM początkowy: 0 %,
    - DC PWM końcowy: 10 %,

    Potraktowałem moje wzmocnienie liniowe (dajmy na to nasze Kp) jako:

    Kp = (ΔIN_SIG) / (ΔOUT_SIG) = (10 % - 0 %) / (410°C - 240°C) = 10 % / 170°C = 0,06 [%/°C]

    dalej założyłem (być może nie słuszenie), że:
    Ki = 2 x Kp,
    Kd = 0,5 x Kp.

    Zarejestrowany wykres temperatury oraz wartośći DC PWM przedstawiłem poniżej:

    układ scalony / moduł regulatora PID do sterowania regulacją temperatury

    Otrzymałem oscylacje o wartości (min. 195°C - max. 215°C) 20°C peak-peak oraz okresem ok. 290 (±5 s) s, co już jest dość nie fajne (10 % temperatury nastawionej)...

    0
  • #24 18 Lis 2015 14:03
    atom1477
    Poziom 43  

    Kubbaz napisał:
    Tak na "czuja", to czuję że Kp większe niż "1" (tj. 100 %) nie ma sensu zadawać, ponieważ i tak więcej mocy niż 100 % nie dam.

    Jest sens. Bo Kp = 1 wcale nie oznacza PWMa równego 100%.
    Oznacza jedynie że PWM będzie równy 100% dla różnicy pomiędzy wartością zadaną a uzyskaną (czyli błędu) równą 1 (w uproszczeniu, tzn. gdyby uznać że Ki i Kd nie mają wpływu na PWMa).
    W rzeczywistości jednak nie tylko dla wartości błędu równego 1 pasuje dawać PWMa równego 100%. Przy 0.1 może to też być potrzebne.
    Np. przy temperaturze zadanej 100°C i rzeczywistej równej 0°C. Różnica to 100°C co przy Kp = 1 daje PWMa równego 100%.
    Ale przy temperaturze rzeczywistej np. 60°C też pasuje dawać PWMa równego 100%.
    Dopiero przy temperaturze rzeczywistej zbliżającej się do 100°C (czyli do temperatury zadanej) PWM powinien spadać.
    Kp mogło by więc wynosić np. 10.

    0
  • #25 18 Lis 2015 15:16
    krzysssztof
    Poziom 20  

    Co do ostatniego przebiegu, oscylującego:
    Osiągasz zadaną temperaturę (wprawdzie z dużymi przeregulowaniami), czyli wstępnie regulator działa prawidłowo.
    Tutaj bardzo dużą rolę odgrywa bezwładność grzałki i obiektu ogrzewanego.

    Problemem tutaj jest dość mocne wysterowanie grzałki (~20%) w przypadku,. gdy temperatura aktualna jest tylko minimalnie poniżej zadanej.

    Pierwszym, najprostszym krokiem do zmniejszenia tego niechcianego efektu jest stopniowe, eksperymentalne zmniejszanie Kp w stosunku do obecnej wartości- układ będzie wtedy regulował nieco wolniej, za to z mniejszymi oscylacjami. Aż do osiągnięcia najbardziej odpowiadającej charakterystyki.
    Przetestuj.

    0
  • #26 18 Lis 2015 15:22
    Flesz
    Poziom 20  

    atom1477 napisał:
    Kubbaz napisał:
    Tak na "czuja", to czuję że Kp większe niż "1" (tj. 100 %) nie ma sensu zadawać, ponieważ i tak więcej mocy niż 100 % nie dam.

    Jest sens. Bo Kp = 1 wcale nie oznacza PWMa równego 100%.
    Oznacza jedynie że PWM będzie równy 100% dla różnicy pomiędzy wartością zadaną a uzyskaną (czyli błędu) równą 1 (w uproszczeniu, tzn. gdyby uznać że Ki i Kd nie mają wpływu na PWMa).


    Atom1477 ma rację, bo dla uchybu < 1 też może być konieczne podanie 100% mocy.
    Po pierwsze zależy to od tego z jakimi jednostkami przyjdzie regulatorowi pracować.
    Po drugie i chyba ważniejsze - stosunek bezwładności obiektu do mocy którą dysponujemy.

    Sprawdziłem dzisiaj nastawy w regulatorze chłodzenia formy wtryskowej: Kp=24 Ki=50, Kd=9 - dobrane w drodze autotuningu. Oscylacje maks 0.1C.
    Później sprawdziłem co piszą w manualu tego regulatora (autonics).

    proportional band [P] - 0,1 ~ 999.9 %
    Integral time [I] - 0 ~ 9999 s
    Deriative time [D] - 0 ~ 9999 s

    Z powyższego wynika że da się ustawić Kp=9,999

    Dodam tylko że forma wtryskowa o której mowa waży 19 ton, więc też ma sporą bezwładność.

    0
  • #28 18 Lis 2015 16:29
    Flesz
    Poziom 20  

    Kubbaz napisał:
    Zapytam tak z czystej ciekawości: jak długo oczekuje się na ustabilizowanie nastawionej temperatury?


    Kilka minut - forma jest ogrzewana tylko wtryskiwanym plastikiem i kanałami grzewczymi, więc jej nagrzanie trwa trochę dłużej. Moc oddawana przez formę - około 40 KW. Regulator mierzy temp. wody wypływającej i steruje zaworem proporcjonalnym regulującym przepływ. Muszę uściślić - nie cała forma jest chłodzona, jej część robocza to pewnie połowa wagi.

    0
  • #30 21 Lis 2015 20:22
    Kubbaz
    Poziom 26  

    Mam jeszcze jedno pytanie dot. współczynników.
    Czy:
    - Ki = Kp * (1/Ti)
    oraz
    - Kd = Kp * Td?

    =============================
    Na stronie Rep Rap PID Tuning znalazłem informacje dot. doboru nastaw regulatora PID temperatury sterującego sygnałem PWM. W akapicie "PID Tuning by Commercial PID" jest na samym dole tabela oraz powyżej tabeli znajdują się wzory, z których wynika, że:

    - Ki = Kp / Ti,
    - Kd = Td / Kp


    Pytanie tylko jak wyliczyć wartość Kp oraz Ti i Td?

    0
  Szukaj w 5mln produktów