Pomiary ratiometryczne (2). STM32 i czujnik ciśnienia

Udostępnij

W pierwszej części artykułu (link znajdziesz tutaj) omówiliśmy podstawy pomiarów ratiometrycznych i pokazaliśmy, dlaczego w wielu torach pomiarowych nie trzeba mierzyć bezwzględnej wartości napięcia. Kolejne odcinki stanowią opis kilku praktycznych implementacji, które różnią się między sobą rodzajem czujnika, sygnału pobudzającego, a nawet… samego przetwornika ADC. W każdym przypadku główna zasada pozostaje ta sama: sygnał mierzony i napięcie odniesienia muszą wynikać z tej samej wielkości pobudzającej. Różnice pojawiają się tam, gdzie tkwi przysłowiowy diabeł, czyli… w szczegółach.

Najprostsza – tak pod względem układowym, jak i obliczeniowym – implementacja pomiaru ratiometrycznego jest możliwa do wdrożenia w przypadku niektórych czujników analogowych wyposażonych w wewnętrzny tor kondycjonowania sygnału. Sensory takie muszą jednak wystawiać na wyjściu napięcie analogowe proporcjonalne do napięcia zasilania. Bardzo dobrym (a zarazem ciekawym pod względem konstrukcyjnym) przykładem takiego sensora jest analogowy czujnik ciśnienia typu MS4515 marki TE Connectivity.

Scalony czujnik ciśnienia MS4515

Schemat blokowy omawianego sensora, zaczerpnięty z noty katalogowej producenta, można zobaczyć na rysunku poniżej.

Schemat blokowy czujnika MS4515 marki TE Connectivity (źródło: nota katalogowa)

A co jest w tym czujniku szczególnie ciekawego? Już na pierwszy rzut oka widać bowiem, że z punktu widzenia konstrukcji mamy do czynienia z czujnikiem cyfrowym. Sygnał pomiarowy z maleńkiego, wewnętrznego mostka Wheatstone’a najpierw trafia na rozbudowany tor analogowo-cyfrowy zakończony 14-bitowym ADC, a potem, już w postaci cyfrowej, jest on kondycjonowany przez wbudowany procesor. Po przeprowadzeniu obliczeń kalibracyjnych dane trafiają na konwerter DAC, gdzie znów są przetwarzane do postaci analogowej i poprzez bufor wyjściowy trafiają na wyprowadzenie OUTPUT.

Taki opis dotyczy zwykle czujników z wyjściem cyfrowym lub ewentualnie sensorów z analogowym wyjściem napięciowym, ale o ściśle ustalonej, fabrycznie skalibrowanej skali. Tymczasem tutaj mamy do czynienia z sensorem wyraźnie opisanym w nocie katalogowej jako ratiometryczny. Uważni Czytelnicy zauważą bowiem, że na powyższym schemacie blokowym zabrakło… wewnętrznego źródła napięcia odniesienia! Nie jest ono bowiem do niczego potrzebne – rolę VREF odgrywa tutaj właśnie napięcie zasilania.

Praktyczne obliczenia charakterystyki przenoszenia

Powróćmy jednak do naszej przykładowej implementacji. Układ pomiarowy z użyciem czujnika MS4515 i mikrokontrolera STM32 można zrealizować bardzo prosto: wystarczy zasilić obydwa układy z tej samej, odpowiednio odfiltrowanej szyny zasilającej, która jednocześnie definiuje zakres pomiarowy ADC mikrokontrolera. Jeżeli linia VDDA jest zasilana napięciem 3,3 V, a wejście VREF+ jest połączone z VDDA, to sygnał na wyjściu czujnika stanowi ułamek tego samego napięcia. Dla typowego wyjścia 10…90% napięcia zasilania (w przypadku wersji czujnika oznaczonej literą „A”) przetwornik ADC nie musi znać dokładnej wartości VDDA, ponieważ mierzy relację:


ADCcode2N1=VOUTVDDA\frac {ADC_{code}} {2^N-1} = \frac {V_{OUT}}{V_{DDA}}

Spójrzmy na wykres charakterystyki przetwarzania, zaczerpnięty z noty katalogowej naszego dzisiejszego bohatera:

Charakterystyki przetwarzania dwóch wersji czujnika MS4515 przy napięciu zasilania 3,3 V (źródło: nota katalogowa)

Jeżeli czujnik ma zakres ciśnienia od PMIN do PMAX, a jego roboczy zakres wyjściowy odpowiada 10…90% zasilania, obliczenie wartości ciśnienia można wykonać następująco:

p=PMIN+(ADCcode0,1(2N1))·(PMAXPMIN)0,8(2N1)p = P_{MIN} + \frac {(ADC_{code} – 0,1 \cdot (2^N-1))· (P_{MAX} – P_{MIN})}{0,8\cdot (2^N-1) }


Dla 12-bitowego ADC w mikrokontrolerze STM32 wzór przyjmuje postać:

p(ADCcode)=PMIN+(ADCcode0,14095)·(PMAXPMIN)0,84095=p(ADC_{code}) = P_{MIN} + \frac {(ADC_{code} – 0,1 \cdot 4095)· (P_{MAX} – P_{MIN})}{0,8 \cdot 4095 }=

=PMIN+(ADCcode409,5)·(PMAXPMIN)3276= P_{MIN} + \frac {(ADC_{code} – 409,5)· (P_{MAX} – P_{MIN})}{3276}

Warto zauważyć, że w równaniu nie pojawia się nigdzie bezwzględna wartość napięcia. Zamiast niej odnosimy się do 10% i 90% maksymalnej rozpiętości zakresu, a wiemy, że napięciu VREF odpowiada maksymalny kod wyjściowy ADC, czyli 2N-1.

Schemat układu

Na poniższym rysunku można zobaczyć schemat kompletnego rozwiązania toru pomiarowego opartego na niewielkim mikrokontrolerze z serii STM32L4.

Schemat omawianego układu (rys. HardwareDesigner.pl)

Niewielki mikrokontroler w zaledwie 32-wyprowadzeniowej obudowie UFQFPN nie ma osobnego wejścia VREF+ (jest ono wewnętrznie podpięte do linii VDDA) ani też osobnego pinu VSSA (masy analogowej), który można znaleźć w większych układach STM32. Mimo to na bazie procesora STM32L432KC z powodzeniem można zrealizować układ ratiometryczny – trzeba jednak pamiętać o kilku podstawowych zasadach.

Doprowadzenie zasilania do czujnika

Wyprowadzenie zasilające czujnika (VS, pin 2 U2) powinno być podłączone ścieżką o możliwie małej impedancji do zasilania bloku analogowego MCU (VDDA/VREF+, pin 5 U1). Ma to na celu zminimalizowanie ewentualnej różnicy potencjałów mogącej powstać pomiędzy tymi pinami na skutek przepływu prądów zasilających. Wprawdzie prąd czujnika jest niewielki (wg noty katalogowej wynosi maksymalnie 5 mA), ale im dłuższa i cieńsza będzie ścieżka łącząca oba punkty, a także im wyższa temperatura otoczenia, tym większy spadek napięcia odłoży się się na linii zasilania. W przypadku czujników o wyższym poborze prądu, wspomniany problem nabiera oczywiście jeszcze większego znaczenia. Podobnie jest w przypadku przetworników ADC o wyższej rozdzielczości (16+ bitów), ponieważ nawet ułamek miliwolta przekłada się na mierzalną zmianę kodu ADC rzędu kilkunastu czy nawet kilkudziesięciu LSB.

Kolejna bardzo istotna sprawa to sposób połączenia linii zasilania głównego (tutaj +3,3 V) i zasilania sekcji analogowej (VDDA). W prostszych realizacjach można oczywiście połączyć obydwie szyny razem i takie rozwiązanie sprawdzi się w wielu układach, które nie wymagają pracy na skraju możliwości rozdzielczych przetwornika. Jeżeli jednak chcemy ograniczyć ryzyko przedostawania się do układu zakłóceń (np. z przetwornicy DC/DC), to warto rozważyć zastosowanie dławika FB1. Trzeba przy tym pamiętać, że dławiki ferrytowe skutecznie wykazują swoje działanie filtrujące tak naprawdę dopiero w zakresie częstotliwości rzędu przynajmniej dziesiątek megaherców – w przypadku częstotliwości niskich (zwykle poniżej 1 MHz) ich wpływ na układ będzie całkowicie pomijalny.

Innym rozwiązaniem, często spotykanym w układach analogowych o małym poborze prądu, jest zastosowanie niewielkiego rezystora (np. 10 Ω czy 22 Ω) zamiast dławika FB1. Wprawdzie sumaryczny prąd czujnika i przetwornika ADC w STM32 może w naszym przykładzie dojść do około 6 mA (co spowodowałoby spadek napięcia o 60 czy nawet ponad 120 mV), ale z uwagi na ratiometryczny charakter pomiaru takie zaburzenie nie powinno mieć żadnego mierzalnego wpływu na działanie układu. Trzeba natomiast pamiętać, że wszystkie kondensatory odsprzęgające powinny rzecz jasna znaleźć się jak najbliżej „swoich” układów scalonych. W przypadku użycia rezystora zamiast dławika FB1 warto dorzucić na linii VDDA kondensator o nieco większej pojemności (np. 4,7 μF) by zapewnić dodatkową, lokalną filtrację napięcia podczas większych impulsów prądowych.

Filtracja sygnału z czujnika

Projektując układ z czujnikiem analogowym, zawsze warto zastosować choćby najprostszy filtr analogowy lub przynajmniej przewidzieć na PCB przeznaczone dla niego footprinty. W przypadku kondensatora C7=10 nF i rezystora R1=1 kΩ uzyskamy filtr o 3-decybelowej częstotliwości progowej około 16 kHz, który odfiltruje już znaczną część zakłóceń, a zarazem nie wpłynie negatywnie na czas odpowiedzi czujnika (ten wynosi typowo 1 ms). W razie potrzeby można oczywiście zwiększyć wartość kondensatora, np. do 100 nF (co zmniejszy częstotliwość progową do 1,6 kHz), nie należy natomiast przesadzać z rezystancją szeregową R1. Wejście ADC w STM32 ma kondensator próbkowania, który w czasie akwizycji pobiera krótki impuls prądowy. Zbyt duża impedancja źródła może powodować błędy dynamiczne – do szybkiego oszacowania zalecanych przez ST wartości elementów zewnętrznego filtru RC można posłużyć się wykresem zaczerpniętym z noty aplikacyjnej AN2834:

Nomogram zalecanych wartości rezystancji szeregowej oraz pojemności filtru RC na wejściu ADC mikrokontrolera STM32 (źródło: AN2834)

W konfiguracji ADC, w przypadku współpracy z dość wolnym czujnikiem ciśnienia, nie ma sensu pracować na granicy szybkości ADC – znacznie lepszym wyborem jest dłuższy czas próbkowania, a także zastosowanie oversamplingu sprzętowego (w mikrokontrolerach STM32 można w ten sposób zyskać nawet 4 dodatkowe bity danych). Stopień nadpróbkowania ustawia się za pomocą bitów OVSR[2:0] w rejestrze ADC_CFGR2, zaś za włączenie tej funkcji dla kanałów regularnych oraz wstrzykiwanych (injected) odpowiadają bity ROVSE oraz JOVSE.

Rejestr ADC_CFGR2 (źródło: RM0394)

Layout PCB

Jak w każdym przypadku układu pomiarowego, także tutaj warto zadbać o zastosowanie dobrych praktyk w zakresie projektowania layoutu PCB. W szczególności trzeba zapewnić:

  • solidną płaszczyznę masy pod całym układem (a zwłaszcza częścią analogową i mikrokontrolerem),
  • właściwe ułożenie kondensatorów odsprzęgających,
  • prowadzenie ścieżek sygnałowych (od czujnika aż do wejścia ADC) z dala od interfejsów cyfrowych, przetwornicy DC/DC czy innych obwodów przełączających, zwłaszcza o stromych zboczach i/lub dużych natężeniach prądu obciążenia.

Podsumowanie

W artykule opisaliśmy bardzo prosty przypadek układu ratiometrycznego, który jednak często można spotkać w praktyce projektowej: czujnik podłączony jest do mikrokontrolera STM32, który z uwagi na niewielką liczbę pinów, nie ma wyprowadzonych osobnych linii wejścia VREF ani nawet dedykowanego pinu masy analogowej (VSSA). Pomimo to, przy odrobinie uważności i zachowaniu podstawowych zasad dobrej praktyki inżynierskiej, można zapewnić warunki działania układu pozwalające na wykorzystanie maksimum możliwości wewnętrznego przetwornika ADC mikrokontrolera. A to bardzo dobra informacja, zważywszy na fakt, że większość współczesnych mikrokontrolerów najlepiej sprawdza się właśnie w pomiarach ratiometrycznych. Te bowiem z natury rzeczy są niezależne od (przeważnie dość przeciętnej) dokładności wbudowanego źródła napięcia odniesienia, a nawet od umiarkowanych wahań napięcia zasilającego.

Przemysław
Przemysław
Redaktor Naczelny portalu HardwareDesginer.pl. Konstruktor elektronik i programista embedded z ponad 20-letnim doświadczeniem w projektowaniu PCB. Z wykształcenia elektronik medyczny i elektroradiolog, specjalizuje się w projektowaniu i badaniach aparatury medycznej, laboratoryjnej i pomiarowej.

Czytaj więcej

Wybrane dla Ciebie