Sławomir Węgrzyn – Obsługa ultradźwiękowego czujnika

Transkrypt

Sławomir Węgrzyn – Obsługa ultradźwiękowego czujnika
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.

Podobne dokumenty