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