Licznik czasu pracy 8 w 1

Licznik czasu pracy 8 w 1
Pobierz PDF Download icon

Na łamach czasopism wydawanych przez AVT pojawiły się już opisy różnych liczników czasu pracy. Przeważnie używały one pamięci EERPOM, która ma ograniczoną liczbę zapisów. Zmuszało to konstruktora do obejścia tego problemu przez stosowanie różnych tricków, takich jak zapisywanie danych w EEPROM w czasie zaniku napięcia zasilającego. Wady tej pozbawiony jest licznik opisany w artykule, który wyposażono w pamięć FRAM. Ponadto, licznik może zliczać 8 różnych czasów/zdarzeń. Wbudowany RTC daje możliwość rejestrowania logów z czasem włączenia/wyłączenia urządzenia i zdarzeń takich jak rozpoczęcie/zakończenia zliczania. Rekomendacje: licznik przyda się do kontroli czasu pracy maszyn, planowania remontów urządzeń itp.

Podstawowe parametry:
  • 8 liczników, w tym jeden bez możliwości resetu. Maksymalne wskazanie 4 294 967 296 sekund = około 136 lat. Możliwość zliczania zdarzeń.
  • Monochromatyczny wyświetlacz OLED 128×64 pikseli.
  • Możliwość przypisania dowolnej etykiety do licznika.
  • Zasilanie 230 V AC lub 7…40 V DC 5…28 V AC, opcjonalnie USB.
  • Pobór prądu: 5 V/20 mA; 12 V/12 mA; 24 V/10 mA; 230 V/0,8 W.
  • 2 przyciski (wybór licznika, start/stop/kasowanie licznika).
  • Start/stop i zerowanie dwóch liczników z wejść izolowanych galwanicznie.
  • Komunikacja: USB, optoizolowany USART.
  • Otwarty protokół komunikacyjny umożliwia odczyt liczników, start/stop/zerowanie, liczników, zmianę komentarza.
  • Rozdzielczość 1 sekunda.
  • Dane przechowywane w pamięci FRAM.
  • Obudowa na szynę DIN.

Licznik można zamontować w urządzeniu, którego czas pracy ma być liczony. Dodatkowe liczniki (można zwiększyć ich liczbę) mogą liczyć czas pracy poszczególnych elementów, np silników podajnika itp. Po modyfikacji oprogramowania można zliczać zdarzenia, np zadziałania siłowników, przekaźników.

Prototypowy licznik zliczał przybliżony czas pracy nad projektem. Zasilanie stołu warsztatowego włączało licznik. Dodatkowe wejścia sterujące aktywowane były po włączeniu zasilania uruchamianego urządzenie. Liczniki obsługiwane z klawiatury pozwalały ręcznie decydować o czasie realizacji poszczególnych etapów pracy.

Budowa i zasada działania

Schemat ideowy licznika czasu pracy pokazano na rysunku 1. Układy licznika są zasilane z zasilacza bez transformatorowego, którego głównym elementem jest kondensator C1 (470 nF/400 V). Rezystory R1 i R2 rozładowują kondensator po wyłączeniu zasilania, R3 i R4 ograniczają udar prądowy po włączeniu zasilania, kiedy C2 jest rozładowany. Dioda Zenera D1 ogranicza maksymalne napięcie na wejściu stabilizatora MC34063ACD. Urządzenie można zasilić także za napięcia stałego lub przemiennego 7…40 V. W takiej sytuacji C1 i R3 należy zastąpić zworą oraz nie trzeba montować diody D1. Jeśli już się ją zastosuje, to napięcie należy dobrać zależnie od maksymalnego napięcia zasilającego. Zastosowanie stabilizatora impulsowego, usypiania mikrokontrolera pozwoliło na zminimalizowanie poboru prądu.

Rysunek 1. Schemat ideowy licznika 8 w 1

Sercem licznika jest mikrokontroler U3 typu STM32F103C8T6 wyposażony w sprzętowy interfejs USB. Kolejnym ważnym elementem jest pamięć FRAM (U2) typu FM24CL16B-GTR komunikująca wyposażona w interfejs I2C. Urządzenie dopełniają przyciski, wyświetlacz OLED komunikujący się po SPI, LED-y, gniazdo USB oraz transoptory izolujące interfejs USART i wejścia sterujące/zliczające.

Montaż i uruchomienie:

Ostrożnie! Jeśli urządzenie będzie zasilane z 230 V należy zachować dużą ostrożność podczas uruchamiania. Wskazane jest użycie transformatora separującego.

Schemat montażowy licznika zamieszczono na rysunku 2. Montaż należy przeprowadzić w tradycyjny sposób. Nie należy montować elementu R8. Jeśli licznik będzie zamontowany w obudowie na szynę DIN35, wyświetlacz należy zamontować na długich goldpinach. W pierwszej kolejności należy uruchomić zasilacz. Jeśli pracuje poprawnie można zamontować zworę R8.

Rysunek 2. Schemat montażowy licznika 8 w 1

Złącze J5 umożliwia wgranie programu do mikrokontrolera. Zwora JP1 umożliwia wybór sposobu startu mikrokontrolera. Podczas normalnego użytkowania zwory powinny być zdjęte. Założenie zworek może być konieczne, aby umożliwić zaprogramowanie, gdy znajduje się on w stanie uśpienia, a nie ma możliwości wygenerowania sygnału reset przez programator.

Urządzenia ma wbudowany RTC. Na razie oprogramowanie nie wykorzystuje jego możliwości, więc bateria jest zbędna.

Zasada działania programu

Dane o stanie liczników czasu zapisywane są w pamięci RAM co sekundę, w FRAM są co 10 sekund. Zapisywane są dwie kopie w FRAM i jedną RAM, który nie jest kontrolowany przez kompilator, w konsekwencji nie jest inicjalizowany (zerowany) po resecie uC. Dane w RAM i FRAM są zabezpieczone sumą kontrolną CRC32. Podczas startu systemu, sprawdzane są dane w RAM, jeśli CRC jest niepoprawne, dane odczytywane są z pierwszej kopii w FRAM. W razie uszkodzenia struktury danych odzyskiwane są one z kopii dodatkowej. Jeśli jest to niemożliwe pamięć zostanie zainicjalizowana. O fakcie odtworzenia danych z kopii czy inicjalizowania pamięci użytkownik jest informowany stosownym komunikatem. Ponadto zaświeca się dioda Alert. Dzięki kopi danych w RAM, po resecie wywołanym przez watchdog, BOR, wyprowadzenie reset, odtwarzany jest stan liczników z sekundową dokładnością a nie jak w przypadku FRAM z 10-sekundową.

Pracę mikrokontrolera nadzoruje układ watchdoga i układ BOD. W pamięci FRAM zapisywane są informacje o liczbie zapisów, resetów, odzyskiwania kopii, zadziałania watchdoga i BOD.

Poprawność komunikacji z pamięcią FRAM jest kontrolowania na bieżąco. W razie problemów z komunikacją jest podejmowana próba odblokowania magistrali I2C, jeśli została zawieszona, gdy to nie przyniesie skutku, jest powodowany restart mikrokontrolera. Na listingu 1 pokazano funkcję odblokowującą magistralę I2C. Może to się zdarzyć we współpracy z niektórymi układami slave, gdy transmisja została przerwana podczas odbioru danych przez mastera, a slave już potwierdził jej odebranie.

Listing 1. Funkcja powodująca restart transmisji I2C
void ReanimacjaI2C()
{
#define PORT_I2C GPIOB
#define PIN_SCL GPIO_PIN_6
#define PIN_SDA GPIO_PIN_7

HAL_I2C_DeInit(&hi2c1);
HAL_GPIO_WritePin(GPIOB, PIN_SDA, GPIO_PIN_SET); // SDA=H
HAL_GPIO_WritePin(GPIOB, PIN_SCL, GPIO_PIN_SET); // SCL=H
HAL_Delay(1);
//Configure GPIO Output pins : PB6 - SCL, PB7 - SDA
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = PIN_SCL | PIN_SDA;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
HAL_GPIO_WritePin( GPIOB, PIN_SDA, GPIO_PIN_RESET ); // SDA=L
HAL_Delay(1);
HAL_GPIO_WritePin( GPIOB, PIN_SCL, GPIO_PIN_RESET ); // SCL=L
for(u8 x=0; x<9; x++)
{
HAL_Delay(1);
HAL_GPIO_WritePin( GPIOB, PIN_SCL, GPIO_PIN_SET ); // SCL=H
HAL_Delay(1);
HAL_GPIO_WritePin( GPIOB, PIN_SCL, GPIO_PIN_RESET ); // SCL=L
}
//----- Stop IIC -----//
HAL_Delay(1);
HAL_GPIO_WritePin( GPIOB, PIN_SCL, GPIO_PIN_SET ); // SCL=H
HAL_Delay(1);
HAL_GPIO_WritePin( GPIOB, PIN_SDA, GPIO_PIN_SET ); // SDA=H
MX_I2C1_Init();
}

Funkcja nie sprawdza stanu linii SCL po zmianie poziomu logicznego. Slave może przytrzymać tę linię wyzerowaną, ale takich układów jest niewiele. Ponadto, pomiędzy zmianami sygnałów jest odstęp czasowy 1 ms, więc nawet najwolniejszy slave zwolni SCL.

Klawiatura lokalna umożliwia włączanie/wyłączanie zliczania i kasowanie liczników 3…5. Liczniki 1 i 2 są sterowane z wejść cyfrowych. Możliwe jest kasowanie liczników 1 i 2 przez utrzymanie poziomu niskiego na wejściach odpowiednio PB10, PB11 przez co najmniej 3 sekundy. Wejścia reset są dostępne tylko na złączu J4. Na płytce drukowanej zabrakło miejsca na transoptory dla wejść reset, ze względu na to, że w założeniach nie przewidziano sterowania licznikami z wejść optoizolowanych. Z tego też powodu, dodane później na płytce transoptory dla wejść zezwalających mają małe odstępy izolacyjne i nie zaleca się używania ich przy zasilaniu licznika z 230 V AC.

Wszystkie wejścia i przyciski są odczytywane w przerwaniach, co 30 ms. Dwa poprawne odczyty są interpretowane jako stabilny stan klawisza/wejścia. Po zmodyfikowaniu oprogramowania, licznik może zliczać zdarzenia. Sam mikrokontroler może zliczać programowo z maksymalną częstotliwością do około 100 kHz, jednak zastosowane transoptory wejściowe i wewnętrzne podciąganie w mikrokontrolerze ograniczają ją do 10 kHz.

Obsługa

Po restarcie zostanie wyświetlony ekran powitalny z nazwą programu i datą kompilacji – fotografia 3. Następnie zostanie pokazany ekran diagnostyczny, jak na fotografii 4. Poza nazwą oraz datą i czasem kompilacji przeprowadzane jest skanowanie magistrali I2C (komunikacja odbywa się z prędkością 1MHz). Wyświetlane są wszystkie znalezione adresy. W przypadku pamięci FM24LC02 (256 bajtów) będzie to jeden adres – A0, w przypadku FM24LC16 (2 kB) osiem adresów od A0 do AE. Pamięć o pojemności 512 bajtów jest wykrywana pod adresami A0 i A2, 1 kB – A0, A2, A4, A8. Pamięci mieszczące ponad 2 kB (inne adresowanie) nie są obsługiwane w aktualnej wersji kompilacji, ale prototyp pierwotnie był wyposażony w 8kB (FM24LC64) i program można skompilować dla pamięci do 64 kB (większe mają inne adresowanie). Jeśli zachodzi konieczność obsługi większych pamięci proszę o e-mail. Poniżej wyników skanowania wyświetlana jest wielkość struktury liczników, status FRAM, liczba błędów odczytu, odzyskanych kopii bezpieczeństwa.

Fotografia 3. Ekran powitalny wyświetlany po załączeniu zasilania

Kolejny wiersz zawiera informacje o liczbie zadziałania układu Watchdog WDGI „I”, Bod „B”, resetów „R” oraz zapisów do pamięci „W” . W ostatnim wierszu znajduje się informacja o ustawionej prędkości komunikacji przez USART. Dzięki temu można ją dostosować do prędkości pracy zastosowanych transoptorów.

Fotografia 4. Ekran diagnostyczny wyświetlany po załączeniu zasilania

Po pierwszym włączeniu pamięć FRAM zostanie zainicjalizowana, co zostanie zasygnalizowane na wyświetlaczu. Aby skasować komunikat należy nacisnąć przycisk SW2.  Podobnie kasuje się inne komunikaty jak np. „Zadziałanie IWDG”, Zadziałanie BOD”.

Przycisk SW1 przełącza wskaźnik aktywnego licznika (znaki „>” i „<” na skraju wyświetlacza.  Krótkie naciśnięcie SW2 włącza lub wyłącza zliczanie aktywnego licznika. Zliczanie jest sygnalizowane miganiem dwukropka oddzielającego pola licznika. Przytrzymanie SW2 ponad 5sekund zeruje aktywny licznik.

Z tytułu artykułu można wnioskować, że urządzenie zawiera 8 liczników natomiast na ekranie widać tylko 6. Gdzie więc podziały się jeszcze 2? Ostatnie liczniki są dostępne tylko z poziomu interfejsu USB i/lub UART.  Oprogramowanie nie daje możliwości przewijania ekranu z klawiatury, jeśli zajdzie taka potrzeba oprogramowanie zostanie zmodyfikowane. W tej sprawie proszę pisać do autora.

Obsługa z terminala:

Z urządzeniem można komunikować się przez interfejs USB lub optoizolowany UART.  W tym celu można posłużyć się programem terminala obsługującym protokół VT100 (poleca m TeraTerm dla Windows, rysunek 5). Oczywiście wcześniej należy zainstalować sterowniki pobrane ze strony STM Electronics z adresu http://www.st.com/en/development-tools/stsw-stm32102.html.

Rysunek 5. Ekran programu TeraTerm

Dla Linux wypróbowałem MiniCom na z OrangePi ZERO (rysunek 6). W przypadku Linuxa nie trzeba instalować sterowników dla klasy CDC.

Rysunek 6. Ekran programu MiniCom

W materiałach dodatkowych dostępna jest aplikacja (rysunek 7), która opiera się o bibliotekę obsługująca terminal. Obsługa aplikacji jest na tyle prosta, ze nie wymaga szczegółowego omawiania. To na co warto zwrócić uwagę, to fakt, że aplikacja posługuje się tzw. przyjaznymi nazwami portów COM (rysunek 8).

Rysunek 7. Aplikacja do obsługi licznika
Rysunek 8. Nazwy portów wyświetlane przez aplikację do obsługi licznika

Niestety, Windows jest specyficznym systemem i choć urządzenia mają różne numery seryjne oraz nazwę, to w wypadku, gdy jest kilka o tym samym VID i PID, Windows zawsze będzie  pokazywał nazwę urządzenia, które było zainstalowane jako pierwsze. Co ciekawe, podczas instalowania sterownika dla „nowego sprzętu” nazwa urządzenia pokazywana w zasobniku systemowym jest poprawna, zgodna z deskryptorem.

Rysunek 9. Lista dostępnych urządzeń USB w systemie Linux

W Linux komenda lsubs –tree wyświetla listę wszystkich (łącznie z HUB-am) urządzeń USB (rysunek 9). Na liście widać klasę CDC ACM. Komenda ls /dev/ttyACM* wyświetli wszystkie znalezione urządzenia USB klasy CDC zrealizowanej przez STM w CubeMX (rysunek 10). Układy FTDI czy inne konwertery dołączone do USART, SPI, I2C wyszukuje się komendą ls /dev/ttyUSB*. Komenda udevadm info -a /dev/ttyACM0 wyświetli informacje o urządzeniu (rysunek 11). Na zielono zaznaczyłem VID i PID, na czerwono nazwę i numer seryjny.

Rysunek 10. Lista dostępnych urządzeń klasy CDC
Rysunek 11. Informacje o liczniku podawane przez system Linux

W przypadku Windows, sposobu na poznanie faktycznej nazwy z deskryptora urządzenia nie znam na szczęście można posiłkować się numerem seryjnym w szczegółach sterownika (rysunek 12). Aby używać licznika z własną aplikacją czy sterować z poziomu terminala trzeba znać komendy urządzenia. Wymieniono je w tabeli 1.

Rysunek 12. Informacje o liczniku podawane przez system Windows

Wszystkie nastawy są zapisywane w pamięci FRAM. Komenda @c może być przydatna w wypadku komunikacji przez USART, która w przypadku wyłączenia generowania tła jest zdecydowanie szybsza ale gorzej wygląda na ekranie. Komunikaty ostrzegawcze i komunikaty o błędach wymieniono w tabeli 2.

Na koniec

Zaprezentowane urządzenie jest pierwszą wersją, której przeznaczeniem był pomiar czasu pracy nad poszczególnymi projektami oraz całkowitego czasu pracy stanowiska pracy. W trakcie użytkowania licznika przychodziły nowe pomysły do głowy. Jeśli czytelnicy wykażą zainteresowanie projektem powstanie nowsza, bardziej rozbudowana wersja. Z pewnością urządzenie będzie składało się z dwóch płytek drukowany złożonych „w kanapkę”. Płytka położona niżej będzie zawierała obwody zasilania i IO (transoptory). Nad nią będzie zamontowana płytka z mikrokontrolerem, klawiaturą, interfejsami komunikacyjnymi. Niewykluczone, że pojawi się RS485, Ethernet, kolorowy wyświetlacz. W tej sprawie proszę o e-maile.

Licznik nie był przewidziany do zasilania z USB. Zależnie od napięcia na porcie USB, na wyjściu stabilizatora napięcie może spaść poniżej 2,7 V, co spowoduje problemu z zapisem do pamięci FRAM. Aby mieć pewność poprawnego zasilania z USB, należałby użyć stabilizatora LDO albo innego układu stabilizatora impulsowego.

Domyślnie na USART, dane są wysyłane są z prędkością 115200. Wysyłane są te same dane co i na USB. To za duża prędkość dla transoptorów LTV357T. Prędkość tą można jednak zmienić na inną. W przypadki LTV357T odpowiednią będzie 9600, można spróbować 19200. Inne typy transoptorów działają poprawnie z większymi prędkościami (38400, 57600).

Nadawanie na USART zajmuje dużo czasu, zwłaszcza przy prędkościach mniejszych niż 115200. Jest ono realizowane przez DMA, ale nie ma kolejkowania komunikatów, w konsekwencji odpowiedzi na komendy wydawane przez USART mogą czasem nie pojawić się.

W założeniach przeznaczeniem USART w liczniku jest komunikacja pomiędzy urządzeniami, niedużą ilością danych. Aktualnie zaimplementowana obsługa terminala została wykonana tylko po to aby zweryfikować poprawność działania sprzętu i programu. Liczbę transmitowanych danych  można zmniejszyć po zaimplementowani „oszczędniejszego” niż VT100 protokołu np. MODBUS.

Alert kasuje naciśnięcie dowolnego przycisku. Inicjalizacja EEPROM kasuje jej zapis przez użytkownika (np. start/stop licznika, zmiana komentarza lub konfiguracji przez terminal). Ekran diagnostyczny można pominąć naciskając dowolny przycisk.  Ekran komunikatu (ostrzeżenie alarm) kasuje dowolny przycisk ale odnosi to skutek, więc najlepiej użyć S1 zmieniający kursory a nie S2 włączający/wyłączający zliczanie.

Licznik podejmuje pracę tuż po restarcie i pracuje także gdy jest wyświetlany ekran powitalny i diagnostyczny. Komunikacja z terminalem możliwa jest po zniknięciu ekranu powitalnego, wtedy to USB będzie już zainicjalizowane. Można to zaobserwować w terminalu gdzie komunikacja jest nawiązana w czasie wyświetlania ekranu diagnostycznego.

Na serwerze EP oraz stronie http://avt.4ra.pl dostępne są kody źródłowe programu oraz aplikacja dla Windows.

ES2 & KK, EP

Wykaz elementów:
Rezystory: (SMD 1206)
  • R5: 0,33 V
  • R8: 0,6 V
  • R12…R14: 1,5 kV
  • R9, R15, R16: 10 kV
  • R10, R11: 22 V
  • R3: 39 V
  • R17, R19, R20…R26: 330 V
  • R1, R2: 470 kV
  • R6: 560 V/1%
  • R18: 560 V
  • R7: 910 V/1%
Kondensatory: (SMD 1206)
  • C6, C7: 5,6 pF
  • C8, C12: 22 pF
  • C5, C9…C11, C13: 100 nF
  • C3: 470 pF
  • C1: 1 mF/400 V (MKP)
  • C4, C14: 470 mF/10 V (elektrolit.)
  • C2: 1000 mF/40 V (elektrolit.)
Półprzewodniki:
  • D1: C36V/1 W (dioda Zenera)
  • D2, D7: SS14 (DO21)
  • D3: dioda LED, niebieska (SMD 1206)
  • D4: dioda LED, zielona (SMD 1206)
  • D5: dioda LED, żółta (SMD 1206)
  • D6: dioda LED, czerwona (SMD 1206)
  • D8: 1N4148 (MINIMELF)
  • U1: MC34063ACD (SO-8)
  • U2: FM24CL16B-GTR (SO-8)
  • U3: STM32F103C8T6 (LQFP-48)
  • U4…U7: LTV357T (MFP4)
  • M1: S380 (mostek prostowniczy)
Inne:
  • J6: wyświetlacz OLED 0.96” 128*64 niebieski SPI kod handlowy: 00071
  • Q2: kwarc 8 MHz
  • Q1: kwarc 32768 kHz
  • J1, J3, J10, J11: TB-5.0-PP-2P + TB-5.0-PIN24
  • J8: SN25-4
  • Bat1: CR2032 + podstawka
  • L1: dławik DL22-100 (100 mH)
  • S1, S2: przycisk miniaturowy 5×7/15 mm
  • J5: złącze ZL201-05G
  • J2: złącze USBB-BV (kątowe USB, THT)
  • Z101F: obudowa modułowa na szynę DIN 89×107, h=65.6 mm, PS z filtrem, Z101; AVT – kod: Z101F PS
Artykuł ukazał się w
Elektronika Praktyczna
grudzień 2018
DO POBRANIA
Pobierz PDF Download icon

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik czerwiec 2021

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio czerwiec 2021

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka Podzespoły Aplikacje maj 2021

Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna czerwiec 2021

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich czerwiec 2021

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów