Instytut Teleinformatyki Wydział Fizyki, Matematyki i Informatyki Politechnika Krakowska Mikrokontrolery i Mikroprocesory Przetwornik ADC laboratorium: 04 autor: mgr inż. Katarzyna Smelcerz Kraków, 2016
04.Mikrokontrolery i Mikroprocesory Przetwornik ADC 2 Spis treści Spis treści... 2 1. Wiadomości wstępne... 3 1.1. Niezbędne wiadomości... 3 1.2. Przetwornik ADC... 3 1.3. Konfiguracja ADC w środowisku Cube... 4 1.4. Obróbka sygnału ADC... 7 2. Przebieg laboratorium... 8 2.1. Zadanie 1. Na ocenę 3.0 (dst)... 8 2.2. Zadanie 2. Na ocenę 4.0 (db)... 8 2.3. Zadanie 3. Na ocenę 5.0 (bdb)... 8
04.Mikrokontrolery i Mikroprocesory Przetwornik ADC 3 1. Wiadomości wstępne Pierwsza część niniejszej instrukcji zawiera podstawowe wiadomości teoretyczne dotyczące omawianego tematu. Poznanie tych wiadomości umożliwi prawidłowe zrealizowanie praktycznej części laboratorium. 1.1. Niezbędne wiadomości Opis zestawu starter-kit, schemat: http://www.st.com/st-webui/static/active/en/resource/technical/document/user_manual/dm00027954.pdf Kompilator dla rdzenia ARM: https://www.iar.com/iar-embeddedworkbench/arm/ Opis rdzenia ARM STM32L152 RB http://www.st.com/st-webui/static/active/en/resource/technical/document/datasheet/cd00277537.pdf Dokumentacja do środowiska STM32CubeMX: http://www.st.com/st-webui/static/active/en/resource/technical/document/data_brief/dm00103564.pdf Dokumentacja do czujnika temperatury http://www.st.com/st-webui/static/active/en/resource/technical/document/application_note/dm00035957.pdf 1.2. Przetwornik ADC Rdzeń ARM STM32L152 RB jest wyposażony w 12-bitowy przetwornik analogowo cyfrowy (ADC) z 24 dostępnymi kanałami. Dokonuje on konwersji w trybie single-short lub scan mode. W scan-mode, automatyczna konwersja jest wykonywana na wybranej grupie analogowych wejść. Przetwornik analogowo-cyforwy służy do pomiaru napięcia wejściowego. Pomiar odbywa się poprzez porównanie napięcia mierzonego z napięciem odniesienia, którym może być wewnętrzne napięcie referencyjne lub napięcie zasilania lub napięcie doprowadzone do pinu Vref. Wynik konwersji jest 12-bitowy. Mikrokontroler posiada 24 piny, które mogą być skonfigurowane jako wejścia do pomiarów. W procesorze ARM STM32L152 RB, zegar doprowadzony do ADC, to 16 MHz. Nie ma możliwości użycia wolniejszego zegara, bo podczas pomiaru włączone peryferia ADC pobierają ok. 1-1.5mA i należy maksymalnie skrócić czas pomiaru, aby zaoszczędzić energię.
04.Mikrokontrolery i Mikroprocesory Przetwornik ADC 4 1.3. Konfiguracja ADC w środowisku Cube Poniższe print screeny przedstawiają konfigurację przetwornika ADC Zrzut 1.1 Wybranie kanałów do odczytu ADC (w przykładnie wybrano jeden kanał IN0)
04.Mikrokontrolery i Mikroprocesory Przetwornik ADC 5 Zrzut 1.2 Ustawienie odpowiednich parametrów ADC Zrzut 1.3 Nie ustawiamy przerwania od ADC Zrzut 1.4 Konfiguracja pinów na których są podpięte kanały
04.Mikrokontrolery i Mikroprocesory Przetwornik ADC 6 Aby uruchomić ADC należy dopisać funkcje, w wygenerowanym kodzie w języku C. Pobieranie próbek ADC powinno odbywać się w funkcji, która jest przedstawiona na Listingu 2. Należy ją przekopiować z pliku stm32l1xx_hal_adc.c do main.c i odpowiednio uzupełnić jej ciało, o wywołanie kolejnej funkcji (HAL_ADC_GetValue) służącej bezpośrednio do pobierania wartości, Listing 3. UWAGA! Wszystkie dostępne funkcje do obsługi ADC, znajdują się w pliku stm32l1xx_hal_adc.c, dołączonym do projektu w IAR. Ich zastosowanie jest opisane w komentarzach w kodzie. Listing 1 Uruchomienie ADC ADC_Enable(&hadc); HAL_ADC_Start(&hadc); // włączenie ADC // start ADC Listing 2 Obsługa konwersji próbek z ADC /** * @brief Conversion complete callback in non blocking mode * @param hadc: ADC handle * @retval None */ weak void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) { /* NOTE : This function should not be modified. When the callback is needed, function HAL_ADC_ConvCpltCallback must be implemented in the user file. */ } Listing 3 Pobranie wartości z kanału ADC uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc) { /* Check the parameters */ assert_param(is_adc_all_instance(hadc->instance)); /* Note: EOC flag is not cleared here by software because automatically */ /* cleared by hardware when reading register DR. */ /* Return ADC converted value */ return hadc->instance->dr; }
04.Mikrokontrolery i Mikroprocesory Przetwornik ADC 7 1.4. Obróbka sygnału ADC Napięcie odniesienia przetwornika ADC przyłączamy między piny Vref+ i Vref-. Na płytce Discovery wynosi ono 3.0V. Mierzone napięcie można obliczyć ze wzoru : Vin = (Vref * n) / FS, gdzie Vin = mierzone napięcie n = odczyt z przetwornika A/D Vref = 3.0 V, bo takie jest napięcie na płytce FS = 2^12, bo zakres pomiarowy 12 bitów, czyli 4096 Przykład : Odczyt z ADC wynosi 2048. Jakie jest napięcie wejściowe? Vin = (3.0 * 2048) / 4096 = 1.5V
04.Mikrokontrolery i Mikroprocesory Przetwornik ADC 8 2. Przebieg laboratorium Druga część instrukcji zawiera zadania do praktycznej realizacji, które demonstrują zastosowanie technik z omawianego zagadnienia. 2.1. Zadanie 1. Na ocenę 3.0 (dst) Proszę skonfigurować przetwornik ADC na podstawie powyższych print screenów. Proszę wygenerować kod i nagrać program na płytkę Discovery. Proszę w podglądzie zmiennych zaobserwować, jakie wartości przyjmuje przetwornik ADC. 2.2. Zadanie 2. Na ocenę 4.0 (db) Proszę stworzyć program, który będzie odczytywał stan kanału ADC w przerwaniu. Proszę skonfigurować odpowiedni kanał ADC, tak aby możliwe było wykrycie wciśnięcia przycisku na podstawie wartości odczytanej. Proszę przeprowadzić obróbkę sygnału ADC. Jakie wartości otrzymujemy gdy przycisk jest puszczony, a jakie, gdy jest wciśnięty? Z czego to wynika? 2.3. Zadanie 3. Na ocenę 5.0 (bdb) Proszę skonfigurować przetwornik ADC, tak aby pobierał wartości z termometru wbudowanego na płytce Discovery (patrz dokumentacja). Proszę zbadać trend temperatury, tzn. czy temperatura rośnie, czy maleje? Jeśli rośnie, proszę zasygnalizować to zieloną diodą, jeśli maleje, proszę uruchomić niebieską.