STM32 - jak wycisnąć maksimum z przetworników?

| Technika

Mikrokontrolery z rodziny STM32 zawierają od jednego do nawet czterech 12-bitowych przetworników A/C, które można wykorzystać do wielu zadań związanych z m.in. akwizycją danych, autokalibracją i innych. Niemniej osiągnięcie stabilnych, a więc powtarzalnych i dokładnych wyników pomiarów wymaga wielu zabiegów po stronie sprzętowej i programowej, a także znajomości źródeł błędów przetwarzania analogowo-cyfrowego. W artykule omawiamy, w jaki sposób zapewnić jak najlepszą dokładność konwersji analogowo-cyfrowej oraz pokazujemy, jak można kilkakrotnie zwiększyć wydajność przetwornika cyfrowo-analogowego zawartego w mikrokontrolerach rodziny STM32.

STM32 - jak wycisnąć maksimum z przetworników?

Błędy związane z warstwą sprzętową aplikacji

Rys. 1. Uproszczony schemat przetwornika A/C w STM32

Bez względu na układ i realizację sprzętową, zawsze wynik konwersji przetwornika analogowo-cyfrowego jest funkcją napięcia wejściowego i napięcia odniesienia. Oznacza to, że szumy i inne zaburzenia nakładające się na źle odfiltrowane napięcie odniesienia, linie masy, nieprawidłowo odsprzęgnięte napięcia zasilające, a nawet silne przesłuchy między liniami sygnałowymi mogą i często prowadzą do nieprawidłowych odczytów.

Przykładowo, dla napięcia odniesienia VREF=3,3 V i sygnału wejściowego 1 V kod wyjściowy przetwornika wynosi 1/3,3×4095 = 4D9h (1241), ale gdy napięcie 3,3 V nałoży się napięcie zakłóceń 40 mV, np. od źle zaekranowanego zasilacza impulsowego, kod ten zmieni się na 1/3,34×4095 = 4CAh, czyli aż o 15 LSB. To bardzo duży błąd.

Uzyskanie powtarzalnych wyników i pełnej rozdzielczości 12-bitowego przetwornika wymaga ograniczenia poziomu sygnałów zaburzeń na wszystkich liniach analogowych oraz zapewnienia dobrej stabilności dla napięcia odniesienia, poniżej 1 LSB a więc 0,8 mV. To niełatwe zadanie, gdyż obwody cyfrowe w mikrokontrolerze są położone blisko analogowych, to samo dotyczy innych linii sygnałowych na płytce drukowanej, a dodatkowo z uwagi na konieczność minimalizacji poboru mocy nie można bezkarnie obniżać wartości impedancji obwodów wejściowych, co niestety tworzy wielkie problemy dla konstruktorów.

Wiele kłopotów powodują też sygnały zakłócające o niskich poziomach, ale za to szybkozmienne, co wynika z tego, że przetwornik A/C wykorzystuje architekturę SAR (Successive Approximation Register), w której pomiar sygnału analogowego jest dokonywany na zasadzie kolejnych przybliżeń. Polega on na tym, że każdy kolejny pomiar jest bliższy rzeczywistej wartości sygnału. Przetworniki takie są stosunkowo szybkie oraz mają stały i znany czas przekształcenia.

Rys. 2. Duża rezystancja wewnętrzna źródła wywołuje błędy konwersji

Generują one wartość kodu wyjściowego, wykorzystując wagi kolejnych bitów w ciągu od najbardziej istotnego bitu do najmniej ważnego bitu (LSB) za pomocą układu z przełączanymi pojemnościami wraz z kluczami i komparatorem (rys. 1). Niemniej ponieważ wartość kodu wyjściowego tworzona jest w kilku krokach, zakłócające napięcie o wysokiej częstotliwości ma okres zbliżony do czasu konwersji i tym samym może powodować spore fluktuacje. Stąd odsprzęganie VREF, linii zasilania, rozdzielenie masy analogowej od cyfrowej to absolutne minimum działań wymaganych od konstruktora.

W drugiej kolejności warto zadbać o ekranowanie ścieżek dołączonych do wejść pomiarowych mikrokontrolera, choćby przez otoczenie ich masą lub nawet wykorzystanie innych warstw laminatu na masę analogową i linie zasilania. Gdy układ wykonany jest na płytce jednostronnej, warto też rozważyć stosowanie mostków drutowych po to, aby połączenia były jak najkrótsze, mimo że jest to kłopot przy produkcji.

Warto zadbać też, aby cały zakres pomiarowy przetwornika był wykorzystany, czyli aby amplituda sygnału mierzonego była zbliżona do napięcia odniesienia. Inna uwaga dotyczy rezystancji wewnętrznej źródła sygnału analogowego RAIN. Napięcie mierzone ładuje poprzez nią zawarty w przetworniku kondensator układu próbkującego, co zabiera czas.

Przy dużych rezystancjach RAIN i wewnętrznej RADC (ok. 1 kΩ) napięcie na pojemności CADC nie jest w stanie osiągnąć wartości równej napięciu źródła mierzonego w czasie cyklu pomiarowego przetwornika (rys. 2). Przy dużej wartości RAIN znacznie zwiększa się ponadto wpływ pasożytniczych pojemności w układzie STM32, które zmieniają kierunek przepływu prądu ładowania.

Zawarte wewnątrz struktury mikrokontrolerów STM32 kondensatory próbkujące umieszczone w układzie przetwornika mają małe pojemności (ok. 8 pF), stąd łatwo zaburzyć działanie układu SAR i mieć przypadkowe wyniki konwersji A/C. Przy dużych rezystancjach wejściowych mogą pojawić się też zakłócenia od przesłuchu sygnału z sąsiednich ścieżek, zwłaszcza od szybkich linii cyfrowych lub w linii dołączonej do końcówki pomiarowej, w których mogą indukować się napięcia od pól EM (zasilacz, moduł komunikacji bezprzewodowej). Warto zatem, jeśli jest taka możliwość, minimalizować rezystancje w liniach pomiarowych, np. za pomocą wzmacniacza buforującego. Za jego pomocą można też dopasować amplitudę mierzonego napięcia do zakresu dynamicznego przetwornika A/C.

Konstruktorzy często wykorzystują prosty filtr dolnoprzepustowy RC włączony pomiędzy mierzonym napięciem a wejściem przetwornika po to, aby odfiltrować składowe wysokoczęstotliwościowe zaburzeń dla uniknięcia aliasingu i szumu, niemniej rzadko dobierają dokładnie wartości tych elementów. Zwykle są one zbyt duże, przez co negatywnie wpływają na stałość wyników pomiarów.

Programowe metody poprawy dokładności konwersji

Rys. 3. Sposób dodania niewielkiego sygnału poprawiającego dokładność konwersji (<1/2 LSB) za pomocą portu mikrokontrolera

Oprócz opisanych działań o charakterze sprzętowym warto sięgnąć po kilka prostych metod programowych, które mogą wyraźnie poprawić dokładność i powtarzalność wyników konwersji przetwornika analogowo-cyfrowego.

Pierwszym oczywistym sposobem jest uśrednianie wyników, czyli wykonanie kilku odczytów i policzenie ich średniej, co ogranicza wpływ fluktuacji sygnału, oczywiście kosztem szybkości działania. Metoda ta może być uzupełniona o sprzętowy układ dodawania niewielkiego szumu do sygnału wejściowego, w sposób jaki pokazano na rysunku 3, po to, aby wyeliminować fluktuacje na poziomie 1 LSB wynikające z istoty przetwarzania analogowo-cyfrowego.

Pojawiają się one przy pomiarach napięć stałych o wysokiej dokładności, gdy wartość mierzona jest zbliżona do środka progu kwantyzacji przetwornika. Wówczas wystarczy dodać niewielki sygnał zmienny (szum lub fala trójkątna wygenerowana z portu cyfrowego) i potem uśrednić kolejne wyniki, aby otrzymać stabilne wyniki konwersji.

Druga metoda to implementacja cyfrowego filtru po to, aby odfiltrować zakłócenia o częstotliwości 50-60 Hz pochodzące od oświetlenia jarzeniowego i sprzętu zasilanego z sieci. Cyfrowe filtrowanie warto połączyć z precyzyjnym dobraniem częstotliwości próbkowania przetwornika (poprzez wyzwalanie go timerem), jako wielokrotności częstotliwości głównych zaburzeń w napięciu wejściowym. Ocenę, jakie harmoniczne dominują w sygnałach wejściowych, zwłaszcza gdy składowa zmienna jest naturalną ich częścią, można przeprowadzić za pomocą FFT.

Na koniec warto przypomnieć, że na czas konwersji A/C warto wyłączać jak najwięcej podsystemów cyfrowych, wewnątrz i na zewnątrz mikrokontrolera, po to, aby maksymalnie obniżyć poziom zaburzeń elektromagnetycznych.

Przetwornik cyfrowo-analogowy

Rys. 4. Schemat ideowy obwodów wyjściowych przetwornika C/A

Większość mikrokontrolerów STM32 ma wbudowany 12-bitowy przetwornik cyfrowo-analogowy o wydajności do 1 Msps. Mimo że szybkość wydaje się duża, w niektórych aplikacjach może stanowić ona główne kryterium aplikacyjne, dlatego warto wiedzieć, że można ją w nietrudny sposób zwiększyć.

Przykładem mogą być tutaj wszelkiego rodzaju regulatory cyfrowe, a więc obwody elektroniczne, gdzie mikrokontroler a zatem jego układy peryferyjne (przetworniki) i oprogramowanie zastępują wzmacniacz napięcia błędu lub też realizują algorytm sterujący, który ogólnie działa tak, że napięcie wejściowe jest zamieniane na formę cyfrową w przetworniku A/C, potem obrabiane cyfrowo, a następnie zamieniane na postać analogową w przetworniku C/A.

Praca mikrokontrolera jako aktywny element pętli sprzężenia zwrotnego rodzi wiele problemów ze stabilnością układu elektronicznego, co bierze się z tego, że pomiędzy chwilą próbkowania sygnału na wejściu a ustaleniem stanu dla przetworzonego cyfrowo i skonwertowanego przez przetwornik C/A sygnału na wejściu mija pewien czas.

Im ten czas jest mniejszy, a więc relacja mikrokontrolera szybsza, tym pasmo pętli czasowej układu sprzężenia zwrotnego oraz przesunięcia fazy są mniejsze i stabilność jest naturalnie większa. Stąd wymaganie szybkiego działania przetworników A/C i C/A nawet, gdy w projektowanej aplikacji zdarzenia zachodzą powoli, nie jest pozbawione sensu.

Rys. 5. Konfiguracja z zewnętrznym wzmacniaczem operacyjnym

Przetwornik C/A STM32 może być modelowany układem pokazanym na rysunku 4. Zawiera on źródło napięcia o regulowanej cyfrowo wartości oraz układ wzmacniacza buforującego załączanego przez mikrokontroler za pomocą kluczy S1 i S2. Układ taki charakteryzuje się ograniczoną wartością narastania napięcia wejściowego, co wynika z wartości RA i RB rzędu 15 kΩ, pojemności pasożytniczych i parametrów wewnętrznego wzmacniacza.

Spore przyspieszenie konwersji można osiągnąć, blokując wewnętrzny bufor i dokładając zewnętrzny wzmacniacz operacyjny o dobrych parametrach (pasmo i slew rate) w sposób pokazany na rysunku 5. Ponieważ między wejściami wzmacniacza operacyjnego napięcie jest równe zero, pasożytnicza pojemność CP przestaje mieć wpływ na działanie układu, bo nie jest przeładowywana. W ten sposób ograniczenie szybkości zmian napięcia na wyjściu przetwornika dotyczy tylko wzmacniacza operacyjnego (zakładając idealne działanie cyfrowego źródła sygnału w samym mikrokontrolerze).

Ograniczeniem jest tutaj, że RDAC powinno być równe R1, aby nie było błędu wzmocnienia, co jest niełatwe do spełnienia z uwagi na rozrzut produkcyjny i w praktyce wymaga kalibracji.

Ile da się wycisnąć?

Tabela 1. Graniczne parametry przetworników C/A

Maksymalna szybkość tworzenia przebiegu wyjściowego w przetworniku C/A zależy m.in. od szybkości sygnału zegarowego APB taktującego przetwornik. Cztery cykle tego zegara tworzą górny limit dla przetwornika, stąd to, co daje się osiągnąć dla poszczególnych wersji mikrokontrolerów, pokazane jest w tabeli 1. Jak widać uwolnienie się od pasożytniczych pojemności jest w stanie sporo poprawić.

Dla napięcia VREF=3,3 V i wzmacniacza ze slew rate lepszym niż 22 V/µs i pasmem 55 MHz jak np. LMH6645 szybkość przetwornika sięga 5 Msps, co pozwala na generowanie sygnału quasi-sinusoidalnego o częstotliwości 200 kHz.

Kalibrację offsetu i błąd wzmocnienia pojawiające się przy wykorzystaniu zewnętrznego buforującego wzmacniacza operacyjnego można skompensować na kilka sposobów. Offset najprościej skompensować cyfrowo, odejmując jego wartość przy wysyłaniu danych do przetwornika. Połączenie jednego kanału przetwornika A/C z wyjściem C/A pozwala uzyskać wartość korekty.

Korektę błędu wzmocnienia można zrealizować podobnie poprzez pomiar napięcia wyjściowego C/A w dwóch punktach i wyliczenie współczynnika korekcji, przez który będą mnożone dane podawane do rejestru. Jak widać, nie jest to silne ograniczenie, nie wymaga też rozbudowy układu o dodatkowe elementy lub też nie powoduje konieczności sięgania po drogie rezystory o małych tolerancjach lub potencjometry. Realizacja układowa nie jest droga ani skomplikowana, a daje spore możliwości poprawy maksymalnej szybkości tworzenia sygnału przetwornika C/A w mikrokontrolerach STM32 nawet kilka razy.

Robert Magdziak

Zobacz również