1.3 Dalmierz ultradźwiękowy

Transkrypt

1.3 Dalmierz ultradźwiękowy
Białostocka
Politechnika
WYDZIAŁ ELEKTRYCZNY
KATEDRA TELEKOMUNIKACJI I APARATURY ELEKTRONICZNEJ
Instrukcja do zajęć laboratoryjnych
Temat ćwiczenia: Obsługa przerwań. Timery. Dalmierz ultradźwiękowy.
Numer ćwiczenia: 3
Laboratorium z przedmiotu:
Systemy mikroprocesorowe w zastosowaniach przemysłowych i sieciowych
KOD: TS1C6
Opracowali:
dr inż. Maciej Szumski
dr inż. Krzysztof Konopko
2017
1
Wprowadzenie
1.1 Przerwania
Mechanizm przerwań pozwala na natychmiastowe przerwanie pracy mikrokontrolera w
celu obsługi zdarzenia, które wymaga niezwłocznej reakcji. Wstrzymanie może dotyczyć
zarówno głównej pętli programu jak i samych funkcji obsługujących już zgłoszone
przerwania. Sterowanie systemem przerwań realizowane jest przez kontroler przerwań NVIC
(Nested Vectored Interrupt Controller).
Tabela 1.1 zawiera tablicę wektorów przerwań. Z tabeli tej można odczytać pod jakimi
adresami w pamięci znajdują się poszczególne programy obsługi przerwań, a wiec pod jakimi
adresami powinny znaleźć się funkcje, które maja zostać wywołane w momencie wystąpienia
odpowiedniego zdarzenia. Kolejność obsługi przerwań realizowana jest na podstawie
przydzielania poszczególnym zdarzeniom określonych priorytetów (im niższy priorytet
przerwania tym jest ono ważniejsze). Najważniejszym przerwaniem jest przerwanie związane
z resetowaniem mikrokontrolera. Przerwania mogą być obsługiwane natychmiast lub zaraz po
obsłudze ważniejszych przerwań. W mikrokontrolerach rodziny STM32 decyzja zapada na
podstawie numeru przerwania, który tworzą dwa pola: priorytet wywłaszczenia oraz podpriorytet w obrębie priorytetu wywłaszczenia. Oba pola zapisane są na 4 bitach tworząc
razem pięć możliwych podziałów priorytetów przerwań: 0+4, 1+3, 2+2, 3+1, 4+0. Pierwszy
podział powoduje, że wszystkie przerwania maja jednakowy priorytet wywłaszczenia.
Powoduje to, że w przypadku jednoczesnego występowania wielu przerwań wykonywane są
kolejno, od tego z najniższą wartością pod-priorytetu, do tego z największą. Ostatni podział
pozwala na całkowite wyłączenie pod-priorytetów, co prowadzi do wywłaszczania wyłącznie
na podstawie wartości priorytetu. Tryb mieszany, czyli np. 2+2, pozwala na wyznaczenie
przerwań, które muszą zostać obsłużone natychmiastowo (o mniejszym niż inne priorytecie
wywłaszczenia), oraz tych, które mogą zostać obsłużone po innych przerwaniach o tym
samym priorytecie (ustawiając odpowiednio pod-priorytet).
Za obsługę zewnętrznych źródeł przerwań odpowiada układ EXTI (External interrupt / event
controller). Może on zgłosić przerwanie lub zdarzenie. Zdarzenia w przeciwieństwie do
przerwań nie muszą być obsługiwane poprzez wywołanie funkcji obsługi – mogą one
bezpośrednio wywoływać pewną reakcje, np. wybudzić procesor, rozpocząć przetwarzanie
sygnału analogowego na cyfrowy, itp. Co więcej niektóre układy mogą generować wiele
zdarzeń w ramach jednego przerwania. Przykładem takiego układu jest przetwornik
analogowo cyfrowy. Może on generować jedno przerwanie, którego funkcja obsługi musi
zawierać kod sprawdzający jakie zdarzenie je wywołało
Tab. 1.1. Tablica wektorów przerwań
Type of
priority
-3 fixed
Position Priority
-
-
-
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
10
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
43
49
50
51
52
53
54
55
56
57
58
59
Acronym
Description
Address
Reset
0x0000_0000
0x0000_0004
-2 fixed
NMI
-1
0
1
2
fixed
settable
settable
settable
HarcFault
MemManage
BusFault
Us3geFault
Reserved
Reset
Non maskable interrupt. The RCC Clock Security System (CSS) is linked
to the NMI vector.
All Cl3SS of fault
Memory management
Prefetch fault, memory access fault
Undefined instruction or illegal st3te
-
-
Reserved
SVCall
Debug Monitor
PendSV
SysTick
WWDG
PVD
TAMPER
RTC
FLASH
RCC
EXTIO
EXTI1
EXTI2
EXTI3
EXTI4
DMA1_Channei1
DMA1_Channei2
DMA1_Channei3
DMA1_Channei4
DMA1_Channei5
DMA1_Ch3nnei6
DMA1_Channei7
ADC1_2
USB_HP_CAN_ TX
USB LP CAN RXO
CAN_RX1
CAN_SCE
EXTI9_5
TIM1_BRK
TIM1JJP
TIM 1_TRG_C0M
TIM1_CC
TIM2
TIM 3
TIM4
12C1_EV
12C1_ER
I2C2_EV
I2C2_ER
SPI1
SPI2
USART1
USART2
USART3
EXTI15_10
RTCAlarm
USBW3keup
HM8_BRK
TIM8UP
TIMS_TRG_COM
TIM3_CC
ADC3
FSMC
SDIO
TIM5
SPI3
UART4
UART5
TIM6
TIM7
DMA2_Channei1
DMA2_Channei2
DMA2_Channei3
DMA2_ChanneW_5
System service cal via SWI instruction
Debug Monitor
Reserved
Pendable request for system service
System tick timer
Window watchdog interrupt
PVD through EXTI Line detection interrupt
Tamper interrupt
RTC global ntemipt
Flash global ntemjpt
RCC glob3l interrupt
EXTI LineO interrupt
EXTI Linel interrupt
EXTI Line2 interrupt
EXTI Line3 interrupt
EXTI Line4 interrupt
DMA1 Channel1 global interrupt
DMA1 Channel2 global interrupt
DMA1 Channel3 global interrupt
DMA1 Channel4 global interrupt
DMA1 Channel5 global interrupt
DMA1 Channel6 global interrupt
DMA1 Channel7 global interrupt
ADC1 3nd ADC2 global interrupt
USB High Priority or CAN TX interrupts
USB Low Priority or CAN RXO interrupts
CAN RX1 interrupt
CAN SCE interrupt
EXT1 LineiQ:5] interrupts
TIM1 Break interrupt
TIM1 Upd3te interrupt
TIM1 Tigger and Commutation interrupts
TIM1 Capture Compare interrupt
TIM2 global interrupt
TIM3 global interrupt
TIM4 global interrupt
l2C1 event interrupt
l2C1 error interrupt
l2C2 event interrupt
l2C2 error interrupt
SPI1 global interrupt
SPI2 global interrupt
USART1 global interrupt
USART2 global interrupt
USART3 global interrupt
EXT1 Line{15:10] interrupts
RTC alarm through EXTI line interrupt
USB wakeup from suspend through EXTI line interrupt
TIM8 Break interrupt
TIM8 Upd3te interrupt
TIM8 Trigger and Commutation interrupts
TIM8 Capture Compare interrupt
ADC3 global interrupt
FSMC global interrupt
SDK) global interrupt
TIM5 global interrupt
SPI3 global interrupt
UART4 global interrupt
UART5 global interrupt
TIM6 global interrupt
TIM7 global interrupt
DMA2 Channel1 global interrupt
DMA2 Channel2 global interrupt
DMA2 Channel3 global interrupt
DMA2 Channel4 and DMA2 Channel5 global interrupts
3 settable
4 settable
5 settable
6 settable
7 settable
8 settable
9 settable
10 settable
11 settable
12 settable
13 settable
14 settable
15 settable
16 settable
17 settable
18 settable
19 settable
20 settable
21 settable
22 settable
23 settable
24 settable
25 settable
26 settable
27 settable
28 settable
29 settable
30 settable
31 settable
32 settable
33 settable
34 settable
35 settable
36 settable
37 settable
38 settable
39 settable
40 settable
41 settable
42 settable
43 settable
44 settable
45 settable
46 settable
47 settable
43 settable
49 settable
50 settable
51 settable
52 settable
53 settable
54 settable
55 settable
56 settable
57 settable
53 settable
59 settable
60 settable
61 settable
62 settable
63 settable
64 settable
65 settable
66 settable
0x0000_0008
0x0000_000C
0x0000_0010
0x0000_0014
0x0000_0018
0x0000_001c 0x0000_002B
0x0000_002c
0x0000_0030
0x0000_0034
0x0000_0038
0x0000_003c
0x0000_0040
0x0000_0044
0x0000_0048
0x0000_004c
0x0000_0050
0x0000_0054
0x0000_0058
0x0000_005c
0x0000_0060
0x0000_0064
0x0000_0068
0x0000_008c
0x0000_0070
0x0000_0074
0x0000_0078
0x0000_007c
0x0000_0080
0x0000_0084
0x0000_0088
0x0000_008c
0x0000_0090
0x0000_0094
0x0000_0098
0x0000_009c
0x0000_00A0
0x0000_00A4
0x0000_00A8
0x0000_00AC
0x0000_00B0
0x0000_00B4
0x0000_00B8
0x0000_00BC
0x0000_00C0
0x0000_00C4
0x0000_00C8
0x0000_00CC
0x0000_00D0
0x0000_00D4
0x0000_00D8
0x0000_00DC
0x0000_00E0
0x0000_00E4
0x0000_00E8
0x0000_00EC
0x0000_00F0
0x0000_00F4
0x0000_00F8
0x0000_00FC
0x0000_0100
0x0000_0104
0x0000_0108
0x0000.0I0C
0x0000_0110
0x0000_0114
0x0000_0118
0x0000_0HC
0x0000_0120
0x0000_0124
0x0000_0128
0x0000_012c
1.2 Timery
Timer jest układem, który inkrementuje bądź dekrementuje swoja wartość z każdym taktem
sygnału wejściowego. Może pracować w jednym z dwóch trybów: albo w trybie odliczania
impulsów wejściowych albo w trybie pomiaru czasu trwania impulsu. W zależności od
kierunku zliczania można wyróżnić trzy tryby pracy:
• w trybie w górę timer startuje od zera, zlicza do zapamiętanej wartości, wtedy jest
zerowany i cykl się powtarza. Ta wartość jest pamiętana w rejestrze auto-reload
register ARR.
• w trybie w dół timer: startuje od zapamiętanej wartości i jest dekrementowany aż do
osiągniecia zera. Wtedy jest przeładowywany wartością pamiętaną w ARR i cykl się
powtarza.
• w trybie z wyrównaniem centralnym wykonywane jest zliczanie w górę i w dół na
przemian.
Rysunek 1.1 przedstawia schemat konfiguracji timera pracującego w trybie odmierzania
odcinków czasu.
Rys. 1.1. Konfiguracja licznika w trybie odmierzania czasu
16 bitowy licznik CNT jest przeładowywany zawartością rejestru Auto Reload Register ARR.
Timer może być taktowany z:
•
•
•
CK_INT Internal Clock - sygnał TIMxCLK pochodzący z układu RCC,
ETR - sygnał zewnętrzny z pinu procesora TIMxETR,
ITRx - wyjście innego licznika, umożliwia synchronizacje liczników oraz ich
kaskadowe łączenie.
Częstotliwość taktowania może zostać podzielona w 16-bitowym preskalerze PSCs. W
każdym takcie, rejestr CNT jest porównywany jednocześnie z czterema rejestrami CCRx
Capture/Compare Register. W liczniku TIM1 włączone są dodatkowe układy, które
umożliwiają dodanie opóźnień. Funkcja każdego wyjścia może zostać określona przez
ustalenie wartości bitów pola OCxM w rejestrach TIMx CCMR zgodnie z tabela 1.2. W
trybie PWM 1, gdy ustawione jest zliczanie do góry, wyjście rejestru CCRx jest aktywne, gdy
CNT < CCR i nieaktywne, gdy CNT > CCR. Przy zliczaniu w dół jest odwrotnie. W trybie
PWM 2, wyjście jest zanegowane w stosunku do trybu 1. Dzięki obsłudze trybów PWM
możliwa jest generacja sygnału PWM (Pulse-width modulation), czyli sygnału o zmiennej
szerokości impulsu. Sygnały takie znajdują zastosowanie między innymi w sterowaniu
jasnością diod LED czy w kontrolowaniu prędkości obrotowej silnika prądu stałego.
Tab. 1.2. Funkcje wyjścia OCxREF w zależności od wartości bitów pola OCxM
Wartość bitów pola OCM
000
001
010
011
100
101
110
111
wyjście OCxREF rejestru CCRx
zamrożone (nie jest zmieniane)
wysokie gdy CNT = CCR
niskie gdy CNT = CCR
zmiana stanu (toggle) gdy CNT = CCR
wymuszenie stanu niskiego (zawsze niskie)
wymuszenie stanu wysokiego (zawsze wysokie)
Pulse Width Modulation, PWM tryb 1
Pulse Width Modulation, PWM tryb 2
Rysunek 1.2 przedstawia konfigurację kanału timera TIM1 służącego do pomiaru długości
impulsu.
Rys. 1.2. Kanał licznika TIMx skonfigurowany do pomiaru długości impulsu
Każdy licznik ma cztery kanały. Każdy kanał ma pin wejściowy, filtr, układ wykrywania
zbocza i preskaler. Układ wykrywania zbocza (Edge Detector ) można zaprogramować na
wykrywanie tylko zboczy narastających, tylko opadających lub obu. Preskaler umożliwia
zliczane każdego, co drugiego, co czwartego lub co ósmego zbocza. Zadaniem filtru cyfrowy
jest pominiecie stanu nieustalonego sygnału wejściowego. Na przykład, jeżeli odbicia styków
trwają pięć okresów zegara, można zaprogramować filtr na okres testowania sygnału znacznie
dłuższy niż pięć taktów. Jeżeli określona liczba odczytów sygnału (kolejnych próbek) wykaże
ten sam stan, to dopiero wtedy układ uzna sygnał za stabilny.
1.3 Dalmierz ultradźwiękowy
Dalmierz ultradźwiękowy zawiera nadajnik i odbiornik. Nadajnik wysyła krótki sygnał o
częstotliwości 40 kHz, który po odbiciu od przeszkody trafia do odbiornika. Droga przebyta
przez fale: od nadajnika do przeszkody i od przeszkody do odbiornika jest równa podwojonej
odległości czujnika od przeszkody i jest równa połowie iloczynu prędkości fali dźwiękowej w
powietrzu  i czasu t jaki upływa pomiędzy wysłaniem a odbiorem impulsu. Dokładność
pomiaru zależy od dokładności pomiaru czasu oraz od precyzyjnego określenia prędkości fali
dźwiękowej w powietrzu, która zależy od gęstości powietrza, czyli od temperatury, ciśnienia i
wilgotności.
Rys. 1.2. Ultradźwiękowy czujnik odległości HC-SR04
W ćwiczeniu wykorzystywany jest czujnik HC-SR04 (rysunek 1.3). Sposób jego działania
pokazany jest na rysunku 1.4.
Rys. 1.2. Ultradźwiękowy czujnik odległości HC-SR04
Impuls o długości 10 μs podany na wejście Trig powoduje wysłanie ośmiu impulsów o
częstotliwości 40 kHz. Czujnik odpowiada sygnałem na wyjściu Echo. Czas trwania stanu
wysokiego sygnału Echo jest proporcjonalny do odległości od przeszkody i zawiera się w
przedziale od 150 μs do 25 ms. Jeżeli czujnik nie wykryje żadnej przeszkody, to stan wysoki
trwa 38 ms.
2
Cel i zakres ćwiczenia
Celem ćwiczenia jest ugruntowanie wiedzy studentów oraz nabycie przez nich
umiejętności z zakresu podstaw programowania mikroprocesorów. W ramach zajęć studenci
nabywają umiejętności z zakresu obsługi systemu przerwań oraz wykorzystania układów
licznikowo-czasowych (timerów) do zliczania liczby impulsów wejściowych, pomiaru czasu
trwania impulsu oraz generowania sygnału PWM.
Studenci zdobywają umiejętność tworzenia, uruchamiania i testowania oprogramowania
mikrokontrolerów
na
przykładzie
zestawu
ZL29ARM
z
mikrokontrolerem
STM32F107VCT6. Realizowanymi zadaniami w bieżącym ćwiczeniu jest obsługa kontrolera
przerwań NVIC (Nested Vectores Interrupt Controller), obsługa uniwersalnych układów
licznikowo-czasowych oraz sterowanie i obsługa peryferii dostępnych w stosowanym na
ćwiczeniach laboratoryjnych zestawie.
3
Zagadnienia do opracowania przed
przystąpieniem do zajęć
Przed przystąpieniem do zajęć należy opracować następujące zagadnienia:
 konfiguracja kontrolera przerwań NVIC, zegar systemowy SysTick [1 (rozdz. 11)],
 konfiguracja układów licznikowo-czasowych (timerów) [1 (rozdz. 12)],
 konfigurację wyprowadzeń sygnałów z układów licznikowo-czasowych dostępnych w
zestawie ZL29ARM [2, 3],
 obsługa w języku C procedur obsługi przerwań i licznika systemowego SySTick [1
(rozdz. 11.6)],
 obsługa w języku C układów licznikowo-czasowych w zagadnieniach pomiaru czasu
[1 (rozdz. 12.3.)] i pomiaru długości impulsu [1 (rozdz. 12.8)],
4
Przebieg ćwiczenia
Ćwiczenia laboratoryjne prowadzone są w oparciu o zestaw ZL29ARM [2] umożliwiający
realizację aplikacji dla mikrokontrolera STM32F107 (rodzina Connectivity Line).
W trakcie ćwiczeń należy zrealizować następujące zadania:
a) z zastosowaniem systemu przerwań zrealizować procedurę umożliwiającą odczyt
zmianę stanu joysticka i sygnalizację jego położenia za pomocą diod LED (sposób
wizualizacji określa prowadzący),
b) z zastosowaniem układów licznikowo-czasowych napisać program zapalający w
określonym czasie diody LED (sposób wizualizacji określa prowadzący),
c) z zastosowaniem układów licznikowo-czasowych napisać program sterujący, z
zastosowaniem sygnału PWM, jasnością diody LED,
d) z zastosowaniem systemu przerwań oraz układów licznikowo-czasowych zrealizować
procedurę wizualizującą na wyświetlaczu LCD pomiar czasu (sposób wizualizacji
oraz zdarzenia sterujące pomiarem określa prowadzący).
Dodatkowe zadania przydzielone grupie przez prowadzącego:
e) wykonać zestaw zadań przydzielony grupie przez prowadzącego. Realizacja zadań
wymaga znajomości obsługi przerwań, układów licznikowo-czasowych, portów
GPIO, sposobu obsługi wyświetlacza LCD oraz zastosowania czujnika HC-SR04 do
pomiaru odległości.
Każde zrealizowane zadanie należy przedstawić prowadzącemu.
5
Opracowanie sprawozdania
Przygotowane sprawozdanie z zajęć powinno zawierać opis przebiegu ćwiczenia
laboratoryjnego w tym kody źródłowe procedur wraz z opisem i analizą działania.
Sprawozdanie powinno też zawierać wnioski dotyczące realizacji poszczególnych punktów
ćwiczenia laboratoryjnego.
6
Wymagania BHP
W trakcie realizacji programu ćwiczenia należy przestrzegać zasad omówionych we
wstępie do ćwiczeń, zawartych w: „Regulaminie porządkowym w laboratorium” oraz
w „Instrukcji obsługi urządzeń elektronicznych znajdujących się w laboratorium z
uwzględnieniem przepisów BHP”. Regulamin i instrukcja są dostępne w
pomieszczeniu laboratoryjnym w widocznym miejscu.
7
1.
2.
3.
4.
5.
6.
7.
8.
9.
Literatura
Maciej Szumski - „Systemy Mikroprocesorowe w Sterowaniu. Część I.
ARM Cortex-M3”, PLUM, 2016
Dokumentacja zestawu ZL29ARM: http://kamami.pl/dl/zl29arm.pdf
STM32F107VC Datasheet: http://www.st.com/resource/en/datasheet/stm32f107vc.pdf,
2015
RM0008: STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and
STM32F107xx advanced ARM®-based 32-bit MCUs:
http://www.st.com/resource/en/reference_manual/cd00171190.pdf, 2015
PM0075: STM32F10xxx Flash memory microcontrollers:
http://www.st.com/resource/en/reference_manual/cd00171190.pdf, 2012
PM0056: STM32F10xxx/20xxx/21xxx/L1xxxx Cortex-M3 programming manual:
http://www.st.com/resource/en/programming_manual/cd00228163.pdf, 2013
STM32F105xx and STM32F107xx revision Z connectivity line device limitations:
http://www.st.com/resource/en/errata_sheet/cd00238166.pdf, 2013
Krzysztof Paprocki, „Mikrokontrolery STM32 w praktyce”, BTC, 2011.
Marek Galewski, „STM 32 : aplikacje i ćwiczenia w języku C”, BTC, 2011.

Podobne dokumenty