Na przestrzeni czasu powstały różne architektury, według których działają przetworniki A/C. Wyróżnić można między innymi przetworniki o porównaniu bezpośrednim (Flash), przetworniki szeregowo-równoległe (Two-Step Flash), przetworniki potokowe (Pipeline), przetworniki całkujące (np. SAR - Successive Approximation Register) czy przetworniki Sigma-Delta. W mikrokontrolerach zazwyczaj spotyka się przetworniki A/C o architekturze SAR lub Sigma-Delta.
Jednym z najważniejszych parametrów przetworników jest ich rozdzielczość, a więc liczba bitów wyniku pomiaru. Porównując przetworniki popularnie integrowane w mikrokontrolerach należy podkreślić, że układy o architekturze SAR cechują się rozdzielczością na poziomie 8-18 bitów, co jest wartością typowo niższą od przetworników Sigma-Delta, które charakteryzują się rozdzielczością na poziomie 8…32 bitów.
Innym istotnym parametrem przetworników A/C jest częstotliwość próbkowania, a więc liczba pomiarów, które można wykonać w danej jednostce czasu. Pod tym względem więcej oferują przetworniki SAR (do 10 Msamples/s) niż przetworniki Sigma-Delta (do 1 MSamples/s).
Powyższe krótkie porównanie przetworników SAR i Sigma-Delta pozwala określić jaki przetwornik sprawdzi się lepiej w jakiego rodzaju aplikacjach. Przetworniki SAR cechując się wysoką częstotliwością próbkowania i niskim poborem prądu mogą być dobrym wyborem dla aplikacji szybkiej akwizycji danych oraz dla aplikacji zasilanych z baterii. Z kolei przetworniki Sigma-Delta charakteryzując się wysoką rozdzielczością wyniku pomiaru mogą być rozważane jako rozwiązanie dla dokładnych przyrządów pomiarowych np. aplikacji medycznych.
Przetwornik A/C w STM8S001J3
Mikrokontrolery STM8S dysponują dwoma przetwornikami A/C: ADC1 i ADC2. Główne ich cechy to: architektura SAR, 10-bitowa rozdzielczość wyniku pomiaru, do 16 kanałów pomiarowych (w zależności od modelu mikrokontrolera), minimalny czas pojedynczej konwersji 2.33 us (dla fADC max = 6 MHz), typowy pobór prądu przetwornika podczas konwersji ok. 1 mA.
Schemat blokowy przetwornika ADC1 pokazano na rysunku 2. Wyróżnić w nim można następujące bloki:
* Wyprowadzenia mikrokontrolera:
- ADC_INx będące kanałami analogowymi doprowadzającymi sygnał analogowy do przetwornika w celu jego konwersji do postaci cyfrowej.
- ADC_ETR, które może służyć do wyzwolenia przetwornika (rozpoczęcia konwersji) za pomocą sygnału spoza mikrokontrolera.
* Multiplekser wybierający spośród wszystkich dostępnych kanałów analogowych jeden, który w danym momencie jest połączony z przetwornikiem A/C.
* Moduł wykonujący przetworzenie (próbkowanie, kwantowanie i kodowanie) sygnału analogowego do postaci 10-bitowego słowa cyfrowego.
* Blok wyzwalający przetwornika (źródłem wyzwolenia może być sygnał zewnętrzny na wyprowadzeniu ADC_ETR, licznik TIM1 lub kod aplikacji tzw. start programowy).
* Analog Watchdog pozwalający określić minimalny i maksymalny poziom sygnału, którego przekroczenie wygeneruje przerwanie.
* Blok przerwań:
- AWDIE: przerwanie z Analog Watchdoga sygnalizujące przekroczenie jednego ze zdefiniowanych poziomów sygnału.
- EOCIE: przerwanie z bufora danych sygnalizujące ukończenie konwersji analogowo-cyfrowej i wpisanie jej wyniku do rejestru danych lub bufora danych.
- OVERIE: przerwanie z przetwornika A/C sygnalizujące, że ukończona została konwersja analogowo-cyfrowa, ale wynik poprzedniej konwersji nie został jeszcze odczytany z bufora danych.
* Podzielnik sygnału zegarowego (sygnał taktujący przetwornik A/C to sygnał FCLK, nazywany też fMaster, który może być podzielony przez wartość 2…18).
* Blok przechowujący wynik konwersji analogowo-cyfrowej:
- Rejestr danych przechowujący ostatni wynik konwersji analogowo-cyfrowej.
- Bufor danych przechowujący 8 lub 10 ostatnich konwersji analogowo-cyfrowej.
Przetwornik A/C w STM8CubeMX
Narzędziem ułatwiającym pracę z portami wejścia/wyjścia mikrokontrolera STM8S001J3 jest program komputerowy STM8CubeMX. Dzięki niemu programista może w prosty sposób (za pomocą graficznego interfejsu użytkownika) sprawdzić jakie są możliwe konfiguracje dla wszystkich portów oraz peryferiów mikrokontrolera. Tak jest również w przypadku przetwornika A/C. Przykładowy scenariusz pokazano na rysunku 3.
Aby w prosty sposób skonfigurować przetwornik A/C układu STM8S001J3, a następnie realizować konwersję analogowo-cyfrową, warto w aplikacji użyć bibliotek SPL (Standard Peripheral Library) przygotowanych dla mikrokontrolerów z rodziny STM8S. Pliki stm8s_adc1.h oraz stm8s_adc1.c udostępniają szereg funkcji do tego celu. Zestawienie najważniejszych funkcji zaprezentowano w tabeli 2.
Przykładowa aplikacja sterująca przetwornikiem A/C
W celu stworzenia przykładowej aplikacji użyte zostało środowisko programistyczne STVD (ST Visual Develop) oraz kompilator Cosmic CXSTM8. Opis tych narzędzi, jak również instrukcja jak stworzyć za ich pomocą szablon nowego projektu wraz z dodaniem bibliotek SPL dostępne są w artykule numer 3 z tej serii (EP 2/2018). Korzystając ze wspomnianego szablonu projektu należy edytować kod pliku main.c, w którym umieszczony zostanie kod aplikacji.
Przykładowa aplikacja wykorzystuje przetwornik A/C do realizacji konwersji analogowo-cyfrowej. Wybrany do tego celu został jeden kanał analogowy - ADC1_IN6. Konwersja wyzwalana jest programowo, po czym następuje oczekiwanie na flagę EOC informującą o zakończeniu konwersji. Następnie odczytywany jest wynik konwersji i wpisywany jest on do zmiennej. Na koniec zerowana jest flaga EOC. Opisane czynności powtarzane są w nieskończonej pętli. W celu zaimplementowania opisanej aplikacji wykonane zostaną następujące kroki w pliku main.c:
* Utworzenie funkcji opóźniającej delay().
* Wywołanie funkcji opóźniającej delay(), co przeciwdziała przez kilka sekund ewentualnemu późniejszemu wyłączeniu interfejsu programowania i debugowania SWIM będącego efektem rekonfiguracji portów.
*Wykonanie kodu konfiguracji portów wejścia/wyjścia, które nie są połączone z wyprowadzeniami mikrokontrolera (kod wzięty z noty aplikacyjnej AN5047: Getting started with the STM8S001J3 microcontroller).
* Wywołanie funkcji ADC1_Deinit() w celu wykonania konfiguracji domyślnej przetwornika A/C.
* Wywołanie funkcji ADC1_Init() w celu wykonania konfiguracji przetwornika A/C zgodnej z parametrami wybranymi przez użytkownika.
* Wywołanie funkcji ADC1_Cmd() w celu włączenia przetwornika A/C.
* Wewnątrz nieskończonej pętli while():
- Wywołanie funkcji ADC1_StartConversion() w celu rozpoczęcia konwersji przetwornika A/C.
- W pętli while() oczekiwanie aż funkcja ADC1_GetFlagStatus() zwróci wartość flagi EOC świadczącą o końcu konwersji.
- Wywołanie funkcji ADC1_GetConversionValue() w celu odczytania wyniku konwersji. Zwracana przez funkcję wartość wpisywana jest do zmiennej ADC_value.
- Wywołanie funkcji ADC1_ClearFlag() w celu wyzerowania flagi EOC.
Napięcie=675×3,3 V/1023=2,17 V
Podsumowanie
W artykule przekazano podstawowe informacje o przetworniku A/C mikrokontrolera STM8S001J3 wraz z opisem przykładowej aplikacji. Osoby chcące dowiedzieć się bardziej szczegółowych informacji powinny sięgnąć do dokumentacji technicznej producenta. Parametry i charakterystyka przetwornika A/C dostępne są w nocie katalogowej mikrokontrolera (datasheet). Z kolei schematy oraz opis wszystkich funkcjonalności i rejestrów znajduje się w podręczniku użytkownika mikrokontrolera (user manual RM0016).
Szymon Panecki
szymon.panecki@st.com