Mikro-sieć dla HC05 DAWID PIOTROWSKI
Spis treści 1 Transmisja 3 2 Algorytm i fragmenty programu 4 2.1 Ogólny algorytm odbierania trnsmitowanego sygnału....... 4 2.2 Realizacja sterowania silnikiem................... 5 2.3 Odczytanie sygnału......................... 6 3 Rozwiazania techniczne 8 3.1 Modulacja sygnału......................... 8 3.2 Układ zasilający silnik....................... 8 4 Uwagi końcowe 9
Założenia projektowe Projekt zakładał stworzenie komunikacji między mikrokontrolerami z rodziny HC05 oraz ich ewentualne zastosowanie do sterowania modelami kolejki na makiecie lub do odpalania pocisków na kostiumach aktorów na planie filmowym. 1 Transmisja W głównej mierze problem polegał na wymyśleniu prostego sposobu transmisji odpornego na zakłócenia, gdyż w przypadku pierwszego zastosowania to znaczy komunikacji z poszczególnymi lokomotywami chcielibyśmy wysyłać sygnał sterujący przez zasilanie po szynie. Niestety występują tu spore zakłócenia podczas ruchu kolejki po szynach. Dlatego najprostszym sygnałem w tym przypadku okazał się sygnał taki prawie analogowy tzn. szerokość sygnału wysyłanego w stanie wysokim jest proporcjonalna do prędkości silnika odpowiedniej kolejki, ciągły sygnał oznacza pracę silnika na pełnych obrotach, przerwa w sygnale lub jego zanik powoduje zgaszenie silnika. Aby kolejka nie przerywała swojego ruchu należy odpowiednio często wysyłać sygnał sterujący. Następny problem polega na tym, aby każdy z mikrokontrolerów dokładnie wiedział który sygnał jest przeznaczony tylko dla niego. Rozwiązanie jest bardzo proste; każdy z kontrolerów odbiera tylko sygnał z odpowiednim dla siebie okresem. Pojedynczy impuls sygnału sterującego jest równy 1/10 okresu. Aby się uchronić przed błędnym zinterpretowaniem sygnału lub przed zakłóceniami należy uwzględnić pewną tolerancję. t > syg. ster. 1 2 3 4 5 6 7 8 9 10 1 2 T > Okres tolerancja Rysunek 1: Modulacja sygnału. 3
2 Algorytm i fragmenty programu 2.1 Ogólny algorytm odbierania trnsmitowanego sygnału Start SEI Obliczenia T N T_okr=OKRES? N N Co do tolerancji T T Liczymy PWM N T CLI Rysunek 2: Algorytm odbierania transmitowanego sygnału. 4
2.2 Realizacja sterowania silnikiem TIMER_ISR: ;ta etykieta wykorzystana jest do inicjacji ;wektora przerwan od timera, tu zaczyna sie ;procedura obslugi tych przerwan lda syg_pwm ;sprawdźmy pwm cpm #0 beq GAS ;jezeli pwm=0 to gasimy silnik inc tim_counter ;zwieksz licznik przerwan zegarowych cmp tim_counte ;porownanie tim_counter z pwm bne SPRAWDZ_OKRE ;sprawdzmy okres bclr 7,porta ;jeżeli jesteśmy na końcu pwm gasimy silnik SPRAWDZ_OKRES: lda #OKRES cmp tim_counter ;sprawdzanie tim_counter z okresem PWM bne KONIEC_T ;koniec przerwania bset 7,porta ;jeżeli jesteśmy na końcu okresu zapalamy silnik clr tim_counter bra KONIEC_T ;wychodzimy GAS: bclr 7,porta ;gasimy silnik KONIEC_T: bset 3,tscr rti ;zgas flage przerwania zegarowego ;wroc z obslugi przerwania 5
2.3 Odczytanie sygnału START jsr init ;wywolanie podprogramu inicjacji WAIT1S: ;demko zmieniające pwm od 10 do 0 jsr POCZEKAJ jsr POCZEKAJ dec syg_pwm bne WAIT1S tag lda #00\\ sta copr sei bclr 7,PORTA ZGASDIODE: bset 4,PORTA dec zly lda zly beq tag CZEKAJ0: cli sei lda #112 CZEKAJ1: deca beq CZEKAJ0 bil CZEKAJ1 lda TCR sta T1 lda #112 CZEKAJ2: deca beq CZEKAJ0 bih CZEKAJ2 lda TCR sta T2 lda #112 CZEKAJ3: deca beq CZEKAJ0 bil CZEKAJ3 ;wyzerowanie licznika COP-watchdog ;wyłączone przerwania ;na początek zgaśmy silnik ;dioda sygnalizująca poprawność odbioru sygnału ;zapal diode ;jeżeli N razy otrzymaliśmy sygnał nie do nas ;to wracamy pogłaskać WATCHDOG a ;zezwalamy na przerwanie ;blokujemy od razu ;jeżeli przez dłuższy czas nie mamy ;konkretnego sygnału to cofnij ;czekamy na zbocze wysokie ;zczytujemy stan licznika ;czekamy na stan niski ;zczytujemy stan licznika ;czekamy na stan wysoki 6
lda TCR sta T3 ;zczytujemy licznik OBLICZENIA: cli lda T3 sub T1 sta T_okr ;T3-T1 -> okres pwm lda T2 sub T1 sta T_szer ;T2-T1 -> szerokość impulsu lda #123 sub T_okr bmi ZGASDIODE ;if 123-T_okr < 0 to zgas sub #TOLERANCJA bpl ZGASDIODE ;if 123-T_okr-TOLERANCJA > 0 to zgas bclr 4,PORTA ;zapal diode testowa lda #100 sta zly clr licznik lda T_szer ODEJMUJEMY: ;zliczanie pwm inc licznik sub #12 ;pojedynczy impuls trwa 12us cmp #0 bpl ODEJMUJEMY dec licznik ;zawsze mamy o jeden wiecej lda licznik sta syg_pwm bra CZEKAJ1 lda porta ;odczyt aktualnej wartosci portu A do AccA bra tag ;powrot do petli bez konca 7
3 Rozwiazania techniczne 3.1 Modulacja sygnału Tak jakby w podtekscie tematu tego projektu jest sterowanie obiektami na kolejce elektrycznej. Wobec tego zasadnicze pytanie w jaki sposób przesłać sygnał do kontrolera tak aby sygnał był w miare stabilny. Pomysł był taki, aby podawać sterowanie przez tory, czyli przez zasilanie. możemy użyć do tego monolitycznego stabilizatora napięcia jak to jest pokazane niżej na rysunku.sygnał jest modulowany, a następnie w każdym modelu lokomotywy powinien znajdować się demodulator, który poda sygnał sterujący mikrokontrolerowi. Zasilacz M Modulator AM Demodulator 5V HC05 Rysunek 3: Sygnał sterujący. 3.2 Układ zasilajacy silnik 750 360 BC639 6k 1k BC548B M Rysunek 4: Schemat ogólny układu zasilającego silnik. 8
4 Uwagi końcowe Podsumowując projekt chciałbym zwrócić uwagę na dwie rzeczy, po pierwsze w niektórych zastosowaniach użycie modelu MC68HC705J1A, może okazać się nie zawsze udanym pomysłem ze względu na błędy powstałe podczas wyłapywania sygnałów od innego kontrolera i obsługiwania innego zdarzenie. W naszym wypadku tym zdarzeniem było wysyłanie sygnału PWM do silnika w przerwaniach zegarowych. Chcąc odebrac transmitowany sygnał sterujący gasiłem przerwania zegarowe komendą sei, odczytywałem kolejno czas pojawienia się zbocza narastającego, opadającego i ponownie narastającego. Po tej procedurze odczytywania komendą cli odblokowywałem przerwania. Przez cały czas odczytywania sygnału silnik nie otrzymywał PWM a, przez co praca silnika nie była równomierna. Innym źródłem błędu były zabezpieczenia przed stanem cały czas wysokim albo niskim. Ponieważ jedna instrukcja może trwać średnio 1, 5µs wobec tego błąd nasz może wrosnąć nawet do 5µs powodując zły odczyt sygnału. Sprawę tę rozwiązałby kontroler zaopatrzony w INPUT CAPTURE i OUTPUT COMPARE, i nawet są takie mikrokontrolery z rodziny HC05. Funkcją IC odczytywalibyśmy sygnał transmitowany, a OC byśmy nadawali sygnał PWM do silnika. Chcąc aby nasz układ mógł posłużyć do odbierania sygnałów wysyłanych pociągom na makiecie lub do odpalania pocisków na kostiumie aktora, musimy zadbać o jak najmniejsze gabaryty układu. Aby tego dokonać należy wymienić elementy na mniejsze np. rezystory SMD, diody, kontroler powierzchniowy. Jeśli chcielibyśmy, aby nasz kontroler posiadał funkcje INPUT CAPTURE i OUTPUT COMPARE, można go wymienić na model 68HC711D3 w bardzo małej obudowie 44-leadQFP, który ponadto posiada 16 bitowy licznik co poprawiłoby jakość wyników. 9