Przetwornik ADC w mikrokontrolerach STM32.

Mity.

W dokumentacji ST dla kontrolerów STM32 czytamy o 12-to bitowym przetworniku ADC, o szybkości samplowania na poziomie 1MHz (dla najsłabszych wersji kontrolerów). Niewątpliwie zachęca to do wykorzystania kontrolerów STM32 zamiast kontrolerów innych firm opartych na tym samym rdzeniu. Osobiści się też skusiłem na dokładniejsze pomiary, które miały służyć do kontroli akumulatorów zasilających i pomiaru sygnałów wejściowych, Mimo bardzo kiepskiego i ograniczającego rozwiązania przerwań od wyprowadzeń zewnętrznych wybrałem STM32.

Fakty.

Miało być tak pięknie a wyszło jak zawsze…. Fakty na temat Przetwornikóœ ADC w mikrokontrolerach ST32 wskazują, iż rzeczywistość nie jest tak różowa jak ją producent przedstawia. W testach na projektowanym urządzeniu przy ustawieniach na najmniejszy czas samplowania i pomiarze 1Msampl/s pojawiły się potworne rozbieżności poziomóœ sygnału względem spodziewanego na poziomie ostatinich 5..6 bitów. Zacząłem prowadzić dochodzenie co jest przyczyną. Oscyloskop nie pokazywał tak dużych rozbieżności jak przetwornik ADC. jako, iż pomiar nie musiał odbywać się z tak dużą prędkości zmniejszyłem liczbę pomiarów wydłużając czas pomiaru. z każdym kolejnym wydłużeniem tego czasu sytuacja poprawiałą się. okazało się, iż optymalny czas samplowania wynosi około 70 cykli. Ważność przetwarzanego sygnału wynosiła wtedy około 9bitów. Zastosowałem więc wielokrotne pomiary i bardzo silny filtr dolnoprzepustowy. Uzyskałem dzięki temu dokładność w okolicy 10 bitów. Jako, iż nie mogłem sobie pozwolić na zatrzymywanie kontrolera na czas pomiarów, to nie potrafię określić czy byłbym w stanie uzyskać ważność na poziomie 11 bitów. Efekt wydłużenia samplowania i wielokrotne pomiary przepuszczane przez filtr software, spowodowały wzrost dokładności,lecz niestety również znaczny spadek liczby pomiarów. W porównaniu do kontrolerów AVR z 10-cio bitowym przetwornikiem, niestety STM32 wypada kiepsko. AVR-y miały bliską 10 bitom ważność przy pełnej prędkości działania. Nadmienię, iż wyjście sygnału dołączonego do wejścia ADC miało niską impedancję, więc wpływ wysokiej impedancj na próbkowanie sygnału był żaden. Nadmienię, iż dokładność w bitach szacowałem na podstawie rozrzutu pomiaru napięcia akumulatora po dzielniku i z kondensatorem 100nF na wejściu przetwornika ADC. Sam akumulator był obciążany impulsowo z częstotliwością około 1KHz przez obciążenie rzędu 25mA co zapewnie miało niewielki wpływ na wynik.