Lokalizator ultradźwiękowy z wykorzystaniem magistrali 1-wire.pdf

(269 KB) Pobierz
Microsoft Word - Wnuk_spr.doc
Lokalizator ultradźwiękowy
Arkadiusz Materek
7 czerwiec 2006
1. Cel projektu
Celem projektu było zapoznanie się z działaniem sonarów ultradźwiękowych
i ich własnościami, oraz zapoznaniu się z komunikacją miedzy
mikroprocesorami oraz miedzy komputerem PC a mikrokontrolerem.
2. Założenia projektowe
Urządzenie wyposażone będzie w trzy niezależne odbiorniki
ultradźwiękowe, każdy z nich wyposażony w mikrokontroler, główny
mikrokontroler odpowiedzialny za komunikację z odbiornikami i
komputerem PC, oraz sterowaniem nadajnikiem ultradźwiękowym.
Użytkownik obsługujący lokalizator z poziomu PC, będzie miał możliwość
wykonania pomiaru oraz odczytania wyników i na podstawie znajomości
położenia odbiorników określenia pozycji nadajnika.
3. Odbiornik ultradźwiękowy
Celem było zaprojektowanie prostego odbiornika. Do tego celu
wykorzystano mikrokontroler ATtiny12, mikrofon ultradźwiękowy, jeden
rezystor i kondensator.
Własności ATtini12:
- posiada komparator analogowy
-wewnętrzny oscylator 1.2Mhz
- 32 rejestry ogólnego przeznaczenia
- 1KB FLASH
- 64 Bajty EEPROM
- Tirem/Licznik 8mi bitowy z programowalnym preskalerem
- Watchdog
1
Rysunek 1. Schemat odbiornika
Zasada działania odbiornika ultradźwiękowego:
Mikrofon podłączony jest bezpośrednio na wejścia komparatora
analogowego równolegle z rezystorem 470kΩ. Piny PB0 i PB1 (wejścia
komparatora), gdy nie wykonywany jest pomiar ustawione są jako wyjścia w
stanie niskim, co powoduje szybkie rozładowanie mikrofonu. Podczas
pomiaru przełączane są na wejścia w stanie wysokiej impedancji.
Mikrokontroler dokonuje pomiar czasu od momentu otrzymania impulsu
synchronizującego do momentu ustawienia bitu ACO w rejestrze ACSR (bit
odzwierciedla aktualny stan komparatora) lub przepełnienia licznika.
Czas od sygnał synchronizującego (zbocze opadające na PB2) do zliczania
czasu wynosi ok. 5μs. Stan komparatora sprawdzany jest co ok. 5μs, co przy
liczniku 8-bitowy daje pomiar czasu do 1,28ms (przy prędkości dźwięku 340
m/s odległość 43,52cm).
Kod w asemblerze realizujący wyżej opisaną procedurę:
Pomiar:
;czekamy na sygnal synchronizujacy
Pomiar2: sbic PINB, Wire
rjmp Pomiar2
;przelaczenie pinow komparatora z wyjsc na wejscia
in r16, DDRB
andi r16, ~((1<<PB0)|(1<<PB1))
out DDRB, r16
;pomiar czasu
clr r20
Pomiar0: sbic ACSR, ACO
rjmp Pomiar1
nop
inc r20
brne Pomiar0
Pomiar1: dec r20
2
217708919.001.png
;przelaczenie pinow komparatora z wejsc na
;wyjscia w stanie niskim
in r16, DDRB
ori r16, ((1<<PB0)|(1<<PB1))
out DDRB, r16
ret
4. Nadajnik ultradźwiękowy
Nadajnik jest zbudowany na układzie MAX232. Zadaniem tego układu jest
wytworzenie odpowiedniego dla poprawnego działania sonaru napięcia,
które powinno wynosić ok. 20V, co zapewnia wyżej wymieniony układ.
Rysunek 2. Schemat nadajnika
Na wejście T1IN podawany jest sygnał prostokątny 0-5V o częstotliwości
40kHz, a na wejście T2IM jego negacja, co daje różnice napięć na wyjściach
T1OUT i T2OUT ok. 20V. Tranzystor T1 oraz oporniki R1 i R2 tworzą
bramkę NOT.
5. Obwód głównego mikrokontrolera
Jako głównego mikrokontrolera użyto ATtini2312.
Własności ATtini2313:
- 2kB pamięci FLASH
- 128 bajtów pamięci EEPROM
- 128 bajtów RAM
- jeden tirem 8-bitowy z (2xPWM, 2xOC)
- jeden 16-bitowy (2xPWM, 2xOC, IC)
3
217708919.002.png
- USART
- USI
- Watchdog
Rysunek 3. Schemat głównego obwodu
Mikrokontroler jako źródła zegara używa zewnętrzny kwarc o częstotliwości
8Mhz. W tym celu należy odpowiednio ustawić bity konfiguracyjne (patrz
dokumentacja ATtini2313 str. 23 i 24).
a) Obsługa nadajnika
Do nadajnika podawany jest sygnał prostokątny o częstotliwości 40kHz
generowany przy pomocy funkcji Output Compare timera 0. Wycie OC
znajduje się na pinie 2 portu B.
Konfiguracja Timera 0 w trybie CTC z przerwaniem:
ldi r16, (1<<COM0A0)|(1<<WGM01)
out TCCR0A, r16 ;PB2 – wyjcie OC
ldi r16, 100 ;stala przy ktorej licznik sie zeruje
out OCR0A, r16
ldi r16, (1<<OCIE0A) ;odblokowanie przerwania
out TIMSK, r16
Włączenie timera 0 taktowanego, co jeden takt zegara odbywa się przez
ustawienie bitu CS00 w rejestrze TCCR0B.
W funkcji obsługi przerwania dekrementowany jest licznik, a gdy
osiągnie wartość 0 to tirem zostaje wyłączony. Rozwiązanie takie
możliwość wysłania określonej liczby okresów fali.
4
217708919.003.png
Funkcja obsługi przerwania OC0
ObslugaOC0:
in r3, SREG ;zapamietanie resjestru flag
dec r24 ;zminiejszenie licznika
brne ObslugaOC00
out TCCR0B, r24 ;jesli r24==0 to wylaczamy timer
ObslugaOC00:
out SREG, r3 ;przywrocenie rejestru flag
reti
Do poprawnego wykorzystania funkcji trzeba zainicjować rejestr r24
podwójną liczbą wysyłanych okresów fali oraz do rejestru licznika
TCNT0 wpisać wartość taka samą jak w rejestrze TCCR0A, aby wymusić
przerwanie zaraz po włączeniu timera.
b) Procedura pomiaru sonarem
Do wszystkich odbiorników jednocześnie wysyłana jest komenda
oczekiwania na sygnał synchronizujący, następnie wysyłana jest fala
ultradźwiękowa i zboczem opadającym synchronizowany pomiar czasu
przez odbiorniki (ta sama linia, co do magistrali 1-wire). Należy poczekać
na zakończenie pomiarów np. 5ms i odczytujemy kolejno z odbiorników
zmierzone wartości przez z magistrali 1-wire.
Przykładowa implementacja:
WykonajPomiary:
push r16
push r17
push r18
cli ;zablokowanie przeran
ldi r18, 0x00 ;adres wszystkich urzadzen
rcall wire_w ;wysylamy adres do sonarow
ldi r18, SonarPomiar
rcall wire_w ;wysylamy komende do sonarow
sei ;odblokowanie przerwan
;wysylamy fale
ldi r24, 16
ldi r17, 100
out TCNT0, r17
ldi r17, (1<<CS00)
out TCCR0B, r17 ;wlaczenie timera
;czekamy na wyslanie fali
Pomiary2: tst r24
brne Pomiary2
;zbocze synchronizujace
cbi PORTD, PD6
delay 40
sbi PORTD, PD6
;czekamy ok. 5ms
5
Zgłoś jeśli naruszono regulamin