Ultrasonic Ranging Module on STM32F4

Sławomir Węgrzyn – V rok Koło Naukowe Techniki Cyfrowej dr inż. Wojciech Mysiński – opiekun naukowy Ultrasonic Ranging Module on STM32F4 Obsługa ultr...
Author: Aneta Bednarska
40 downloads 0 Views 707KB Size
Sławomir Węgrzyn – V rok Koło Naukowe Techniki Cyfrowej dr inż. Wojciech Mysiński – opiekun naukowy

Ultrasonic Ranging Module on STM32F4 Obsługa ultradźwiękowego ź ękowego czujnika odległości odległo ci na mikrokontrolerze STM32f4 Keywords: cortex m4 lcd ultrasonic ranging module Słowa kluczowe: stm32 cortex m4 lcd czujnik odległości odległo 1. Ultradźwiękowy Ultrad czujnik odległości HC-SR04 1.1. Opis Do pomiaru odległości ści wykorzystany został moduł HC-SR04. SR04. Jest to ultradźwiękowy ultrad czujnik umożliwiający ący pomiary odległości odległo w zakresie od 2 do 400cm. Zasilany jest napięciem napi 5V DC, pobór prądu du wynosi około 15mA. Posiada on cztery piny, dwa zasilające, ce, oraz dwa do wyzwolenia pomiaru. Jego zaletą jest skuteczne eczne tłumienie tła i pewnie wykrywanie obiektów niezależnie niezale od rodzaju powierzchni. Pomiary są niezależne od typu materiału, światła, wiatła, koloru i środowiska. ś Rysunek 1 Czujnik odległości odległo HC-SR04

1.2. Zasada działania wej „Trig” impulsu napięciowego ciowego w stanie wysokim Pomiar polega na podaniu na wejście przez czas 10µs,, który inicjuje 8 cykli fali ultradźwiękowej ultrad o częstotliwości ści 40kHz.

Rysunek 2 Procedura pomiarowa

Fala po odbiciu od napotkanej przeszkody przeszkod y wraca do czujnika. Na wyjściu wyj „Echo” dostajemy sygnał wysoki (5V), którego długość długo jest proporcjonalna do odległo odległości. Producent zaleca aby minimalny odstęp odst między dzy kolejnymi pomiarami wynosił 60ms. 60ms

Rysunek 3 Zasada działania

Wiedząc, że prędkość ść dźwię źwięku w powietrzu wynosi 340m/s, można na łatwo obliczyć, obliczy że fala dźwiękowa kowa pokonuje 1cm w czasie 29µs. Wobec tego, możemy emy wyznaczyć prosty wzór, służący cy do przeliczenia czasu trwania impulsu na odległo odległość:

1.3. Wykorzystanie Czujniki ultradźwiękowe ź ękowe znajduj znajdują zastosowanie w różnych nych dziedzinach życia. ż Bardzo dobrze sprawdzająą sięę przy pomiarach poziomu zapełnienia zbiorników, głównie cieczami przeźroczystymi, roczystymi, a przede wszystkim w środowiskach gdzie ze względu du na znaczne zabrudzenie nie jest możliwe liwe zastosowanie czujników optycznych. Coraz częściej zastępująą czujniki pojemnościowe pojemno i optoelektroniczne na liniach produkcyjnych, gdzie badane obiekty wykonane sąą z nietypowych materiałów (np. przeźroczyste szkło). Przykłady wykorzystania: • • • • • •

Pomiar odległości Czujniki parkowania Alarmy samochodowe Roboty Linie produkcyjne Pomiar poziomu zapełnienia

Rysunek 4 Przykłady wykorzystania

2. Mikrokontroler STM32F429 2.1. Parametry oraz możliwości Obsługa czujnika została wykonana na płytce ewaluacyjnej STM32F429 – Discovery.

Rysunek 5 Płytka Discovery mikrokontrolera STM32F429

Urządzenie dzenie wyposarzone jest w nast następujące komponenty: Mikrokontroler STM32F429: STM32F429 • • • • • • •

32-bit rdzeń ARM Cortex-M4 , fx=180MHz 2 MB pamięci pamię Flash, 256 kB pamięci RAM Trzy 12-bitowe bitowe przetworniki A/C Dwa 12-bitowe bitowe przetworniki C/A Jednostka zmiennoprzecinkowa FPU Jednostka sygnałowa DSP Kontroler danych DMA

Moduł STM32F429-Discovery Discovery • • • • • • •

64 Mbits pamięci pami SDRAM Wyświetlacz świetlacz dotykowy LCD TFT 2.4’’ 320x240 6 diod LED 3-osiowy osiowy żyroskop ż Dwa przyciski Układ zasilania z USB, +5V na 3.3V Debuger ST-Link/V2 ST

2.2. Wyświetlacz LCD Parametry wyświetlacza: • • • • • • •

Rozdzielczość ść 240x320 px, 262K kolorów Przekątna 2.4’’ Sterowanie SPI (Serial Peripheral Interface) Obsługa za pomocą biblioteki ILI9341 Panel dotykowy obsługiwany dzięki dzi STMPE811 Interfejs I2C Standard Peripherals Library

Wyświetlacz wietlacz sterowany jest za pomocą interfejsu SPI (Szeregowy Interfej Urządzeń Urzą Peryferyjnych) Jest to Rysunek 6 Wyświetlacz Wyś LCD jeden z najczęściej używanych żywanych interfejsów komunikacyjkomunikacyj nych pomiędzy dzy systemami mikroprocesorowymi a układami peryferyjnymi takimi jak: przetworniki ADC/DAC, pamięci ęci flash, karty SD, wyświetlacze. Komunikacja odbywa się synchronicznie za pomocą 3 lini: • MOSI - (ang. Master Output Slave Input) - dane dla układu peryferyjnego • MISO - (ang. Master Input Slave Output) - dane z układu peryferyjnego • SCLK - (ang. Serial CLocK) - sygnał zegarowy (taktujący) 4 linia służyy do aktywacji urzą urządzenia.

Rysunek 7 Przykład podłączenia urządzeń za pomocą interfejsu SPI

Panel dotykowy obsługiwany jest z wykorzystaniem szeregowej, dwukierunkowej magistrali I 2 C. Składa się z dwóch dwukierunkowych linii: lini danych oraz lini zegara. Transmisja odbywa sięę szeregowo i synchroniczne.

Biblioteki SPI i I2c zostały wykorzystane z Standard Peripherals Library - jest to kompletny pakiet, składający składają się ze sterowników oraz zestawów przykładów dla wszystkich standardowych urządzeń urz peryferyjnych mikrokontrolera STM32F4xx. 3. Obsługa Czujnika HC-SR04 3.1. Obsługa czujnika oraz podłączenie Do wyzwolenia pomiaru, w przerwaniu obsługiwanym przez Timer 7, generowany jest impuls o czasie trwania 10µ µs. Następnie podawany jest na końcówkęę PD3, która podł podłączona jest do pinu „Trig”. Do pomiaru czasu trwania impulsu na wyjściu w „Echo”” wykorzystany został Timer2. Timer inicjowany jest przez podanie sygnału na końcówke k ńcówke PA0, która jest ustawiona jako wejscie alternatywne. Następnie Nast pnie w przerwaniu zliczany jest czas trwania impulsu powrotnego. Czas trwania przeliczany jest na odległosć odległos w cm, za pomocą prostego wzoru podanego wcześniej.

odleglosc=(float)(HCSR04.delay_us)*(float)(HCSR04_ =(float)(HCSR04.delay_us)*(float)(HCSR04_WART_2_CM);

HCSR04.delay_us – czas trwania impulsu powrotnego w HCSR04_WART_2_CM = 0.017 = – czas, w którym fala przebywa 2cm

Rysunek 8 Podłączenie czujnika to płytki Discovery

3.2. Ustawienie portów wejść i wyjść Funkcja służąca ca do ustawienia pinu PD3 jako wyjście, wyj oraz PA0 jako wejście ście alternatywne inicjujące Timer2. void HCSR04_InitIO(void) { GPIO_InitTypeDef GPIO_InitStructure; // Trigger-Pin RCC_AHB1PeriphClockCmd(HCSR04_TRIGGER_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_PuPd_U GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIOD->BSRRH >BSRRH = GPIO_Pin_3; // Echo-Pin RCC_AHB1PeriphClockCmd(HCSR04_ECHO_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode PIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PinSource0, GPIO_AF_TIM2); }

3.3. Uruchomienie Timerów Częstotliwość sygnału wejś wejściowego do Timera7 wynosi

Prescaler ustawiamy na wartość warto 83, wiec czestotliwość TIM7 wynosi 1MHz. Aby uzyska uzyskać czas trwania impulsu 10 s, Period ustawiamy na wartość 9. Dzięki ki temu otrzymujemy okres występowania powania zdarzenia przepełnienia równy 10 s.

Rysunek 9 Schemat blokowy

Funkcja służąca do uruchomienia timerów: void HCSR04_InitTIM(void) { TIM_ICInitTypeDef TIM_ICInitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE); TIM_Cmd(TIM7, DISABLE); TIM_TimeBaseStructure.TIM_Period=HCSR04_TIM7_PERIOD; TIM_TimeBaseStructure.TIM_Prescaler=HCSR04_TIM7_PRESCALE; TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInit(TIM7, &TIM_TimeBaseStructure); TIM_ARRPreloadConfig(TIM7, ENABLE); //Timer 2 tryb pomiaru RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); TIM_PrescalerConfig(TIM2, HCSR04_TIM2_PRESCALE, TIM_PSCReloadMode_Immediate); TIM_ICInitStructure.TIM_Channel = TIM_Channel_1; TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling; TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; TIM_ICInitStructure.TIM_ICFilter = 0x0; TIM_PWMIConfig(TIM2, &TIM_ICInitStructure); TIM_SelectInputTrigger(TIM2, TIM_TS_TI1FP1); TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset); TIM_SelectMasterSlaveMode(TIM2,TIM_MasterSlaveMode_Enable); }

3.3. Uruchomienie sprzętowego kontrolera przerwań NVIC oraz funkcje przerwań void HCSR04_InitNVIC(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE); NVIC_InitStructure.NVIC_IRQChannel = TIM7_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); TIM_ITConfig(TIM7,TIM_IT_Update,ENABLE); }

void TIM2_IRQHandler(void) { uint32_t start,stop; if(TIM_GetITStatus(TIM2, TIM_IT_CC1) == SET) { TIM_ClearITPendingBit(TIM2, TIM_IT_CC1); start=TIM_GetCapture1(TIM2); stop=TIM_GetCapture2(TIM2); HCSR04.delay_us=start-stop; stop; HCSR04.t2_akt_time++; } } void TIM7_IRQHandler(void) { if (TIM_GetITStatus(TIM7, TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM7, TIM_IT_Update); HCSR04.t7_akt_time+=10; }

4. Prezentacja działania urządzenia 4.1. Pomiar powierzchni oraz kubatury pomieszczeń pomieszcze Zaprezentowany układ może mo być przydatny przy obliczaniu powierzchni oraz kubatu kubatury pomieszczeń. Aby dokonaćć pomiaru przykładamy czujnik do jednej ze ścian cian i naciskamy przycisk „Pomiar”. W programie zostanie zapisana wartość warto pomiaru. Następnie pnie powtarzamy czynno czynność dla drugiej ściany. Na wyświetlaczu świetlaczu automatycznie pokazana zostanie obliczona obliczona wartość powierzchni. Aby uzyskać objętość ść wykonujemy trzeci pomiar.

Rysunek 10 Przykład działania programu

4.1. Czujnik parkowania Układ możemy ż teżż wykorzystać wykorzysta jako czujnik parkowania. Jego zasada działania opiera się na tej samej zasadzie jak opisane powyżej, powy ej, czyli na metodzie pomiaru czasu powrotu echa fali ultradźwiękowej kowej emitowanej przez czujnik. Sensory pracują pracuj jednocześnie śnie jako nadajniki i odbiorniki fal emitowanych przez nie i odbitych od przeszkody. Odległość ść od przeszkody jest obliczana na podstawie czasu powrotu odbitej fali do sensora. Na wyświetlaczu wietlaczu odległość podawana jest liczbowo, oraz wyświetlana wietlana jest graficznie za pomocą paska, który zmienia swój kolor, im bliżej bli przeszkody się znajdujemy. Układ może mo zostać wyposażony ony w buzzer, który sygnałem ddźwiękowym będzie dzie sygnalizował odległość krytyczną.

Rysunek 11Przykład działania czujnika parkowania

5. Podsumowanie Zastosowanie przetworników ultradźwiękowych ultrad umożliwia uzyskanie w miarę miar dokładnych wyników pomiaru odległości odległo ci w stosunkowo prostym układzie. Ich największą najwi zaletą jest bardzo dobry stosunek ceny do jakości. jako Nie wykazują takżee szkodliwego oddziaływania na człowieka. Jednak pomiar w zakresie małych jak i bardzo bardz dużych odległości ści obarczony jest błędem. Następną z wad jest także tak mały zasięg.