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.