Kurs STM32 LL cz. 13. Wstęp do konwertera ADC

Przetwornik ADC (Analog-to-Digial Converter) to układ elektroniczny, który służy do zamiany sygnału analogowego na cyfrowy. Stosowany jest szeroko w aplikacjach i pozwala m.in. na odczyt napięcia generowanego przez czujniki analogowe czy pomiar napięcia na akumulatorze.
Lista lekcji „Kurs STM32 Low Layer”
- Kurs STM32 LL cz. 1. Biblioteki Low Layer, Nucleo-G071RB, STM32CubeIDE
- Kurs STM32 LL cz. 2. Przygotowanie projektu
- Kurs STM32 LL cz. 3. Wewnętrzne i zewnętrzne źródła zegara
- Kurs STM32 LL cz. 4. Pętla PLL i taktowanie układów peryferyjnych
- Kurs STM32 LL cz. 5. Budowa GPIO i sterowanie wyjściem
- Kurs STM32 LL cz. 6. Wyjście GPIO i przerwania EXTI
- Kurs STM32 LL cz. 7. Interfejs USART, transmisja danych w trybie polling
- Kurs STM32 LL cz. 8. Komunikacja USART w trybie przerwań
- Kurs STM32 LL cz. 9. Kontroler DMA, komunikacja USART w trybie DMA
- Kurs STM32 LL cz. 10. Rodzaje i budowa Timerów, Timer w funkcji licznika
- Kurs STM32 LL cz. 11. Timer w trybie Input Capture
- Kurs STM32 LL cz. 12. Timer w trybie Output Compare i PWM
- Kurs STM32 LL cz. 13. Wstęp do konwertera ADC
- Kurs STM32 LL cz. 14. Konwersja ADC Single Channel i Multi Channel w trybie Polling
- Kurs STM32 LL cz. 15. Konwersja ADC Single Channel i Multi Channel w trybie przerwań
- Kurs STM32 LL cz. 16. Konwersja ADC Single Channel i Multi Channel w trybie DMA
- Kurs STM32 LL cz. 17. Wstęp do magistrali I2C
- Kurs STM32 LL cz. 18. Komunikacja I2C w trybie polling
- Kurs STM32 LL cz. 19. Komunikacja I2C w trybie przerwań
- Kurs STM32 LL cz. 20. Komunikacja I2C w trybie DMA
- Kurs STM32 LL cz. 21. Wprowadzenie do interfejsu SPI
- Kurs STM32 LL cz. 22. Komunikacja SPI w trybie polling
- Kurs STM32 LL cz. 23. Komunikacja SPI w trybie przerwań
- Kurs STM32 LL cz. 24. Komunikacja SPI w trybie DMA
Konwersja sygnału analogowego na cyfrowy
W mikrokontrolerach STM32 wbudowany został przetwornik SAR (z sukcesywną aproksymacją), który działa na zasadzie porównywania wartości napięcia wejściowego z napięciem odniesienia. Odbywa się to w iteracyjnym procesie, gdzie ustawiane są kolejne bity, a otrzymana wartość jest porównywana do zmierzonego napięcia. Układ z pomocą komparatora dąży do uzyskania wartości najbardziej zbliżonej do tej zmierzonej.
Proces konwersji składa się z trzech etapów: próbkowania, kwantyzacji oraz kodowania.
Próbkowanie polega na pobraniu i zapamiętaniu wartości napięcia w celu dalszego przetwarzania. Zbudowany jest z przełącznika, który przekazuje napięcie wejściowe na układ rezystor-kondensator. Czas zamknięcia przełącznika jest określany jako czas próbkowania, który konfigurujemy w przetworniku. Nie może być zbyt krótki, ponieważ kondensator potrzebuje odpowiedniego czasu, aby się naładować.
Następnie sygnał jest poddawany kwantyzacji. Zadaniem jest otrzymanie na podstawie zmierzonego sygnału wartości cyfrowej najbardziej zbliżonej do tego, co jest na wejściu. Nigdy nie otrzymamy wartości cyfrowej napięcia idealnie równej zmierzonemu. Im większa rozdzielczość, tym większa będzie dokładność pomiaru.
Proces kwantyzacji składa się z cyklicznego algorytmu:
- Ustawiany jest najstarszy bit.
- Wartość cyfrowa przetwarzana jest przez konwerter cyfrowo-analogowy.
- Napięcie uzyskane w ten sposób porównywane jest przez komparator z napięciem pobranym w procesie próbkowania.
- Jeżeli uzyskane napięcie jest wyższe niż zmierzone, bit pozostaje ustawiony. Jeżeli jest mniejsze, bit jest zerowany.
- Ustawiany jest kolejny bit i cała procedura się powtarza.
Cykl wykonywany jest tyle razy, ile bitów rozdzielczości skonfigurowaliśmy – dla 12-bitowego przetwarzania proces będzie miał 12 takich cykli.
Fragment procesu próbkowania i kwantowania przedstawiony został na grafice poniżej.
Kodowanie polega na ustawieniu uzyskanej wartości cyfrowej w odpowiedni sposób w rejestrze. W STM32 mamy możliwość wyboru 6, 8, 10 lub 12 bitów rozdzielczości, a rejestr danych jest 16-bitowy. Dane możemy w procesie kodowania wyrównać do lewej lub do prawej.

Czas konwersji ADC
Z procesem próbkowania i kwantyzacji ściśle związany jest czas konwersji ADC. W STM32 określa się go w cyklach zegara jako:
tCONV = Sampling_time + 12,5 ADC_clock_cycle
Sampling time to czas próbkowania i jest konfigurowany poprzez odpowiednie rejestry. Wartość 12,5 cykli to czas kwantyzacji przy rozdzielczości 12-bitowej. Zmniejszając rozdzielczość możemy uzyskać jeszcze krótszy czas konwersji.
Należy pamiętać, że im krótszy czas próbkowania, tym mniejsza dokładność pomiaru. Zbyt mały czas może powodować nie tylko problemy z uzyskaniem precyzyjnego pomiaru, ale także z obsługą np. przerwań, które będą bardzo często generowane.
Ze względu na ograniczenia sprzętowe, konwerter ADC może być taktowany maksymalnie z częstotliwością 35 MHz, co daje minimalny czas konwersji przy 12-bitach rozdzielczości na poziomie 400 ns. Czas ten można skrócić przy 6 bitach rozdzielczości do 229 ns. Rzadko będziemy jednak korzystali z krytycznych czasów konwersji. Wymagają one stabilnego obwodu analogowego na PCB, a zazwyczaj czas konwersji w standardowych aplikacjach może być znacznie dłuższy.
Budowa konwertera ADC
Teraz przejdź do budowy i elementów przetwornika ADC w STM32. Schemat blokowy przedstawia poniższa grafika.
Przetwornik ADC w STM32G071RB pozwala na konwersję 16 kanałów zewnętrznych wejść analogowych oraz 3 kanałów wewnętrznych, w tym z czujnika temperatury, napięcia odniesienia i napięcia na pinie zasilania bateryjnego. Konwersja wywoływana jest programowo lub za pomocą zewnętrznego wyzwalacza. Może nim być sygnał z timera.
Blok SAR ADC to moduł właściwego przetwornika ADC (z sukcesywną aproksymacją), który odpowiada za konwersję sygnału analogowego na cyfrową wartość. Dane z bloku SAR przekazywane są na szynę APB, która komunikując się przez AHB z jednostką centralną lub blokiem DMA przekazuje dane do pamięci i pozwala na odczyt ich przez aplikację.
Konwerter ADC ma również funkcjonalność Watchdoga, który może monitorować stan napięcia i w momencie przekroczenia ustawionych progów generować sygnał przerwania.
Tryby pracy konwertera ADC
Konwerter ADC może pracować w różny sposób w zależności od wymagań aplikacji i użytkownika. Wśród trybów pracy ADC wyróżniamy:
- Single conversion mode – tryb pojedynczej konwersji
- Continuous conversion mode – tryb ciągłej konwersji
- Discontinuous conversion mode – tryb nieciągłej konwersji
Na początku wyjaśnimy sobie, w jaki sposób ustawiane są w konwerterze ADC sekwencje konwersji. Ze względu na to, że przetwornik ADC jest dość drogim elementem, w mikrokontrolerze mamy do dyspozycji zazwyczaj jeden lub dwa konwertery ADC. Aby umożliwić odczyt sygnałów analogowych z większej ilości wejść (jak już wspominałem, w STM32G071RB jest 16 kanałów zewnętrznych), dodany jest do konwertera multiplekser, który przełącza kolejne kanały i podaje je na wejście przetwornika SAR.
Użytkownik może wybrać jeden lub kilka kanałów do tzw. sekwencji, w której wykonywana jest jedna konwersja na każdym z aktywowanych kanałów. W trybie Single blok ADC po otrzymaniu startu konwersji (programowego lub z zewnętrznego wyzwalacza) wykonuje jedną sekwencję.
W przypadku trybu Continuous konwersja jest wykonywana cyklicznie – po zakończeniu pomiarów w jednej sekwencji od razu następuje uruchomienie kolejnej.
Tryb Discontinuous jest dostępny w przypadku, gdy sekwencja zawiera więcej niż jeden kanał. Wówczas pomiar na każdym kanale w sekwencji będzie wymagał oddzielnego sygnału startu (np. jeżeli sekwencja składa się z 4 kanałów, do wykonania jednej sekwencji będą potrzebne 4 sygnały startu).
W przypadku zakończenia konwersji, użytkownik może otrzymać informację w postaci flagi lub przerwania po wykonaniu konwersji pojedynczego kanału (EOC, End of conversion) lub po zakończeniu konwersji całej sekwencji (EOS, End of conversion sequence).
Wyrównanie danych w ADC
Dane otrzymane z konwersji ADC będą zależały od rozdzielczości. W STM32 mamy do dyspozycji 6, 8, 10 lub 12-bitową rozdzielczość. Rejestr danych przechowujący wartość otrzymaną z pomiaru jest 16-bitowy, dlatego możemy zdecydować, czy dane będą wyrównane do prawej, czy do lewej strony. W zależności od ustawienia bitu ALIGN i konfiguracji rozdzielczości (RES), możemy otrzymać wyrównanie w sposób przedstawiony na poniższej grafice.
Konfiguracja kanałów ADC
Konwerter ADC w STM32G071RB ma możliwość konfiguracji konwertowanych kanałów na dwa sposoby. Określane są jako konfiguracja stała (fixed) lub w pełni konfigurowalna (fully configurable). Za konfigurację używanych kanałów odpowiada tzw. sekwencer.
W trybie stałej konfiguracji mamy możliwość włączenia każdego z 19 kanałów dostępnych w konwerterze ADC. Nie mamy możliwości wyboru kolejności ich konwersji – pomiar odbywa się na włączonych kanałach w kolejności, jaką ustalają numery kanałów.
W trybie pełnej konfiguracji możemy wybrać, w jakiej kolejności odbywa się konwersja włączonych kanałów. Jest jednak spore ograniczenie – możemy umieścić na liście maksymalnie 8 kanałów.
Podstawowe rejestry ADC
Rejestr ADC_ISR – flagi ADC
Bit CCRDY – flaga konfiguracji kanałów ADC
Bit EOC i EOS – flagi zakończenia konwersji i sekwencji
Bit ADRDY – flaga uruchomienia ADC i gotowości do pracy
Rejestr ADC_CR – rejestr kontrolny ADC
Bit ADVREGEN – uruchomienie wewnętrznego stabilizatora ADC
Bit ADSTART – uruchomienie konwersji ADC
Bit ADEN – włączenie konwertera ADC
Rejestr ADC_CFGR1 – rejestr konfiguracyjny ADC
Bit CHSELRMOD – wybór sposobu konfiguracji kanałów
Bit CONT – wybór trybu pomiarów
Bit ALIGN – sposób wyrównania danych
Bit RES – rozdzielczość konwersji
Rejestr ADC_CFGR2 – rejestr konfiguracyjny ADC
Bity CKMODE[1:0] – wybór zegara ADC
Rejestr ADC_SMPR – rejestr konfiguracji czasu próbkowania
Bity SMP1 i SMP2 – wybór czasu próbkowania (pierwszy i drugi)
Bity SMPSEL – wybór jednego z dwóch czasów dla każdego z kanałów
Rejestr ADC_CHSELR – rejestr wyboru kanałów
Rejestr ADC_DR – rejestr danych ADC
Chciałbyś otrzymywać na bieżąco informacje o nowych artykułach z kursu? Zapisz się do newslettera!
TO NIE TYLKO MAIL Z INFORMACJĄ O NOWEJ LEKCJI, ALE TAKŻE DODATKOWE MATERIAŁY. NIE PRZEGAP NOWEJ TREŚCI I DODATKOWYCH BONUSÓW. PRZEJDŹ DO STRONY KURSU I PODAJ SWÓJ ADRES E-MAIL. NIE ZAPOMNIJ POTWIERDZIĆ CHĘCI DOŁĄCZENIA W PIERWSZEJ WIADOMOŚCI!