Wizualizacja danych sensorycznych Układ kontroli akwarium
Transkrypt
Wizualizacja danych sensorycznych Układ kontroli akwarium
Wizualizacja danych sensorycznych Układ kontroli akwarium Radosław Ilnicki 133092 18 czerwca 2007 1 Wstęp Celem projektu było zaprojektowanie urządzenia umożliwiającego, po odpowiednim przystosowaniu, zapewni kontroli nad podstawowymi czynnościami niezbędnymi do zachowania odpowiedniej flory i fauny w akwarium. 1.1 Opis koncepcji ogólnej projektu Głównym celem urządzenia miało być pomaganie osobom w wyżej opisanym procederze pod ich nieobecności. Aby było to możliwe znajdujące się w akwarium ryby musza być przede wszystkim karmione. Karmienie to powinno odbywać się cyklicznie po upływie pewnego czasu. Taki sposób karmienia ma na celu nie tylko utrzymanie ryb przy życiu, ale również zapobieganie zakwaszeniu wody, w skutek pozostawania w akwarium pokarmu nieprzyswojonego, w skutek jego zbyt częstego podawania. Jeśli jednak pomimo naszych starań sytuacja ta w pewnym stopniu będzie występować a ponadto warunki w akwarium, na które możemy nie mieć wpływu, nie będą odpowiednie (mała pojemność, dużo ryb), może się okazać, i woda będzie się szybko zanieczyszczać. W celu zapobieżenia, a przynajmniej zwolnienia tego procesu niezbędne jest filtrowanie wody. Co więcej w celu zapewnienia egzystencji mieszkańców akwarium należy im zapewnić warunki raczej odległych od mrożonej herbaty, czy od garnka z zupą. No chyba, że mamy zapędy, o których mówić nie należy, albo akurat brak nam kolacji. Tak czy inaczej zapewnienie odpowiedniej temperatury też jest nad wyraz istotnym aspektem naszej pracy. W tym celu musimy jednak zrealizować dwa kolejne zadania. Przede wszystkim musimy na bieżąco śledzić wartość temperatury. Jest to niezbędne do drugiego zadania, jakim jest utrzymanie temperatury na zadanym poziomie przy wykorzystaniu jakiegoś urządzenia, np. grzałki. Najprostszym systemem zapewnienia karmienia jest układ wykorzystujący silnik krokowy do otwierania, przesuwanie, lub obracania zapadni, zawleczki, korka, lub obracania łyżki, co pewien ściśle wyspecyfikowany okres czasu. Budowa silnika ([3]) krokowego zapewni nam w tym przypadku precyzyjną ilość obrotów do wysterowania mechanizmu uwalniania pokarmu. Zapewnienie filtrowania wody nie wymaga dodatkowych elementów poza filtrem. Oczywiście można zastosować wyspecjalizowane czujnik dające nam feedback do sterowania, jednak włączenie filtra na pewien czas raz dziennie, powinno załatwić sprawę zapewnienia czystości wody na dłuższy okres czasu. 1 Utrzymanie temperatury, jak już nadmieniłem, wymaga choćby prostego czujnika temperatury korzystającego z przetwornika AC, wysyłającego dane do sterowania. Samo sterowanie najłatwiej wykonać implementując na mikrokontrolerze regulator PID zapewniający odpowiednie włączanie grzałki. 1.2 Opis założeń projektu Wstępnie projekt maił zostać tak wyspecyfikowany, aby spełniać koncepcję opisaną w podrozdziale 1.1. Jednak po dokładniejszym przeanalizowaniu zauważyłem, że głownie z powodów ograniczeń czasowych założenia projektowe do wykonania musiały zostać pomniejszony, a sam układ został uproszczony. Jak dla mnie głównym celem tego projektu był cel dydaktyczny. Przede wszystkim chodziło mi, abym po raz pierwszy miał możliwość zapoznać się z budową, i konstruowaniem prostych układów mikroprocesorowych. Dlatego waśnie najistotniejszym elementem był aspekt poznawczy związany ze zdobywaniem wiedzy, oraz wykonywanie kolejnych kroków niezbędnych do wykonania urządzenia. To podejście umożliwiło pominięcie pewnych elementów do wykonania. Zaczął liczyć się fakt zadziałania i wykonania choćby prostszych elementów, ale w szerokim zakresie różnorodność ich własności. Dalszy rozwój elementów na nowo poznanych obszarach jest naturalny i wymaga tylko więcej czasu. Dlatego właśnie zrezygnowałem z wykonania elementu sterowania filtrem. Jest to bowiem tylko jeden z wyjściowych elementów, a więc jego sterowanie nie będzie się koncepcyjnie znacznie różnić od sterowania ważniejszym elementem, jakim jest silnik krokowy. Ponadto wykonanie sterownika temperatury również okazało się zadaniem o niższym priorytecie. Mianowicie zapewnienie komunikacji z komputerem wymaga zarówno wysyłania jak i odbierania danych, co w sterowniku temperatury również jest wymagane. Jednak z powodu wyższego priorytetu komunikacji z komputerem, koncepcja wykonania tego elementu przeszła na dalszy plan. Po takim wyspecyfikowaniu celów mogę jednoznacznie powiedzieć, iż zadanie polegało teraz na zaprojektowanie elementu który przede wszystkim pozwoli nam na sterowanie silnikiem, oraz komunikację z komputerem za pomocą interface’u RS232. 2 Element urządzenia Rozdział ten jest poświęcony opisowi wszystkich elementów niezbędnych do wykonania projektu. Podrozdział 2.1 jest poświęcony opisowi teoretycznemu. Zawiera wstępne informacje o niezbędnych elementach, łącznie ze schematami ich wykonania, lub podłączenia. Podrozdział 2.2 z kolei jest poświęcony zagadnieniom praktycznym. Opisuje sposób wykonania, bądź zamontowania elementów, jak również problemy, jakie mogą wystąpić po drodze i zaproponowane sposoby ich rozwiązania. 2.1 Opis teoretyczny i schematy 2.1.1 Mikrokontroler i płytka Sercem, a w zasadzie mózgiem układu mikroprocesorowego jest oczywiście mikroprocesor. Za namową prowadzącego, do swojego projektu, wykorzystałem mikroprocesor z rodziny HC12 firmy Freescale, a dokładnie 16 bitowy osiemdziesięcionóżkowy MC9S12A64CFUE. Dokładna specyfikacja tej jednostki znajduje się na stronie domowej firmy firmy [5], lub na stronie laboratorium 010 Politechniki Wrocławskiej [4]. Mikrokontroler ten ma między innymi 64 kilobajtową wbudowaną pamięć FLASH, 2 4 kilobajty pamięci RAM, czy bajt pamięci EEPROM. Posiada też spore możliwości podłączeniowe dzięki sporej liczbie wzejść i wyjść. Główniejsze z nich to: 8 kanałowy, 10 bitowy przetwornik analogowo.cyfrowy, 61 uniwersalnych wejść i wyjść, czy modulator PWM zapewniający 7 kanałów 8 bitowych, lub 3 kanały 16 bitowe. Cały schemat płytki przedstawiony jest na rysunku 1. Rysunek 1: Schemat układu Zatem mikrokontroler z dużym zapasem wystarczy do wykonania projektu. Wymaga on jednak płytki dostosowanej specjalnie od niego, w którą to zostałem wyposażony. Schemat montażu mikrokontrolera na tą właśnie płytkę, wraz z odpowiednimi elementami zapewniającymi działanie, jak kondensatory, czy choćby kwarc, przedstawia rysunek 2, a specyfikację elementów do rozmieszczenia rysunek 3 3. Rysunek 2: Montaż elementów na płytce Rysunek 3: Zestaw elementów 2.1.2 Silnik i sterowanie Silnik którym sterujemy jest silnikiem krokowym czteropinowym. Dokładniejsza specyfikacja wykorzystanego silnika znajduje się 2.2.2. Natomiast podstawowe dane na temat takiego typu silnika znalazłem w [3]. Do sterowania tym silnikiem wykorzystane zostaną dwa mostki mocy L297 i L298, sterowane mikrokontrolerem, za pomocą portów B (PB0 - PB5). Schemat połączenia mostków pokazuje rysunek 4, a dokładny opis można znaleźć również w [3]. 2.1.3 Zasilanie Kolejnym istotnym elementem, bez którego cała technika nie jest w stanie zadziałać jest prąd, a zatem element zasilający. Zasilać musimy nie tylko samą logikę, czyli mikroprocesor, który wymaga stabilnego napięcia 5V, ale również mostki mocy opisane w 2.1.2, oraz MAX232, o którym napiszę w 2.1.4, oraz 2.2.4. O ile MAX wymaga napięcia równego napięciu wykorzystywanego przez mikrokontroler, o tyle sprawa zasilania mostków nie jest już taka prosta. Jak widać na schemacie z rysunku 4 wymagają one dodatkowego zasilania. Na szczęcie nominalne 36 V nie jest bezwzględnie wymuszone. 4 Rysunek 4: Schemat sterowania silnikiem krokowym zbudowany na układach L297 i L298 Zapewnienie stabilnego napięcia 5V zostało zrealizowane za pomocą prostego stabilizatora wykorzystującego scalak U7805, oraz kilka kondensatorów. Stabilizator ten opisany jest w [1]. Aby zapewnić niezależność od napięcia doprowadzonego na stabilizator, zastosowałem tuż przed jego wejściem dodatkowy układ zabezpieczający, tzw. mostek Gretza. Wyjaśnienie tego kroku znajduje się w 2.2.3 Rysunek 5: Schemat stabilizatora Dla mostków mocy wykonany został dodatkowy układ, o czym jednak napiszę odnośnie realizacji praktycznej w 2.2, a konkretnie w 2.2.3. 2.1.4 RS232 i COM Do komunikacji z komputerem użyłem interfejsu RS232, który jest prosty, i popularny w komputerach stacjonarnych. Co więcej jeśli nawet komputer nie posiada złącza dla tego interfejsu, co ma miejsce w nowych laptopach, nie stanowi to większego problemu, gdyż istnieje szeroki dostęp do tanich przejściówek RS232 na USB. Interfejs ten wymaga jednak konwertera MAX232, który umożliwia obsługę dwóch 5 COM’ów. Jego opis, wraz ze schematem montażowym można znaleźć w [2]. Ponadto schemat ten przedstawia rysunek 6 Rysunek 6: Schemat podłączenia Maxima 2.2 Wykonanie praktyczne Rysunek 7: Zdjęcie wykonanego urządzenia Do ułatwienia omawiania układu wykonanego odwoływać się będę do rysunku 7 przedstawiającego zdjęcie wykonanego urządzenia. Zdjęcie spodu urządzenia nie zostało zamieszczone, gdyż z powodu braku w wyposażeniu podręcznego warsztatu lutowniczego pesety, cienkich izolowanych drutów (np. kynaru), oraz elementu do szybkiego i precyzyjnego ściągania izolacji kabli łączące sterczą ponad powierzchnią płytki i skutecznie utrudniają zorientowanie się w strukturze połączeń. 6 2.2.1 Mikrokontroler i płytka Pierwszym elementem jaki został wykonany odnoście mojego projektu była płytka z mikrokontrolerem. Pierwszym elementem wlutowanym na niż był sam mikrokontroler, którego lutowanie powierzchniowe, jest najistotniejszym zadaniem. Choćby delikatne przesunięcie, czy złe dolutowanie choćby jednej nóżki, może na dobre uniemożliwić nam działanie całego układu. Następnie przylutowane zostały układy powierzchniowe SMD, a pod koniec elementy przewlekane. Na sam koniec wlutowano złącza, które umieszczono we wtykach, oraz przylutowano do płytki uniwersalnej zachowując odpowiedni rozkład złącz modułu zgodnie ze specyfikacją zawartą w [4], którą ukazuje rysunek 8. Rysunek 8: Złącza modułu z układem MC9S12A64 Moduł ten następnie, po wykonaniu kilku pozostałych elementów, które opiszę w tym podrozdziale, został zasilony. Sposób podłączenia zasilania znajduje się na rysunku 8. Z niego można wywnioskować, że zasilenie polega na podaniu na odpowiednie złącza SVL i SVP napięcia 5 V. Złącza te są oznaczone przez VDD(+5V). W przypadku mikrokontrolera opisanego w 2.1.1 są to złącza SVL o numerach 18 i 40, oraz złącza SVP o numerach 1, 11 i 23. W celu zamknięcia układu zasilającego potrzebna jest wyprowadzenie uziemienia, czyli podłączenie masy do złącz określonych skrótem GND (Ground). Są to odpowiednio złącza 17, 39 dla SVL, oraz 2, 12, 14, 24, 40 dla SVP. Można łatwo zauważyć, że, poza dwoma wyjątkami, zasilania i uziemienia są tuz obok siebie. Jeśli mikrokontroler został juz zasilony, można zabrać się za wykonywanie połączeń z pozostałymi elementami na płytce, dzięki którym będzie możliwe sterowanie nimi. Dokładniejszy opis tych połączeń znajduje się w dalszej części raportu (od 2.2.2 do 2.2.4), jednak tu warto nadmienić choć krótko jakie porty wykorzystano. Otóż do porozumiewania się z MAX’em, a zatem z COM’ami wykorzystano złącza od 31 do 34 złącza SVL, czyli RxD0, TxD0, RxD1, oraz TxD1. Silnik natomiast sterowany będzie portami PB0 do PB5, posiadającymi na SVP numery od 5 do 10. 2.2.2 Silnik i sterowanie Drugim elementem wykonanym na uniwersalnej płytce był schemat sterowania silników opartych na mostkach L297 i L298 opasany w 2.1.2, a znajdujący się na 7 rysunku 4. Zdjęcie silnika jaki zostanie wysterowany przedstawia rysunek 9 Rysunek 9: Zdjęcie silnika krokowego czteropinowego Jest to silnik wyprodukowany przez Japan Servo CO. LTD. Jest oparty na amerykańskim patencie, Jego typ to: KP39HM4-010. Jego minimalnym krokiem jest 3,6 stopnia. Co znaczy, że na pełny obrót potrzebuje 100 kroków. Należy pamiętać, że silnik jest elementem, który pomimo małej masy ma swoją bezwładność. Dlatego jeśli chcemy nim sterować musimy wsiąść to pod uwagę. Innymi słowy, jeśli każemy mu wykonać 10 kroków, a sygnały sterujące z mikrokontrolera podamy je w czasie kilku taktów zegarowych, bez jakichkolwiek opóźnień, to możemy być prawie pewni, że silnik nie zachowa się tak jak się tego spodziewamy, o ile w ogóle się poruszy. Nie mam dokładnych danych na temat minimalnych odstępów czasowych dla wykonania ruch, jednak na pewno powinno się nie przesadzać z tym parametrem. Domyślam się, że są inne sposoby sterowania czteropinowym silnikiem, niż opisany przeze mnie, jednak ten sposób został mi polecony, jako dość prosty i pewny. W systemie sterowania opartym na tym schemacie całe sterowanie załatwione jest dzięki układowi L297 (rysunek 10). To on dzięki otrzymaniu na swoje wejścia odpowiednich sygnałów generuje nam sterowanie na drugi mostek. Stąd wychodzą już połączenia bezpośrednio do uzwojeń silnika. Aby nie były to jednak wiszące kable, połączone one są z wtykiem znajdującym się na płytce głównej do którego dołącza się silnik. Jedynym problemem praktycznym było zamontowanie elementu L298 na płytce z powodu poprzesuwanych wyjść, które nie pasowały do wejść płytki uniwersalnej. Delikatna, siłowa perswazja, nie pozostawiła jednak złudzeń, że w tej kwestii technika musiała ulec człowiekowi. Silnik jest sterowany mikrokontrolerem, który z portów B złącza SVL podaje sygnały na odpowiednie wejścia L297. Połączenia portów mikrokontrolera z wejściami scalaka L297 znajdują się w tabeli 1. Co więcej do wzejść 15 scalak L297 podłączono napięcie VREF. Jest to napięcie odniesienia o wartości (0..3V). Napięcie to umożliwia ograniczanie prądu płynącego przez mostki mocy w L298 przez porównanie z nim napięć odłożonymi na półomowych opornikach RS1 i RS2 . Maksymalny prąd jaki może popłynąć na mostkach może wynieść 4 A. Znaczy to, że na opornikach odłoży się napięcie 2 V. Jako, że elementy zamieszczone na płytce mają odporność do 2 A prądu, należało ograniczyć 8 Rysunek 10: Rysunek fizycznego elementu, oraz rozmieszczenia wyjść dla L297 Rysunek 11: Rysunek fizycznego elementu, oraz rozmieszczenia wyjść dla L298 napięcie odkładane do wartości 1 V. Najłatwiej jest to wykonać przez zastosowanie dzielnika napięciowego dla stabilnego napięcia 5 V wygenerowanego za pomocą stabilizatora. Aby wykonać dzielnik potrzebujemy dwóch oporników, których stosunek oporów wyniesie R1 : R2 = 4 : 1. Opis dzielnika, oraz sposobu dobrania oporników nalazłem znajduje sie w części 2.2.3. Dokładny opis wejść elementu zbudowanego z L297 i L298, oraz sterowania znajduje się w [3]. Jednak dla celów dydaktycznych, i faktu, że zdobycie tej pozycji nie musi być proste, podaję w tabeli 1 podstawowe znaczenie jego wejść. – CW/CWW - sterowanie kierunkiem ruchem silnika, zgodni, lub przeciwnie do ruch wskazówek zegara – HALF/FULL - wybór sterowania pełnokrokowego, półkrokowego, falowego – CLOCK - każdy impuls na tym wejściu powoduje jeden krok – RESET - ustawia wyjścia układy na wartość początkową ABCD = 0101 – ENABLE - zezwala na działanie silnika 9 Numer złącza 8 7 6 5 10 9 Nazwa portu PB2 PB3 PB4 PB5 PB0 PB1 Numer wejścia 17 18 19 20 10 11 Oznaczenie CW/CWW CLOCK HALF/FULL RESET ENABLE CONTROL Tablica 1: Tabela połączeń mikrokontrolera z L297 – CONTROL - decyduje o tym na których wyjściach będzie kluczowany prąd: INH1, INH2 (CONTROL=0) lub A, B, C, D (CONTROL=1) 2.2.3 Zasilanie Podstawowym układem zasilania jest stabilizator oparty na U785. Opis tego elementu jest w [1], a oznaczenie nóżek, wraz z rzeczywistym widokiem elementu na rysunku 12. Stabilizator, którego schemat można zobaczyć na rysunku 5 jest przeznaczony dla prostego transformatora, ale łatwo jest go dostosować do innego zasilacza. Ja dysponowałem wstępnie zasilaczem antenowym o podawanym stabilnym napięciu ok 14 V i wydajności około 250 mA. Sam element U7805 wymaga zasilania ok 3 V, co znaczy, że w celu uzyskania napięcia 5 V musimy mu podać napięcie większe o co najmniej tą wartość, czyli minimum 8 V. Możemy podać większe napięcie, gdyż nadmiar odłoży się na nim i zostanie wypromieniowanie w postaci ciepła. Dlatego właśnie grzanie się tego elementu jest czymś normalnym. Nie możemy jednak przekroczyć napięcia 30 V. Jeśli tak postąpimy otrzymamy stabilne napięcie oraz prąd do 1 A. Rysunek 12: U7805 - schemat, oraz rzeczywisty element Stabilizator ten wymaga jednak poda napięcia we właściwy sposób. Czyli, potocznie mówiąc, plus na plus, a minus na minus. Nie spełnienie tego koniecznego warunku w skutek ewentualnej pomyłki, spowoduje krótkie życie płytki, a zatem całego elementu. Aby się tego ustrzec, w końcu człowiek omylnym jest, zastosowałem mostek Gretza. Da on pewność, że niezależnie od tego jak podłączymy zasilacz nie popalimy elementu. Jest to związane budową mostka, który sprawi, że niezależnie co podamy mu na wejścia fazowe, na wyjściu dodatnim zawsze będziemy mieli napięcie, a na ujemnym uziemienie. Jeśli nie jest to jeszcze jasne, schemat takiego 10 mostka ukazany na rysunku 13 powinien rozwiać wszelkie wątpliwości. Rysunek 13: Schemat mostku Gretza Dla samej logiki wyżej opisany zasilacz był odpowiedni, jednak po podłączeniu drugiego układu dla mostków mocy, szybko okazało się, że jego wydajność jest za mała. Dlatego po lekkich staraniach zacząłem zasilać układ zasilaczem o napięciu ok 14 V, ale wydajności ok 3,5 A. Jak już napisałem wcześniej w 2.2.2 pobór mocy przez mostki może być duży. Można to było zauważyć przy słabym zasilaczu. Takie zachowanie może zakłócić działanie logiki, jeśli pociągnęlibyśmy zasilanie dla nich z tego samego elementu, co dla mikrokontrolera. Dlatego oczko zasilania mostków pobiera napięcie bezpośrednio z textttmostka Gretza. Tak samo dzieje się z uziemieniem. Rysunek 14: Schemat prostego dzielnika napięcia Ostatnim krokiem w wykonaniu pełnego zasilania było wykonanie dzielnika napięciowego dla wygenerowania odpowiedniego napięci VREF (patrz 2.2.2). Na samym początku założeniem było zastosowanie dzielnika z potencjometrem, w celu regulowania ograniczenia prądu. Jednak z powodu zakupu błędnych elementów, (warto zwrócić uwagę aby nie popełnić tego błędu) zdecydowałem się na prosty dzielnik. Wzór na wyznaczanie napięci wyjściowego generowanego przez dzielnik można znaleźć w równaniu 1. Problemem było dobranie odpowiednich oporników, tak aby zapewnić oczywiście odpowiedni stosunek ich impedancji, ale nie ograniczyć prądu na wejściu 15 L297 do wartości, która zupełnie uniemożliwi działanie. 11 Zatem problem nie wydawał się trywialny. Dane na ten temat znalazłem na forum dyskusyjnym Elektronika [6]. Pokryły się one ponadto, z wyliczeniami wykonanymi przez prowadzącego. Zalecono tutaj zastosowanie oporników o wartościach R1 = 1kΩ, R2 = 3, 9kΩ. Nie posiadając takich wartości zastosowałem odpowiednio R2 = 910Ω, R2 = 3, 6kΩ. Zgodnie ze wzorem 1 uzyskamy wartość napięcie wyjściowego, a tym samym referencyjnego VREF o wartości ok 1, 0089V. Poza tym ograniczyć prąd można dobraniem innych oporników RS1 i RS2 . Jest to może nawet łatwiejsze niż wykonanie dzielnika, dlatego zainteresowanych odsyłam na stronę internetową [6]. R2 (1) R1 + R2 Zatem to zapewni nam właściwe ograniczenie prądu, przy zapewnieniu, że sam silnik będzie miał go na tyle, aby w ogóle się obracać. Uwy = Uwe 2.2.4 RS232 i COM Rysunek 15: Konwerter RS232 Ostatnim zasadniczym układem do wykonania jest układ komunikacji z komputerem. Jest on o tyle istotny, iż zapewni nie tylko, możliwość przesyłania danych, ale, w moim przypadku, przede wszystkim możliwość programowania mikrokontrolera. Jest to związane z tym, iż nie posiadam własnego złącza TBDMLdo komunikacji przez BDM, ani czasu, by je wykonać. Dlatego wykonane zostały 2 COM’y. Jeden z nich (COM0) domyślnie przeznaczony jest do połączenia z CodeWariorem dla mikroprocesorów HC12. Drugi (COM1) służy do komunikacji z komputerem. Może się to wydawać trywialne, ale wykonana połączenie nie musi się takie okazać. Wykonując kolejne kroki możemy popełnić błąd w kilku miejsca. Na pewno spowoduje to złe, lub brak działania interfejsu, a nawet jego zniszczenie. Dlatego w dalszej części opiszę problemy z jakim sie spotkałem, i błędy które popełniłem. Schemat podłączenia konwertera do komunikacji z interfejsem RS232 jest ukazany na rysunku 6. Można go również znaleźć w [2]. Widok fizycznej płytki natomiast można zobaczyć na rysunku 15 Maxim zasilany jest takim samym napięciem jak płytka z mikrokontrolerem, zatem nie ma dla niego problemu z tym aspektem. Zasilanie podłączone jest do 12 nóżki 16. Uziemienie natomiast do nóżki 15. Po wykonaniu połączeń układu scalonego z kondensatorami, oraz opornikami, łatwo można zobaczyć, czy wszystko działa prawidłowo. Do tego wystarczy nam zwykły miernik. Włączamy zasilanie i sprawdzamy napięci pomiędzy nóżkami 15 → 16, 2 → 15, oraz 6 → 15. Na pierwszej parze powinno odłożyć się napięcie zasilania, czyli w naszym przypadku 5 V. Pomiędzy pozostałymi parami nóżek powinniśmy zauważyć wartość ok 9 V. Jeśli ten etap jest już za nami, warto jest połączyć maxima z mikrokontrolerem. Na wejścia T1IN, oraz T2IN, czyli nóżki 11 i 10, podłączamy porty służące do wysyłania danych z mikroprocesora TxD. Z kolei do wyjść R1OUT i R2OUT, czyli do nóżek 12 i 9, dołączamy porty odbioru informacji RxD. Para T1IN i R1OUT domyślnie obsługuje port COM0. Porty komunikacji na płytce znajdują się na złączach lewych SVL (patrz rysunek 8). Dokładne połączenie Maxima z mikrokontrolerem przedstawia tabela 2. Numer złącza 32 31 34 33 Nazwa portu TxD0 RxD0 TxD1 RxD1 Numer nóżki Max’a 11 12 10 9 Oznaczenie T1IN R1OUT T2IN R2OUT Tablica 2: Tabela połączeń mikrokontrolera z MAXIM’em Połączenia te warto jest sprawdzić dwa razy, ponieważ jest to właśnie krok, w którym można się łatwo pomylić. Jeśli się okaże, że element nie będzie działać a przyczyna jest właśnie tu, może się okazać, że przylutowanie, z powodu plątaniny kabli, będzie dość uciążliwe. Dalszym krokiem jest połączenie MAX’a z komputerem. Jednak aby tego dokonać musimy najpierw podłączyć go do gniazda na płytce, a następnie kablem do komputera wykorzystując męskie złącze 9-cio pinowe. Jako, że męskie, lub żeńskie złącza RS232 są dość niewymiarowe, a umieszczenie ich na płytce jest dość problematyczne, za namową, zdecydowałem się na zastosowanie złącza 10-cio (patrz rysunek 16, które jest łatwe do wlutowania na płytkę, a następnie podłączyć je w taki sposób, aby odpowiadały wtyką męskim w komputerze. Rysunek 16: Dziesięciopinowe złącze Aby zapewnić właściwe podłączenie musiałem określić właściwą numerację. 13 Okazało się, że numer 2, którym pójdzie sygnał RxD, to drugi pin licząc od strony lewej, po stronie ściany z wyciętym ókienkiem”. Ściana ta jest widoczna na rysunku 16. Wywnioskować to można wykonując kabel połączenia urządzenia z komputerem, o czym napiszę niżej. Numery 1, 3, 4 i 5 znajdują się w tym samym rzędzie. Pozostała numeracja jest analogiczna, jednak w naszym przypadku pozostałe piny nie mają znaczenia. Pinem o numerze 3 pójdzie sygnał TxD, a do pinu 5 podłączone zostanie uziemienie. Dokładne połączenie Maxima ze złączem pokazuje tabela 3, a widok męskiego gniazda w komputerze wraz z opisem pinów pokazuje rysunek 17 pobrany z [7]. Numer nóżki Max’a 14 13 Oznaczenie T1OUT R1IN Numer pinu 2 3 Oznaczanie RxD TxD Tablica 3: Tabela połączeń MAXIM’a ze złączem dziesięciopinowym Rysunek 17: Męskie złącze RS232 Należy zauważyć, że to co z mikrokontrolera jest sygnałem wejściowym, dla komputera jest sygnałem wejściowym. Prosta zasada, ale podczas połączenia może narobić problemów. Dlatego radzę sprawdzić połączenia dwa razy. Ostatnim etapem jest połączenie urządzenia z komputerem. Do tego celu musimy wykonać lub zakupić odpowiedni kabel. Jak polecam wykonać, gdyż jest to tańsze, i mamy pewność, że wykonamy wszystko dobrze. Kabek, który użyję ma 10 połączeń co odpowiada złączu na płytce. Dla żeńskiego złącza RS232 po jednym z niego końców musimy odciąć jedną szynę. Szyna o numerze 1, czyli podłączona do pina 1 jest oznaczona czerwonymi paskami. Jeśli złączymy kabel z żeńskim złączem, to należy pamiętać, że od numeru 1, czyli oznaczonego, kolejne szyny nają numery: 1-6-2-7-3-8-4-9-5. Dlatego, jeśli teraz połączymy kabel z wtykiem złącza dziesięciopinowego, tak, aby szyna numer jeden była po lewej stronie ściany wtyku z wypustem, okaże się, że na ścianie tej mamy kolejne numery. Dla złącza jest to ściana z wyciętym óknem”. W ten sposób wiem już jak połączyć złącze na płytce. Zdjęcie kabla pokazuje rysunek. 14 Rysunek 18: Kabel łączący urządzenie z komputerem Jeśli wszystko wykonaliśmy dobrze, to możemy się już cieszyć połączenie z komputerem i zabrać się za programowanie naszego urządzenia. 3 Oprogramowanie Wstępne założenia wyznaczały dość ambitny plan pełnej wizualizacji komunikacji pomiędzy płytką, a komputerem. Jednak z powodu, po pierwsze problemów z samym fizycznym wykonaniem płytki, a potem z oprogramowaniem, umniejszyło ten cel znacząco. Czas poświęcony na wykonanie elementu był czasem straconym patrząc przez pryzmat programowania. Gdy wreszcie urządzenia zaczęło działać i możliwe było zajęcie się sprzęganiem go z komputerem okazało się, że pojawiły się błędy w procedurach pobierających i wysyłających dane z płytki. Mikrokontroler w ogóle nie pobierał danych a błędna deklaracja zegara dla połączenia o szybkości 9600 b/s sprawiła, że odbierane przez komputer dane nie miały nic wspólnego z wysyłanymi. Z tej przyczyny jedyne co udało mi się zrobić w celu zapewnienia choćby złudnej wizualizacji danych z urządzenia, było napisanie programu, który pobiera zaledwie jeden znak. Poniżej załączam listing tego programu, jednak bez programów, z których korzysta. Programu płytki nie zamieszczam wcale, gdyż est on dość obszerny, i w celu zrozumienia wymaga pokazania dodatkowych plików. #include "rs232.hh" #include <cstdio> static int COM; main(){ char z[3]; char buf[100]; char zn; int i, j; int h, min, sec, tick; 15 // init COM COM=OpenCom(1); SetCom(COM); SetBaudRate(COM,9600); SetParity(COM,"NONE"); SetXONXOFF(COM,"DISABLE"); SetStopBits(COM,1); SetDataBits(COM,8); // odczyt while(1) { //printf("Podaj zank\n"); //scanf("%c",zn); //printf("Wysylam znak!\n"); //Send(COM,"s"); //printf("Wyslano znak!\n Odbieram dane!\n"); j = 0; for(i=0; i<1; i++) { Receive(COM,z,1,0); //printf("Cos odbieram\n"); printf("%c %d\n",z[0],z[0]); buf[i++]=z[0]; } //printf("Jestem poza petla"); /* buf[i]=’\0’; sscanf(buf,"%02d :%02d :%02d", &h,&min,&sec); printf(buf,"%02d: %02d :%02d\n", h,min,sec); */ } // close COM FlushCom(COM); CloseCom(COM); }; 4 Posumowanie Na koniec zamieszczam krótkie podsumowanie tego, co faktycznie udało się zrobić, jak również tego, co warto jest wykonać. 16 Przede wszystkim muszę stwierdzić, że cel dydaktyczny został osiągnięty nawet z nadwyżką. Jako osoba, która z praktyczną elektroniką styka się w zasadzie po raz pierwszy, więc zaczynająca od zera, jestem zadowolony z poczynionych postępów. Z powodu ograniczonej ilości czasu, jak również nieprzewidzianych trudności, czasochłonnych do rozwiązania, nie wszystko udało mi się wykonać. Jednak nie jest to przeszkodą do ukończenia projektu w przyszłości, oraz wykorzystania zdobytej wiedzy. Przede wszystkim sama płytka mikrokontrolera działa. Mikrokontroler jest właściwie zasilany i podłączony. Co znaczy, że sam zasilacz działa prawidłowo, pomimo zasilacza o napięciu ponad 14 V, oraz wydajności ok 3,5 A. Taka sama sytuacja ma miejsce w przypadku Max’a, który umożliwia bezproblemową komunikacje z komputerem, w celu programowania mikroprocesora, oraz wysyłania o odbierania danych. Dzielnik napięcia, oraz mostki również są połączone właściwie. Głównym elementem do wykonania jest faktyczne sterowanie silnikiem, a zatem, przede wszystkim, napisanie odpowiedniego oprogramowania. Co więcej z powodu błędnego połączenia diod istnieje podejrzenie że mostek L298 uległ uszkodzeniu z powodu nagłego wzrostu temperatury. Nie byłem w stanie sprawdzić tego faktu, co sprawiło, że nie byłem też w stanie testować ewentualnego oprogramowania. W przyszłości przy wykonaniu podobnych projektów zwrócę uwagę głównie na łączenie elementów w taki sposób, aby kable przylegały maksymalnie do płytki. Ponadto więcej czasu poświęcę samemu planowaniu rozmieszczenia elementów, czy nawet zajmę się zaprojektowaniem specjalnej płytki, a nie wykorzystywaniem uniwersalnych, nie zawsze dających możliwości łatwego dołączeni do niej elementów. Jeśli natomiast chodzi o oprogramowanie, następnym razem, poświęcę mu więcej czasu, którego tym razem, z powodu nieprzewidzianych trudności z płytką, nie miałem. Prawdopodobne wyeliminowanie błędów w funkcjach program w mikrokontrolerze, pozwolą mi się zając nie zapewnieniem faktu działania czegokolwiek, ale poświęcenia się faktycznie wizualizacji. Literatura [1] Projektowanie systemów mikroprocesorowych Paweł Hadam Wydawnictwo btc Warszawa 2004 (str 23 - 27) [2] Projektowanie systemów mikroprocesorowych Paweł Hadam Wydawnictwo btc Warszawa 2004 (str 81 - 83) [3] Silniki elektroniczne w praktyce elektronika Jacek Przepiórkowski Wydawnictwo btc Warszawa 2007 ( str 64 - 79) [4] http://rab.ict.pwr.wroc.pl/ mw/Proj/index.html - Moduł z mikrokontrolerem MC9S12A64 ( lub MC9S12A32 ) ( SPR 11/2005 ) [5] www.frescale.com - strona domowa firmy Freescale [6] http://www.cnc.info.pl/topics12/jaki-jest-wzor-na-dobieranie-dzielnika- przyl297-vt2041.htm [7] http://pl.wikipedia.org/wiki/RS-232 17