Analiza urządzeni w przestrzeni częstotliwości, jest niezwykle istotne dla zbadania wielu jego parametrów. Poznanie charakterystyki Bodego czy funkcji przejścia układu jest dosyć prostym pomiarem, który zrealizować można z pomocą zaprezentowanego poniżej urządzenia.
Jak pokazuje uproszczony schemat po prawej stronie, przez mierzony układ przepuszcza się po kolei przebiegi o różnej, liniowo zmieniającej się częstotliwości. Tego rodzaju sygnał o zmiennej częstotliwości nazywany jest chirpem. Gdy częstotliwość jest powoli zmieniana - dajmy na to z prędkością 1 Hz/s - amplituda sygnału musi być utrzymywana na stałym poziomie, aby pomiar był dokładny. Jako że zazwyczaj mierzy się charakterystykę w dosyć szerokim zakresie częstotliwości, to trudno jest utrzymać amplitudę na jednym poziomie. Dlatego też, jak pokazano na obrazku, cały zakres dzieli się na podzakresy. dla wygody pomiaru.
Generacja sygnału i jego pomiar
Generacja przebiegu sinusoidalnego jest dosyć prosta, jeśli wykorzystuje się przetwornik DAC i procesor zdolny do operacji zmiennoprzecinkowych. Należy jednakże pamiętać, że funkcje sin() i cos() z standardowej biblioteki math.h zajmują strasznie dużo czasu, ponieważ realizują iteracyjny algorytm obliczania tych wartości z dosyć wysoką precyzją. Zamiast tego, autor konstrukcji wykorzystał tablicę - 2048 punków od 0 do 2π - z wartościami funkcji sinus. Częstotliwość próbkowania ADC i DAC wynosi 200 kHz dla każdej mierzonej częstotliwości. Wykorzystanie stałej częstotliwości próbkowania istotnie upraszcza dalsze przetwarzanie sygnału.
Problemy zaczynają się w momencie, gdy z stabelaryzowanej funkcji chcemy generować przebiegi o różnej częstotliwości. Dla jednego okresu sinusa, przy częstotliwości próbkowania 200 kHz potrzebujemy:
* 200 tysięcy punktów dla częstotliwości 1 Hz
* 20 punktów dla częstotliwości 10 kHz.
Oczywiście, zwykła tabela nie da tutaj rady i musimy wykorzystać dodatkowe zabiegi, takie jak liniowa interpolacja pomiędzy punktami. Jeśli częstotliwość jest taka, że możemy dokładnie korzystać z tabeli 2048 punktów to z niej korzystamy, ale dla częstotliwości pomiędzy tymi konieczne jest interpolowanie liniowe z wykorzystaniem wartości z tabeli. Dla niższych częstotliwości niektóre punkty z tabeli są po prostu opuszczane.
Oczywiście możliwe by było wykorzystanie zewnętrznego układu DDS, takiego jak AD9833, jednakże samodzielne generowanie wartości sinusa i cosinusa do pomiarów jest wygodniejsze, jeśli chodzi o późniejszą detekcję fazy i amplitudy. O ile jeśli chodzi o częstotliwość to przy DDSie nie ma większego problemu - można sprawdzić jaka komenda została wysłana poprzez SPI do układu, to nie da się poznać fazy, bez próbkowania sygnału. A wtedy i tak musimy dobudować osobny układ, który obraca fazę o 90 stopnii.
Filtr antyaliasingowy na wyjściu DACa
Wykorzystanie przetwornika DAC jest całkiem proste, jedynie co musimy robić to przeskalować wartości od -1 do +1 odczytane z tabeli do wartości 2048 (środkowa wartość 12 bitowego przetwornika DAC). Jakkolwiek wykorzystanie takiego przetwornika wiele upraszcza, to pamiętać trzeba o pewnych komplikacjach. Po pierwsze, o parametrach DAC decyduje czas stabilizacji jego wyjścia. W przypadku układu STM32F407 czas stabilizacji wynosi 3 µs (jak widać na fragmencie karty katalogowej pokazanym po prawej), co przekłada się na częstotliwość 333,33 kHz - stąd też wybór 200 kHz, jako częstotliwości próbkowania; jest ona bezpieczna i stanowczo w granicy liniowości pracy przetwornika.
Innym czynnikiem, który ogranicza działanie przetwornika jest maksymalna prędkość narastania napięcia w wewnętrznym buforze DACa - w układzie STM32F407. Jeśli skorzystamy z informacji, jakie zawarte są w nocie aplikacyjnej (pokazanej po lewej stronie) to możemy obejść te ograniczenia. Może to pozwolić na uzyskanie częstotliwości próbkowania do 2 MHz, ale tak szybkie próbkowanie ogranicza czas na obliczenia pomiędzy poszczególnymi próbkami i przerwaniami.
Obliczenia poszczególnych wartości zajmują około 4,1 µs. Dlatego też czas próbkowania 200 kHz daje komfortowe warunki pracy - pomiędzy próbkami jest 5 µs, więc jest dostatecznie dużo czasu na interpolację, obliczenie amplitudy i fazy etc.
Jak wspomniano powyżej, przy częstotliwości próbkowania i częstotliwości wyjściowego przebiegu równej 10 kHz na każdy okres sinusa mamy zaledwie 20 punktów. Stąd, dla wyższych częstotliwości (powiedzmy powyżej 1 kHz) w sygnale obecne będą wyższe harmoniczne (parzyste i nieparzyste). Jeśli nie zostaną one odfiltrowane, to będą one obecne w sygnale wyjściowym i w konsekwencji trafią na wejście przetwornika ADC. Aby wytłumić obecne w sygnale harmonicznie autor eksperymentował z różnymi pasywnymi filtrami RC i doszedł eksperymentalnie do optymalnej częstotliwości granicznej 18 kHz.
Niestety tak niska częstotliwość graniczna filtra antyaliasingowego niesie ze sobą pewne problemy. Jak pisaliśmy powyżej chcemy, aby amplituda wyjścia z przetwornika DAC była stała dla wszystkich częstotliwości. Jak widać na pierwszym z pokazanych poniżej oscylogramow, filtr 18 kHz powoduje spadek amplitudy dla wyższych częstotliwości. Podobnie jest, jeżeli wykorzystamy filtr z częstotliwością graniczną równą 45 kHz (drugi oscylogram). Oczywiście, filtry te redukują harmonicznie, jednakże wprowadzana przez nie nieliniowość w sygnale, sprawia, że konieczne jest wykorzystanie filtra anty-aliasingowego o wyższej częstotliwości. W ten sposób autor doszedł do częstotliwości 132 kHz, która pozwala na tłumienie tłumienie harmonicznych, a jednocześnie taki filtr nie ma wpływu na amplitudę sygnałów generowanych w układzie.
Rezultaty testów z fizycznym filtrem RC
Poniższe wykresy pokazują charakterystyki Bodego różnych filtrów, zmierzone z pomocą samego omawianego urządzenia.
Testowane były trzy różne układy RC, z różnymi częstotliwościami granicznymi.. Rezultaty są bardzo obiecujące - tak punkt -3 dB na charakterystyce amplitudowej jak i -45° na charakterystyce fazowej są zgodne z ich odpowiednikami z symulacji obu układów. Podobnie amplituda i faza mierzonych sygnałów, zachowują się dokładnie tak, jak powinny. Dodatkowo, dobrą wiadomością jest fakt, że amplituda jest poprawnie mierzona aż do poziomu -80 dB, czyli około 100 µV.
Testy z filtrami cyfrowymi
Podobne filtry, jak ten opisany powyżej, zrealizować można także cyfrowo - realizacja niektórych z nich wymaga sporego zachodu, zwłaszcza dla filtrów wyższego rzędu, a programowo są istotnie prostsze.
Autor planuje przetestowanie szeregu filtrów cyfrowych w przyszłości z wykorzystaniem swojego analizatora.
Jako, że cały analizator zrealizowano programowo, to układ jest bardzo prosty. Software zaimplementowano na płytce uruchomieniowej STM32F407 Discovery. Pełni ona rolę analizatora i interfejsu PC - do komputera układ dołączony jest poprzez konwerter USB-TTL. Jedynymi zewnętrznymi elementami są filtry analogowe lub druga płytka STM32F407 Discovery, na której zaimplementowano filtry cyfrowe.
Drukowanie wykresów na komputerze PC
Za kreślenie charakterystyk Bodego odpowiedzialny jest komputer PC. Uruchomiony na nim skrypt, napisany w Pythonie (na poniższych zrzutach ekranu) wykorzytsuje bibliotekę matplotlib do rysowania wykresów. Na pierwszym zrzucie widzimy konfigurację macierzy oraz interfejs szeregowy, a na drugim konwersję z zebranych danych dotyczących amplitudy i fazy do danych w skali logarytmicznej i stopniach.
Program na STM32 napisany został bezpośrednio na sprzęcie, z bezpośrednim dostępem do rejestrów, bez wykorzystania warstwy abstrakcji sprzętowej (HAL / CUBE).
Jeśli jesteście zainteresowani dokładniejszymi matematycznymi podstawami tego rodzaju analizy, to na stronie źródłowej znajduje się pełne wyprowadzenie wykorzystanych funkcji wraz z opisem i przykładami.
Źródło: https://sites.google.com/site/hobbydebraj/bode-analyzer-using-stm32f407
Jak pokazuje uproszczony schemat po prawej stronie, przez mierzony układ przepuszcza się po kolei przebiegi o różnej, liniowo zmieniającej się częstotliwości. Tego rodzaju sygnał o zmiennej częstotliwości nazywany jest chirpem. Gdy częstotliwość jest powoli zmieniana - dajmy na to z prędkością 1 Hz/s - amplituda sygnału musi być utrzymywana na stałym poziomie, aby pomiar był dokładny. Jako że zazwyczaj mierzy się charakterystykę w dosyć szerokim zakresie częstotliwości, to trudno jest utrzymać amplitudę na jednym poziomie. Dlatego też, jak pokazano na obrazku, cały zakres dzieli się na podzakresy. dla wygody pomiaru.
Generacja sygnału i jego pomiar
Generacja przebiegu sinusoidalnego jest dosyć prosta, jeśli wykorzystuje się przetwornik DAC i procesor zdolny do operacji zmiennoprzecinkowych. Należy jednakże pamiętać, że funkcje sin() i cos() z standardowej biblioteki math.h zajmują strasznie dużo czasu, ponieważ realizują iteracyjny algorytm obliczania tych wartości z dosyć wysoką precyzją. Zamiast tego, autor konstrukcji wykorzystał tablicę - 2048 punków od 0 do 2π - z wartościami funkcji sinus. Częstotliwość próbkowania ADC i DAC wynosi 200 kHz dla każdej mierzonej częstotliwości. Wykorzystanie stałej częstotliwości próbkowania istotnie upraszcza dalsze przetwarzanie sygnału.
Problemy zaczynają się w momencie, gdy z stabelaryzowanej funkcji chcemy generować przebiegi o różnej częstotliwości. Dla jednego okresu sinusa, przy częstotliwości próbkowania 200 kHz potrzebujemy:
* 200 tysięcy punktów dla częstotliwości 1 Hz
* 20 punktów dla częstotliwości 10 kHz.
Oczywiście, zwykła tabela nie da tutaj rady i musimy wykorzystać dodatkowe zabiegi, takie jak liniowa interpolacja pomiędzy punktami. Jeśli częstotliwość jest taka, że możemy dokładnie korzystać z tabeli 2048 punktów to z niej korzystamy, ale dla częstotliwości pomiędzy tymi konieczne jest interpolowanie liniowe z wykorzystaniem wartości z tabeli. Dla niższych częstotliwości niektóre punkty z tabeli są po prostu opuszczane.
Oczywiście możliwe by było wykorzystanie zewnętrznego układu DDS, takiego jak AD9833, jednakże samodzielne generowanie wartości sinusa i cosinusa do pomiarów jest wygodniejsze, jeśli chodzi o późniejszą detekcję fazy i amplitudy. O ile jeśli chodzi o częstotliwość to przy DDSie nie ma większego problemu - można sprawdzić jaka komenda została wysłana poprzez SPI do układu, to nie da się poznać fazy, bez próbkowania sygnału. A wtedy i tak musimy dobudować osobny układ, który obraca fazę o 90 stopnii.
Filtr antyaliasingowy na wyjściu DACa
Wykorzystanie przetwornika DAC jest całkiem proste, jedynie co musimy robić to przeskalować wartości od -1 do +1 odczytane z tabeli do wartości 2048 (środkowa wartość 12 bitowego przetwornika DAC). Jakkolwiek wykorzystanie takiego przetwornika wiele upraszcza, to pamiętać trzeba o pewnych komplikacjach. Po pierwsze, o parametrach DAC decyduje czas stabilizacji jego wyjścia. W przypadku układu STM32F407 czas stabilizacji wynosi 3 µs (jak widać na fragmencie karty katalogowej pokazanym po prawej), co przekłada się na częstotliwość 333,33 kHz - stąd też wybór 200 kHz, jako częstotliwości próbkowania; jest ona bezpieczna i stanowczo w granicy liniowości pracy przetwornika.
Innym czynnikiem, który ogranicza działanie przetwornika jest maksymalna prędkość narastania napięcia w wewnętrznym buforze DACa - w układzie STM32F407. Jeśli skorzystamy z informacji, jakie zawarte są w nocie aplikacyjnej (pokazanej po lewej stronie) to możemy obejść te ograniczenia. Może to pozwolić na uzyskanie częstotliwości próbkowania do 2 MHz, ale tak szybkie próbkowanie ogranicza czas na obliczenia pomiędzy poszczególnymi próbkami i przerwaniami.
Obliczenia poszczególnych wartości zajmują około 4,1 µs. Dlatego też czas próbkowania 200 kHz daje komfortowe warunki pracy - pomiędzy próbkami jest 5 µs, więc jest dostatecznie dużo czasu na interpolację, obliczenie amplitudy i fazy etc.
Jak wspomniano powyżej, przy częstotliwości próbkowania i częstotliwości wyjściowego przebiegu równej 10 kHz na każdy okres sinusa mamy zaledwie 20 punktów. Stąd, dla wyższych częstotliwości (powiedzmy powyżej 1 kHz) w sygnale obecne będą wyższe harmoniczne (parzyste i nieparzyste). Jeśli nie zostaną one odfiltrowane, to będą one obecne w sygnale wyjściowym i w konsekwencji trafią na wejście przetwornika ADC. Aby wytłumić obecne w sygnale harmonicznie autor eksperymentował z różnymi pasywnymi filtrami RC i doszedł eksperymentalnie do optymalnej częstotliwości granicznej 18 kHz.
Niestety tak niska częstotliwość graniczna filtra antyaliasingowego niesie ze sobą pewne problemy. Jak pisaliśmy powyżej chcemy, aby amplituda wyjścia z przetwornika DAC była stała dla wszystkich częstotliwości. Jak widać na pierwszym z pokazanych poniżej oscylogramow, filtr 18 kHz powoduje spadek amplitudy dla wyższych częstotliwości. Podobnie jest, jeżeli wykorzystamy filtr z częstotliwością graniczną równą 45 kHz (drugi oscylogram). Oczywiście, filtry te redukują harmonicznie, jednakże wprowadzana przez nie nieliniowość w sygnale, sprawia, że konieczne jest wykorzystanie filtra anty-aliasingowego o wyższej częstotliwości. W ten sposób autor doszedł do częstotliwości 132 kHz, która pozwala na tłumienie tłumienie harmonicznych, a jednocześnie taki filtr nie ma wpływu na amplitudę sygnałów generowanych w układzie.
Rezultaty testów z fizycznym filtrem RC
Poniższe wykresy pokazują charakterystyki Bodego różnych filtrów, zmierzone z pomocą samego omawianego urządzenia.
Testowane były trzy różne układy RC, z różnymi częstotliwościami granicznymi.. Rezultaty są bardzo obiecujące - tak punkt -3 dB na charakterystyce amplitudowej jak i -45° na charakterystyce fazowej są zgodne z ich odpowiednikami z symulacji obu układów. Podobnie amplituda i faza mierzonych sygnałów, zachowują się dokładnie tak, jak powinny. Dodatkowo, dobrą wiadomością jest fakt, że amplituda jest poprawnie mierzona aż do poziomu -80 dB, czyli około 100 µV.
Testy z filtrami cyfrowymi
Podobne filtry, jak ten opisany powyżej, zrealizować można także cyfrowo - realizacja niektórych z nich wymaga sporego zachodu, zwłaszcza dla filtrów wyższego rzędu, a programowo są istotnie prostsze.
Autor planuje przetestowanie szeregu filtrów cyfrowych w przyszłości z wykorzystaniem swojego analizatora.
Jako, że cały analizator zrealizowano programowo, to układ jest bardzo prosty. Software zaimplementowano na płytce uruchomieniowej STM32F407 Discovery. Pełni ona rolę analizatora i interfejsu PC - do komputera układ dołączony jest poprzez konwerter USB-TTL. Jedynymi zewnętrznymi elementami są filtry analogowe lub druga płytka STM32F407 Discovery, na której zaimplementowano filtry cyfrowe.
Drukowanie wykresów na komputerze PC
Za kreślenie charakterystyk Bodego odpowiedzialny jest komputer PC. Uruchomiony na nim skrypt, napisany w Pythonie (na poniższych zrzutach ekranu) wykorzytsuje bibliotekę matplotlib do rysowania wykresów. Na pierwszym zrzucie widzimy konfigurację macierzy oraz interfejs szeregowy, a na drugim konwersję z zebranych danych dotyczących amplitudy i fazy do danych w skali logarytmicznej i stopniach.
Program na STM32 napisany został bezpośrednio na sprzęcie, z bezpośrednim dostępem do rejestrów, bez wykorzystania warstwy abstrakcji sprzętowej (HAL / CUBE).
Jeśli jesteście zainteresowani dokładniejszymi matematycznymi podstawami tego rodzaju analizy, to na stronie źródłowej znajduje się pełne wyprowadzenie wykorzystanych funkcji wraz z opisem i przykładami.
Źródło: https://sites.google.com/site/hobbydebraj/bode-analyzer-using-stm32f407
Fajne? Ranking DIY
