Opisywane urządzenie służy do pomiaru częstotliwości w zakresie od 0,1Hz do 42MHz i czasu do 10 sekund z rozdzielczością 23,8ns. Tym, co odróż- nia prezentowany licznik od innych, jest sposób pomiaru niskich częstotliwości.
Przy pomiarze częstotliwości niższych
niż 50kHz mierzony jest okres sygnału, po czym przeliczany na częstotliwość.
Dzięki temu pomiar częstotliwości 1Hz z rozdzielczością 1μHz (0,000001Hz) trwa tyle co okres sygnału, czyli sekun- dę. Tradycyjną metodą pomiar trwałby milion sekund, czyli ponad 11,5 dnia!
Poza pomiarem częstotliwości możliwy jest pomiar okresu. Można zmierzyć czas trwania stanu wysokiego i niskiego bada- nego sygnału. Na podstawie tych pomia- rów wyliczany jest współczynnik wypeł- nienia z rozdzielczością 0,01%. Miernik ma dwa wejścia, drugie nie mierzy cza- sów, tylko częstotliwość, ale można prze- łączyć je w tryb licznika impulsów z prze- chwytywaniem i resetem. Ze względu na to, że impulsy sygnału wejściowego są zliczane w liczniku 32-bitowym, który może być taktowany częstotliwością do 42MHz, nawet przy bramkowaniu 100
sekund nie następuje przepełnienie liczni- ka. Miernik nie ma automatycznej zmia- ny zakresu, tylko wynik pomiaru jest reprezentowany w inny sposób. Podobnie przy pomiarze czasu, pomiar trwający 10 sekund nie jest w stanie przepełnić liczni- ka taktowanego 42MHz. W tym przypad- ku także sposób reprezentacji pomiaru jest różny dla różnych sygnałów wejścio- wych. Wynik pomiaru jest prezentowany na ośmiu wyświetlaczach 7-segmento- wych oraz dodatkowym OLED 128×64 piksele. Mikrokontroler jest taktowany generatorem kwarcowym, ale można doprowadzić sygnał z zewnętrznego pre- cyzyjnego generatora, który może być
3Vin
Adj1
Vout2 U4SPX1117
13VCCA
PA3/RX217 PA5/SPI1_SCK21
PC13/TAMPER 2
PC15/Osc32out 4
PA2/TX2 16PA1/RTS2 15
PB0/IN8/TIM3_CH326
PA0/CTS2/WKUP 14
PB1/IN9/TIM3_CH427
PC14/Osc32in 3 1VBAT
BOOT060 PA7/SPI1_MOSI23
TX1/PA942 PH1/OSCout
6PH0/OSCin 5 7NRST
12GNDA
PA4/SPI1_SS20 PA6/SPI1_MISO22 PB10/I2C2_SCL/TX329PB2/BOOT128 Vcap130 GND31 VCC32
SPI2_SS/PB1233 SPI2_SCK/PB1334 SPI2_MOSI/PB1536 SPI2_MISO/PB1435 CK1/PA841 RX1/PA1043 USB_DM/PA11USB_DP/PA124445 SWDIO/TMS/PA1349SWDCLK/PA14 GNDVCC464748
PB355 PA1550
PB456I2C1_SMBA/PB557I2C1_SCL/PB658I2C1_SDA/PB759TIM4_CH3/PB861TIM4_CH4/PB962GND63VCC64
8PC0 9PC1 10PC2 11PC3
GND18 VCC19 PC424 PC525
PC637 PC738 PC940 PC839 RX5/PD254 TX5/PC1253 RX4/PC1152 TX4/PC1051
STM32F401RCT6U1
SS16D5
C12
10uF C13
10uF 1
2 J65.5V
VCC
VCC R1390R
R13 470k*
R31k
T1BFR93AE6327 VCC
Vdd1 2CK
GND3 4IO
/RST5 J3
SWD VCC
S1Rst 112eCom1211da310dpf49cCom258gCom376bCom4
KW4-566ABBLed1
A B
C
DE F GDP e1 d2 dp3 c4 g5 b7Com38Com29f10a11Com112 Com46
KW4-566ABBLed2
A B
C
DE F GDP
AN0 AN1 AN2 AN3 AN4 AN5 AN6 AN7
1 2 5 4
00
3 P1
ImpA ImpB ImpSW
/Rst
/Rst 1 23 4 5 32kHzJ4
C2 100n VCC
C6 100n VCC
C10 100n VCC
C8
2u2 C9
2u2 C7
100n VCC
C3100n VCC
VCC
VCC
VCC
+5
1 2 34 5 6 78
16 15 1413 12 11 109 RP1 75R * 8
A B CD E F GDP D0
D1 D2D3 D4 D5 D6D7 KEY
LED_MUX
D6
RUN D7 ImpA
ImpB ImpSW
LedRUN
LedERR
LedERR R15 390R R16
VCC
D0 D1 D2 D3 D4 D5 D6
D7
A0 A1A2 A3 A4 A5A6 A7
GateOUT
GateIN
R10 1k
D4 GATE 12
3 J1
IN R7 390R
IN_A
IN_A
IN_B
IN_B
IN_A
R4 390R
TX_GPS RX_GPS
1PPS LedRUN
GateIN GateOUT GateMUX
GateMUX
PwmVCO
1 2 34 J10
1 2 3 J7
COM
GateIN Q1
8MHz C5 C4 22pF
22pF
R11 2k2
SCL SDA
OW
OW GNDIO12 U3a
DS2431+
VCC
H1 OTWOR
H2 OTWOR
H3 OTWOR
H4 OTWOR
Rst_Latch
6 1 2
4
3 5
D3
SRV05-4 VCC
IN_A IN_B
1PPS Rst_Latch
12 3 4 56
J8SPI +5
1 2 3 4
J2 PC
+5 C1100pF
1GNDIO 2
U3b
DS2431P+
R2470k*
Vcc1 D-2 D+ 3 ID4 GND5
G6
J9
USB-B +5 1 23 4 J13
USB
Out415 3In3In4 4In5 5In6 6In7 7 In8 8
Out316
Vs9
Out514
Out118 Out613
Out217 Out712 Out811
2In2 1In1 U2
UDN2983/A2982 (od pinu 1) AN0 AN1AN2 AN3 AN4 AN5AN6 AN7
C11 10uF
+5 A0 A1A2 A3 A4 A5A6 A7
S2 Screen S3
HOLD S4
Rel+
S8 Rel-
S5 S6Gate
000 S7
Menu S9
SET A0
A1
A2
A3 A4
A5 A6 A7
KEY D1
HOLD D2 GATE R8 390R R9 390R
LED_MUX A1
A7
R12 390R
D8 A2 REL
A3
1 2 34 J5 R6 2k2 R5 2k2
SCL SDA VCC
VCC 1
2 34 J12
VCC SCL SDA 10uFC15*
C14 100pF*
R2 R13 C15 C15 - wyjDĞnienie w artykule
Projektów liczników częstotliwości w Internecie jest bardzo dużo, po- czynając od opartych na mikrokon- trolerach 8051, przez AVR, PIC do ARM. Niestety, znalezienie dobrej konstrukcji nie jest łatwe. Popularne rozwiązania oparte na PIC, jak AVT- 2885, bazują na pomiarze liczby im- pulsów w jednostce czasu. Metoda ta ma poważną wadę przy pomiarze ni- skich częstotliwości – mała rozdziel- czość. Aby polepszyć sytuację, trzeba
rozsądnie zwiększyć czas pomiaru.
Rys. 1
F-meter F-meter
Modułowy licznik Modułowy licznik
częstotliwości i czasu częstotliwości i czasu
część 1 część 1
3275
3275
synchronizowany jeszcze precyzyjniej- szym wzorcem, na przykład sygnałem GPS. Do licznika można podłączyć roz- budowany układ obwodów wejściowych AVT3277 sterowany magistralą I2C.
Opis układu
Schemat ideowy pokazany jest na rysun- ku 1. Jak widać, budowa miernika nie jest skomplikowana, czego nie można powiedzieć o pierwszym, który zbudowa- łam ponad 30 lat temu. Miał 37 układów TTL, pobierał 1,5A, mierzył częstotli- wość do 125MHz (układy rodziny 74S rodzimej produkcji) w sześciu zakresach przełączanych ręcznie przyciskami góra dół, więc był przygotowany do automa- tycznej zmiany zakresu, której się nigdy nie doczekał. Mierzył okres i czas trwa- nia poziomu H, L sygnału. Wyniki były prezentowane na 6-cyfrowym wyświet- laczu 7-segmentowym. Gdy budowałam tamten miernik, nie miałam oscyloskopu.
Analizatory logiczne były nieosiągalne dla przeciętnego Kowalskiego. Miałam tylko prostą sondę TTL. Z tego powodu uruchomienie miernika trwało kilka dni.
Samo wiercenie PCB pochłonęło cały dzień, bo na płytce było ponad 700 otwo- rów. Mimo że konstrukcja była dosyć nie- typowa, redakcja „Radioelektronika“ nie była zainteresowana publikacją, a konku- rencyjne czasopisma jeszcze nie istniały.
Dlaczego nie byli zainteresowani? Tego nie wiem. Może nie chcieli uwierzyć, że młody człowiek może zaprojektować tak skomplikowane urządzenie, wykonać w domu dwuwarstwową PCB i całość działa. Teraz jest inaczej. Płytek nie trze- ba robić w domu, a AVT wykona prototy- powe płytki nieodpłatnie.
Czy teraz do uruchomienia prezento- wanego licznika wymagany jest oscy- loskop i/lub analizator logiczny? Tylko jeśli wystąpią jakieś problemy, to bez oscyloskopu czy analizatora stanów logicznych pewnie się nie obejdzie. Jed- nak szansa na bezproblemowe urucho- mienie miernika są bardzo duże.
Przed opisaniem konstrukcji przybliżę metody pomiaru częstotliwości i czasu, bo czy pomiar dokonywany jest z użyciem układów TTL, CPLD/FPGA, czy mikro- kontrolera, zasada pomiaru nie zmieni- ła się od lat. Pierwsza metoda pomia- ru to metoda bezpośrednia – rysunek 2. Generator wzorcowy poprzez zespół dzielników wytwarza przebieg o okresie wzorcowym. W przykładzie z rysunku 2 poza podstawowym sekundowym okre- sem (1Hz) jest jeszcze 10 sekund (0,1Hz), 100ms (10Hz) i 10ms (100Hz). Sygnał wzorcowy trafia na dzielnik przez dwa,
w tym przypadku zbudowany z przerzut- nika T. Zakładając, że wybrano sygnał wzorcowy 1Hz, na wyjściu przerzutnika pojawi się sygnał o okresie dwóch sekund (0,5Hz), gdzie stan wysoki będzie trwał sekundę, tak samo jak i stan niski. W cza- sie stanu wysokiego na wyjściu bramka przepuści do licznika liczbę impulsów odpowiadającą mierzonej częstotliwości, przykładowo sygnał 1kHz spowoduje zliczenie 1000 impulsów. Taka metoda pomiaru jest dobra dla wysokich czę- stotliwości. Miernik cyfrowy, zależnie od momentu, w którym rozpoczyna pomiar, może zliczyć faktyczną liczbę impulsów lub o jeden mniej (zauważy jedno zbocze). W konsekwencji ostat- nia cyfra może się zmieniać podczas pomiarów. Dlatego w przypadku mier- ników cyfrowych podaje się dokład- ność w procentach i cyfrach wyświet- lacza. W tym przypadku będzie to ±1.
Gdy mierzona częstot- liwość jest niska, przy- kładowo 10Hz, bramku- jąc sygnałem 1 sekundy, możemy uzyskać wynik 10 lub 9. Daje to też 10% niedokładności.
Dla porównania, bardzo kiepski kwarc 100ppm ma dokładność 0,01%.
Wynika z tego, że dopie- ro gdy mierzymy czę- stotliwość 10kHz niedo-
kładność kwarcu może o sobie dać znać.
Z tego powodu przy pomiarze niskich częstotliwości lepsza jest metoda pośred- nia – rysunek 3. W tym przypadku sygnał wejściowy trafia na dzielnik przez dwa, dzięki czemu na wyjściu pojawia się stan niski trwający tyle, co okres mierzonego sygnału. Generator wzorcowy generuje sygnał o wysokiej częstotliwości, który trafia na bramkę. Jak widać, zamienione zostały role generatora i sygnału wejścio- wego. Zakładając, że na wejście poda- ny jest sygnał mierzony o częstotliwości 2Hz, którego okres trwa 500ms, a gene- rator wzorcowy generuje 1000Hz (1kHz), licznik zliczy 500 impulsów. Zgodnie ze wzorem Tx = N / Fwz, okres sygnału mie- rzonego wynosi 500 / 1000Hz = 0,5Hz = 500ms, częstotliwość zaś, według wzoru Fx=Fwz/N, wynosi 1000Hz / 500 = 2Hz.
Ze względu na to, że w czasach „niepro- cesorowych” takie obliczenia do łatwych nie należały, liczniki częstotliwości naj- częściej mierzyły metodą bezpośrednią.
Liczniki na rysunkach 2 i 3 pokazano w postaci uproszczonej, nie miałby prawa w praktyce działać poprawnie, bo nie są zerowane przed rozpoczęciem zlicza-
nia. Praktyczna realiza- cja licznika wyglądać może jak na rysun- ku 4. W czasie stanu wysokiego na wyjściu przerzutnika T bramka przepuszcza impulsy, które są zliczane. Opa- dające zbocze sygnału na wyjściu przerzutnika wyzwala multiwibrator, który przepisuje zliczo- ną wartość do przerzut- ników LATCH, natomiast opadające zbo- cze pierwszego multiwibratora wyzwala kolejny, który zeruje licznik, przygoto- wując go do kolejnego pomiaru. Bardziej rozbudowane liczniki miały synchroniza- cję sygnału bramkującego z mierzonym przebiegiem, dzięki czemu wynik pomia- ru nie zmieniał ostatniej cyfry, oczywiście o ile badany sygnał był stabilny. Czasem liczniki były budowane na bazie liczni- ków rewersyjnych z ustawianiem. Umoż- liwiało to wpisanie częstotliwości pośred- niej, odejmowanie jej lub dodawanie przy pomiarze. Konstrukcja takiego licznika była skomplikowana i 37 układów sca- lonych nie wystarczało, a i pobór prądu zdecydowanie przekraczał 1,5A.
Po (nie)zbędnej teorii przejdźmy do opisu miernika. Układ zasilany jest napię- ciem 5–5,5V doprowadzonym do złącza J6 lub 5V na J9. Napięcie to można nie- znacznie zwiększyć. Jego górną wartość ograniczają diody LED D1, D2 i D8 ste- rowane z portu PA11 oraz diody wyświet- laczy LED przyłączone do portów PA i PB. Miernik można zasilić napięciem do 6,5V. Układ U4 stabilizuje napięcie dla mikrokontrolera i wyświetlacza OLED,
BRAMKA LICZNIK
100Hz 10Hz 1Hz 0,1Hz
0HWRGDEH]SRĞUHGQLD 6<*1$à
:(-ĝ&,2:<
*(1(5$725 :=25&2:<
DZIELNIK
&=ĉ6727/,
:2ĝ&,
FX=N Tw2
Tw2 Q
T
BRAMKA
LICZNIK
1MHz 100kHz 10kHz 1kHz
0HWRGDSRĞUHGQLDSRPLDURNUHVX
FX= N 6<*1$à
:(-ĝ&,2:<
*(1(5$725 :=25&2:<
DZIELNIK
&=ĉ6727/,
:2ĝ&,
TX= N Fw2
Fw2
Fw2
T Q
BRAMKA
:<ĝ:,(7/$&=
'(.2'(5 /,&=1,.
R
/
=$75=$6.
7 Q
Q
Praktyczna realizacja licznika Rys. 2
Rys. 3
Rys. 4
natomiast diody i wyświetlacze LED zasilane są z 5V. Prototyp zasilany napię- ciem 5,5V pobierał ok. 100mA podczas wyświetlania „0.999985”, co wydziela na stabilizatorze U4 około 500mW mocy.
Do jej rozproszenia wystarczy niewielka powierzchnia miedzi na płytce. Główną rolę w mierniku odgrywa mikrokontro- ler U1 STM32F401RCT6, który został wybrany ze względu na niską cenę w sto- sunku do możliwości. W swoim wnętrzu ma 256kB pamięci FLASH, 64kB RAM, 8 timerów, w tym dwa 32-bit, po kilka UART, SPI, I2C, do tego RTC, dwa ukła- dy watchdog, wiele innych udogodnień i ma FPU, co nie jest takie oczywiste w mikrokontrolerach ARM. Mikrokon- troler jest taktowany sygnałem 8MHz, ale wewnętrzny PLL powiela tę częstotli- wość do 84MHz.
Mikrokontroler steruje ośmioma mul- tipleksowanymi wyświetlaczami 7-seg- mentowymi. Dodatkowe informacje są wyświetlane na wyświetlaczu OLED 128×64 piksele przyłączonym do J5, który komunikuje się z mikrokontrolerem przez magistralę I2C. Linie magistrali są podciągane rezystorami 2,2kΩ. Ponad dwa razy mniejsza wartość rezystorów niż najczęściej spotykana 4,7kΩ wynika z tego, że wyświetlacz pracuje w trybie FAST (400kHz), a do magistrali mogą być podłączone kolejne płytki przyłą- czone do J12. Obsługę miernika umoż- liwia klawiatura składająca się z ośmiu przycisków oraz enkodera. Aby nie uży- wać mikrokontrolera w większej obudo- wie, klawiatura obsługiwana jest, tak jak wyświetlacze – przez multipleksowanie.
Ponieważ nie przewiduje się naciśnię- cia więcej niż jednego przycisku w tym samym czasie, budowa klawiatury została uproszczona i nie zamontowano w niej diod separujących. To, ze względu na sterowanie jej razem z anodami wyświet- lacza, powoduje fałszowanie wyświetla- nej treści w przypadku naciśnięcia rów- nocześnie więcej niż jednego przycisku oraz powoduje zwarcia pomiędzy porta- mi mikrokontrolera. Krótkotrwałe zwar- cia nie doprowadzą do ich uszkodzenia, ale takie postępowanie nie jest zalecane.
Enkoder jest przyłączony bezpośrednio do wejść mikrokontrolera. Sygnał wej- ściowy przechodzi przez prosty wzmac- niacz zbudowany na tranzystorze T1.
Mimo wypróbowania dwóch rozwiązań, o czym w dalszej części artykułu, nie byłam zadowolona z ich pracy. Dlatego zdecydowałam się pominąć wzmacniacz, bo i tak planowałam zaprojektować bar- dziej rozbudowane obwody wejściowe.
Wejścia A, B, 1PPS i LATCH/RESET
mikrokontrolera zabezpiecza transil D3.
Złącze J10 umożliwia doprowadzenie zewnętrznego sygnału bramkującego;
jeśli ta możliwość nie jest wykorzystana, należy zewrzeć piny 3 i 4 złącza. J11 umożliwia komunikację z modułem GSM oraz sterowanie generatorem VCO. Na USART dostępny na złączu J7 wysyłane są informacje o zmierzonej częstotliwości i czasie. Parametry transmisji 921600 8N1. J8 służyła do prób z wyświetla- czem komunikującym się przez SPI. Na razie ta funkcja nie jest wykorzystana.
J3 umożliwia zaprogramowanie mikro- kontrolera. W J2 wykorzystane jest na razie tylko wyprowadzenie numer dwa umożliwiające przechwycenie i zrese- towanie licznika B. Niewykluczone, że gdy Czytelnicy wykażą zainteresowa- nie poparte listami do redakcji, funk- cja zatrzaskiwania i resetowania zosta- nie rozdzielona. Wtedy to wykorzystane będzie kolejne wyprowadzenie złącza J2. J4 umożliwia podłączenie rezonatora kwarcowego 32kHz i baterii, co pozwoli uruchomić RTC. Do J13 można podłą- czyć konwerter USB-UART, który może zapewnić komunikację z mikrokontrole- rem (złącze J7). Pamięć EEPROM U3a lub U3b jest konieczna tylko wtedy, gdy wymagane jest, aby ustawienia miernika były zapamiętane po wyłączeniu zasila- nia. Czytelników może zastanowić, dla- czego EEPROM nie została emulowana w pamięci FLASH. Otóż STM32F401 ma pięć stron pamięci o rozmiarach 4×16kB, 64kB i 128kB. EEPROM naj- lepiej emulować na ostatnich stronach pamięci, w konsekwencji 192kB zostało- by stracone. Jeśli skorzystać z pierwszych stron po 16kB, aby zapisać kilkadziesiąt bajtów w emulowanym EEPROM, trzeba poświęcić 48kB FLASH (strona 0 skok do programu, strony 1 i 2 na EEPROM), tyle ile RAM miał ZX-Spectrum . Pod tym względem seria F4 nie jest zbyt atrak- cyjna. Miałam dylemat, czy
zastosować pamięć w obu- dowie TO-92, czy prawie dwa razy tańszą w SOIC-6.
W prototypie zdecydowa-
łam się na TO-92, ale w docelowej płytce pozwoliłam wybrać użytkownikowi typ pamięci pomiędzy tanią, ale trudniejszą w montażu SOIC-6, a droższą, ale łatwą do wlutowania TO-92.
Kilka słów
o oprogramowaniu
Program napisano z wykorzystaniem CubeIDE. Zajmuje 85kB FLASH z dostępnych 256, używa 10kB RAM z dostępnych 64kB. Z dostępnych ośmiu timerów wykorzystano siedem, plus systemowy generujący przerwania co 1ms, przy czym do samego pomiaru częstotliwości i czasu wystarczą cztery.
Pomiar częstotliwości realizuje timer1 ustawiony w tryb GATED MODE – rysunek 5. Uwaga! Ze względu na obec- ność mnóstwa rysunków i fotografii, nie mogą mieć wysokiej jakości w wer- sji drukowanej – oryginały o wysokiej jakości są dostępne w Elportalu wśród materiałów dodatkowych do tego nume- ru EdW. Sygnał taktujący licznik jest pobierany z wejścia „ETR1” (PA12, pin 45), zliczanie bramkuje „TI1FP1” (PA8, pin 41). Ze względu na to, że licznik jest 16-bitowy, starsze słowo zliczane jest programowo w przerwaniu.
uint16_t volatile timH;
void irqTim1update(){
timH++;
}
Sygnał bramkujący wywołuje prze- rwanie
uint32_t volatile Freq;
void irqTim1trigger(void){
Freq = TIM1->CNT | timH << 16;
TIM1->CNT = timH = 0;
FreqAend = true;
}
Aby uniknąć czasochłonnych obli- czeń zmiennoprzecinkowych (przelicza- nie częstotliwości na czas), w przerwaniu jest wykonywana tylko prosta operacja przesuwania i dodawania oraz ustawiana flaga „FreqAend” dla pętli głównej pro- gramu. Dzięki temu czasochłonne ope- racje wykonywane są w pętli głównej, a nie w przerwaniu. Chwila odczytu licznika timera 1 nie ma większego zna- czenia, ponieważ ze względu na bramko- wanie nie zmienia on już swej wartości.
Pomiar czasu jest zrealizowany jesz- cze prościej, a to za sprawą 32-bitowego licznika w trybie COMBINED MODE INPUT PWM – rysunek 6. Ze względu na to, że HAL dla STM32 nie zawsze jest wygodny, konfigurację licznika zrealizo- wano, pisząc bezpośrednio do rejestrów.
TIM2->ARR = UINT32_MAX;
TIM2->PSC = 0;
TIM2->CCMR1 = TIM_CCMR1_CC1S_0 | TIM_CCMR1_CC2S_1;
TIM2->CCER = TIM_CCER_CC2P | TIM_CCER_CC1E | TIM_CCER_CC2E;
TIM2->SMCR = TIM_SMCR_TS_2 | TIM_SMCR_TS_0 | TIM_SMCR_SMS_2;
TIM2->CR1 = TIM_CR1_CEN;
Rys. 5
W tym przypadku nie są używa- ne przerwania. Pomiar czasu impulsu i okresu jest mierzony sprzętowo, więc wystarczy w programie głównym spraw- dzać flagę przerwania, a gdy ustawiona
odczytać rejestry. Realizuje to poniższa sekwencja rozkazów.
if( TIM2->SR & TIM_IT_TRIGGER ) { // Czy flaga wyzwolenia ustawiona ? TIM2->SR &= ~TIM_IT_TRIGGER; //Kasuj flagę impuls = TIM2→CCR2; Okres = TIM2→CCR1; }
Timer 3 mierzy częstotliwość wej- ścia B tak samo jak i timer 1 wejścia A.
Przewidziano możliwość pracy wejścia B w roli licznika zdarzeń. Opadają- ce zbocze na wejściu PC12 (pin 53) odczytuje stan licznika, przepisuje do zmiennej, po czym zeruje licznik. Tę samą funkcjonalność można uzyskać z klawiatury miernika. Timer 4 gene- ruje sygnał PWM (rysunek 7) służący do sterowania generatorem VCO, ale ze względu na to, że potrzebna jest do tego dodatkowa płytka z generatorem (AVT3276), nie będę teraz przybliżała szczegółów podobnie jak i pracy time- ra 11 (rysunek 8), którego zadaniem jest pomiar czasu sygnału wzorcowego 1Hz, aby korygować napięcie na VCO.
Timer 5 (rysunek 9) generuje sygnał GATE. Jego nastawy są modyfikowane w programie tak, aby uzyskać sygnał bramkujący o czasach 100ms, sekun- dy, 10 sekund lub 100 sekund. Sygnał ten jest wyprowadzony na zewnątrz przez J10. Dzięki temu zewnętrzny multiplekser sterowany linią „Gate- MUX” może doprowadzić do wejść bramkujących timerów 1 i 3 sygnał z mikrokontrolera lub zewnętrznego źródła. Timer 10 (rysunek 10) służy do odmierzania mikrosekundowych odcinków czasu na potrzeby inter- fejsu 1-Wire. Najlepszym sposobem obsługi tegoż interfejsu jest UART, ale dwa są zajęte na inne cele (komu- nikacja z terminalem i moduł GPS), a trzeciego nie da się użyć, bo wystę- puje konflikt z innymi peryferiami – rysunek 11. Tak oto, na potrzeby
banalnego, wydawałoby się, licznika częstotliwości wykorzystano siedem z ośmiu dostępnych timerów, w tym dwa 32-bitowe oraz jeden wbudowany w architekturę ARM. W mierniku sko- rzystano z wielopoziomowego systemu przerwań (rysunek 12).
Krytyczne czasowo operacje rea- lizowane są przez przerwania. Tam, gdzie się dało odciążyć CPU (wysy- łanie danych przez I2C do wyświet- lacza OLED, wysyłanie danych przez UART), skorzystano z dobrodziejstw DMA, dobrodziejstwa niedostępne- go w AVRmega/tiny. W pętli głównej obsługiwany jest licznik watchdog, po czym CPU jest usypiany, dzięki czemu zmniejsza się emisja EMI. Po wybu- dzeniu przez przerwanie, czyli nie póź- niej niż po 1ms (przerwanie systemowe
„SysTick”), sprawdzana jest zawartość buforów UART GSM. Pozwala to okre- ślić, z ilu satelitów jest odbierany syg- nał. W kolejnym kroku obsługiwana jest dioda „GATE” na panelu przednim. Jeśli miernik pracuje w trybie częstościo-
mierza, dioda odzwier- ciedla stan wejścia bramkującego PA8, a jeśli w trybie miernika czasu – odzwierciedla stan wejścia sygnału PA12. Następnie wyko- nywane są, o ile istnie- je taka potrzeba, zapisy do pamięci EEPROM.
Pierwotnie funk- cje zapisu EEPROM DS2431, przeniesione z AVR (zaleta C, Basic takich „luksusów” nie zapewnia), „blokowa- ły” CPU na 10ms przy zapisie każdej strony, co dawało łączny czas zapisu struktury kon- figuracji EEPROM 80ms. Nie wpływało to na pracę mierni- ka, bo pomiary reali- zowane są sprzętowo i na przerwaniach, ale nieładnie wyglądało zatrzymanie odświeża- nia OLED przy odli- czaniu czasu bramko- wania. Z tego powodu funkcje zostały wzbo- gacone o nieblokujące.
Podczas przenoszenia funkcji obsługi 1-Wire wspomagano się ana- lizatorem logicznym Rys. 6
Rys. 10
Rys. 8
Rys. 9
Rys. 7 Rys. 11
Rys. 12
i emulatorem/skanerem 1-Wire – foto- grafia 1 (artykuł opisujący emulator znajduje się w „Elektronice Praktycz- nej“ 7/2020), który wraz z programem terminala i debugerem ułatwił pracę – rysunek 13. Po przeniesieniu podstawo-
wej komunikacji zrealizowano odczyt w szybkim trybie overdrive – rysunek 14. Po ewentualnej obsłudze EEPROM sprawdzana jest klawiatura, a właściwie bufor klawiatury obsługiwany w prze- rwaniach. Po tym następuje obsługa wyświetlacza OLED oraz wypełniany jest bufor wyświetlacza LED, obsłu- giwanego, jak się łatwo domyślić, w przerwaniu SysTick wywoływanym
co milisekundę. Na końcu pętli głównej następuje wysłanie danych na terminal.
Typowy czas obiegu pętli głównej to 2,2μs. W tym czasie AVR taktowany zegarem 16MHz wykona 35,2 taktu, co daje średnio 20 rozkazów.
Montaż i uruchomienie licznika zosta- ną omówione w następnym numerze
SaS sas@elportal.pl Fot. 1
Rys. 13
Rys. 14
Montaż i uruchomienie Układ opisany szczegółowo w poprzednim numerze EdW można zmontować na płytce drukowanej, której projekt pokazany jest na rysunku 15. Fotografia wstępna oraz fotografia 2 pokazują model. Układ zmon- towany prawidłowo ze sprawnych elemen- tów powinien od razu pracować. Podczas montażu należy wybrać, czy wyświetlacze montowane są na złączach i podstawkach, czy wlutowane w płytkę, bo od tego zale- ży wysokość przycisków i długość gałki enkodera. Montując urządzenie w obudo- wie, trzeba pamiętać o filtrze – fotografia 3. Zmniejsza on nieco jasność wyświet- lacza, ale bez niego treść jest nieczytelna
(fotografia 4), zwłaszcza przy silnym oświetleniu zewnętrznym. Jeśli filtr miałby obejmować także diody LED (na przykład filtr na całej obudowie), należy użyć fil- tru neutralnego, w kolorze szarym (srebr- nym), czarnym lub brązowym. Zwiększa on kontrast, nie tak skutecznie, jak filtr w tej samej barwie jak kolor wyświetlacza (fotografia 5), ale w tym wypadku spełnia swoje zadanie lepiej od niebieskiego, gdzie widać (fotografia 6), że tam, gdzie filtr zakrywa część żółtej diody, nie widać jej świecenia. W roli filtru nie sprawdzają się folie do przyciemniania szyb samochodo- wych, ponieważ odbijają światło i zamiast wyświetlacza uzyskamy lusterko.
W moim modelu uzyskałam pomiar częstotliwości 40MHz na wejściu cyfro- wym A i B. Niestety nie miałam możli- wości sprawdzić wyższych częstotliwości.
To, czy pomiar był poprawny, zależało od jakości badanego sygnału, gdy był w miarę dobrej jakości (rysunek 16), pomiar był poprawny. Wszelkie zniekształcenia (rysu- nek 17) powodowały jego fałszowanie.
Zbadałam właściwości wzmacniacza w dwóch konfiguracjach pokazanych na rysunku 18. Rozwiązanie drugie pracowa- ło lepiej niż pierwsze między innymi dla- tego, że pozwala na pomiar bardzo niskich częstotliwości (sprzężenie DC – stałoprą- dowe), dlatego dalsze próby skupiłam na
nim. Zbadałam jego właściwo- ści. Do 1MHz jest całkiem dobrze, choć pomiar czasu impulsu będzie już
Rys. 16 Rys. 17
F-meter F-meter
Modułowy licznik Modułowy licznik
częstotliwości i czasu częstotliwości i czasu
Fot. 2
Fot. 6 Fot. 3
Fot. 4
Fot. 5
część 2 część 2
3275
3275
obarczony błędem ze względu na powolne narastanie sygnału mierzonego – rysunek 19. Żółty przebieg (kanał 1) pokazuje syg- nał wejściowy, niebieski (kanał 2) na kolek- torze T1. Kolejne ekrany przedstawiają przebieg 5MHz 800mV – rysunek 20, 10MHz 800mV – rysunek 21 i 15MHz 1V – rysunek 22. Na tym niestety kończą się możliwości mojego generatora, ale widać, że tak prosty wzmacniacz nadaje się do częstotliwości 10...15MHz. Wzmacniacz można pominąć, nie montując T1 i R3, R13, C1, C14, a C15 zastępując zworą. Wtedy to można zastosować wzmacniacz o lepszych parametrach, na przykład przygotowywany do publikacji AVT3277. Wzmacniacz musi udostępniać sygnał cyfrowy w logice 3,3V.
STM32F401 akceptuje sygnał o amplitu- dzie 5V na wejściu, ale D3 ogranicza go.
Gdy dostępny jest sygnał o amplitudzie 5V, należy zastosować konwerter na przykład z rodziny 74LVC albo usunąć D3, rezygnu- jąc jednocześnie z ochrony, jaką zapewnia.
Obsługa miernika
Przycisk S2 „Screen” pozwala przełączać się pomiędzy ekranami tak samo jak kręcenie gałką enkodera. Numer ekranu jest widocz- ny w prawym górnym rogu wyświetlacza OLED. Numer ekranu znika po dwóch sekundach po jego zmianie przyciskiem S2. Pierwszy ekran (fotografia 7) wyświet- la zmierzoną częstotliwość. Gdy jest ona mniejsza od 50kHz, mierzony jest czas, który przed wyświetleniem jest przeliczany
na częstotliwość. W takiej sytu- acji na wyświetlaczu pojawia się napis „(math)” – fotografia 8. Dzięki temu można uzyskać wysoką rozdzielczość pomia- ru, który wykonuje się szybko.
Przy pomiarze częstotliwosci 10Hz pomiar trwa tylko 100ms, a rozdzielczość wynosi 10mHz.
Gdy częstotliwość przekracza 50kHz, na wyświetlaczu pokazuje się liczba impul- sów zliczonych w ciągu sekundy. W tym przypadku wyświetlany jest napis „(cnt)”.
Ponadto na wyświetlaczu OLED pokaza- na jest informacja o czasie bramkowania (fotografia 9), wybranym wejściu, w tym wypadku „Input A”, czasie trwania stanu wysokiego (6ms), niskiego (5ms), okresie (period 10ms) i współczynniku wypełnie- nia. Drugi ekran pokazuje zmierzony okres sygnału (fotografia 10) oraz dodatkowo częstotliwość. Podobnie jak w przypadku częstotliwości, granicą jest 50kHz. Kolej- ne ekrany pokazują zmierzony czas stanu wysokiego – fotografia 11 i niskiego – fotografia 12. Piąty ekran wyświetla współ- czynnik wypełnienia sygnału w procentach – fotografia 13. W przypadku ekranów 3, 4 i 5, tak jak w przypadku ekranu 2, wyświetlana jest dodatkowo zmierzona częstotliwość. Następny ekran pokazuje wskazanie licznika częstotliwości – foto- grafia 14. Jest to faktycznie zliczona liczba impulsów, więc nie ma tu granicy 50kHz, do której wyświetlany był wynik przelicze- nia okresu sygnału na częstotliwość. Ekran szósty (fotografia 15) pokazuje częstotli- wość wyliczoną z okresu sygnału. Siódmy – fotografia 16 – zmierzony czas trwania okresu. Kolejny ekran, fotografia 17, poka- zuje wartość licznika wejścia B. Wejście to może pełnić funkcję licznika zdarzeń. Ostat- ni ekran (fotografia 18) pokazuje odchyłkę generatora od precyzyjnego wzorca, ale
ze względu na to, że aby ta f u n k c j o n a l - ność działa- ła, potrzebny jest dodatkowy moduł, pominę jej opis.
Przycisk S6
„000” zmienia sposób wygaszania zer nie- znaczących z prawej strony. Możliwe są trzy opcje: wyświetla- nie zer – fotografia 19, zastąpienie ich spacjami – fotografia 20 lub dosunięcia wyniku do prawej strony – fotografia 21. Na ostatniej fotografii widać cały miernik i okno na wyświet-
laczu, które pojawi się na trzy sekundy, informując, jaki sposób wyświetlania został wybrany.
Cóż, nie tylko
systemy operacyjne mogą używać okienek :-)
Przycisk S3 „Hold” zatrzy- muje wyświetlanie, co jest sygnalizowa-
ne świece- niem czerwo- nej diody D1
i miganiem napisu „HOLD”.
W tym czasie pomiar jest
cały czas dokonywany, co widać w oknie terminala, tylko wartość na
wyświetlaczu jest zamrożona.
S8 „Rel-” zapamiętuje czę- stotliwość, po czym odej- muje ją od mierzonej. Fakt pomiaru relatywnego jest
sygnalizowany świeceniem diody LED D8
„REL” na zielono. Pozwala to na pomiary
„radiowe” z uwzględnieniem częstotliwo- ści pośredniej. S4 „Rel+” działa podob-
R1390R
R13 470k*
R3 1k
T1 BFR93AE6327
VCC
C1 100pF
C15*
10uF C14 100pF*
R1 390R
R3 1k
T1 BFR93AE6327 100pFC1 R2
470k*
C15*
10uF C14 100pF*
1
2
JP AC/DC Rys. 18
Rys. 19 Rys. 21
Fot. 7
Fot. 8 Fot. 9
Fot. 10
Fot. 14 Fot. 12
Fot. 16 Fot. 11
Fot. 13
Fot. 15
Fot. 17
Fot. 18
Fot. 19 Fot. 20
Fot. 21
nie, z tym że zapamiętana częstotliwość jest dodawana do wyniku pomiaru.
W tej sytuacji dioda
„REL” świeci na czerwono. Trzeba wiedzieć, że funkcja ta działa tylko, gdy wyświetlany jest bezpo- średni pomiar z licznika. Gdy częstotliwość jest zbyt niska, dioda „REL” miga. W takiej sytuacji należy przełączyć się na ekran 5 (fotografia 14). Pomiar relatywny można włączyć tylko na ekranie zero (pomiar czę- stotliwości wejścia A), pięć (zliczone impul- sy 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 naciśnięciu przycisku S9 „SET”, gdy wyświetlany jest ekran pokazujący często- tliwość zmierzoną na wejściu B (fotografia 17). Wygląd wyświetlacza OLED zmieni się – fotografia 22. Powrót do pomiaru częstotliwości nastąpi po ponownym naciś- nięciu „SEL”. W czasie gdy miernik pra- cuje w roli licznika, naciśnięcie przycisku enkodera zapamiętuje stan licznika i zeruje go. Zapamiętana wartość jest wyświetla- na na wyświetlaczu OLED za napisem
„LATCH”. Tę samą funkcjonalność uzyska się w czasie opadającego zbocza sygnału na wejściu PC12. Przechwyconą wartość można sprawdzić w programie termina- lu – rysunek 23. Przekroczenie wartości 99999999 licznika powoduje wyświetlenie napisu „OVER”, ale stan licznika nadal można sprawdzić w terminalu. Licznik jest 32-bitowy i po przekroczeniu warto- ści 4294967296 zacznie liczyć od zera.
Gdy wejście B pracuje w trybie licznika częstotliwości, przyciskiem S7 „MENU”
można przełączać się pomiędzy pomiarem z wejścia A i B. Jest to tymczasowa funk- cjonalność, ponieważ po dołączeniu modu- łu przełącznika wejść AVAT3277, przycisk będzie pełnił inną funkcję.
S5 „GATE” pozwala wybrać czas bramkowania podczas zliczania częstot- liwości. Do wyboru są czasy 10, 100ms oraz sekunda, 10 i 100 sekund. Zmianie czasu towarzyszy pojawienie się okienka z informacją o aktualnym wyborze – rysu- nek 23. Okienko znika po trzech sekun- dach od naciśnięcia przycisku „GATE”.
Ustawienia miernika zapamiętywane są w EEPROM po dziesięciu sekundach od naciśnięciu dowolnego przycisku. Podczas startu programu, w terminalu wyświet- lane są informacje o odczytaniu pamięci EEPROM – rysunek 24. Ponadto pojawiają się informacje o liczbie resetów mikrokon- trolera i zadziałania watchdoga. W tym
czasie na wyświetlaczu pojawi się logo (fotografia 3) albo informacje o inicjali- zacji EEPROM lub odzyskaniu jej zawar- tości z backupu. Jeśli w mierniku nie ma zamontowanej pamięci, wszystkie kropki na wyświetlaczu LED są zaświecone, a pro- gram przyjmie standardową konfigurację.
Uwagi końcowe. Opracowanie urządze- nia o tak dużej funkcjonalności nie jest zadaniem łatwym. Opracowanie mier- nika zajęło wiele godzin. Powstały dwa prototypy i jedna użyteczna konstrukcja.
W materiałach dodatkowych, oprócz rysun- ków i fotografii z artykułu, znajdują się fotografie i filmy z kolejnych etapów prac.
Widać tam część potrzebnego sprzętu. Poza oscyloskopem i generatorem używany był analizator logiczny oraz skaner 1-Wire zbu- dowany tylko i wyłącznie do analizowania tej magistrali. Potrzeba używania skanera wynikała z tego, że uniwersalne analizatory (na przykład SaleAE) przedstawiają infor- mację w niezbyt czytelny sposób, ale są przydatne, aby wykryć nieprawidłowości w zależnościach czasowych, czego skaner nie zrobi. Chwilami pracę prowadzono na trzech monitorach. Nie zarejestrowałam tego etapu prac i na rysunkach 13 i 14 widać obrazy z dwóch monitorów, gdzie ekran analizatora LA2016 jest przykry- ty oknem terminalu wyświetlającym dane z emulatora-skanera 1-Wire, a wcześniej ekrany te były na osobnych monitorach.
Nie ma jednego przyrządu, który wystar- czyłby do pracy elektronika. W tym przy- padku, skaner, analizator, oscyloskop gene- rator i debugger, a także program terminalu, co pokazałam na rysunku 13 i 14, dopeł- niały się funkcjonalnością. Bez debuggera prace pewnie trwałyby dziesięć razy dłu- żej. Debugger wielokrotnie uświadamiał mi, jak niezwykle zoptymalizowany kod potrafi stworzyć kompilator GCC-ARM.
Na przykład potrafi przenieść poszukiwany ciąg bajtów z FLASH do RAM, mimo że został zadeklarowany we FLASH (const).
Robi tak, aby zwiększyć szybkość działania wyszukiwania ciągu, ponieważ dostęp do
RAM jest szybszy niż do FLASH. Opcja ta przydaje się, gdy baza danych znajduje się w pamięci FLASH. Przedstawiony moduł nie jest jeszcze kompletnym miernikiem.
Będzie nim po dodaniu TXCO AVT3276 i obwodów wejściowych AVT3277. Mier- nik wraz z dodatkowymi modułami można umieścić w obudowie aparaturowej CP15- 34. Do obudowy zaprojektowano atrak- cyjny panel, którego dokumentację można znaleźć w materiałach dodatkowych.
Najnowsze wersje softu dostępne są na http://sa-s.prv.pl/fw/. Na Youtube https://
www.youtube.com/playlist?list=PLdtkbzW TUVMl67a8ouZUBjK8GDIzT1naZ znaj- dują się relacje z prac nad opisywanym miernikiem oraz jego bardzie zaawanso- waną wersją AVT3278
Propozycje modyfikacji oprogramowa- nia i sprzętu najlepiej kierować do redakcji.
SaS sas@elportal.pl Rezystory 1206
R1 R4 R7 R8 R9 R12 R15 R16 . . . 390Ω R2 R13 . . . 470kΩ *– opis w tekście R3 R10 . . . 1kΩ R5 R6 R11. . . 2,2kΩ RP1 . . . 8 * 75Ω Kondensatory ceramiczne 1206
C2 C3 C6 C7 C10 . . . 100nF C14 . . . 100pF *– opis w tekście C1 . . . 100pF C11 C12 C15 . . . 10uF C15 . . . 10uF *– opis w tekście C4 C5 . . . 22pF C8 C9 . . . 2u2 U1 . . . STM32F401RCT6 U2 . . . UDN2983 (A2982 od pinu 1) U3a . . . .DS2431+
U3b . . . .DS2431P+
U4 . . . .SPX1117 T1 . . . .BFR93AE6327 Led1 Led2 . . . KW4-566ABB D1 . . . Dioda led czerwona THT D2 . . . Dioda LED Żółta THT D3 . . . SRV05-4 D4 . . . Dioda LED Żółta 1206 D5 . . . .SS16 D6 . . . Dioda LED Niebieska 1206 D7 . . . .Dioda LED czerwona 1206 D8 . . . Dioda LED 2-kolory wspólna katoda THT Q1 . . . .Rezonator kwarcowy SMD/THT 8MHz J1 J7 . . . NS25-W3P J2 J12 . . . NS25-W4P J3 . . . .T821-1-06-S1 J5 . . . Wyświetlacz OLED_0.96_I2C J4 . . . nie używane J6 . . . NS25-W2P J8 J11 . . . NS25-W6P J9 . . . Gniazdo USB-B Mini:
MUSB/AVT Kod: USB B MINI USB J10 . . . NS25-W4P J13 . . . nie używane S1..S8 . . . .Micro switch 5x7 P1 . . . Enkoder impulsowy z przyciskiem Wykaz elementów
Płytka drukowana jest dostępna w Sklepie AVT jako AVT3275 Fot. 23
Rys. 23
Rys. 24 Fot. 22