Zapraszamy na prezentację oraz pełen samouczek integracji wzmacniacza tensometrycznego WDT11 firmy WObit z innym urządzeniem z mikrokontrolerem. Pokażemy krok po kroku, jak skonfigurować moduł przez USB, odczytać sygnał prądowy 4-20 mA za pomocą przetwornika ADC, a na końcu - jak wykorzystać interfejs RS485 i protokół Modbus RTU do w pełni cyfrowej komunikacji. Całość zaprezentujemy na płytce ESP32-S3-Touch-LCD-4.3 z wyświetlaczem dotykowym i biblioteką graficzną LVGL, wraz z czujnikiem siły EMS60-1kN.
Do programowania ESP32 użyte zostanie środowisko PlatformIO z bibliotekami Arduino.
Kilka słów o WDT11
WDT11 jest uniwersalnym wzmacniaczem dla tensometrycznych czujników siły. Dzięki cyfrowemu przetwornikowi układ pozwala precyzyjnie mierzyć siłę i konwertować ją na sygnał cyfrowy (RS485) oraz analogowy (prądowy 4-20mA w wersji WDT11-I lub napięciowy 0-10V w wersji WDT11-U). Montowany jest na szynie DIN.
Wbudowany interfejs RS485 z protokołem MODBUS pozwala na bezpośrednią komunikację jednego lub kilku modułów ze sterownikiem PLC czy panelem HMI. Możliwe jest podłączenie do 32 modułów na jednej magistrali.
Konfiguracja modułu odbywa się przez złącze USB i dedykowane oprogramowanie, które oprócz ustawień urządzenia umożliwia także podgląd aktualnych wartości pomiarowych.
Najprościej jest ustawić wartość 4mA wyjścia dla 0 kg, a wartość 20mA dla planowanego zakresu wagi, ale chciałem tu pokazać też bardziej złożone obliczenia, więc 4mA przyjąłem dla 10kg. W razie potrzeby czytelnik sobie uprości - do wzoru po prostu podstawiać się będzie w odpowiednim miejscu 0, szczegóły w kolejnych akapitach.
Czujnik użyty do prezentacji - EMS60-1kN
WDT11 wspiera szeroką gamę czujników, konfiguruje się ich parametry przez USB, ale w tym konkretnym przypadku do prezentacji użyliśmy EMS60. EMS60-1kN to tensometryczny czujnik siły przeznaczony do pomiaru sił ściskających w zakresie do 1 kN. Czujnik posiada mostek tensometryczny o czułości nominalnej 1,5 mV/V, dlatego do jego współpracy wymagany jest odpowiedni wzmacniacz pomiarowy – tutaj WDT11.
Konstrukcja czujnika ma formę płaskiej membrany z otworami montażowymi, co ułatwia jego integrację z elementami mechanicznymi urządzeń testowych, pras, stanowisk pomiarowych czy układów automatyki. Korpus wykonany jest ze stali z powierzchnią niklowaną, a stopień ochrony wynosi IP54.
Zakres pomiarowy zastosowanego modelu wynosi 1 kN (około 100 kg siły). Czujnik może być chwilowo przeciążony do 150% wartości znamionowej, natomiast przeciążenie graniczne wynosi 200%. Typowa nieliniowość i histereza wynoszą około 0,2% zakresu pomiarowego, co pozwala na uzyskanie stabilnych i powtarzalnych wyników pomiaru.
Sygnał wyjściowy z czujnika jest bardzo mały (rzędu miliwoltów), dlatego bezpośrednie podłączenie do sterownika PLC czy przetwornika ADC jest zwykle niemożliwe. Właśnie w tym miejscu wykorzystywany jest wzmacniacz WDT11, który wzmacnia sygnał z mostka tensometrycznego oraz udostępnia go w postaci sygnału analogowego lub cyfrowego.
Program do konfiguracji na PC przez USB
Urządzenie współpracuje z dedykowaną aplikacją na komputer WDT11-PC. Podłącza się je za pomocą przewodu USB, a całość działa bez potrzeby instalacji dodatkowych sterowników. Wzmacniacz nie jest zasilany z USB, do nawiązania połączenia potrzebne jest zewnętrzne zasilanie, tak samo jak do pracy. Dopiero wtedy komputer poprawnie rozpoznaje nowe urządzenie:
Po uruchomieniu programu widzimy stan połączenia z czujnikiem oraz bieżące odczyty i wartość wyjścia prądowego/napięciowego (w zależności od wersji).
W razie problemów z komunikacją, pole "Status połączenia" powiadomi nas o błędzie:
Zakładka "Odczyty" pokazuje bieżący odczyt czujnika w postaci raw (nieprzetworzonej), mV, oraz zamieniony na kilogramy. Dodatkowo mamy tam wizualizację odczytu i wyjścia opartą o animowany pasek.
W oknie programu znajduje się przycisk "tara", który służy do wyzerowania wskazania czujnika w aktualnym stanie obciążenia. Po jego naciśnięciu bieżąca wartość zostaje przyjęta jako punkt odniesienia (0 kg), dzięki czemu dalsze pomiary pokazują już tylko zmianę względem tego poziomu. Funkcja ta jest przydatna np. wtedy, gdy na wadze znajduje się pojemnik lub element konstrukcyjny, którego masy nie chcemy uwzględniać w pomiarze.
Po prawej stronie mamy dodatkowo zapis największej i najmniejszej wartości zanotowanej w trakcie bieżącej sesji pracy, wraz z możliwością resetowania oraz status wejścia tara (przycisk) i samego czujnika.
Wygodną opcją jest jeszcze tryb dużego okna - pozwala łatwo testować urządzenie nawet w sytuacji, gdy ekran monitora jest nieco dalej od czujnika. Producent pomyślał o wszystkim.
Zostaje druga zakładka programu - Ustawienia. Znajdują się tam następujące sekcje:
- wejście czujnika siły - wybór jednostek, filtracji, częstotliwości pomiaru, offset (prosta forma kalibracji) i odwrócenie znaku
- parametry czujnika (do wpisania z dokumentacji czujnika)
- osobny przycisk do uruchomienia kreatora kalibracji
- konfiguracja zakresu wyjścia prądowego lub napięciowego (możemy dostosować wartości graniczne, dzięki czemu nie tracimy precyzji na wartości pomiarów które nie wystąpią w naszym zastosowaniu)
- konfiguracja miejsc dziesiętnych
- podgląd statusu przetwornika
- ustawienia modbus (o tym później)
Dodatkowo ustawienia można zapisać i odczytać - zarówno do urządzenia, jak i pliku. Ułatwia to szybką konfigurację wielu egzemplarzy.
Procedura kalibracji przez aplikację na PC
Program WDT11-PC oferuje również procedurę kalibracji. Dostępna jest ona w zakładce Ustawienia. Procedura kalibracji pozwala dobrać parametr "stała mostka" na podstawie wzorcowego obciążenia. Pierwszy krok to zdjęcie obciążenia z czujnika. Po zatwierdzeniu przechodzimy do drugiego kroku, gdzie musimy obciążyć czujnik określonym ciężarem wzorcowym - jego parametry należy wpisać w programie (wartość wzorca oraz jednostkę - kg lub N). Następnie zatwierdzamy a program oblicza stałą czujnika. Dodatkowe okienko poinformuje nas w razie wystąpienia błędów.
W ten sposób można szybko i łatwo polepszyć precyzję pomiarów z czujników.
Prezentacja - wyjście prądowe 4-20 mA
Przetestujmy wyjście prądowe obecne w wersji WDT11-I. Standardowy prąd wyjściowy należy do zakresu 4-20 mA, ale dodatkowo mamy tam zdefiniowane stany wyjątkowe: 3 mA – sygnalizuje błąd czujnika, 24 mA – sygnalizuje przekroczenie zakresu pomiarowego. Rozdzielczość wynosi ±0.008 mA, a dokładność to 0.05 mA (0,1% FS). Wyjście oparte o sygnał PWM 10 kHz.
Zdecydowaliśmy się zaprezentować to w oparciu o płytkę ESP32-S3-Touch-LCD-4.3 czyli ESP32-S3 z wyświetlaczem. ESP32 posiada 12-bitowy przetwornik analogowo-cyfrowy o zakresie wartości 0-4095. W użytej płytce wyprowadzony jest na złącze:
Takie ADC jednak może zmierzyć tylko napięcie, a nie prąd. Tutaj najprostszym rozwiązaniem do pomiaru napięcia byłoby użycie WDT11-U z wyjściem napięciowym i odpowiednio dobranym dzielnikiem napięciowym. Prezentujemy jednak WDT11-I, z wyjściem prądowym, z tego powodu musieliśmy dodatkowo wprowadzić rezystor bocznikowy (shunt) włączony szeregowo w obwód pętli prądowej. Prąd płynący przez rezystor wywołuje na nim spadek napięcia zgodnie z prawem Ohma (U = I × R), które ESP32 jest już w stanie zmierzyć. Dobrana została wartość 220 Ω - przy maksymalnym prądzie 20 mA daje to napięcie ok. 4.4 V, czyli za dużo dla wejścia ADC ESP32 (maks. ~3.1 V). W trakcie testów nie planowałem jednak zbliżać się do górnej granicy zakresu - czujnik pracował w okolicach 10-15 kg, co odpowiada prądowi ok. 7-13 mA i napięciu 1.5-2.9 V, a więc bezpiecznie w zakresie ADC. W docelowym produkcie należałoby dobrać mniejszy rezystor (np. 150 Ω, co przy 20 mA daje 3.0 V) albo zastosować dzielnik napięciowy, żeby cały zakres 4-20 mA zmieścił się w dopuszczalnych granicach przetwornika.
Zacznijmy od prostego odczytu surowej wartości ADC i wyświetlenia jej na ekranie za pomocą LVGL. Wystarczy użyć analogRead:
Kod: C / C++
Prezentacja na filmie:
To był jednak tylko odczyt wartości z ADC. W ESP32 można ją łatwo zamienić na napięcie dzięki funkcji analogReadMilliVolts, która uwzględnia fabryczną kalibrację przetwornika. Znając napięcie na boczniku i jego rezystancję, prąd liczymy z prawa Ohma: I = U / R. W kodzie wygląda to następująco:
Kod: C / C++
Filmik:
Ostatnim krokiem jest zamiana prądu na wartość ciężaru w kilogramach. Skoro wiemy, że 4 mA odpowiada dolnej granicy zakresu, a 20 mA - górnej, to wystarczy zastosować prostą interpolację liniową. Potrzebne nam do tego będą parametry skonfigurowane w sterowniku WDT11: dolna i górna granica zakresu pomiarowego w kilogramach (widoczne w aplikacji WDT11-PC w zakładce "Konfiguracja"). W naszym przykładzie czujnik jest skonfigurowany na zakres 10-20 kg, co przekłada się na następujące stałe:
Kod: C / C++
Kod: C / C++
Sprawdźmy działanie programu w praktyce:
Wartości kilogramów i miliamperów się zgadzają, choć precyzję można by polepszyć. Nie ona była celem tego prostego demka.
Prezentacja - komunikacja Modbus
Odczyt prądowy z użyciem bocznika sprawdza się dobrze, jednak zawsze będzie obarczony pewnym błędem wynikającym z tolerancji samego rezystora pomiarowego oraz dokładności przetwornika ADC w mikrokontrolerze. Znacznie lepszym rozwiązaniem jest wykorzystanie wbudowanego interfejsu RS485 i protokołu Modbus RTU. Dzięki temu otrzymujemy w 100% cyfrową i odporną na zakłócenia transmisję, a do tego zyskujemy dostęp do szeregu dodatkowych parametrów, takich jak wartości min/max, częstotliwość próbkowania czy nośność (pojemność) czujnika. Dodatkowo możemy wtedy podłączyć wiele różnych urządzeń na jednej magistrali - parametry baud i slave id (identyfikator urządzenia) można zmienić w ustawieniach WDT11 przez USB:
Modbus RTU to protokół komunikacyjny typu master-slave, który na warstwie fizycznej wykorzystuje standard RS485. Oznacza to wysoką odporność na zakłócenia i możliwość przesyłania danych na duże odległości w środowiskach przemysłowych.
Potrzebny nam będzie mikrokontroler wspierający komunikację UART oraz dodatkowo transceiver RS485, którego zadaniem jest konwersja sygnałów logicznych (TX/RX) na sygnał różnicowy przesyłany dwiema liniami (A i B).
Na szczęście, użyty ESP32-S3-Touch-LCD-4.3 posiada to wszystko na pokładzie. Obecny tam SP3485 zajmuje się transmisją RS485 w trybie half-duplex. Płytka posiada obwód automatycznego przełączania kierunku transmisji (auto-direction control), co bardzo ułatwia sprawę z punktu widzenia oprogramowania - nie musimy ręcznie sterować pinami RE/DE, a jedynie wysyłać i odbierać dane jak przez zwykły port szeregowy.
Podłączyliśmy go do WDT11 przewodami A, B oraz zapewniliśmy wspólną masę. Warto zwrócić uwagę, że na płytce ESP32-S3-Touch-LCD-4.3 znajduje się zworka umożliwiająca włączenie wbudowanego rezystora terminacyjnego 120 Ω pomiędzy liniami A i B. W standardzie RS485 rezystory terminacyjne montuje się na obu końcach magistrali, aby wyeliminować odbicia sygnału – jest to szczególnie istotne przy dłuższych przewodach lub wyższych prędkościach transmisji. W naszym przypadku, przy krótkim połączeniu punkt-punkt, zworka nie jest konieczna, ale przy rozbudowanej instalacji warto o niej pamiętać.
Teraz pytanie co odczytać. W dokumentacji znajdziemy pełną mapę rejestrów:
| Adres | Nazwa | Typ zmiennej | Tryb (funkcja Modbus) | Opis | 0 | TENS_ACT_INT | DINT | R (0x03) | Aktualna wartość siły | 2 | TENS_MIN_INT | DINT | R (0x03) | Zarejestrowana minimalna wartość siły | 4 | TENS_MAX_INT | DINT | R (0x03) | Zarejestrowana maksymalna wartość siły | 6 | TENS_RAW_INT | DINT | R (0x03) | Aktualna wartość siły bez konwersji jednostek | 8 | TENS_SENSE_INT | DINT | R (0x03) / W (0x10) | Parametr „Rated output” w mV/V * 1000 | 10 | TENS_RANGE_INT | DINT | R (0x03) / W (0x10) | Parametr „Capacity” w N | 12 | TENS_RATE_INT | INT | R (0x03) / W (0x06) | Częstotliwość próbkowania: 0-0, 1-10Hz, 2-33Hz, 3-50Hz, 4-66Hz, 5-123Hz | 13 | ANALOG_INT | INT | R (0x03) | Wartość wyjścia analogowego w mA/mV *1000 | 20 | TENS_ACT_REAL | REAL | R (0x03) | Aktualna wartość siły | 22 | TENS_MIN_REAL | REAL | R (0x03) | Zarejestrowana minimalna wartość siły | 24 | TENS_MAX_REAL | REAL | R (0x03) | Zarejestrowana maksymalna wartość siły | 26 | ANALOG_REAL | REAL | R (0x03) | Wartość wyjścia analogowego w mA/mV | 28 | TENS_SENSE_REAL | REAL | R (0x03) / W (0x10) | Parametr „Rated output” w mV/V | 4000 | TARA | BIT | W (0x05) | Tarowanie | 4001 | MIN_MAX_RESET | BIT | W (0x05) | Reset wartości minimalnej/maksymalnej siły | 5000 | INPUT_TARA | BIT | R (0x02) | Odczyt stanu wejścia tary | 5001 | TENS_RANGE_ERR | BIT | R (0x02) | Błąd podłączenia czujnika / przekroczenie zakresu | 5002 | TENS_ADC_ERR | BIT | R (0x02) | Błąd przetwornika |
Zostaje kwestia programowa. Do komunikacji wykorzystamy popularną bibliotekę ModbusMaster. Warto zwrócić uwagę, że wartości zmiennoprzecinkowe (REAL) wysyłane są w postaci dwóch 16-bitowych rejestrów i wymagają odpowiedniego złączenia (kolejność Little-endian dla słów). Na szczęście łatwo to rozwiązać krótką funkcją parsującą.
Pełen kod:
Kod: C / C++
Prezentacja filmowa:
Program działa sprawnie, odpytując paczką 30 rejestrów począwszy od adresu zerowego na raz. Dzięki temu za jednym zamachem odbieramy komplet informacji z przetwornika. W przypadku problemów z połączeniem (np. przerwanie przewodów A/B), wyświetlacz natychmiast zareaguje, prezentując kod błędu z biblioteki ModbusMaster oraz zliczając kolejne nieudane próby.
Materiał Youtube
Prezentacja WDT11 dostępna jest też na naszym kanale na Youtube. Zapraszamy do oglądania:
Podsumowanie
WDT11 okazał się solidnym i wygodnym rozwiązaniem do integracji tensometrycznych czujników siły z systemami przemysłowymi i mikrokontrolerami. W artykule przetestowaliśmy dwa sposoby odczytu danych:
- wyjście prądowe 4-20 mA – prostsze w implementacji, wymaga jedynie rezystora bocznikowego i odczytu ADC. Sprawdza się dobrze w prostych zastosowaniach, ale dokładność zależy od tolerancji rezystora i precyzji przetwornika w mikrokontrolerze. Trzeba też pamiętać o dobraniu wartości rezystora tak, aby napięcie na boczniku nie przekroczyło dopuszczalnego zakresu ADC. Dodatkowo to rozwiązanie nie jest skalowalne w prosty sposób przy większej ilości czujników.
- komunikacja Modbus RTU przez RS485 - zdecydowanie lepsza metoda dla zastosowań wymagających precyzji i niezawodności. Transmisja jest w pełni cyfrowa, odporna na zakłócenia elektromagnetyczne i niezależna od dokładności przetwornika po stronie mikrokontrolera. Dodatkowo zyskujemy dostęp do rozbudowanej mapy rejestrów: wartości min/max, surowe odczyty ADC, parametry czujnika (nośność, czułość), częstotliwość próbkowania i diagnostykę błędów. Na jednej magistrali RS485 można podłączyć do 32 urządzeń, co czyni to rozwiązanie skalowalnym.
Konfiguracja modułu WDT11 odbywa się wygodnie przez USB za pomocą dedykowanej aplikacji WDT11-PC, która umożliwia nie tylko ustawienie wszystkich parametrów pracy, ale także przeprowadzenie procedury kalibracji z użyciem wzorcowego obciążenia.
Wszystkie prezentowane przykłady kodu zostały przygotowane dla płytki ESP32-S3-Touch-LCD-4.3 z biblioteką graficzną LVGL v8. Płytka ta posiada wbudowany transceiver RS485 z automatycznym przełączaniem kierunku transmisji, co znacząco upraszcza implementację komunikacji Modbus.
Więcej informacji o module WDT11 można znaleźć na stronie producenta WObit.
[Współpraca reklamowa z P.P.H. WObit E.K. Ober s.c.]
Fajne? Ranking DIY Pomogłem? Kup mi kawę.