[2] Kinetis Design Studio: nowe środowisko programistyczne dla fanów mikrokontrolerów KINETIS
Uwaga: jest druga część artykułu, którego pierwszą część opublikowalismy pod adresem.
Jako przykład sposobu obsługi środowiska Kinetis Design Studio przedstawimy prostą aplikację systemu zabezpieczenia budynku. Jako detektor włamania wykorzystano czujnik kontaktronowy. Jako element sygnalizacyjny użyto generatora z przetwornikiem piezoelektrycznym. Do obsługi tych komponentów wykorzystano mikrokontroler z płytki FRDM-KL25Z, a do obsługi elementów systemu alarmowego (kontaktronowego i buzzera) użyjemy porty wejścia/wyjścia mikrokontrolera.
Budowę kontaktronu pokazano na rysunku 21. Czujnik ten tworzą dwa styki umieszczone w podłużnej, szklanej kapsule. W środku kapsuły panuje próżnia lub znajduje się gaz obojętny. Styki wykonane są z materiału ferromagnetycznego. Na zewnątrz kapsuły wyprowadzone są przedłużenia styków. W celu ułatwienia montażu kontaktronu, jest on zazwyczaj dodatkowo zamknięty w obudowie z tworzywa sztucznego.
Rys. 21. Schemat budowy kontaktronu
Kontaktron jest czujnikiem pola magnetycznego. Gdy na kontaktron nie działa zewnętrzne pole magnetyczne, styki czujnika pozostają w stanie rozwarcia. Pod wpływem odpowiednio ukierunkowanego zewnętrznego pola magnetycznego w stykach kontaktronu indukuje się własne pole magnetyczne. W warunkach tych styki zaczynają się przyciągać i w efekcie zwierają się. Stan ten jest nietrwały (gdy pole przestanie oddziaływać na kontaktron, jego styki rozewrą się) i nie jest jednorazowy (można go wielokrotnie powtarzać).
Z uwagi na tylko dwa stany styków (zwarte i rozwarte) kontaktron to typ czujnika, który określa się mianem detektora. Kontaktron wraz z magnesem będącym źródłem pola magnetycznego tworzy czujnik kontaktronowy. Czujnik taki stosowany jest powszechnie do wykrywania zmiany położenia obiektu. Kontaktron montowany jest w stacjonarnym punkcie, względem którego zmiana położenia obiektu jest detekowana. Z kolei na zmieniającym swoje położenie obiekcie mocowany jest magnes trwały. Na to czy styki kontaktronu są zwarte czy rozwarte wpływ ma położenie magnesu względem kontaktronu oraz odległość magnesu od kontaktronu. Wszystkie możliwe scenariusze najwygodniej jest przedstawić poprzez rozróżnienie i omówienie osobno kilku typów ruchu magnesu względem kontaktronu. Są to: ruch równoległy, ruch prostopadły, ruch wychyłowy oraz ruch obrotowy.
Czujniki kontaktronowe są często spotykanym elementem systemów zabezpieczenia budynku. W takich zastosowaniach kontaktrony montowane są na framugach okien i drzwi, natomiast magnesy przytwierdzane są do okien i drzwi. Kontaktrony i magnesy mocowane są obok siebie, dzięki czemu gdy okna i drzwi są zamknięte, magnesy oddziałując na kontaktrony sprawiają, że styki kontaktronów są zwarte. Natomiast gdy następuje otwarcie drzwi lub okien, odległość między magnesami i kontaktronami zwiększa się i tym samym styki kontaktronów zostają rozwarte. Fakt rozwarcia styków kontaktronów jest wykrywany przez system, który reaguje w odpowiedni sposób np. włączając alarm.
Zaprezentowana przykładowa aplikacja to właśnie prosty system zabezpieczenia budynku. Do jego budowy oprócz płytki FRDM-KL25Z wykorzystano jeden czujnik kontaktronowy służący do wykrywania otwarcia drzwi lub okna oraz jeden generator piezoelektryczny do dźwiękowej sygnalizacji stanu otwarcia wymiennych obiektów.
Schemat elektryczny systemu przedstawiono na rysunku 22. Wyprowadzenie buzzera oznaczone znakiem ‘-’ połączone jest z masą. Wyprowadzenie ‘+’ tego komponentu połączone jest z GPIO mikrokontrolera o nazwie PC1. W takiej konfiguracji aby buzzer generował sygnał dźwiękowy należy ustawić poziom logiczny 1 na GPIO PC1. Jeśli chodzi o kontaktron, to jedno z jego wyprowadzeń połączone jest z napięciem zasilania o potencjale 3.3 V. Drugie wyprowadzenie kontaktronu połączone jest z GPIO mikrokontrolera o nazwie PC2 oraz przez rezystor R1 do masy. Gdy styki kontaktronu są rozwarte, na wyprowadzeniu PC2 wartość napięcia wynosi 0 V. Gdy styki kontaktronu zostaną zwarte, wartość napięcia na wyprowadzeniu PC2 wzrasta do 3.3 V. Napięcie 0 i 3.3 V to dla mikrokontrolera odpowiednio wartość logiczna 0 i 1, zatem stan styków kontaktronu można odczytywać bezpośrednio za pomocą portów wejścia wyjścia mikrokontrolera.
Rys. 22. Schemat elektryczny przykładowego systemu wykorzystującego czujnik kontaktronowy
Zdjęcie systemu wykonanego według schematu przedstawiono na fotografii 23.
Rys. 23. Zdjęcie wykonanego systemu
Aplikacja działa zgodnie ze schematem blokowym zaprezentowanym na rysunku 24. Mikrokontroler w momencie rozpoczęcia pracy wykonuje inicjalizację i konfigurację GPIO PC1 i PC2. PC1 zostaje skonfigurowane do pracy w trybie wyjściowym, natomiast PC2 zostaje skonfigurowane do pracy w trybie wejściowym. Następnie mikrokontroler przechodzi do wykonywania nieskończonej pętli. W pętli tej cyklicznie sprawdzany jest stan logiczny na wyprowadzeniu PC2. Jeśli odczytana zostanie wartość logiczna 0 (styki kontaktronu są w tym przypadku rozwarte) następuje ustawienie stanu logicznego 1 na wyprowadzeniu PC1 (buzzer zostaje włączony). W przeciwnym wypadku, a więc gdy wartość logiczna na wyprowadzeniu PC2 jest równa 1, mikrokontroler ustawia wartość 0 na porcie PC1 (wyłączenie buzzera).
Rys. 24. Schemat blokowy algorytmu działania aplikacji
Realizację aplikacji należy rozpocząć od stworzenia projektu programistycznego dla mikrokontrolera z płytki FRDM-KL25Z. Gdy projekt programistyczny jest już stworzony, konieczne jest wygenerowanie interfejsu programistycznego dla peryferiów mikrokontrolera używanych przez aplikację. Zarówno czynność tworzenia projektu jak i zasady generowania interfejsu programistycznego zostały przedstawione szczegółowo w poprzednim artykule, zatem mijałoby się z sensem zamieszczanie w tym miejscu ponownie tego opisu. Poniższy opis dotyczyć będzie zatem tylko konkretnej aplikacji: komponentów oprogramowania użytych do sterowania peryferiami, funkcji udostępnianych przez te komponenty i kodu źródłowego samej aplikacji.
Do sterowania GPIO użyto dwóch komponentów oprogramowania BitIO_LDD. Pierwszy z nich, nazwany Sensor1, odpowiada za wyprowadzenia PC2. Drugi komponent, o nazwie Buzzer, przyporządkowany jest do wyprowadzenia PC1. Konfigurację obu komponentów przedstawiono na rysunku 25.
Rys. 25. Okna konfiguracyjne wykorzystanych w aplikacji komponentów oprogramowania typu BitIO_LDD
Odczytywanie stanu wyprowadzenia PC2 zrealizowano za pomocą zaimplementowanej w komponencie BitIO_LDD funkcji o nazwie GetVal. Odczytana wartość zapisywana jest w zmiennej odczyt_czujnika. Wystawianie wartości logicznej na wyprowadzeniu PC1 zrealizowano za pomocą również należących do komponentu BitIO_LDD funkcji o nazwie SetVal i ClrVal. Kompletny listing z kodem źródłowym aplikacji przedstawiono poniżej:
#include "Cpu.h" #include "Events.h" #include "Buzzer.h" #include "Sensor1.h" #include "PE_Types.h" #include "PE_Error.h" #include "PE_Const.h" #include "IO_Map.h" unsigned char odczyt_czujnika = 0; int main(void) { PE_low_level_init(); #ifdef PEX_RTOS_START PEX_RTOS_START(); #endif for(;;) { odczyt_czujnika = Sensor1_GetVal(NULL); if (odczyt_czujnika == 0) { Buzzer_SetVal(NULL); } if (odczyt_czujnika == 1) { Buzzer_ClrVal(NULL); } } }