Cyfrowy generator sygnału prostokątnego 1 Hz…499 kHz

Cyfrowy generator sygnału prostokątnego 1 Hz…499 kHz
Pobierz PDF Download icon

Generator cyfrowy to jedno z podstawowych narzędzi w pracowni elektronika. Bywa niezastąpiony przy uruchamianiu układów cyfrowych oraz analogowych. Prezentowane urządzenie jest następcą układów AVT5418 i AVT3170. Najnowsza wersja pozwala na wytwarzanie sygnału o dziesięciokrotnie większej częstotliwości maksymalnej oraz ze znacznie płynniejszą regulacją wypełnienia. Zawiera wyjście proste i zanegowane, sterowany jest dwoma impulsatorami, a parametry pracy prezentuje na wyświetlaczu LCD.

Nie zawsze potrzebny jest rozbudowany kosztowny generator. W codziennej pracy wygodniej jest mieć pod ręką nieskomplikowane urządzenie, łatwe w obsłudze, którego parametry wystarczą do większości zastosowań. Prezentowany układ powstał z myślą o takim właśnie zastosowaniu. Warto wiedzieć, że jeżeli generator dostarcza przebiegu cyfrowego, to nie znaczy, że jest skazany na pracę tylko z układami cyfrowymi Ze względu na bogactwo składowych harmonicznych przebiegi prostokątne idealnie nadają się do szybkiego badania wzmacniaczy, tłumików oraz filtrów.

Zasada działania

Schemat ideowy prezentowanego generatora pokazuje rysunek 1. Generowanie sygnału odbywa się z użyciem mikrokontrolera STM32F051, który jest jednocześnie głównym układem zarządzającym. Źródłem sygnału taktującego rdzeń i peryferia jest wbudowany oscylator, który współpracuje z rezonatorem kwarcowym o częstotliwości 16 MHz. Wbudowany układ PLL powiela tę częstotliwość trzykrotnie, wobec czego uzyskiwany jest sygnał zegarowy o częstotliwości 48 MHz – jest to największa możliwa wartość dla tego układu. Kondensatory C5 i C6 ułatwiają wzbudzenie drgań rezonatora, a rezystor R4 utrudnia jego przypadkowe wzbudzenie na innej częstotliwości.

Do programowania mikrokontrolera przewidziano złącze J1, na które zostały wyprowadzone linie sygnałowe interfejsu SWD. Ponieważ nie są one wykorzystywane w czasie normalnej pracy układu, zostały podciągnięte rezystorami do zasilania 3,3V. Dla linii NRST przewidziano również kondensator C1, który wymusza sprzętowe zerowanie po włączeniu zasilania – zalecane przez producenta w nocie katalogowej. Zaprogramowanie jest możliwe po właściwym połączeniu sygnałów czterech linii: SWCLK, SWDIO, NRST i GND z programatorem. Niektóre programatory umożliwiają sprawdzenie napięcia zasilającego mikrokontroler, dlatego wyprowadzono również jego napięcie zasilania o nominalnej wartości 3,3 V.

Do wyświetlania aktualnych nastaw częstotliwości i wypełnienia służy alfanumeryczny wyświetlacz LCD zawierający 2 wiersze, każdy po 16 znaków. Zawiera kontroler zgodny z HD44780. Z mikrokontrolerem komunikuje się w trybie 4-bitowym. Regulacja kontrastu jest możliwa poprzez kręcenie potencjometrem P1. Pomimo zasilania wyświetlacza napięciem 5 V, prawidłowo interpretuje on napięcie 3,3 V jako logiczne „1”, co jest powszechne w wielu współczesnych zamiennikach HD44780.

Sygnał cyfrowy wygenerowany z mikrokontrolera ma amplitudę 3,3 V oraz nikłą wydajność prądową. Najprostszym i najtańszym sposobem na zwiększenie amplitudy i wydajności jest użycie scalonego sterownika (drivera) do tranzystorów MOSFET. W tym układzie zastosowano układ TC4426, który zawiera dwa zanegowane kanały dla sygnałów sterujących – rysunek 2. Układ ma bardzo prostą konstrukcję: na wejściu znajduje się klucz na tranzystorze MOSFET, który służy dopasowaniu poziomu napięcia sterującego. Dalej są: przerzutnik Schmitta, bramka NOT i sterownik dla komplementarnych tranzystorów MOSFET w układzie Push-Pull. Tranzystory MOSFET nie ulegają nasyceniu w takim rozumieniu jak tranzystory bipolarne, wobec czego ich przełączanie może być znacząco szybsze.

Deklarowane przez producenta układu parametry są wręcz doskonałe do tego zastosowania. Głównie dzięki wyrównanym czasom narastania i opadania (max. 30 ns) napięcia wyjściowego. Przy zasilaniu napięciem 5 V rezystancja wyjściowa może wynosić 15 V – wydajność prądowa nie jest zatem wysoka, lecz wystarczająca do wielu zastosowań. TC4426 neguje sygnał, co zostało wykorzystane do stworzenia dwóch wyjść. Sygnał z mikrokontrolera, który wchodzi na wejście INB, zostaje wzmocniony, zanegowany i doprowadzony do zacisku 1 złącza J2. Jednocześnie ten sam sygnał trafia na drugie wejście – INA. Po kolejnej negacji sygnał wraca do polaryzacji początkowej. Między uzyskanymi w ten sposób sygnałami istnieje pewne przesunięcie w czasie, lecz jest ono pomijalnie małe.

Na płytce zostały zamontowane rezystory, które umożliwiają dopasowanie impedancji źródła sygnału do kabla 50 V. Połączone równolegle dwa szeregi po 33 V dają wypadkową rezystancję równą 33 V, która w połączeniu z rezystancją wyjściową układu TC4426 daje wartość około 50 V. Połączenie czterech rezystorów, zamiast użycia jednego, zwiększa maksymalną moc, ponieważ rozkłada ją równomiernie pomiędzy cztery elementy. Jeżeli dopasowanie impedancyjne nie jest potrzebne, to wystarczy założyć zworkę JP1 i/lub JP2. Przy wyprowadzeniach zasilania układu TC4426 znajdują się aż cztery kondensatory odsprzęgające, po dwa 100 nF i 10 mF, po to, aby generowane impulsy nie były zniekształcone.

Na płytce znajdują się dwa enkodery obrotowe z przyciskami. Każdy z sześciu styków mechanicznych ma swój rezystor podciągający oraz prosty filtr RC. Taka konfiguracja ma kilka zalet, przede wszystkim wpływa na dużą szybkość reakcji układu, dzięki czemu nie gubi on impulsów przy szybkim kręceniu osią enkodera.

Na płytce znalazła się również niewielka przetwornica obniżająca. Dostarcza stabilizowanego napięcia +5 V z dowolnego napięcia stałego z zakresu 8…20 V doprowadzonego do zacisków złącza J3. Kondensator C22 ustala częstotliwość oscylacji na kilkadziesiąt kiloherców, przez co jej praca jest niesłyszalna. Stanowi również proste zabezpieczenie przeciwzwarciowe: rezystor R30 o wartości 1 V ogranicza prąd klucza przetwornicy do ok. 300 mA. Należy jednak pamiętać, że zwarcie na zaciskach wyjściowych (w złączu J2) może uszkodzić układ US2 z powodu przegrzania.

Napięcie 3,3 V dla mikrokontrolera pochodzi ze stabilizatora liniowego typu LDO. Zapotrzebowanie na prąd w tej gałęzi jest niewielkie, toteż ilość wydzielanego na nim ciepła nie uzasadnia konieczności budowy drugiej przetwornicy impulsowej, o niższym napięciu wyjściowym.

Montaż i uruchomienie

Układ generatora został zmontowany na dwustronnej płytce drukowanej o wymiarach 84×68 mm, której schemat montażowy oraz wzór ścieżek prezentują rysunki 3 i 4. Montaż należy rozpocząć od przylutowania elementów SMD, znajdujących się po spodniej (BOTTOM) stronie płytki. Zwracam uwagę na kondensator tantalowy, w którym kreska na obudowie oznacza jego plus. Następne w kolejności są elementy w obudowach przewlekanych, które znajdują się po tej samej stronie, czyli złącza J1-J3, kondensator C21 (można go położyć, aby płytka była niższa), zworki JP1 i JP2, dławik L1 i potencjometr P1. Szczegóły obrazuje fotografia 1.

Na górnej stronie płytki (TOP) jest miejsce na enkodery i złącze do wyświetlacza LCD oraz sam wyświetlacz, który można przytwierdzić do laminatu przy użyciu czterech tulei dystansowych i śrub M3 (po uprzednim rozwierceniu otworów montażowych w wyświetlaczu).

Po zakończeniu montażu należy podłączyć źródło zasilania o ograniczonej wydajności prądowej i skontrolować wartości napięć 5 V oraz 3,3 V. Jeżeli wszystko jest w porządku, można zaprogramować pamięć Flash mikrokontrolera przy użyciu gotowego wsadu. Układ jest zaprojektowany do zasilania napięciem stałym, dobrze filtrowanym, lecz niekoniecznie stabilizowanym, o wartości z przedziału 8…20 V. Pobór prądu przy zasilaniu 12 V wynosi ok. 25 mA.

Obsługa

Po włączeniu zasilania i prawidłowym ustawieniu kontrastu potencjometrem P1 na ekranie pokaże się treść taka jak na fotografii 2. Napis OFF oznacza, że generowanie jest wyłączone i wyjścia przyjmują swoje domyślne stany logiczne: proste – stan niski, a zanegowane – wysoki. Przełączanie stanu wyjścia odbywa się poprzez wciskanie osi enkodera wypełnienia. Domyślnie generowanie jest załączone, ponieważ początkowa częstotliwość i tak jest zerowa. Nad sześciocyfrowym wskaźnikiem częstotliwości znajduje się kropka, której położenie można zmieniać poprzez wciskanie osi enkodera częstotliwości. Tym samym wskazuje ona, która aktualnie cyfra częstotliwości jest regulowana tymże enkoderem.

Precyzja zadanej częstotliwości wynosi 3 cyfry znaczące. Oznacza to, że można ustawić wartość np. 121 Hz czy 36,7 kHz. W praktyce konieczność generowania sygnału o częstotliwości np. 231,493 kHz zachodzi niezwykle rzadko, a znacznie uprościło to obsługę. Dla przykładu: po ustawieniu pierwszej cyfry na 2, co daje 200 kHz, a potem drugiej na 4, czyli 240 kHz, ustawienie przedostatniej na 5 spowoduje automatyczne wyzerowanie dwóch najstarszych, a ustawiona częstotliwość wyniesie 50 Hz (fotografia 3). Ustawienie teraz trzeciej cyfry na 1 będzie wiązało się z wyzerowaniem poprzedniej piątki, czyli uzyskamy 10 kHz (fotografia 4). Dzięki temu nie trzeba ręcznie zerować wszystkich zbędnych cyfr przy znacznej zmianie częstotliwości.

Na rysunkach 5, 6 i 7 znalazły się oscylogramy sygnałów wygenerowanych za pomocą niniejszego przyrządu. Opcja automatycznego pomiaru częstotliwości i wypełnienia w oscyloskopie pozwala skonfrontować rezultaty z założeniami.

W tabeli 1 znalazło się szersze zestawienie większej liczby wyników pomiarów. Największy zmierzony błąd względny częstotliwości wyniósł 0,4%, a wypełnienia 2,2%. Błędy rosną wraz ze wzrostem częstotliwości, ponieważ błędy zaokrągleń wartości funkcji (obliczającej wartości rejestrów licznika) do liczb całkowitych nabierają coraz większego znaczenia.

Kolejne oscylogramy z rysunków 8 i 9 pokazują przesunięcie czasowe między sygnałem prostym (żółty) a zanegowanym (niebieski). Sygnał zanegowany wyprzedza prosty, ponieważ przechodzi przez układ TC4426 jako pierwszy. W przypadku zbocza narastającego sygnału prostego przesunięcie to wynosi ok. 40 ns, a dla opadającego ok. 21 ns. Co istotne, zaobserwowane zbocza nie mają oscylacji ani przerzutów. Czasy narastania i opadania wyniosły, odpowiednio, 9,7 ns i 9,1 ns.

Dla ciekawskich

W pierwszej wersji tego układu (opublikowanej w EP 10/2013) generowanie sygnału o zadanym wypełnieniu i częstotliwości odbywało się poprzez wywoływanie przerwań od pracującego licznika i programowe porównywanie wartości zmiennych. Zastosowanie mikrokontrolera STM32F051 zwiększyło możliwości powstałego generatora, ponieważ generowanie odbywa się czysto sprzętowo, bez udziału głównej pętli programu. Jej jedynym zadaniem jest tylko obsługa wyświetlacza LCD.

Aby takie rozwiązanie było możliwe, konieczny jest licznik o jak największej rozdzielczości. Tylko wtedy możliwe będzie uzyskanie przebiegów o parametrach jak najbardziej zbliżonych do zadanych. Nota katalogowa układu STM32F051 pokazuje, że licznik TIM2, jako jedyny, ma rozdzielczość 32 bitów (rysunek 10). Nie zawiera, niestety, wyjścia komplementarnego, toteż bezpośrednie uzyskanie sygnału zanegowanego (bez przesunięcia wywołanego dodatkowym negatorem) nie jest możliwe.

Generowanie przebiegu o zadanej częstotliwości można uzyskać poprzez „skrócenie” licznika za pomocą wartości wpisanej do rejestru automatycznego przepełnienia (ARR – Auto Reload Register). Im mniejsza jest ta wartość, tym szybciej będzie przepełniał się licznik, co skutkuje krótszym okresem i – jednocześnie – większą częstotliwością. Można łatwo wyprowadzić wzór wyrażający zawartość rejestru ARR w funkcji żądanej częstotliwości:

 

Uwzględniając brak preskalera oraz wstawiając rzeczywistą częstotliwość taktowania tego licznika, otrzymujemy:

 

Niestety, ta funkcja jest nieliniowa, co (zwłaszcza w zakresie dużych częstotliwości) skutkuje powstawaniem błędu w wartości uzyskanej częstotliwości, który wynika z zaokrąglenia. Licznik 32-bitowy jest potrzebny do uzyskania niskich częstotliwości, ponieważ wpisywana wtedy do niego wartość jest rzędu milionów. W kodzie programu są to jedynie dwie linijki, które znajdują się w przerwaniu obsługującym enkoder – listing 1.

Listing 1. Fragment kodu odpowiedzialny za ustawienie częstotliwości
ARR = ((48000000 - freq) / freq);
TIM_SetAutoreload(TIM2, ARR);

Po obliczeniu częstotliwości ze wszystkich ustawionych cyfr ustawiany jest rejestr ARR.

Wartość rejestru OC, determinująca wypełnienie sygnału, zależy od tego, czy wyjście jest załączone. Jeżeli nie, to wpisuje się do niego zero – układ porównujący wystawia wtedy stały niski stan logiczny. Jeżeli zaś użytkownik włączył generowanie, wartość wymaganą do wpisania oblicza się proporcjonalnie do zawartości rejestru ARR:

 

Kod programu, który to realiuje, przedstawia listing 2.

Listing 2. Fragment kodu odpowiedzialny za ustawienie wypełnienia
if(out)
{
OC = (ARR * duty) / 100;
TIM_SetCompare2(TIM2, OC); //załącz wyjście
}
else
{
TIM_SetCompare2(TIM2, 0); //wyłącz wyjscie
}

Na koniec pewne objaśnienie – układ może generować sygnał o częstotliwości do 499 kHz, rozdzielczość regulacji wypełnienia wynosi 1%. To narzuca konieczność taktowania licznika zegarem o częstotliwości min. 49,9 MHz, jednak tutaj wynosi ona 48 MHz. Skutkuje to powstaniem pewnej rozbieżności pomiędzy wartościami zadanymi (częstotliwości i wypełnienia) a faktycznymi, jednak są one odczuwalne dopiero przy najwyższych częstotliwościach.

Michał Kurzela, EP

Artykuł ukazał się w
Elektronika Praktyczna
lipiec 2019
DO POBRANIA
Pobierz PDF Download icon
Materiały dodatkowe

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik wrzesień 2021

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio wrzesień - październik 2021

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka Podzespoły Aplikacje wrzesień 2021

Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna wrzesień 2021

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich wrzesień 2021

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów