- pomiar częstotliwości w zakresie 0,1 Hz…42 MHz,
- czas bramkowania zliczania:1 s,
- dla częstotliwości mniejszych niż 50 kHz pomiar czasu z przeliczaniem na częstotliwość,
- amplituda mierzonego sygnału na wejściu A 0,8…3 V dla sygnałów do 15 MHz,
- drugie wejście pomiarowe o zakresie 1 Hz…24 MHz opcjonalnie jako licznik z funkcją przechwytywania i zerowania,
- wejście drugie w standardzie TTL-LV (3,3 V),
- relatywny pomiar częstotliwości,
- pomiar czasu w zakresie 47 ns…10 s,
- zasilanie 5 V, max. 150 mA.
Budowa i działanie
Konstrukcja miernika nie jest skomplikowana, schemat pokazano na rysunku 1. Liniowy stabilizator U4 poradzi sobie z napięciem wejściowym o wartości do 12 V, jednak wtedy może się zbytnio nagrzewać i wyłączyć (ale nie uszkodzi się). W ograniczonym zakresie, przed skutkami odwrotnego podłączania zasilania zabezpiecza dioda D5.
Stabilizowane napięcie zasila mikrokontroler. Jest on wyposażony w blok pętli PLL, która umożliwia taktowanie układu z częstotliwością do 84 MHz, przy dołączonym kwarcu 8 MHz.
Wyniki pomiaru są prezentowane na czterech wyświetlaczach LED 7-segmentowych oraz OLED 128×32. Zastosowanie wyświetlacza OLED pozwala w czytelny sposób wyświetlić jednostkę pomiarową oraz dodatkowe informacje, co nie byłoby możliwe z użyciem kilku diod LED. Cztery przyciski sterują pracą miernika. Prosty wzmacniacz wejściowy znany z AVT2885 pozwala na doprowadzenie sygnału pomiarowego o amplitudzie 0,2...1 V. Wejścia cyfrowe są zabezpieczone transilem SRV05-4.
Montaż i uruchomienie
Montaż jest standardowy i nie wymaga szczegółowego opisu. Przed rozpoczęciem montażu należy zastanowić się, czy wyświetlacze będą montowane w podstawce i złączu, czy nie. Gdy użyta będzie podstawka, należy zaopatrzyć się w dłuższe przyciski niż w przypadku wlutowania wyświetlaczy w płytkę. Kondensatory C8 i C9 powinny być typu Low ESR. Z tego powodu połączono je równolegle. Mikrokontroler można zaprogramować przez złącze J3. Schemat płytki wraz z rozmieszczeniem elementów pokazują rysunki 2 i 3.
Poprawną pracę programu sygnalizuje miganie diody D6 „Run” z częstotliwością 1 Hz. Dioda D7 oznaczona „Err” miganiem informuje o poważnym błędzie w programie lub sprzęcie, na przykład sygnalizuje niepoprawną pracę oscylatora. W takich okolicznościach, po kilkunastu sekundach mikrokontroler zostanie zresetowany.
Na płytce przewidziano miejsce na pamięć EEPROM U3. Jest ona konieczna tylko wtedy, gdy chcemy, aby ustawienia były zapamiętane po wyłączeniu zasilania. Dlaczego EEPROM nie została emulowana w pamięci FLASH? Wynika to z faktu, że STM32F401 ma tylko pięć stron pamięci o rozmiarach 4×16 kB, 64 kB i 128 kB. EEPROM najlepiej emulować na ostatnich stronach pamięci, w konsekwencji 192 kB zostałoby stracone. Można pokusić się o emulację na stronach 1 i 2, ale wymaga to przesunięcia programu w obszar strony 3 oraz zużycie strony 0 tylko po to aby wstawić tam 4-bajtowy wektor resetu. W konsekwencji, aby zapisać kilkadziesiąt bajtów w emulowanym EEPROM, trzeba poświęcić 48 kB FLASH (tyle RAM miał ZX-Spectrum). Pod tym względem seria F4 nie jest zbyt atrakcyjna. Na docelowej płytce użytkownik może wybrać typ zastosowanej pamięci pomiędzy tanią, ale trudniejszą w montażu SOIC6, a droższą, ale łatwą do wlutowania TO92.
Interfejs USART dostępny jest na złączu J7. Za pomocą programu typu terminal (parametry transmisji 921600 8N1) można wyświetlić wysyłane informacje o zmierzonej częstotliwości i czasie (rysunek 4).
Wzmacniacz na wejściu A licznika ma prostą budowę i w związku z tym duże ograniczenia. Do częstotliwości 1 MHz parametry są stabilne, choć pomiar czasu impulsu będzie już obarczony błędem – pomiar sygnałów oscyloskopem pokazuje rysunek 5.
Żółty przebieg (kanał 1) pokazuje sygnał wejściowy, niebieski (kanał 2) to sygnał na kolektorze T1. Na rysunku 6 pokazano pomiary dla przebiegu 5 MHz, 800 mV. Możliwości mojego generatora skończyły się na 15 MHz (rysunek 7), ale to wystarczyło, aby stwierdzić, że tak prosty wzmacniacz nadaje się do częstotliwości 10...15 MHz. Wzmacniacz można pominąć, nie montując T1 i R3, a R1, R2, C1 zastępując zworami.
Wtedy można zastosować wzmacniacz o lepszych parametrach, który udostępnia sygnał cyfrowy w logice 3,3 V. Mikrokontroler STM32F401 akceptuje sygnał o amplitudzie 5 V na wejściu, ale transil D3 ogranicza wartość. Gdy dostępny jest sygnał o amplitudzie 5 V, lepiej zastosować konwerter z rodziny 74LVC albo usunąć D3 (rezygnując jednocześnie z ochrony – jaką zapewnia).
Oprogramowanie sterujące
Program napisano z wykorzystaniem oprogramowania CubeIDE. Zajmuje 85 kB FLASH z dostępnych 256, używa 10 kB RAM z dostępnych 64 kB. Z dostępnych ośmiu timerów wykorzystano cztery, plus systemowy generujący przerwania co 1 ms. Dlaczego potrzeba tak dużo timerów? Timer 1 mierzy częstotliwość wejścia A, timer 3 wejścia B. Oba są bramkowane timerem 5. Timer 2 mierzy czasy impulsów i okres sygnału. Wydawać się może, że zadaniu sprostałby większy AVR, np. Mega1281. Niestety nie ma on timerów 32-bitowych, ponadto maksymalna możliwa częstotliwość, jaką można nim zmierzyć, to 8 MHz.
Pętla główna programu nie jest blokowana na dłużej niż 1 ms. Obsługa OLED korzysta z mechanizmu DMA, podobnie jak wysyłanie danych przez UART. Pierwotnie funkcje zapisu EEPROM DS2431, przeniesione z AVR blokowały CPU na 10 ms przy zapisie każdej strony, co dawało łączny czas zapisu struktury konfiguracji wynoszący 80 ms. Nie wpływało to na pracę miernika, ponieważ pomiary realizowane są sprzętowo i na przerwaniach, ale nieładnie wyglądało zatrzymanie odświeżania OLED przy odliczaniu czasu bramkowania. Z tego powodu funkcje zostały zamienione na nieblokujące.
Obsługa multipleksowanego wyświetlacza LED zrealizowana jest na przerwaniu 1 ms. Aby zwiększyć wydajność prądową wyjść sterujących anodami, połączono równolegle po dwa porty GPIO. Aby nie doprowadzać do chwilowych zwarć przy ustawianiu wyjść, wykorzystano rejestr BSRR, który pozwala ustawiać i kasować bity GPIO w sposób atomowy.
Obsługa urządzenia
Przycisk S2 „Screen” pozwala przełączać treść ekranu. Numer ekranu jest widoczny w prawym górnym rogu wyświetlacza OLED i znika po dwóch sekundach po jego zmianie przyciskiem S2. Pierwszy ekran (fotografia 1), wyświetla zmierzoną częstotliwość.
Gdy jest ona mniejsza od 50 kHz, mierzony jest czas, który przed wyświetleniem jest przeliczany na częstotliwość. W takiej sytuacji na wyświetlaczu pojawia się napis „(math)”. Dzięki temu można uzyskać wysoką rozdzielczość pomiaru, który wykonuje się szybko. Przy pomiarze 10 Hz pomiar trwa tylko 100 ms, a rozdzielczość wynosi 10 mHz. Gdy częstotliwość przekracza 50 kHz, na wyświetlaczu pokazuje się liczba impulsów zliczona w ciągu sekundy. W tym przypadku wyświetlany jest napis „(cnt)”. Ponadto pokazana jest informacja o czasie bramkowania oraz ukazany jest upływ czasu bramkowania (liczby od 0 do 10). Drugi ekran pokazuje zmierzony czas okresu sygnału (fotografia 2). Podobnie jak w przypadku częstotliwości, granicą jest 50 kHz.
Przy częstotliwości niższej niż 50 kHz mierzony jest okres, ponad 50 kHz częstotliwość, z której wyliczany jest czas.
Kolejne ekrany pokazują zmierzony czas stanu wysokiego i niskiego (fotografie 3 i 4). Analogicznie wyglądają ekrany pokazujące współczynnik wypełnienia sygnału w procentach, licznik częstotliwości (nie ma tu granicy 50 kHz, zawsze wyświetlana jest liczba impulsów zliczonych w czasie bramkowania), wyliczoną częstotliwość na podstawie zmierzonego okresu sygnału, zmierzony czas okresu, wyliczony czas okresu, zliczoną liczbę impulsów na wejściu B.
Przycisk S3 „Hold” zatrzymuje wyświetlanie, co jest sygnalizowane miganiem napisu „HOLD”. Pomiar jest cały czas dokonywany, co widać w oknie terminalu, tylko wartość na wyświetlaczu jest zamrożona. Przycisk S8 „Rel–” zapamiętuje częstotliwość, po czym odejmuje ją od mierzonej. Fakt pomiaru relatywnego jest sygnalizowany wyświetleniem napisu „REL–”. Pozwala to np. na pomiar częstotliwości pośredniej. Przycisk S4 „Rel+ działa podobnie z tym, że zapamiętana częstotliwość jest dodawana do wyniku pomiaru (fotografia 5).
Trzeba wiedzieć, że funkcja ta działa tylko dla wejścia A i tylko wtedy, gdy wyświetlany jest bezpośredni pomiar z licznika. Gdy częstotliwość jest zbyt niska napis „REL” znika. Pomiar relatywny można włączyć tylko na ekranie zero (pomiar częstotliwości wejścia A), pięć (zliczone impulsy na wejściu A w ciągu sekundy) i dziewięć (wejście B). Ostatni przypadek nie zadziała, gdy wejście B będzie użyte do zliczania impulsów, a nie pomiaru częstotliwości.
Funkcję licznika na wejściu B uruchamia się po równoczesnym naciśnięciu przycisków „REL+” i „REL–” na ekranie pokazującym częstotliwość zmierzoną na wejściu B. Powrót do pomiaru częstotliwości nastąpi po ponownym naciśnięciu „REL+” i „REL–” na ekranie pokazującym wartość licznika. W czasie gdy miernik pracuje w roli licznika, naciśnięcie „REL+” lub „REL–” zeruje stan licznika, przedtem jednak jego stan jest zapamiętany. Tę samą funkcjonalność uzyska się w czasie opadającego zbocza sygnału na wejściu PC12. Przechwyconą wartość można sprawdzić w programie terminalu za napisem „Latch =” (rysunek 8).
Warto zauważyć, że praca w trybie licznika powoduje, iż w terminalu nie pojawia się częstotliwość zmierzona na wejściu B. Przekroczenie wartości 9999 licznika powoduje wyświetlenie napisu „OVER”, ale stan licznika można sprawdzić w terminalu.
Ustawienia miernika zapamiętywane są w EEPROM po dziesięciu sekundach od naciśnięciu dowolnego przycisku. Informacja o zapisie pojawia się w oknie terminala. Podczas startu programu w terminalu wyświetlane są informacje o odczytaniu pamięci EEPROM. Ponadto pojawiają się informacje o liczbie resetów mikrokontrolera i zadziałania watchdoga. W tym czasie na wyświetlaczu pojawi się LOGO albo informacje dotyczące EEPROM lub odzyskaniu jej zawartości z backupu. Jeśli w mierniku nie ma zamontowanej pamięci wszystkie kropki na wyświetlaczu LED są zaświecone a program przyjmie standardową konfigurację.
Podsumowanie
W sprawie nowszych wersji softu, błędów znalezionych w programie, propozycji modyfikacji oprogramowania proszę pisać do autora. W materiałach do projektu dostępne są materiały z kolejnych etapów prac nad urządzeniem – napisanie oprogramowania zajęło prawie 150 godzin.
- R1, R4, R7: 390 Ω
- R2: 470 kΩ
- R3, R15, R16: 1 kΩ
- R5, R6, R11: 2,2 kΩ
- R8: 0 Ω
- RP1: 8×75 Ω
- C1: 100 pF
- C8, C9: 2,2 μF
- C2, C3, C6, C7, C10: 100 nF
- C4, C5: 22 pF
- C12, C13: 10 μF
- U1: STM32F401RBT6
- U3a: DS2431+ TO-92
- U3b: DS2431P+ TSOC-6
- U4: SPX1117 SOT-223
- T1: BFR93AE6327 SOT-23
- D3: SRV05-4 SOT-23-6
- D5: SM4007
- D6: Dioda LED niebieska SMD1206
- D7: Dioda LED czerwona SMD1206
- Led1: KW4-566ABB
- Q1: 8 MHz
- J1, J7: NS25-G3
- J6: NS25-W2P
- J2, J5: Moduł modOLED091 IIC (KAMAMI)
- S2, S3, S4, S8: Micro switch 5×7
- J3: Listwa goldpin 1×4