Głównym celem prezentowanego urządzenia była jak najdokładniejsza stabilizacja temperatury jednej ze stron ogniwa Peltiera. Aby sprostać temu wymaganiu, użyto bardzo dokładnego czujnika temperatury oraz precyzyjnych wzmacniaczy w torze pomiarowym. Niewielki zakres mierzonej temperatury pozwolił uzyskać rozdzielczość pomiaru rzędu 0,001°C. Taką rozdzielczość wykorzystuje mikrokontroler realizując sterowanie ogniwem Peltiera. Odczyt temperatury prezentowany jest użytkownikowi z rozdzielczością 0,1°C. Mikrokontroler sterując ogniwem Peltiera realizuje omówiony wcześniej algorytm PID.
Rozdzielczość z jaką zmieniana jest średnia wartość prądu ogniwa to 65 μA. Współczynniki algorytmu dobrane zostały doświadczalnie tak, aby uzyskać możliwie szybką odpowiedź układu na zmianę nastaw unikając zjawiska przeregulowania. Główne elementy wykonanego regulatora przedstawiono na rysunku 3.
Rys. 3. Główne elementy regulatora temperatury z ogniwem Peltiera
Regulator temperatury składa się z czterech głównych bloków funkcjonalnych. Centralny blok funkcjonalny to odpowiednio zaprogramowany mikrokontroler rodziny AVR. Komunikuje się on z pozostałymi układami oraz z użytkownikiem. Interfejs użytkownika stanowi dwuliniowy wyświetlacz LCD oraz dwa przyciski. Umożliwia to zmianę zadanej temperatury oraz obserwację aktualnej, zmierzonej przez tor pomiarowy. Pomiar temperatury dokonuje się za pomocą kalibrowanego termorezystora Pt 100.
Blok pomiarowy odpowiedzialny jest za zasilanie czujnika oraz obróbkę sygnału analogowego. Do jego zadań należy również przetworzenie sygnału na postać cyfrową. Komunikacja pomiędzy blokiem pomiarowym a mikrokontrolerem odbywa się przy pomocy magistrali I2C. Układem wykonawczym mikrokontrolera jest scalony mostek typu H. Realizuje on sterowanie ogniwem Peltiera. Mikrokontroler steruje mostkiem H przy pomocy dwóch sygnałów. Jeden z nich to sygnał PWM sterujący mocą dostarczaną do ogniwa. Drugi to sygnał określający kierunek transportowanego ciepła. Blok sterowania ogniwem realizuje również funkcję zabezpieczającą przed skutkami zwarcia lub uszkodzenia ogniwa.
Obsługa urządzenia sprowadza się jedynie do ustawienia temperatury za pomocą dwóch przycisków. Każdorazowe naciśnięcie przycisku powoduje zmniejszenie lub zwiększenie temperatury o 0,1°C. Dłuższe naciśnięcie powoduje cykliczną zmianę ze wspomnianym krokiem, początkowo powolną, a potem szybszą. Umożliwia to sprawną zmianę nastawionej temperatury w zakresie +(10…30)°C. Ustawiona temperatura oraz inne nastawy zapisywane są w nieulotnej pamięci i przywracane podczas restartu urządzenia.
Implementacja algorytmu PID, nawet w 8-bitowym mikrokontrolerze, jest stosunkowo prosta. Aby zapewnić wystarczającą szybkość działania układu zrezygnowano z arytmetyki zmiennoprzecinkowej. Temperatury zadana oraz mierzona w systemie przechowywane są jako 32-bitowe liczby ze znakiem. Reprezentują one tysięczne części stopnia. Dopiero podczas prezentowania ich na wyświetlaczu dodawany jest w odpowiednim miejscu przecinek. Sama funkcja realizująca algorytm PID przedstawiona została poniżej.
List. 1 Realizacja algorytmu PID w mikrokontrolerze rodziny AVR.
s32 PID (s32 uchyb){ s32 y; //wyjsci s32 P,I,D; P=danePID.Kp*uchyb I=danePID.Ki*(uchyb+danePID.uchyb_1)/2+danePID. I_1; D=danePID.Kd*(uchyb-danePID.uchyb_1); PID_data.uchyb_1=uchyb; y=P+I+D; if((ydanePID.y_min)){ danePID.I_1=I; }else{ if(y>danePID.y_max) wyjscie=PID_data.y_max; else y=danePID.y_min; } } return (y) } |
Funkcja działa na strukturze danePID, która przechowuje współczynniki regulatora (Kp, Ki, Kd) oraz wartości całki i uchybu z poprzedniego kroku. Całkowanie podczas obliczania wartości członu I realizowane jest metodą trapezów. Jest to popularny sposób na minimalizowanie błędu powstającego poprzez zastępowanie całki sumą próbek. Po obliczeniu wartości wyjściowej y regulatora następuje sprawdzenie czy nie zostały przekroczone maksymalna i minimalna wartość sygnału sterującego. W omawianym urządzeniu sterowanie ogniwem Peltiera realizuje (poprzez mostek H) generator PWM. Jest on zrealizowany na liczniku 16-bitowym. Dodatkowo istnieje możliwość zmiany kierunku płynącego prądu. Wyjście regulatora powinno więc przyjmować wartości z przedziału (-65535…65535), i takie właśnie wpisano do struktury danePID. W przypadku przekroczenia zadanego przedziału, następuje oprócz ograniczenia sygnału wyjściowego zatrzymanie procesu całkowania.
Zaprezentowana fukcja jest dość uniwersalna i można ją stosować nie tylko do regulacji temperatury. W omawianym przykładzie sygnał wyjściowy regulatora jest symetryczny, gdyż możliwe jest podgrzewanie oraz chłodzenie obiektu. Obydwa procesy realizuje ten sam element (ogniwo Peltiera), którego charakterystyka regulacyjna jest w obu przypadkach identyczna. Zastosowanie wyłącznie modułu podgrzewającego lub chłodzącego wymaga jedynie zmiany przedziału dopuszczalnych wartości wyjściowych sygnału regulatora PID.
Pomimo istnienia możliwości innego wykorzystania zaprezentowanego algorytmu, należy pamiętać, że jego praca w innym urządzeniu wymaga indywidualnego dobrania współczynników wzmocnienia poszczególnych członów regulatora. Bardzo prosta metoda doboru współczynników opisana została w punkcie Regurator PID.
|
REKLAMA |
REKLAMA |
np: if((ydanePID.y_min)