Mikro-sieć dla HC05
Transkrypt
Mikro-sieć dla HC05
Mikro-sieć dla HC05 DAWID P IOTROWSKI Spis treści 1 Transmisja 3 2 Algorytm i fragmenty programu 2.1 Ogólny algorytm odbierania trnsmitowanego sygnału . . . . . . . 2.2 Realizacja sterowania silnikiem . . . . . . . . . . . . . . . . . . . 2.3 Odczytanie sygnału . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 5 6 3 Rozwiazania ˛ techniczne 3.1 Modulacja sygnału . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Układ zasilajacy ˛ silnik . . . . . . . . . . . . . . . . . . . . . . . 8 8 8 4 Uwagi końcowe 9 Założenia projektowe Projekt zakładał stworzenie komunikacji mi˛edzy 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ł sterujacy ˛ przez zasilanie po szynie. Niestety wyst˛epuja˛ tu spore zakłócenia podczas ruchu kolejki po szynach. Dlatego najprostszym sygnałem w tym przypadku okazał si˛e sygnał taki prawie analogowy tzn. szerokość sygnału wysyłanego w stanie wysokim jest proporcjonalna do pr˛edkości silnika odpowiedniej kolejki, ciagły ˛ sygnał oznacza prac˛e 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˛esto wysyłać sygnał sterujacy. ˛ Nast˛epny problem polega na tym, aby każdy z mikrokontrolerów dokładnie wiedział który sygnał jest przeznaczony tylko dla niego. Rozwiazanie ˛ jest bardzo proste; każdy z kontrolerów odbiera tylko sygnał z odpowiednim dla siebie okresem. Pojedynczy impuls sygnału sterujacego ˛ jest równy 1/10 okresu. Aby si˛e uchronić przed bł˛ednym zinterpretowaniem sygnału lub przed zakłóceniami należy uwzgl˛ednić pewna˛ tolerancj˛e. 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 2.1 Algorytm i fragmenty programu Ogólny algorytm odbierania trnsmitowanego sygnału Start SEI Obliczenia N N T_okr=OKRES ? T Co do tolerancji T N Liczymy PWM T N T CLI Rysunek 2: Algorytm odbierania transmitowanego sygnału. 4 2.2 Realizacja sterowania silnikiem TIMER_ISR: lda syg_pwm cpm #0 beq GAS inc tim_counter cmp tim_counte bne SPRAWDZ_OKRE bclr 7,porta SPRAWDZ_OKRES: lda #OKRES cmp tim_counter bne KONIEC_T bset 7,porta clr tim_counter bra KONIEC_T GAS: bclr 7,porta KONIEC_T: bset 3,tscr rti ;ta etykieta wykorzystana jest do inicjacji ;wektora przerwan od timera, tu zaczyna sie ;procedura obslugi tych przerwan ;sprawdźmy pwm ;jezeli pwm=0 to gasimy silnik ;zwieksz licznik przerwan zegarowych ;porownanie tim_counter z pwm ;sprawdzmy okres ;jeżeli jesteśmy na końcu pwm gasimy silnik ;sprawdzanie tim_counter z okresem PWM ;koniec przerwania ;jeżeli jesteśmy na końcu okresu zapalamy silnik ;wychodzimy ;gasimy silnik ;zgas flage przerwania zegarowego ;wroc z obslugi przerwania 5 2.3 Odczytanie sygnału START jsr WAIT1S: jsr jsr dec bne init ;wywolanie podprogramu inicjacji ;demko zmieniajace ˛ pwm od 10 do 0 POCZEKAJ POCZEKAJ syg_pwm 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łaczone ˛ przerwania ;na poczatek ˛ zgaśmy silnik ;dioda sygnalizujaca ˛ 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 OBLICZENIA: cli lda T3 sub T1 sta T_okr lda T2 sub T1 sta T_szer lda #123 sub T_okr bmi ZGASDIODE sub #TOLERANCJA bpl ZGASDIODE bclr 4,PORTA lda #100 sta zly clr licznik lda T_szer ODEJMUJEMY: inc licznik sub #12 cmp #0 bpl ODEJMUJEMY dec licznik lda licznik sta syg_pwm bra CZEKAJ1 lda porta bra tag ;zczytujemy licznik ;T3-T1 -> okres pwm ;T2-T1 -> szerokość impulsu ;if 123-T_okr < 0 to zgas ;if 123-T_okr-TOLERANCJA > 0 to zgas ;zapal diode testowa ;zliczanie pwm ;pojedynczy impuls trwa 12us ;zawsze mamy o jeden wiecej ;odczyt aktualnej wartosci portu A do AccA ;powrot do petli bez konca 7 3 3.1 Rozwiazania ˛ techniczne 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˛ecia jak to jest pokazane niżej na rysunku.Sygnał jest modulowany, a nast˛epnie w każdym modelu lokomotywy powinien znajdować si˛e demodulator, który poda sygnał sterujacy ˛ mikrokontrolerowi. Zasilacz M 5V Demodulator HC05 Modulator AM Rysunek 3: Sygnał sterujacy. ˛ 3.2 Układ zasilajacy ˛ silnik 750 BC639 360 6k BC548B 1k M Rysunek 4: Schemat ogólny układu zasilajacego ˛ silnik. 8 4 Uwagi końcowe Podsumowujac ˛ projekt chciałbym zwrócić uwag˛e na dwie rzeczy, po pierwsze w niektórych zastosowaniach użycie modelu MC68HC705J1A, może okazać si˛e nie zawsze udanym pomysłem ze wzgl˛edu na bł˛edy 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. Chcac ˛ odebrac transmitowany sygnał sterujacy ˛ gasiłem przerwania zegarowe komenda˛ sei, odczytywałem kolejno czas pojawienia si˛e zbocza narastajacego, ˛ opadajacego ˛ i ponownie narastajacego. ˛ Po tej procedurze odczytywania komenda˛ 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ł˛edu były zabezpieczenia przed stanem cały czas wysokim albo niskim. Ponieważ jedna instrukcja może trwać średnio 1, 5µs wobec tego bład ˛ nasz może wrosnać ˛ nawet do 5µs powodujac ˛ zły odczyt sygnału. Spraw˛e t˛e rozwiazałby ˛ kontroler zaopatrzony w INPUT CAPTURE i OUTPUT COMPARE, i nawet sa˛ takie mikrokontrolery z rodziny HC05. Funkcja˛ IC odczytywalibyśmy sygnał transmitowany, a OC byśmy nadawali sygnał PWM do silnika. Chcac ˛ aby nasz układ mógł posłużyć do odbierania sygnałów wysyłanych pocia˛ 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