Blog posts How an Arduino or Raspberry Pi Communicates with our Hall effect actuator: the PA-04-HS

Jak Arduino lub Raspberry Pi komunikuje się z naszym siłownikiem z czujnikiem efektu Halla: PA-04-HS

Guest Writer
Guest Writer
PA Engineer

Witamy na kolejnym technicznym blogu Progressive Automations! Dziś pokażemy, jak Arduino może komunikować się z naszym PA-04-HS.

Czujnik efektu Halla to element elektroniczny, który umożliwia precyzyjne sterowanie siłownikiem liniowym. Zwykle jest umieszczony w przekładni obok tarczy magnetycznej. Gdy siłownik liniowy się porusza, tarcza magnetyczna obraca się, wytwarzając pole magnetyczne przechodzące przez czujnik Halla. Powoduje to powstanie impulsu napięciowego, który można zliczać, aby określić położenie, prędkość lub kierunek siłownika liniowego. Aby jednak wykorzystać te sygnały, potrzebny jest mikrokontroler, taki jak Arduino lub Raspberry Pi. W tym artykule zagłębimy się w użycie siłownika z Raspberry Pi oraz w to, jak sterować siłownikiem liniowym za pomocą Arduino. Jak wspomniano, oba te mikrokontrolery pokażemy na przykładzie Progressive Automations PA-04-HS – siłownik liniowy z czujnikiem efektu Halla.

PA-04-HS ma wbudowane sprzężenie zwrotne efektu Halla!

Obliczanie położenia, prędkości i kierunku

Zanim przejdziemy do szczegółów, najpierw warto zrozumieć, jak sygnały z czujnika efektu Halla służą do wyznaczania położenia, prędkości i kierunku siłownika liniowego. W PA-04-HS czujnik Halla generuje dwa sygnały, z których każdy może znajdować się w jednym z dwóch stanów binarnych: włączony lub wyłączony. Dwa sygnały rosną i opadają, gdy obraca się silnik elektryczny, z przesunięciem fazowym o 90°. Jeśli nie wiesz, jak zaimplementować to w kodzie obsługiwanym przez mikrokontroler, spokojnie — podamy to później w artykule.

Położenie

Położenie siłownika liniowego wymaga obliczeń z użyciem sygnałów Halla oraz kilku parametrów samego siłownika. Równanie na położenie pręta siłownika wymaga długości skoku siłownika oraz całkowitej liczby zboczy wykrytych od pełnego wsunięcia do pełnego wysunięcia. Korzystając z tych wartości, można użyć następującego równania:

Równanie 1

 

W powyższym równaniu liczba wykrytych zboczy od pełnego wsunięcia zaczyna się od zera i zwiększa się o jeden, gdy zbocze zostanie wykryte w kierunku do przodu, oraz zmniejsza się o jeden, gdy zbocze zostanie wykryte w kierunku do tyłu.

 

Prędkość

Prędkość siłownika można zmierzyć na podstawie sygnałów Halla, implementując w programie timer. Posłuży on do mierzenia czasu między wykrytymi zboczami. Dodatkowo potrzebna jest obliczona wartość zmiany skoku na jedno wykryte zbocze. Mając te wartości, można skorzystać z następującego równania:

Równanie 2

 

Kierunek

Kierunek ruchu siłownika można określić, porównując bieżący stan dwóch sygnałów (sygnał A i B) z ich poprzednim stanem. Dzieje się tak, ponieważ w zależności od kierunku ruchu siłownika sygnały zamieniają się tym, który jest wyprzedzający, a który opóźniony.

Schemat stanów dwóch sygnałów (sygnał A i B)

 

Tabela stanów dwóch sygnałów (sygnał A i B)

 

Co lepsze: mikrokontroler Arduino czy Raspberry Pi?

To nie kwestia tego, co jest lepsze ogólnie, lecz co lepiej pasuje do twojego zastosowania. Warto wybrać Arduino, jeśli głównym zadaniem aplikacji jest odczyt danych z czujnika Halla i zwracanie określonych instrukcji.

Z kolei Raspberry Pi będzie praktyczniejsze przy zadaniach typowych dla komputera osobistego. Dodatkowo Raspberry Pi upraszcza zarządzanie pracą w różnych scenariuszach, takich jak łączenie z internetem czy sterowanie siłownikiem liniowym z urządzenia mobilnego.

Czasem wygodnie jest użyć obu mikrokontrolerów do różnych zadań. Raspberry Pi może uzyskiwać dostęp do kodu i korygować różne parametry, które następnie są wysyłane do Arduino, aby sterować siłownikiem liniowym na podstawie zebranych informacji.

Przejdźmy do szczegółów i pokażmy, jak sterować siłownikiem liniowym za pomocą Arduino.

 

Arduino z siłownikami liniowymi

Arduino Uno Rev3

 

W zależności od aplikacji możesz wybrać metodę odpytywania albo przerwania podczas pracy z sygnałami cyfrowymi. Odpytywanie to zaprogramowana metoda, w której mikrokontroler okresowo sprawdza stan wejścia, aby wykryć zmiany. Przerwania to mechanizm sprzętowy, który natychmiast przekierowuje wykonanie programu mikrokontrolera, gdy zmieni się stan na wejściu.

Na potrzeby demonstracji wybierzemy metodę z przerwaniem, aby znać dokładny moment zmiany stanu sygnału. Na mikrokontrolerze Arduino przerwanie obsługuje się przez utworzenie procedury obsługi przerwania (Interrupt Servicing Routine, ISP).

Oto, czego potrzebujesz:

 

Okablowanie Arduino i komponentów shielda

Czujniki efektu Halla mają 4 przewody: 5V, GND oraz 2 przewody sygnałowe. Każdy z przewodów sygnałowych generuje impulsy, gdy obraca się silnik. Są też dwa przewody siłownika do podłączenia do MegaMoto. Użyjemy tylko jednego sygnału z czujnika Halla.

Podłącz siłownik liniowy do Arduino i MegaMoto w następujący sposób:

  • Czerwony przewód czujnika do pinu 5V w Arduino.
  • Czarny przewód czujnika do pinu GND w Arduino.
  • Żółty/pomarańczowy przewód do pinu 2 lub 3 w Arduino (jeśli używasz innego Arduino, upewnij się, że piny obsługują przerwania).
  • Czerwony przewód siłownika do MOTA w MegaMoto.
  • Czarny przewód siłownika do MOTB w MegaMoto.

Gdy silniki są poprawnie podłączone do płytek, podłącz zasilanie w następujący sposób:

  • Podłącz 12V do BAT+.
  • Podłącz GND do BAT-.
  • Podłącz 12V do Vin w Arduino.
  • Podłącz dwa przyciski między piny 7 i 8 w Arduino i połącz je z GND.

Istnieją 4 typy wyzwalaczy przerwania: Rising, Falling, High i Low. Zmieniając wyzwalacz, możesz dopasować moment wywołania przerwania. Rising to przejście z niskiego na wysoki, Falling – z wysokiego na niski, Low – gdy pin jest w stanie niskim, a High – gdy pin jest w stanie wysokim.

Pełny kod Arduino znajdziesz w naszym poradniku: Kod Arduino dla siłownika liniowego z efektem Halla

Kod przesunie siłownik do przodu lub do tyłu o określoną wartość po naciśnięciu przycisków na pinach 7 lub 8 (aktywny stan LOW). Zawiera także procedurę bazowania (homing). To ważne, ponieważ przy długotrwałej pracy silnika tam i z powrotem możesz sporadycznie tracić zliczenia i stopniowo tracić orientację położenia. Procedura bazowania cofa siłownik liniowy do znanej pozycji, aby licznik mógł się wyzerować.

 

Siłownik z Raspberry Pi

Jak podłączyć siłownik do Raspberry Pi 2, 4 lub nowszego modelu? Sterowanie siłownikiem liniowym z Raspberry Pi jest proste i może odbywać się przez internet, umożliwiając sterowanie bezprzewodowe. Postępuj zgodnie z krokami w tym poradniku, aby zobaczyć dokładnie, jak to zrobić: Sterowanie siłownikiem liniowym z Raspberry Pi.

Raspberry Pi 4 służy do uruchamiania oprogramowania serwerowego i odbierania poleceń sterujących siłownikiem liniowym. Ten poradnik nie wykorzystuje jednak czujnika efektu Halla. Aby to zrobić, można podłączyć płytkę Arduino do siłownika liniowego i Raspberry Pi, aby wysyłać/odbierać dane bezprzewodowo. Chociaż Raspberry Pi może też bezpośrednio odczytywać dane z czujnika, podobnie jak Arduino, może to być przesadą, jeśli sterujesz tylko kilkoma siłownikami liniowymi.

 

Sterowanie wieloma siłownikami liniowymi

Siłownik z czujnikiem efektu Halla, klasa szczelności IP66, model: PA-04-HS

 

Jeśli musisz sterować kilkoma siłownikami liniowymi z Raspberry Pi lub Arduino, będziesz potrzebować kilku dodatkowych komponentów i modyfikacji kodu. Dwa lub więcej siłowników można zsynchronizować, śledząc zliczenia z czujnika efektu Halla; jeśli zliczenia siłowników zbytnio się rozjadą, każdy siłownik zwolni, aby wyrównać położenia.

Pełną instrukcję znajdziesz tutaj: Sterowanie wieloma siłownikami liniowymi za pomocą mikrokontrolera

Alternatywnie, jeśli synchronizacja nie jest potrzebna w twojej aplikacji, po prostu użyj Arduino do jednego lub dwóch siłowników – zależnie od liczby dostępnych pinów przerwań. Aby sterować większą liczbą siłowników, możesz zastosować więcej płytek Arduino lub użyć shielda Arduino z większą liczbą pinów przerwań.

Przeglądaj naszą ofertę mikrokontrolerów, aby w pełni kontrolować siłowniki!

Podsumowanie

Jeśli masz ochotę na wyzwanie, możesz wypróbować dodatkowe metody sterowania siłownikami liniowymi z Arduino, np. użyć sprytnego kodu PID, który znajdziesz tutaj: Sterowanie PID siłownikiem liniowym. Czujnik efektu Halla w siłowniku liniowym, takim jak PA-04-HS, zapewnia dodatkowy poziom kontroli, który łatwo skonfigurować z pomocą Arduino lub Raspberry Pi. Niezależnie od tego, czy twoja aplikacja wymaga jedynie odczytu danych z czujników, czy chcesz wynieść siłownik liniowy na wyższy poziom, podłączając go do sieci, czujnik Halla w połączeniu z wybranym mikrokontrolerem to właściwa droga.

Jeśli masz jakiekolwiek pytania dotyczące treści tego artykułu lub chcesz omówić możliwe rozwiązania produktowe, skontaktuj się z nami — chętnie pomożemy!