- pomiar częstotliwości w zakresie 1 Hz…9,999999 MHz,
- regulowany czas akwizycji impulsów: 500 ms, 1 s, 2 s, 5 s, 10 s, 20 s,
- wyświetlanie wyniku pomiaru w hercach [Hz] lub przeliczenie go na obroty na minutę [rpm],
- wartość progowa zadawana impulsatorem,
- wyjście: styki NO+NC przekaźnika,
- zapamiętywanie nastaw po wyłączeniu zasilania,
- wyświetlacz LCD alfanumeryczny 2×16 znaków,
- zasilanie 12 V DC.
Istnieje wiele rozwiązań umożliwiających automatyczną sygnalizację osiągnięcia zadanej wartości przez określony parametr. Najprostszym przykładem jest termostat, którego wyjście steruje grzałką lub chłodziarką, tworząc w ten sposób zamknięty układ objęty ujemnym sprzężeniem zwrotnym. Do monitorowania wartości napięcia można wykorzystać jeden z wielu dostępnych komparatorów.
Jednak co w sytuacji, gdy "pilnowania" musi być częstotliwość, np. napięcia uzyskiwanego z elektrowni wiatrowej lub generatora spalinowego? Można zrobić to pośrednio, posługując się konwerterem częstotliwość-napięcie, lecz takie rozwiązanie będzie znacznie mniej dokładne od opisanego.
Pomiar częstotliwości realizowany przez układ odbywa się metodą bezpośrednią. Uformowane impulsy, tworzone na podstawie sygnału wejściowego są zliczane przez zadany odcinek czasu. Jest to tzw. czas bramkowania. Im dłużej trwa, tym lepiej można uśrednić chwilowe fluktuacje częstotliwości, które istnieją w rzeczywistych urządzeniach, np. w silnikach spalinowych.
Budowa i działanie
Najprostszym przykładem uformowania sygnału wejściowego jest przekształcenie go na przebieg prostokątny, np. przerzutnikiem Schmitta. Układ cyfrowy, służący do zliczania, będzie reagował tylko na jego zbocza - narastające lub opadające. Taką ideę prezentuje rysunek 1, gdzie zaznaczono zbocza narastające uformowanego sygnału.
Schemat ideowy układu pokazano na rysunku 2. Elementem, który zarządza pracą całego urządzenia, jest mikrokontroler typu STM32F051 - US6. Posiada wystarczającą liczbę wyprowadzeń oraz, co bardzo ważne w tej aplikacji, jeden 32-bitowy licznik. Jego zadaniem nadrzędnym będzie pomiar częstotliwości, zatem wymaga stabilnego wzorca czasu. Odpowiada za to rezonator kwarcowy Q1. Kondensatory C21 i C22 ułatwiają wzbudzenie drgań, zaś rezystor R22 zapobiega powstaniu oscylacji na częstotliwości harmonicznej.
Wbudowana w mikrokontroler pętla PLL powiela uzyskany sygnał zegarowy do częstotliwości 48 MHz. Będzie on obarczony pewnymi fluktuacjami fazy, wynikającymi z samej zasady działania PLL, lecz przy długim czasie akwizycji impulsów wejściowych - rzędu setek milisekund i więcej, wpływ zjawiska na wyniki pomiarów będzie pomijalny.
Do programowania pamięci Flash mikrokontrolera zostało przewidziane złącze J2, na które wyprowadzono linie sygnałowe interfejsu SWD. Stan logiczny linii ustalają zewnętrzne rezystory podciągające.
Komunikacja użytkownika z układem jest możliwa za pośrednictwem enkodera obrotowego z wciskaną osią (RS1) oraz dwóch przycisków, któych funkcje zostaną omówione w dalszej części artykułu. Zapamiętanie zadanych przez użytkownika parametrów odbywa się w zewnętrznej, pamięci EEPROM typu 24C04. Komunikacja odbywa się poprzez magistralę I2C, która wymaga dodania dwóch zewnętrznych rezystorów podciągających: R1 i R2. Do wygodnej prezentacji aktualnych parametrów pracy urządzenia służy wyświetlacz alfanumeryczny o organizacji 2×16 znaków, wyposażony w sterownik typu HD44780 lub jedną z jego odmian. Kontrast wyświetlacza jest regulowany potencjometrem P1. Rezystor R8 ogranicza prąd diod podświetlających, aby nie obciążać nimi stabilizatora napięcia 5 V. Niestety, niektóre z dostępnych na rynku wyświetlaczy tego typu, nie zadziałają prawidłowo przy sterowaniu z układu zasilanego napięciem 3,3 V. Powód: wysoki stan logiczny rozpoznają powyżej 70% wartości napięcia zasilającego, czyli powyżej 3,5 V. Nawet podniesienie napięcia zasilającego mikrokontroler do maksymalnej dopuszczalnej wartości 3,6 V nie da stuprocentowej gwarancji poprawnego działania.
Rozwiązaniem jest zastosowanie układu konwertującego poziomy logiczne z 3,3 V na 5 V, które niestety nie należą do najtańszych, a mamy aż sześć linii sygnałowych. Istnieje tańsza alternatywa, w postaci układu 74AHCT125S14-13 zasilanego napięciem o wartości 5 V.
Jak dowodzi jego nota katalogowa, której najistotniejszy fragment można zobaczyć na rysunku 3, wysoki poziom logiczny na wejściu jest rozpoznawany już od wartości 2 V. Jest to doskonały układ do konwersji sygnału cyfrowego z poziomu 3,3 V do 5 V. Ponadto, co również jest istotne, nie odwraca fazy, a wszystkie jego wejścia są opatrzone przerzutnikami Schmitta. Każdy bufor posiada własne wejście aktywujące - niski stan logiczny aktywuje wyjście.
Zasilanie o napięciu około 12 V dołączane jest do złącza J3. Dioda D2 zabezpiecza układ przed zniszczeniem w razie dołączenia napięcia o odwrotnej polaryzacji. Stabilizatory liniowe US4 i US5 dostarczają stabilnego napięcia o wartościach 5 V i 3,3 V. Również sygnał wejściowy, którego częstotliwość będzie nadzorowana, jest doprowadzany do złącza J3. Diody D3 i D4 ograniczają zakres osiąganych przez niego wartości do zakresu -0,3...+3,6 V, przez co zostaje zachowany margines wartości napięcia do zadziałania diod zabezpieczających wejście bufora. Rezystor R13 ogranicza prąd tych diod, a R14 polaryzuje wejście bufora potencjałem masy. Bufor cyfrowy posiada wejście Schmitta, więc jest w stanie uformować zbocza nawet wolnozmiennego sygnału wejściowego. Ponieważ zasilany jest napięciem 5 V, jak wszystkie pozostałe bufory w tym układzie, zachodziła konieczność dopasowania poziomów logicznych pomiędzy jego wyjściem a wejściem mikrokontrolera. Służy temu rezystor R15, który ogranicza prąd wejściowych diod zabezpieczających, wbudowanych w mikrokontroler.
Mikrokontroler, w odpowiednich warunkach, załącza cewkę przekaźnika, co powoduje przełączenie jego styków. Elementem realizującym to zadanie jest tranzystor polowy T1. Aby jego napięcie bramka-źródło w stanie otwarcia było jak największe, sygnał logiczny z US6 jest wzmacniany do wartości 5 V przy użyciu ostatniego bufora. Dioda D1 chroni tranzystor przed zniszczeniem w momencie jego zatykania, kiedy cewka mogłaby wygenerować impuls napięcia samoindukcji o wysokiej wartości szczytowej. Rezystor R3 utrzymuje niski poziom logiczny na wejściu bramki, zatykając tym samym tranzystor T1, zanim mikrokontroler rozpocznie wykonywanie programu.
Montaż i uruchomienie
Układ został zmontowany na dwustronnej płytce drukowanej o wymiarach 100×65 mm, której wzór ścieżek oraz schemat montażowy pokazują rysunki 4 i 5. W odległości 3 mm od krawędzi płytki znajdują się otwory montażowe.
Wszystkie elementy w obudowach przystosowanych do montażu powierzchniowego zostały umieszczone na jednej (wierzchniej) stronie płytki. Należy je wlutować jako pierwsze. Na tej samej stronie płytki jest miejsce dla wyświetlacza LCD, przycisków S1 i S2 oraz impulsatora RS1. Wyświetlacz można wygodnie połączyć z płytka przy użyciu złącza typu goldpin, co umożliwi wetknięcie go na samym końcu, aby nie uległ porysowaniu. Widok zmontowanej tej strony płytki pokazuje fotografia 6. Na drugiej stronie płytki jest miejsce dla pozostałych elementów: przekaźnika PK1, kondensatora elektrolitycznego C9, potencjometru P1, złącz J1, J2 i J3 oraz układu US4 (fotografia 7).
W pełni zmontowany układ, z zamontowanym wyświetlaczem, można zasilić napięciem stałym o wartości około 12 V, niekoniecznie stabilizowanym. Pobór prądu wynosi około 35 mA przy wyłączonym przekaźniku i około 60 mA po załączeniu cewki przekaźnika.
Przed użyciem urządzenia należy zaprogramować pamięć Flash mikrokontrolera US6 gotowym wsadem. Można to zrobić za pośrednictwem złącza J2, na które zostały wyprowadzone linie interfejsu SWD, służącego programowaniu i debugowaniu mikrokontrolerów STM32. Potem trzeba ustawić prawidłowy kontrast wyświetlacza poprzez regulację potencjometrem P1. Prawidłowo zmontowany i zaprogramowany układ nie wymaga dalszych czynności uruchomieniowych (jak np. kalibracji) i jest od razu gotowy do pracy.
Eksploatacja
Po włączeniu zasilania, zawartość wyświetlacza będzie podobna do tej z fotografii 8. Lewy górny róg wskazuje jednostkę wyświetlanego wyniku pomiaru. Może to być herc (Hz) lub liczba obrotów na minutę (rpm). Przełączanie odbywa się poprzez jednokrotne wciśnięcie przycisku S2. Po przełączeniu, wyświetlana wartość jest przeliczana według nowej jednostki.
W górnej linijce, lecz nieco w prawo, znajduje się tekst informujący o stanie przekaźnika - "ON" oznacza załączony, czyli zwarcie styku NO z COM. Dzieje się tak, kiedy zadana wartość jest mniejsza od aktualnie zmierzonej. Oznaczenie "OFF" informuje o wyłączonym przekaźniku. W dolnej linijce, po lewej stronie widoczna jest aktualnie zmierzona wartość. W zależności od jednostki, może być wyrażona w hercach lub obrotach na minutę. Jeżeli przekroczy możliwą do wyświetlenia liczbę, pojawi się w tym miejscu napis "OVF!".
Po prawej stronie widoczna jest zadana wartość. Każdą cyfrę ustala się oddzielnie, poprzez obracanie osią impulsatora w lewo (zmniejszenie) lub w prawo (zwiększenie). Przejścia do następnej cyfry dokonuje się po wciśnięciu osi enkodera. Wskazywana liczba nie ulega zmianie po przełączeniu jednostki - układ po prostu porównuje dwie wyświetlane wartości i na tej podstawie dokonuje decyzji o załączeniu przekaźnika.
Wyboru czasu bramkowania dokonuje się poprzez wciśnięcie przycisku S1 - fotografia 9. Przez jedną sekundę wyświetlany jest aktualnie zadany czas bramkowania - analogicznie dzieje się tuż po włączeniu zasilania. Dostępne wartości to: 500 ms, 1 s, 2 s, 5 s, 10 s, 20 s. Załadowanie nowej wartości czasu bramkowania odbywa się po zakończeniu trwania aktualnego impulsu bramkującego.
Pozycje ustawiane przyciskami S1 i S2 są od razu zapisywane do nieulotnej pamięci EEPROM, natomiast zadana impulsatorem siedmiocyfrowa wartość dopiero po 2 s od ostatniej zmiany którejkolwiek cyfry. Ma to na celu ograniczenie liczby cykli zapisu do pamięci, co wydłuża jej żywotność.
Zmierzona częstotliwość jest aktualizowana po każdym pełnym impulsie bramkującym. Im będzie trwał dłużej, tym rzadziej będzie następowało odświeżanie, za to układ będzie dokładniej uśredniał wynik. W sterowaniu przekaźnikiem dodano niewielką histerezę: załączany jest wtedy, kiedy aktualna wartość przekracza zadaną liczbę, a wyłączany, gdy jest od niej mniejsza. Nie ma warunku obsługującego sytuację, kiedy wartości są sobie równe.
Sygnał wejściowy powinien przekraczać wartości: ok. 0,9 V (dolny próg) i ok. 2,2 V (górny próg), aby był poprawnie interpretowany przez układ. Zliczanie odbywa się na zboczach narastających.
Dla dociekliwych
Uzyskanie tak szerokiego zakresu mierzonych częstotliwości nie byłoby możliwe bez 32-bitowego licznika TIM2. Przy najwyższej możliwej częstotliwości - czyli 9,999999 MHz - i najdłuższym dostępnym czasie bramkowania - 20 s - musi pomieścić aż 199999980 impulsów. To niecałe 5% jego całkowitej pojemności.
Listing 1. Fragmenty kodu programu odpowiadające za konfigurację licznika TIM2
////////////////////////////////////////////////////
//Wejście impulsów - TIM2 CH1 ETR
////////////////////////////////////////////////////
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_Level_3;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource15, GPIO_AF_2);
////////////////////////////////////////////////////
//TIM2 - pomiar częstotliwości
////////////////////////////////////////////////////
TIM_DeInit(TIM2);
TIM_TIxExternalClockConfig(TIM2, TIM_TIxExternalCLK1Source_TI1, TIM_ICPolarity_Rising, 0);
TIM_Cmd(TIM2, ENABLE);
Licznik TIM2 został skonfigurowany do pracy z zewnętrznym sygnałem zegarowym. Najważniejsze fragmenty kodu programu, odpowiadające za tę konfigurację, znajdują się na listingu 1. Został napisany w języku C, z użyciem Standard Peripherial Library. W pierwszej kolejności, odpowiednie wyprowadzenie mikrokontrolera należy podłączyć do kanału 1 licznika TIM2. Służy do tego opcja Alternate Function (AF) danego wyprowadzenia, którą trzeba - zgodnie z notą katalogową mikrokontrolera - ustawić na 2. Drugim krokiem jest inicjalizacja samego licznika, która w tym wypadku jest bardzo prosta. W pierwszej kolejności następuje jego zerowanie. Potem odbywa się podłączenie kanału 1 jako źródła zewnętrznego sygnału zegarowego. Reakcja będzie następowała na zboczach narastających. Ostatni parametr to długość filtru cyfrowego, który nie jest używany - stąd wartość 0. Na końcu następuje aktywowanie skonfigurowanego już licznika. Jego wartość jest pobierana w przerwaniach od przepełnienia licznika TIM6, który generuje impulsy bramkujące.
Michał Kurzela, EP
- R1, R2: 3,3 kΩ SMD0805
- R3…R7, R9…R12, R14, R16…R18: 10 kΩ SMD0805
- R8, R13, R15: 1 kΩ SMD0805
- R19…R22: 330 Ω SMD0805
- P1: 10 kV montażowy leżący
- C1, C3, C4, C6, C8, C10…C12, C14…C16, C18, C19: 100 nF/50 V SMD0805
- C2, C5, C7, C13, C17, C20: 10 μF/10 V SMD0805
- C9: 220 μF/25 V THT raster 3,5 mm
- C21, C22: 15 pF SMD0805
- D1: 1N4148 MiniMELF
- D2: SS14
- D3, D4: BAS85 MiniMELF
- LCD1: 2×16 zgodny z HD44780
- T1: BSS123
- US1: 24C04 SO8
- US2, US3: 74AHCT125S14-13 SO14
- US4: 7805 TO220
- US5: LD1117AS33TR SOT223
- US6: STM32F051K8T6 TQFP32
- J1, J3: ARK3/500
- J2: goldpin 6 pin męski THT 2,54 mm
- PK1: JQC-3FF 12 V
- Q1: 16 MHz HC49SM
- RS1: ED1212S-24C24-25F
- S1, S2: microswitch 6×6 17 mm
- Goldpin męski+żeński 16 pin 2,54 mm THT
- Tuleje dystansowe 11 mm M3
- 8 śrub M3