Skocz do zawartości

STM32 ADC - błędy odczytu przy tym samym poziomie sygnału


Majk32

Pomocna odpowiedź

Witajcie,

Mam sobie układ z Nucleo G431. Na wejście ADC1-CH1 idzie sobie sygnał, który jest samplowany w równych odcinkach czasu, triggerem dla ADC1 jest TIM2. Dane serii, np. 500 pomiarów (500x 16bit) trafiają do pamięci RAM przy pomocy DMA a następnie są wysyłane portem szeregowym (też via DMA) do PC, gdzie zapisuję je do formatu używanego przez EasyWaveX - dzięki czemu mam sensowną wizualizację i mogę to ponownie zapakować do AWG.

Patrząc na wyniki, czasem ADC wygląda jakby się "przywieszał" i produkuje serię kilkunastu odczytów o tym samym poziomie =1.96V . Problem zawsze występuje dokładnie na tym samym poziomie napięcia (odczyt) - ale w różnych miejscach przebiegu. Zresztą to dobrze widać na poniższym screenie.
wave-1.thumb.png.0542acdf7ed145b07b7bbfe5694900ac.png wave-2.thumb.png.9ab91b0eab1d343492d73f2891dc9530.png

Oczywiście faktyczny sygnał nie zawiera takich wypłaszczeń, obserwuję go oscyloskopem i jest OK. Problem ze skryptem zapisującym plik też wykluczyłem, bo faktycznie po USART lecą takie wartości. Nie jest to clipping, czyli przycinanie sygnału, bo nie występuje jako maksymalna wartość nawet nie zbliżona do zasilania, więc ADC ma jeszcze "zapas" rozdzielczości w górę. Napięcie odniesienia dostaje kota?

 

Jakieś pomysły jak to ugryźć?

 

Link do komentarza
Share on other sites

(edytowany)

Pomiar jest 10 bitowy...

Wg. mnie szum powodowałby przy stałym napięciu odczyty różne wokół wartości rzeczywistej - ale tutaj jest odwrotnie! Sygnał cały czas się zmienia, a odczyt jest constans.

Popróbuję jeszcze sprawdzić stabilność wyzwalania ADC, bo może dostaje czkawki i nadpróbkowuje... ale to chyba nie to - OVRMOD jest ustawiony na overwrite...

 

EDIT::
Dodanie filtrowania nie dało rezultatu - nawet na oscyloskopie przebieg był gładki. Sygnał pochodzi z MAX291 - cyfrowego filtru sterowanego zegarem. Oczywiście minimalnie, śladowo było widać częstotliwość zegara na przebiegu wyjściowym, ale tam zegar jest rzędu 200-400kHz, więc znacznie powyżej bazowej częstotliwości sygnału.
Poeksperymentowałem z prędkością taktowania ADC - zwiększanie czasu konwersji do kilkudziesięciu taktów zegara nie przyniosło rezultatu, ale ustawienie prescalera na /6? Temat rozwiązany:

image.thumb.png.b8ac9a9f840384073003995ab92da848.png

Edytowano przez Majk32
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.