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.
źródło
Odpowiedzi:
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.
Z tego artykułu :
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.
źródło
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.
źródło
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ą:
źródło
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.
źródło
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ć.
źródło