Skocz do zawartości

[C] STM32F410RB Ustawienie częstotliwości próbkowania (FFT) SPL


Pomocna odpowiedź

Napisano

Mam kłopot z prawidłowym ustawieniem częstotliwości próbkowania ADC. Im więcej przeglądam dokumentacji i czytam na forach, tym mam większy mętlik w głowie.

Jaki jest zegar APB2 w moim układzie?

W DS mam Maximum CPU frequency max 100MHz, ale czy to dotyczy wbudowanego w płytkę oscylatora?

Z jaką maksymalną częstotliwością może pracować mój ADC1 Channel0?

Jak powinienem dobrać preskaler, liczbę cykli i jak obliczyć częstotliwość próbkowania?

Gdy robię wykres z obliczonych wartości FFT, to prawidłowe wartości otrzymuję, gdy przyjmę f próbk. ok. 600Hz.

Niezależnie od ustawionego preskalera (4-8), otrzymuję to samo. Tylko dla Div2 mi nie odczytuje wartości.

Podobnie przy zmianach wartości ADC_SampleTime oraz ADC_TwoSamplingDelay. Albo nie działa wcale, albo f próbkowania jest taka sama niezależnie od wartości parametrów.

Jest tam "Przy obecnej konfiguracji przetwornik ADC taktowany jest częstotliwością 16 MHz", ale w sumie nie wiem dokładnie, o jaką konfigurację chodzi.

W artykule o F1 jest wszystko ładnie opisane, ale przy F4 już mniej...

Dziwi mnie, że zmiana parametrów nie wpływa u mnie na tą wartość. Może z moim kodem coś jest nie tak, że nie mogę zmierzyć częstotliwości większych, niż 300Hz, a potrzebowałbym do ok. 20kHz (czyli f próbk. = 40kHz).

Jak najłatwiej sprawdzić realną f próbkowania ADC? Mógłby ktoś podrzucić np. prosty kod z jakimś timerem i konkretną ilością pomiarów, lub coś podobnego? Zaczynam przygodę z STM32 i nie do końca wszystko jest dla mnie intuicyjne.

Edit:

W DS są informacje:

fADC = 30 MHz (niby do 36MHz)

fs = 2Msps (12b, single ADC, ts=3cycles i 12 cykli zawsze trzeba dodać, by otrzymać czas konwersji, więc mamy 15 cykli na pomiar, co daje 2Msps).

APB2 = max 100MHz.

Czy odstęp pomiędzy 2 pomiarami nie jest brany pod uwagę przy wyliczaniu f próbkowania?

Czy normalne (bez użycia DMA) kopiowanie elementów tablicy wraz z ich wyświetlaniem (printf) może być powodem ograniczenia częstotliwości próbkowania? Bo nie do końca rozumiem, jak działa DMA. Zapisuję tym mechanizmem 256 próbek, ale miejscem docelowym jest tablica 1-elementowa... Przykład wzięty z internetu. A może tu jest błąd i potrzebuję tablicy 256 elementowej? Bufor wszędzie w przykładach też ma wielkość 1 (przy odczycie 1 kanału). Dlaczego?

Kopiowanie elementów niekoniecznie jest powodem ograniczenia częstotliwości próbkowania, ale już printf na pewno. Spróbuj policzyć ile czasu trwa transmisja jednego znaku, pomnóż wynik przez długość napisu to sam zobaczysz. Do tego dochodzi czas wykonywania samego printf, który jest często zaskakująco długi.

  • Pomogłeś! 1

A jak zrobić zapis DMA np. 256 próbek, a później dopiero je wyświetlić? Bo nie bardzo rozumiem, dlaczego źródło zapisu DMA to 1-elementowa tablica, a nie 256-elementowa.

Chyba faktycznie printf był źródłem problemu. Po jego wyrzuceniu i rezygnacji z DMA (jak już pisałem, mam z tym kłopot), przy sygnale 20kHz w czasie 1 okresu robi mi pomiar ok. 16-17 próbek, więc aż nadto. Potrzebuję jedynie f akustyczne.

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...