Jak wdrożyć samodostrajający się kontroler typu PID


15

Próbuję napisać program mikrokontrolera do sterowania temperaturą w systemie o następujących cechach:

  • wyjście może być włączone lub wyłączone, przy stałych częstotliwościach cyklu (~ 2-10 na godzinę)
  • Roślina reaguje wolno (mierzalne zmiany temperatury trwają długo> 10 minut).
  • Roślina traci temperaturę w zależności od warunków środowiskowych.
  • wartość zadana może zmieniać się w dużych krokach w zależności od zapotrzebowania użytkownika.

Piszę kontroler, który ma na celu zminimalizowanie błędu, a także przestrzeganie częstotliwości cyklu podanej jako dane wejściowe.

Można to łatwo zrobić za pomocą kontrolera PI, a jego moc wyjściowa jest konwertowana na cykl pracy. Problem polega na tym, że program musi się automatycznie dostroić i wybrać prawidłowe wartości Kp, Ki oraz dostosować się do zmiennych warunków otoczenia i zmian mocy grzewczej. Dlatego wcześniejsze dostrojenie kontrolera PI nie jest zbyt przydatne.

Użycie rzeczywistego PI lub PID nie jest wymagane. Jestem otwarty na użycie Fuzzy-Logic, jeśli to pomaga, mam również algorytm uczenia maszynowego na chipie, który modeluje odpowiedź systemu i straty ciepła (w przybliżeniu liniowe), co sugeruje informacje o zmierzonej odpowiedzi krokowej . Po prostu nie wiem, co zrobić z tymi informacjami.

Kilka postów sugeruje, że mógłbym użyć danych modelowania, aby dostroić PI on-line, a także podręcznik do laboratorium, który sugeruje, że mogę użyć Fuzzy-Logic do dostrojenia PI.

Moje pytanie brzmi: jakie jest najlepsze podejście dla tego rodzaju scenariusza (np. PID, fuzzy-pid, splot itp.) I jak mógłbym faktycznie wdrożyć to w oprogramowaniu / praktyce.

Nie jestem EE, więc wszelkie uwagi byłyby bardzo mile widziane.


1
Napisałem odpowiedź na temat używania algorytmu simpleks do automatycznego dostrajania kontrolerów PID w Robotics SE, które mogą być interesujące.
embedded.kyle

@ embedded.kyle świetnie, rozumiem simplex / największy-acent. Czy możesz powiedzieć, do czego zwykł on używać x1, x2? Mam problem z powiązaniem ich ze stałymi PID.
MandoMando,

1
Minęło trochę czasu, ale uważam, że użyliśmy czegoś takiego jak x1 = P, x2 = I, x3 = D. x0, środek ciężkości, jest tym, który pomiar stabilności jest dla Ciebie najważniejszy. W mojej aplikacji sterowania silnikiem mieliśmy dwie pętle. X0 jednego było prędkością, a x0 drugiego było prądem. Zobacz tutaj po więcej.
embedded.kyle

@ embedded.kyle, czy masz coś przeciwko przekształceniu komentarza w odpowiedź? dodaj dodatkowe informacje, jeśli chcesz. -thx
MandoMando,

Nagroda? O chłopie! Gotowe i gotowe.
embedded.kyle

Odpowiedzi:


7

Nie posunąłbym się tak daleko, żeby nazwać PID przestarzałym. Ale z pewnością jest miejsce na ulepszenia. Jednym ze sposobów, w jaki mam automatycznie dostrojone pętle sterowania PID, jest użycie metody Neldera-Meada, która jest formą algorytmu simpleks wspinaczki górskiej . Ma tę zaletę, że jest w stanie zbiegać się i ponownie zbierać na docelowym parametrze, który zmienia się w czasie.

Wspinaczka górska metodą Neldera-Meada

Z tego artykułu :

Na przykład w naszym przypadku dostrajania parametrów PID {K P , K I , K D } simpleks jest czworościanem. Nelder – Mead generuje nową pozycję testową simpleks poprzez ekstrapolację zachowania funkcji celu mierzonej w każdym punkcie testowym ułożonym jako simpleks. Algorytm wybiera następnie jeden z tych punktów testowych na nowy punkt testowy i technika postępuje.

Moje szczególne zastosowanie dotyczyło sterowania silnikiem. Mieliśmy dwie pętle, pętlę sterowania prądem PID i pętlę kontroli prędkości PI. Ustawiliśmy nasze wierzchołki odpowiednio na P, I i D i przeprowadziliśmy statystyki na wyjściu pętli. Następnie przeprowadzaliśmy odbicie, rozszerzanie, kurczenie się i redukcję w kółko, aż wygenerowane cele kontroli prądu lub prędkości mieszczą się w zakresie kilku odchyleń standardowych.

W przypadku naszego produktu VP był bardzo zaniepokojony tym, jak „zabrzmiał” silnik. Jak się okazało, „zabrzmiało” lepiej, gdy obecny cel odbił się nieco bardziej, niż był matematycznie optymalny. Tak więc, nasze strojenie zostało wykonane „na żywo”, pozwalając algorytmowi wyszukiwać podczas pracy silnika, aby uwzględniono również postrzeganie dźwięku silnika przez użytkownika. Po znalezieniu parametrów, które nam się podobały, zostały one zakodowane na stałe i nie zostały zmienione.

Prawdopodobnie nie byłoby to dla Ciebie idealne, ponieważ stwierdzasz, że „wprawianie systemu w oscylację nawet w ramach auto-tuningu jest niedopuszczalne dla użytkowników”. Nasz system z pewnością oscylowałby i robiłby inne okropne rzeczy podczas automatycznego dostrajania.

Można jednak uruchomić dwie kopie regulatora PID. Ten, który był „na żywo” i faktycznie kontrolował proces. I sekundę, która była ciągle dostrajana automatycznie, jednocześnie zasilana tymi samymi wejściami, co kontroler „na żywo”. Kiedy sygnał wyjściowy automatycznie dostrojonego kontrolera stał się „lepszy” lub bardziej stabilny, można zamienić współczynniki na kontroler „na żywo”. Sterownik przeprowadzałby następnie korekty procesu aż do osiągnięcia pożądanej wydajności. Zapobiegnie to oscylacjom, które użytkownik może dostrzec podczas automatycznego dostrajania. Ale jeśli wejścia zmieniają się drastycznie, a regulator PID nie jest już optymalny, automatyczne dostrajanie może zamieniać nowe współczynniki, gdy stają się dostępne.


Metoda NM wymaga uruchomienia swoich dzikich punktów na funkcji celu (tj. Rzeczywistym świecie użytkownika). Uważam jednak, że surowy model (stan kosmiczny?) Można zbudować na samym mikrokontrolerze w oparciu o pomiary czujnika. Następnie uruchomiłby proponowany kontroler PI „cienia” podczas optymalizacji. Nie jestem pewien, czy to nadmierne zabójstwo, ponieważ możliwe jest dostrojenie PI do znanego ustawienia, a następnie skalowanie Kp i Ki na podstawie odczytów czujnika i odpowiedzi systemu. Tak czy inaczej, dobrze zrobione, proszę pana.
MandoMando,

@MandoMando Dziękuję bardzo! I naprawdę podoba mi się termin „cień” kontroler PI.
embedded.kyle

3

Sterownik PID jest użyteczny w sytuacjach, w których zachowanie kontrolowanego układu można rozsądnie przybliżyć jako sumę bodźca kontrolnego, całki bodźca kontrolnego i całki tej pierwszej całki. Niektóre systemy kontroli temperatury mogą spełniać takie kryterium, jeśli istnieje przedmiot ogrzewany równomiernie przez bodziec, i jeśli obiekt ten przenosi ciepło równomiernie na inny obiekt z szybkością proporcjonalną do różnicy temperatur między nimi. Na przykład, pierwszym przedmiotem może być element grzewczy, a drugim przedmiotem może być powietrze krążące w pomieszczeniu, jeśli jest wystarczająca cyrkulacja powietrza, aby powietrze mogło być uważane za mające jednolitą temperaturę. W przypadku modeli termicznych bardziej skomplikowanych (np. Takich, które mogą obejmować gradienty ciepła w stałym ośrodku),

Sugerowałbym, że dobrym podejściem może być, aby sterownik, gdy grzejnik jest włączony, stale oceniał, jak gorące będzie regulowane urządzenie, jeśli wyjście zostanie natychmiast wyłączone, a temperatura, do której skończy się ochłodzenie, jeśli grzejnik został włączony tak szybko, jak to możliwe. Oszacuj również, jakie byłyby te wartości, gdyby grzejnik był włączony przez kolejną sekundę, dwie sekundy, trzy sekundy itp. Wyłącz grzejnik, gdy te wartości będą tak dobre, jak to tylko możliwe. Następnie, gdy grzejnik jest wyłączony, zacznij wykonywać podobne obliczenia, ale zamieniając role włączania / wyłączania, grzania / zimna itp., Aby zdecydować, kiedy ponownie włączyć. W zależności od zachowania termicznego systemu może być konieczne zastosowanie strategii wybierania min./maks., Aby spojrzeć krok naprzód lub dwa.


1

Możliwość zmiany stanu sterowania (włączanie i wyłączanie) 2-10 razy na godzinę nie pozwala na kontrolę cyklu pracy. Wyjście pętli PI będzie sygnałem sterującym, którego wielkość zmienia się w zależności od błędu, a twoja instalacja może (realistycznie) zaakceptować tylko wejście binarne (wyłączone lub włączone), ponieważ „częstotliwość” kontroli dopuszczalny cykl pracy to ułamek herca.

Możesz uprościć sprawy i zastosować kontrolę histeretyczną:

  • system włącza się, gdy temperatura przekroczy dolną granicę
  • system wyłącza się, gdy temperatura przekroczy górną granicę
  • istnieje wystarczająca odległość między górną i dolną granicą, aby zapobiec odbiciu się wyjścia sterującego

Chodzi o to, aby wziąć wynik PI powiedzmy: 60% i przeliczyć na czas włączenia = 60% cyklu -> 0,6 x 30 minut -> 18 minut włączone i 12 minut wyłączone podczas 30-minutowego cyklu. kontroler Bang-Bang, który sugerujesz, nie gwarantuje utrzymania wymaganej częstotliwości cyklu (powiedzmy włączanie, nie więcej niż n razy na godzinę) i utrzymania niskiego błędu w tym samym czasie. może być konieczne tymczasowe przeregulowanie systemu na pewien okres, aby zrównoważyć straty w czasie przerwy.
MandoMando,

1

Typowy (choć z pewnością uproszczony sposób wykonywania tej czynności) nazywa się planowaniem wzmocnienia. Jest to klasyczne podejście do sterowania nieliniowego, gdy masz obserwowalną zmienną (lub zmienne), którą zmienia twój system (parametr planowania). W twoim systemie tą zmienną najprawdopodobniej będzie temperatura. Chodzi o to, że tworzysz listę wzmocnień regulatora przy różnych wartościach parametru harmonogramu (temperatury), a gdy zmienia się parametr harmonogramu, używasz tych przyrostów w sterowniku (PI, PID, sprzężenie zwrotne stanu lub cokolwiek innego). Jeśli to brzmi naprawdę prosto, to dlatego, że tak jest. Działa jednak i jest używany w niektórych bardzo skomplikowanych systemach.

Jeśli chcesz się podoba, możesz zaimplementować algorytm uczenia maszynowego w celu wygenerowania macierzy wzmocnienia. Spowodowałoby to ewolucję i uczenie się kontrolera, który wydaje się opisywać. Może być jednak przesada, jeśli system można w pełni scharakteryzować.

Edycja: Przepraszam, trochę źle odczytałem. Próbujesz kontrolować temperaturę, aby wspomniane „warunki środowiskowe” były Twoim parametrem planowania.


0

Możesz przejść w pełni kontrolowany Recursive Least Squares kontroler, patrz Astrom i Wittenmark , Adaptive Control, ale nie wiem, czy mikrokontroler będzie miał wystarczająco dużo mocy, aby to zrobić.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.