Programowany, cyfrowy komparator okienkowy z opcją nauki wartości progowych
Cyfrowy komparator okienkowy to urządzenie, które można zastosować w wielu aplikacjach. Opisywany prototyp miał służyć do wyłączenia zasilania prasy hydraulicznej w momencie, gdy czujnik tensometryczny przyklejony do jej obudowy odkształci się poza dopuszczalny zakres. W normalnych warunkach pracy może to oznaczać zakleszczenie się lub oderwanie narzędzia. Przy dużych prędkościach automatycznie wykonywanego tłoczenia, taka awaria ma trudne do przewidzenia następstwa.
Można sobie jednak wyobrazić także inne zastosowania: nadzorowanie poziomu hałasu, wilgotności, temperatury itd. Wszędzie tam, gdzie monitorowana wielkość da się przekształcić na monitorowany zakres napięć analogowych, który można zmierzyć przetwornikiem A/C. Projekt może być również inspiracją do budowy innych zabezpieczeń lub chociażby może pokazać, jak zbudować proste menu użytkownika z użyciem tylko kilku klawiszy.
Komparator okienkowy nie jest czymś, czego nie można wykonać w technice analogowej, jednak zastosowanie mikroprocesora daje mu dodatkowe możliwości wizualizacji danych jak również nauki wartości granicznych i adaptacji do warunków pracy.
Projekt komparatora nie jest nowy. Kiedyś do jego konstrukcji zastosowałem mikrokontroler AT89S8252, który już nie jest produkowany. Został zastąpiony przez AT89S8253 i wszystkie osoby chcące użyć urządzenia do celów komercyjnych, będą zmuszone sprawdzić układ połączeń oraz nieco zmienić oprogramowanie, tak aby dostosować się do nowego mikrokontrolera. Hobbyście z całą pewnością uda się jeszcze gdzieś kupić kilka sztuk. Urządzenie można wykonać w oparciu o dowolny mikrokontroler z rdzeniem 8051, ponieważ dla takiego został napisany program. Ważne jest, aby zastosowany procesor miał pamięć EEPROM, w której można będzie przechowywać parametry nastaw komparatora okienkowego.
Oryginalny program sterujący pracą komparatora jest napisany z użyciem kompilatora RC-51 firmy Raisonance. Była to co prawda starsza wersja, lecz sprawdziłem, że bez problemu kompiluje się również z użyciem najnowszego środowiska RIDE dla 51-ki. Kod wynikowy nie przekracza 4 kB, (3702 bajty), więc program można skompilować z użyciem wersji demonstracyjnej pakietu, dostępnej na stronie producenta http://www.raisonance.com/.
Działanie
Po załączeniu oprogramowanie komparatora sprawdza, czy w pamięci EEPROM są zapisane ważne nastawy. Jeśli tak, to komparator zaczyna normalną pracę, która jest sygnalizowana przez świecącą się zieloną diodę LED umieszczoną pod klawiszem AUTOMAT. Jeśli napięcie z czujnika ma charakter dynamiczny, to zmieniać się będą również wskazania słupka skali diodowej.
Oryginalnie, panel, klawisze i diody świecące były wykonane jako profesjonalna klawiatura foliowa. Była ona dopasowana wymiarami do kupionej w firmie Bopla obudowy aluminiowej na szynę euro. Niestety, nie umiem już podać konkretnego typu i numeru katalogowego.
Innym sposobem wejścia w tryb nastaw jest – po włączeniu zasilania – naciśnięcie i przytrzymanie przez około 5 sekund klawisza NAUKA. Nastawy mogą być wykonane ręcznie lub automatycznie. Tryb wprowadzania nastaw jest wybierany przez użytkownika przez naciśnięcie, odpowiednio, klawisza AWARIA (ręczny) lub NAUKA (automatyczny).
Oba tryby rozpoczynają się od pomiarów i rejestracji pojawiających się chwilowych wartości maksymalnych i minimalnych napięć na wejściu przetwornika A/C. Pomiar, w czasie którego monitorowane napięcie musiało spełniać warunki znamionowe (tzn. jeśli czujnik był umieszczony na maszynie, to ta musiała normalnie pracować) trwa aż 5 minut. W czasie jego trwania migocze dioda pod klawiszem AUTOMAT.
Tryb ręczny od automatycznego różni się tym, że po wykonaniu pomiaru w trybie automatycznym do wartości maksymalnej zostaje dodane 20%, a od minimalnej odjęte 20% i program przechodzi do trybu czuwania. W trybie ręcznym granice zadziałania przekaźnika ustawia się za pomocą klawiszy kursorów: najpierw górną, później dolną. Obie nastawy potwierdza się klawiszem NAUKA. Uwaga: oprogramowanie nie umożliwia korekty nastaw. Są one za każdym razem wprowadzane od nowa.
Podczas pracy komparator próbkuje napięcie wejściowe z częstotliwością przebiegu pętli w funkcji TrybRoboczy(). Częstotliwość odświeżania wskazań LED wyznaczana jest przez przerwanie Timera 1. Jest ono wywoływane 75 razy na sekundę.
Linijka jest zbudowana z 14 diod: 10 zielonych, 3 żółtych i 1 czerwonej. Podczas procedury kalibracji wykonywanej po pierwszym załączeniu lub naciśnięciu klawisza NAUKA, maksymalna, zmierzona zmiana napięcia (granica górna - granica dolna), po korekcie ręcznej lub automatycznej, zamieniona jest na reprezentację liczbową. Zmienna ta dzielona jest przez liczbę diod skali (14) i w konsekwencji zaświecenie się pojedynczej diody LED odpowiada 1/14 obliczonej zmiany napięcia wejściowego z tym, że diodzie czerwonej odpowiada maksimum, natomiast pierwszej zielonej – minimum.
Po załączeniu komparatora i poprawnym odczycie przezeń nastaw, załączany jest przekaźnik wyjściowy. Pozostaje on załączony tak długo, jak zmierzone napięcie wejściowe nie przekroczy dopuszczalnych wartości minimum (na skali zgasną wszystkie diody) lub maksimum (na skali zaświeci się czerwona dioda). Wówczas pod klawiszem AWARIA zaświeci się czerwona dioda LED, przekaźnik wyłączy się, a urządzenie będzie oczekiwało na interwencję użytkownika tj. na naciśnięcie klawisza AWARIA.
Zastosowany w układzie modelowym przekaźnik wyposażony był w styki przełączne, co umożliwiało – zależnie od układy sterującego maszyną – zwarcie lub rozwarcie styków w momencie awarii. Zwykle jego styki były dołączone do wyłącznika bezpieczeństwa maszyny.
Rysunek 1.Schemat ideowy głównej płytki komparatora (kliknij aby powiększyć).
Rysunek 2.Schemat połączeń klawiatury oraz diod LED skali wraz z propozycją wykonania panelu czołowego. Kolorami zaznaczono odpowiednie LED (kliknij aby powiększyć).
Budowa
Schemat ideowy komparatora pokazano na rysunku 1, natomiast klawiatury na rysunku 2. Oba rysunki można też znaleźć w plikach dołączonych do artykułu, w for-matach Protel 99 i PDF. Niestety, nie zachowały się żadne zdjęcia prototypu.
Budując komparator zastanawiałem się na zastosowaniem mikrokontrolera z wbudowanym przetwornikiem A/C, jednak ostatecznie zdecydowałem się odseparować od siebie oba te układy, odkładając zastosowanie takiego specjalizowanego mikrokontrolera do czasu, gdy prototyp przejdzie badania i będzie można określić szczegółowe wymagania odnośnie parametrów przetwornika. W rezultacie, na wejściu analogowym pracuje bardzo dobry przetwornik firmy Analog Devices AD7714YR o rozdzielczości aż 14 bitów. W jego strukturze producent umieścił wzmacniacz o wybieranym wzmocnieniu, co pozwala łatwo dostosować układ do wymaganego zakresu napięć wejściowych. Oryginalnie, wzmacniacz pracuje ze wzmocnieniem 128, które jednak łatwo jest zmienić odpowiednio modyfikując program sterujący. Przetwornik wymaga podania zewnętrznego napięcia odniesienia oraz odrębnego sygnału zegarowego sterującego jego pracą. Odpowiednio, napięcie odniesienia jest ono uzyskiwane ze scalonego źródła napięciowego AD780, natomiast sygnał zegarowy jest generowany z użyciem rezonatora Q2 o częstotliwości 2,4576 MHz. Elementy R2-C1 oraz R3-C1 pełnią rolę prostych filtrów dolnoprzepustowych włączonych pomiędzy wejścia przetwornika a wyjście sygnału czujnika. Przetwornik ma bardzo dużą rezystancję wejściową, dlatego trzeba uważać na odpowiedni dobór wartości elementów R i C. Dobierając je należy zwrócić uwagę na rezystancję wyjściową stosowanego czujnika, jak również na maksymalną częstotliwość mierzonego sygnału. Trzeba pamiętać o tym, że pojemność nie będzie w stanie rozładować się w rozsądnie krótkim czasie przez wejście przetwornika.
Zastosowana aplikacja AD7714YR została zaczerpnięta z noty katalogowej i jest ona odpowiednia np. do pomiaru rezystancji czujnika termorezystancyjnego PT100 (lub innego, o podobnych parametrach). Wysoka rozdzielczość przetwornika oraz wzmacniacz wejściowy umożliwiają odczyt nawet niewielkich zmian rezystancji. Dopasowanie do innego czujnika może wymagać ewentualnej zmiany wartości rezystora R1 (6,25 kΩ) lub całkowitej zmiany obwodu wejściowego, np. jeśli zostanie zastosowany czujnik w postaci mostka. Odpowiednie schematy można znaleźć w karcie katalogowej AD7714YR.
Dane z przetwornika odczytywane są przez mikrokontroler firmy Atmel AT89S8252. Zdecydowałem się na jego użycie głównie ze względu na wewnętrzną pamięć EEPROM pozwalającą łatwo przechowywać parametry, sprzętowy interfejs SPI, który był niezbędny do sterowania przetwornikiem A/C oraz możliwość programowania mikrokontrolera w układzie. Odpowiednie złącze (X5) zostało umieszczone na płytce. Cecha ta ogromnie ułatwia uruchomienie i testowanie wykonanej aplikacji.
Całość jest zasilana napięciem 5 V uzyskiwanym ze scalonego stabilizatora impulsowego LM2576-T5.0. Układ ten zastosowałem ze względu na wysoką sprawność oraz szeroki zakres napięć wejściowych: pracuje on poprawnie już po podaniu napięcia rzędu 7 V, a napięcie maksymalne jest zależnie od wykonania układu, jednak nie jest mniejsze niż 35 V.
Popularna 51-ka jest zerowana sygnałem o wysokim poziomie logicznym. Dlatego płytka jest wyposażona w kontroler napięcia zasilania TL7702. Na odpowiednim jego wyjściu trzeba zamontować zworkę JP1 lub JP2, zależnie od fazy sygnału zerowania wymaganego przez mikrokontroler. Dla AT89S8252 i podobnych należy zamontować JP1.
Oryginalnie całość była zmontowana na płytce dwustronnej z metalizacją. Większość elementów była umieszczona w obudowach do montażu SMT. Ważniejsze komponenty montowane w otworach, to stabilizator impulsowy, kondensatory elektrolityczne oraz tranzystory. Na rys. 2 umieściłem propozycję wykonania panelu czołowego, wskaźnika i klawiatury. Można je wykonać metodą chałupniczą, można również zamówić w firmach, takich jak LC Elektronik lub QWERTY. Elementem wykonawczym jest przekaźnik z cewką na 5 V. Jest on sterowany przez tranzystor T3, więc wymagania odnośnie mocy załączającej styki nie są krytyczne. Diodami LED wyświetlacza steruje port P2. Są one multipleksowane, a rolę wzmacniaczy prądu zasilania pełnią tranzystory T1 i T2. Do portu P2 są również dołączone klawisze.
Oprogramowanie
Cały program jest napisany w języku C z użyciem kompilatora firmy Raisonance RC-51. Składa się z trzech modułów:
- eeprom8252.c zawierającego funkcje odczytu i zapisu pamięci EEPROM,
- spi.c z funkcjami obsługi sprzętowego interfejsu SPI
- sensor-c-module.c tj. głównego programu obsługi, zawierającego wszystkie pozostałe funkcje.
Taki podział programu umożliwia łatwą zmianę mikrokontrolera na inny, niemający w strukturze ani sprzętowego SPI, ani pamięci EEPROM.
Na początku programu głównego są inicjowane zmienne, Watchodog, przerwanie Timera 1 (wywoływane z częstotliwością około 75 Hz).
//program główny
void main()
{
BYTE i;
WDT_RESET; //zerowanie licznika WDT jeśli restart od WDT
WDT_1024; //zatrzymanie WDT i nastawa 512 ms
TMOD = 0x11; //Timer 1 jako 16-bitowy
TH1 = 0xDF; //przerwanie 75 Hz
ET1 = ON; //zezwolenie na przerwanie od timer'a 1
TR1 = ON; //uruchomienie timer'a 1
EA = ON; //załączenie przerwań
. . . . .
Od zerowania AD7714 (sprzętowo, sygnałem ADRST), rozpoczyna się inicjalizacja przetwornika A/C. Na początku funkcja SPI_Init() wprowadza nastawy portu SPI mikrokontrolera, przez który ten komunikuje się z A/C. Następnie zaświecane są wszystkie diody LED, a do przetwornika wysyłane są nastawy. Niestety, aby je „rozszyć” trzeba posłużyć się notą katalogową. Są to nastawy filtrów, wzmocnienia – nie sposób tu opisać wszystkich zasad nie zajmując kilku kolejnych stron.
. . . . .
ADRST = ACTIVE; //zerowanie AD7714
Delay(1);
ADRST = DISACT;
ledstoerung = ledbetrieb = ON;
LedLine(14);
errorrelay = OPEN;
Delay(10);
SPI_Init(spiinit); //inicjalizacja i załączenie interfejsu SPI
SPION; //załączenie SPI (SPE=1)
//inicjalizacja i ustalenie trybu pracy AD7714Y
SPI_Send(0x24); //wybór rejestru
SPI_Send(0x4F); //przesłanie starszych 8 bitów filtru
SPI_Send(0x34); //wybór rejestruy
SPI_Send(0xA0); //przesłanie młodszych 8 bitów filtru
SPI_Send(0x14); //wybór rejestru
SPI_Send(0x3C); //tryb:001, wzmocnienie:111 (128)
ADRDY_WAIT; //oczekiwanie na gotowość A/C
. . . . .
Po wprowadzeniu nastaw diody są gaszone, a CPU próbuje przeczytać parametry z pamięci EEPROM. O wcześniejszym wykonaniu i zapamiętaniu nastaw w EEPROM świadczy bajt statusu. Jeśli ma on wartość CALIBR_OK (0x00), to program przystępuje do pracy. Jeśli nie, to jest wywoływana funkcja TrybNastaw(),wymuszając wykonanie kalibracji przez użytkownika.
. . . . .
ledstoerung = ledbetrieb = OFF; //wyłączenie wszystkich LED
LedLine(OFF);
fMINIMUM = ee_GetLong(eeMINIMUM); //odczyt eeprom
fMAXIMUM = ee_GetLong(eeMAXIMUM);
//sprawdzenie, czy czy zapamiętane są wartości
if (ee_getbyte(eeSTATUS) == CALIBR_OK)
{
kLERNEN = 1;
if (kLERNEN == kPRESSED) // wciśnięto NAUKA?
{
i = 5; //LERNEN będzie sprawdzany przez 5 sekund
while ((i > 0) && (kLERNEN == kPRESSED))
{
ledbetrieb = ledstoerung = ON;
Delay(1);
ledbetrieb = ledstoerung = OFF;
Delay(9); //w sumie opóźnienie ok.1 sekundy
i--;
}
if (i == 0) TrybNastaw();
} else TrybNastaw(); // nastawy wywoływane jeśli ich nie ma
TrybRoboczy(); //uruchomienie automatycznego trybu pracy
}
W przeciwnym przypadku program wywołuje funkcję TrybRoboczy(), która w swojej istocie jest nieskończoną pętlą wykonującą pomiar oraz zerującą rejestr licznika Watchdog. Ta pętla sprawdza również, czy wartości graniczne nie zostały przekroczone. Jeśli tak, to wywołuje funkcję TrybBledu().
Drobnego komentarza wymaga jeszcze funkcja obsługi przerwania Timera 1, odpowiedzialna za wyświetlanie skali LED. Nosi ona nazwę LedSend(). Stan linijek LED zawierają dwie zmienne: ot1num oraz ot2num. Ich wartość wyznaczana na podstawie tablic kodów załączeń LED leddot1[] i leddot2[],przez funkcję LedLine(),wywoływaną w pętli TrybRoboczy(). Funkcja obsługi przerwania jedynie przepisuje wartości wymienionych wyżej zmiennych do portu P2.
Program jest stosunkowo prosty i dobrze skomentowany. Jego samodzielna analiza i modyfikacja nie powinna nastręczyć większych trudności. Z doświadczenia wiem, że największą trudność stanowi poprawne ustawienie przetwornika A/C.
Jacek Bogusz
j.bogusz@easy-soft.net.pl
Załącznik | Wielkość |
---|---|
komparator_okienkowy.zip | 609.79 KB |
Dodaj nowy komentarz