Miernik częstotliwości 100 MHz Marek SP9XUH www.sp9xuh.pl poczta@sp9xuh.pl W pierwszym zamyśle układ ten, miał posłużyć do sprawdzenia możliwości prostego i w miarę dokładnego pomiaru częstotliwości wyjściowej transceivera KF. Chcę go wykorzystać do sterowania automatyczną zmianą pasm we wzmacniaczu mocy KF. Po porównaniu wskazań z fabrycznymi miernikami częstotliwości okazało się, że dokładność pomiaru, jak na tak prosty układ, jest dobra. Jak wspomniałem, miernik ma mierzyć częstotliwości z zakresu KF, dlatego zastosowałem w nim dzielniki na układach serii 74LSxx. Po wymianie na szybsze 74Fxx, możliwości pomiaru wzrosły do około 100 MHz.. Układ testowy miał tylko jedno wejście. Ostatecznie, rozbudowałem go o dodatkowe dwa wejścia pomiarowe oraz dwa gniazda, na które wyprowadzone zostały wolne linie portów mikrokontrolera. Wejścia pomiarowe: 1. TTL prostokąt 100 MHz 2. sinusoida 100 MHz 3. sinusoida - 40-60 MHz dla 74HC14, 100 MHz 74LVG14 Schemat ideowy miernika częstotliwości Mierzony sygnał możemy podać na jedno z trzech wejść: gniazdo G1 Pomiar przebiegu prostokątnego. Ze względu na zastosowanie tranzystora wejściowego T3, amplituda tego przebiegu może mieścić się w standardzie TTL i może być od niego zarówno mniejsza jak i większa gniazdo G2 Pomiar przebiegu sinusoidalnego. Sygnał poprzez kondensator C2, podawany jest na nóżkę 14 (wejście 2) układu U1 (NE592 - wzmacniacz video), pracującego jako wzmacniacz napięcia. Wzmocnienie napięciowe ustalane jest rezystorem R5. Przy wartości 150 Ohm, wynosi ono około 100. Sygnał trójkątny z wyjść 1 i 2 (nóżki 7 i 8) steruje bazami tranzystorów T1 i T2. Ich zadaniem jest uformowanie sygnału prostokątnego, potrzebnego dla prawidłowej pracy bramek TTL. gniazdo G3 Pomiar przebiegu sinusoidalnego. Zbudowane jest także na układzie NE592, z tym że jest to wersja 8-nóżkowa. Potencjometr P1 pozwala ustawić odpowiednia wartość amplitudy sygnału dla przerzutnika Schmitta. Przerzutnik (U6), tak jak tranzystory T1, T2 w wejściu drugim, formuje sygnał do kształtu prostokąta. Przełącznikiem S2 wybieramy wejście, z którego dokonywany będzie pomiar. Z przełącznika sygnał podawany jest na wejście wstępnego dzielnika częstotliwości- preskalera, zbudowanego na dwóch szybkich przerzutnikach D typu 74F74 (UC4). Są one połączone szeregowo i pracując w układzie dwójek liczących, dając na wyjściu Q drugiego przerzutnika częstotliwość podzielona przez 4. Dalszy podział następuje w liczniku binarnym typu 74HCT393 (UC5). Na wyjściu Q1 (4) układu UC5 otrzymujemy częstotliwość podzielona przez 4, a na wyjściu Q2(5) podzieloną przez 8. W zależności czy zwarta jest zworka Z3 czy Z4, na wejście licznika T1 procesora (U2, 11), podawany jest przebieg prostokątny o częstotliwości mierzonej podzielonej przez 16 (4x4) lub 32 (4x8). Ostatecznie pozostałem na podziale przez 32. Mikrokontroler Atmega8 zajmuje się zliczaniem impulsów przychodzących z preskalera i odpowiednim ich przeliczeniem na wartość częstotliwości. Wynik pomiaru wyświetlany jest na wyświetlaczu LCD 2x16 znaków, typu HY-1602F. Procesor taktowany jest zegarem o częstotliwości 16 MHz, w którym wykorzystano standardowy rezonator kwarcowy. Aby zwiększyć dokładność pomiaru, można zastosować bardziej dokładny i stabilny generator kwarcowy. Układ DS1813 - U3, powoduje reset sprzętowy mikrokontrolera w przypadku spadku napięcia zasilającego poniżej 4,75 V. Wolne linie portów PB i PD, wyprowadzone zostały na gniazda G6 i G7. W razie potrzeby, do każdej z tych linii, można dołączyć rezystor podciągający do +5V; R26 do R33 przygotowane miejsce na płytce. Gniazdo ISP (G5), umożliwia nam programowanie procesora bez jego wyciągania z układu. Zasilacz, zbudowany na typowych stabilizatorach napięcia 78xx (U7, U8), dostarcza dwóch napięć: +12V i +5V. Mostek Gretza (D3), pozwala zasilać częstościomierz ze źródła napięcia stałego jak i zmiennego. Transformator pomiarowy Do pomiaru częstotliwości wyjściowej TRX, pracującego z mocą od 5 do 150W, wykonałem transformator pomiarowy. Jako rdzeń zastosowałem pierścionek Amidon FT43-50, na którym nawinięte jest 30 zwoi drutu DNE 0,3 mm. Przez otwór rdzenia przechodzi gorąca żyła kabla koncentrycznego RG58, której końce przylutowane są do gniazd UC-1. 1
2
Płytka drukowana miernika częstotliwości Płytka zaprojektowana została w Protelu i wykonana metodą termotransferu. Wymiary płytki, szer. 84mm x wys. 98mm, dostosowane zostały do typowej plastykowej obudowy KM-35. Płytka drikowana Odbicie lustrzane Negatyw płytki Rozmieszczenie elementów 3
Oprogramowanie Bardzo prosty program, napisany został w języku BASCOM. Ogólnie, jego zadaniem jest przeliczenie impulsów zliczonych przez liczniki mikrokontrolera na wartość częstotliwości i wyświetlenie jej na wyświetlaczu LCD. Pomiar, jak i odświeżanie wyświetlacza, odbywa się w cyklu jednosekundowym. Dlatego, tak ważna jest tu dokładna i stabilna częstotliwość rezonatora kwarcowego. W przypadku, gdy częstotliwość rezonatora różni się od 16 MHz, zmieniamy wartość zmiennej przerwanie_timer0, tak aby uzyskać prawidłowe odliczenie 1 sekundy, a co za tym idzie prawidłowy wynik pomiaru. Możemy także zastosować inny rezonator, pamiętając o tym, aby jego częstotliwość, przy pomiarach do 100 MHz i preskalerze 32, była nie mniejsza niż 8 MHz. Wynika to ze sposobu zliczania impulsów przez liczniki procesora. W tm przypadku musimy wyliczyć wartość przypisywaną zmiennej przerwanie_timer0. Jeżeli mierzona częstotliwość jest mniejsza od 2 MHz, to wyświetlana jest w khz. Natomiast jeżeli jest większa od 2 MHz, to w MHz. Wartość przy której następuje zmiana wyświetlania z khz na MHz, jest zależna od liczby wpisanej w warunku if wynik_pomiaru < 31250 (31250 to 2 MHz, dla kwarcu 16MHz). frq_meter_zrodlo_bascom.bas źródło programu w BASCOM frq_meter_wsad_atmega8.hex wsad do procesora frq_meter_zrodlo_bascom.txt źródło programu w pliku txt ************************************************************ Program miernika częstotliwo ci 100 MHz 16-01-2013 Marek SP9XUH strona: www.sp9xuh.pl e-mail: poczta@sp9xuh.pl Przerwanie_timer0 = 62501-1 sekunda dla zegara 16 MHz Wynik_pomiaru < 31250-2 MHz dla zegara 16 MHz dla innego kwarcu należy odpowiednio przeliczyć warto ć ************************************************************* $regfile = "m8def.dat" $crystal = 16000000 typ procesora Atmega8 Config Lcd = 16 * 2 konfiguracja Lcd. Config Lcdpin = Pin, Db4 = Portc.3, Db5 = Portc.2, Db6 = Portc.1, Db7 = Portc.0, E = Portc.4, Rs = Portc.5 Cursor Off Config Timer0 = Timer, Prescale = 1 Timer0 jako Timer z podziałem przez 1. Config Timer1 = Counter, Edge = Falling Timer1 jako licznik działający od zbocza opadajšcego. On Timer0 Odmierz_1s On Timer1 Zlicz_przep_tim1 podprogram wywoływany od Timera0 podprogram wywoływany do Timera1. Dim Przerwanie_timer0 As Long Dim Przepelnienie_timer1 As Word Dim Lcd_flaga As Bit Dim Wynik_pomiaru As Single Dim X As String * 7 Declare Sub Wylicz() Reset Lcd_flaga deklaracje zmiennych siedmio miejscowa zmienna słowna. deklaracja procedury skasowanie flagi 4
Cls Upperline : Lcd "CZESTOSCIOMIERZ " Lowerline : Lcd " by MARO SP9XUH " Wait 3 Enable Interrupts Enable Timer0 Enable Timer1 Stop Timer0 Stop Timer1 odblokowanie szystkich przerwań odblokowujemy przerwanie Timera0. odblokowujemy przerwanie Timera1. zatrzymujemy Timer0. zatrzymujemy Timer1. Timer0 = 0 wpisanie do timerów wartości 0 Timer1 = 0 Wynik_pomiaru = 0 wpisanie do zmiennych wartości 0 Przerwanie_timer0 = 0. Przepelnienie_timer1 = 0. Start Timer1 Start Timer0 uruchomienie timerów Do If Lcd_flaga = 1 Then Lcd_flaga = 0 Cls If Wynik_pomiaru = 0 Then Lcd Wynik_pomiaru ; " Hz" Locate 2, 1... Lcd " Brak sygnalu" Waitms 160. Else Call Wylicz Loop End pętla główna. aktualizacji Lcd, co 1 sekundę zeruj flagę. jeśli brak sygnału na wejściu oblicz częstotliwość koniec pętli Odmierz_1s: Incr Przerwanie_timer0 If Przerwanie_timer0 = 62501 Then Stop Timer0 Stop Timer1 Przerwanie_timer0 = 0 Wynik_pomiaru = 65536 * Przepelnienie_timer1 Wynik_pomiaru = Wynik_pomiaru + Timer1 Lcd_flaga = 1 Przepelnienie_timer1 = 0 Timer1 = 0 Timer0 = 0. Start Timer0 Start Timer1 podprogram dla Timera0 (wyznaczanie 1sek). zwiększ licznik o jeden. jeśli 1 sekunda (62591 dla 16MHz) zatrzymaj timery wyzeruj zmienną. wylicz ilość przerwań ustaw flagę aktualizacji LCD Zeruj zmienną zeruj timery uruchom timery Return 5
Zlicz_przep_tim1: Enable Interrupts Incr Przepelnienie_timer1 podprogram Timera1. odblokuj przerwania. zwiększ zmienną liczby przepełnień Timer1 Return Sub Wylicz If Wynik_pomiaru < 31250 Then Wynik_pomiaru = Wynik_pomiaru * 0.001 Wynik_pomiaru = Wynik_pomiaru * 8 Wynik_pomiaru = Wynik_pomiaru * 4 X = Str(wynik_pomiaru) Lcd X Locate 1, 10 Lcd " KHz " Else Wynik_pomiaru = Wynik_pomiaru * 0.000001 Wynik_pomiaru = Wynik_pomiaru * 8 Wynik_pomiaru = Wynik_pomiaru * 4 X = Str(wynik_pomiaru) Lcd X Locate 1, 10 Lcd " MHz " End Sub przeliczenie i wyświetlenie częstotliwości częstotliwość mniejsza od 2 MHz zamiana Hz na khz przelicz preskaler zamień wartość cyfrową na ciąg znaków wyświetl częstotliwość częstotliwość większa od 2 MHz zamiana Hz na MHz przelicz preskaler zamień wartość cyfrową na ciąg znaków wyświetl częstotliwość Pliki do pobrania frq_meter_sch.pdf frq_meter_bottom_pcb.pdf frq_meter_top_pcb.pdf frq_meter_elementy.pdf frq_meter_neg_bottom_pcb.pdf frq_meter_etykieta.pdf frq_meter_zrodlo_bascom.bas frq_meter_wsad_atmega8.hex frq_meter_zrodlo_bascom.txt frq_meter_artykul.pdf frq_meter_100mhz.zip schemat ideowy płytka drukowana odbicie lustrzane płytki rozmieszczenie elementów płytka drukowana - negatyw naklejka na obudowę źródło programu w BASCOM wsad do procesora źródło programu w pliku txt artykuł w formacie Acrobat Reader wszystkie pliki 6