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