Getting Started with Arduino and PA-12

Pierwsze kroki z Arduino i PA-12

Anna Sapiga
Anna Sapiga
PA Engineer

PA-12 to wysokoprecyzyjny siłownik, którym można sterować za pomocą Arduino. Ten wstępny poradnik dotyczący PA-12 omawia metody sterowania i implementację z użyciem PA-12 Arduino API.

Istnieją dwie wersje PA-12. PA-12-R ma bezrdzeniowy serwomotor prądu stałego i protokół komunikacji RS-485. PA-12-T ma serwomotor prądu stałego z rdzeniem oraz protokół komunikacyjny TTL/PWM.

Rozpoczęcie pracy z PA-12 i Arduino zależy od wersji PA-12 używanej w projekcie. W tym poradniku wykorzystano PA-12-10645012R – skok 1,06”, siła 4,50 LBS, bezrdzeniowy silnik DC 12 VDC. Bezrdzeniowy silnik oznacza, że protokół komunikacji dla tego siłownika to RS-485.

Arduino Leonardo/Uno nie obsługuje bezpośrednio protokołu RS-485, ale ma TTL. W tym poradniku użyjemy modułu TTL do RS-485, aby komunikować się z siłownikiem liniowym z poziomu Arduino.

Moduł Arduino

Rysunek 1 - Moduł RS-485 do TTL dla Arduino


Obsługa sterowania PA-12

PA-12 jest sterowany bezpośrednio za pomocą pakietów danych wysyłanych przez komunikację TTL lub RS-485. Każdy pakiet danych zawiera informacje używane do wykonania określonej funkcji PA-12 lub do odczytu bieżącego stanu urządzenia. Bieżący stan urządzenia może obejmować np. ID serwa, wartość napięcia, pozycję pręta siłownika itp.

Wyposażenie i oprogramowanie

PA-12 API

PA-12 API można pobrać tutaj. API zawiera następujące pliki i foldery:

  • PA12.ino
    • Zawiera struktury poleceń PA-12 oraz funkcje przesyłające i odbierające dane do/z PA-12
    • W tym pliku znajdują się wszystkie funkcje używane w przykładowych kodach lub do zaimplementowania we własnym kodzie
  • PA12.h
    • Plik nagłówkowy zawiera protokół komunikacyjny i nagłówki komunikacji szeregowej
    • Zawiera deklaracje funkcji i zmiennych dla wszystkich funkcji i możliwości PA12
    • setPosition, ServoID, presentSpeed, forceEnable
  • Pliki narzędziowe
  • Przykładowe kody
    • Przykładowy kod można wykorzystać do łatwej implementacji sterowania PA-12 we własnym systemie
    • Wszystkie przykładowe kody są przygotowane do pracy z Arduino Leonardo, jednak zmienne używane dla pinów nadawania i odbioru można zmienić, aby były zgodne z posiadanym mikrokontrolerem/Arduino

Import biblioteki PA12

Wybierz „Sketch” --> Include Library --> Add.ZIP Library. Wszystkie pliki z folderu PA12 zostaną zaimportowane bezpośrednio do biblioteki Arduino. Dzięki temu będzie można używać funkcji PA12 do sterowania siłownikiem.

Biblioteka Arduino

Rysunek 2 - Import biblioteki w Arduino


Dostępne polecenia dla PA-12

Poniżej przedstawiono tabelę poleceń. Aby uzyskać więcej informacji o poleceniach, przejrzyj plik PA12.ino pod kątem szczegółów kodowania. W tym poradniku omówimy podstawowe polecenia. W przyszłych poradnikach pojawią się bardziej zaawansowane funkcje i techniki sterowania.

Funkcje odczytu

Funkcje w poniższej tabeli są tylko do odczytu i zwracają wartość.

Funkcja odczytu

Zmienna

Opis

myServo.getModelNumber(ID_NUM)

ID_NUM

Numer modelu PA-12

myServo.Version(ID_NUM)

ID_NUM

Numer wersji silnika PA-12

myServo.CalStroke (ID_NUM, *Length*)

ID_NUM, Length = Short, Long, or Center

Sprawdzenie kalibracji pozycji skoku

myServo.presentVolt((ID_NUM)/10)

ID_NUM

Sprawdzenie napięcia wejściowego

myServo.presentTemperature(ID_NUM)

ID_NUM

Bieżąca temperatura silnika

myServo.MaxTemperature(ID_NUM)

ID_NUM

Odczyt maksymalnego limitu temperatury

myServo.presentPosition(ID_NUM)

ID_NUM

Bieżąca pozycja siłownika

myServo.moving(ID_NUM)

ID_NUM

Zwracany status silnika. 1 = ruch, 0 = stop

myServo.limitVolt(ID_NUM, *Highest/Lowest*)

ID_NUM,  High Voltage Level = Highest or  Low Voltage Level = Lowest

Odczyt ustawienia napięcia wysokiego lub niskiego

myServo.alarmLed(ID_NUM)

ID_NUM

Odczyt stanu diody alarmowej. 1 = ON, 0 = Off

myServo.alarmShutdown(ID_NUM)

ID_NUM

Odczyt stanu trybu awaryjnego wyłączenia

myServo.StrokeLimit(ID_NUM, *Long/Short*)

ID_NUM, Extend Limit = Long or Retract Limit = Short

Odczyt maks. i min. limitów skoku

myServo.ResolutionFactor(ID_NUM)

ID_NUM

Odczyt współczynnika rozdzielczości serwomotoru

myServo.movingSpeed(ID_NUM)

ID_NUM

Odczyt wartości prędkości serwomotoru

myServo.forceLimit(ID_NUM)

ID_NUM

Odczyt maks. siły serwomotoru (ustawienie ulotne)

myServo.maxForce(ID_NUM)

ID_NUM

Odczyt maks. siły serwomotoru (ustawienie nieulotne)

Funkcje zapisu

Funkcja zapisu

Zmienna

Opis

myServo(&Serial, enable_pin, Tx Level)

Numer portu szeregowego, pin enable, pin transmisji

Ustawienie portu komunikacyjnego

myServo.begin(*Baud Setting Value*)

Baud Setting Value (Refer to Table)

Szybkość transmisji (Baud) komunikacji szeregowej

myServo.ServoID(ID_NUM, ID_Sel)

ID_NUM, ID_Sel

Zmiana wartości ID serwa

myServo.ledOn(ID_NUM, *LED RGB Value*)

ID_NUM, LED RBB Value (Refer to Table)

Włącza określoną diodę LED

myServo.MaxTemperature(ID_NUM, Temperature)

ID_NUM, Temperature

Zapis maksymalnego limitu temperatury

myServo.goalPosition(ID_NUM, *Position Value*)

ID_NUM, Position Value (Refer to Table)

Ustawienie żądanej pozycji skoku

myServo.limitVolt(ID_NUM, *Highest/Lowest*, LimitVolt)

ID_NUM, Higher Value = Highest or Lower Value = Lowest, LimitVolt

Ustawienie progu napięcia wysokiego lub niskiego

myServo.alarmLed(ID_NUM, *Alarm Variable*)

ID_NUM, Alarm Bit

Ustawienie diody LED alarmu. Więcej informacji w tabeli.

myServo.alarmShutdown(ID_NUM, *enable*)

ID_NUM, Enable: 0 = off, 1 = on

Ustawienie awaryjnego wyłączenia silnika. Jeśli alarm jest aktywny, silnik może zostać wyłączony

myServo.StrokeLimit(ID_NUM, *Long/Short*, *Position Value*)

ID_NUM, Extend Limit = Long or Retract Limit = Short, Position Value (Refer to Table)

Zapis maks. i min. limitów skoku

myServo.ResolutionFactor(ID_NUM, *Resolution Factor*)

ID_NUM, Resolution Factor (Refer to table)

Ustawia wartość rozdzielczości pozycjonowania skoku siłownika.

myServo.movingSpeed(ID_NUM, *Moving Speed Value*)

ID_NUM, Moving Speed Value (Refer to table)

Ustawia prędkość serwomotoru

myServo.forceLimit(ID_NUM, *Force Value*)

ID_NUM, Force Value (Refer to Table)

Ustawia maks. siłę serwomotoru (ustawienie ulotne)

myServo.maxForce(ID_NUM, *Force Value*)

ID_NUM, Force Value (Refer to Table)

Ustawia maks. siłę serwomotoru (ustawienie nieulotne)


Ustawienia zmiennych

Poniższe tabele zawierają wartości zmiennych wprowadzanych do funkcji.

Szybkość transmisji (Baud)

Wartość zmiennej Baud

Szybkość transmisji

16

115200

32

57600

64

19200

128

9600


Wartość LED

LED RGB Value

RED

GREEN

BLUE


Servo ID

Servo ID Value

0

1 - 253

254


Dla zmiennej identyfikatora serwomotoru ID_NUM dostępnych jest łącznie 255 opcji. Wartość 0 to ustawienie domyślne. Dla pojedynczego ID można wybrać wartość od 1 do 253. Wartość 254 jest zarezerwowana dla ID rozgłoszeniowego, a więc aktywuje wszystkie PA-12 znajdujące się w sieci.

Ustawienia alarmu

Ustawienie alarmu

Wartość ustawienia alarmu

Input Voltage Error

0

Stroke Limit Error

1

Range Error

3

Checksum Error

4

Overload Error

5

Instruction Error

6

*Reserved*

7

Współczynnik rozdzielczości skoku

Wartość współczynnika rozdzielczości

Rozdzielczość

1

4096

2

2048

3

1024

4

512


Im wyższa wartość rozdzielczości, tym większa dokładność pozycjonowania. 

Prędkość ruchu

Wartość prędkości ruchu

Ustawienie prędkości

0

Maks. prędkość

1 - 1023

1 = najniższa, 1023 = najwyższa


Wartość siły

Wartość siły

Ustawienie siły

0 - 1023

1 = najniższa, 1023 = najwyższa


Wartość pozycji

Wartość pozycji

Pozycja

0 - 4095

0 = całkowicie wsunięty, 4095 = całkowicie wysunięty


Przewodnik po okablowaniu

PA-12 jest podłączony do modułu RS-485, który następnie jest bezpośrednio połączony z Arduino. Ta wersja PA-12 wymaga zasilacza 12 VDC do zasilania serwomotoru.

Serwomotor

RS-485 Side A Arduino
DI Pin 1
DE Pin 2
RE Pin 2
R0 Pin 0

 

Pin 0 w Arduino to odbiór TTL. Pin 1 w Arduino Leonardo to nadawanie TTL. Pin 2 w przykładowych kodach jest skonfigurowany jako pin enable.

PA-12 4-Pin Connector

Value

Black

GND

Red

Servo Motor +VDC

White

Communication Pin A

Yellow

Communication Pin B

 

Port Connections - PA-12

Rysunek 3- Połączenia portów PA-12

RS-485 Side B

Connection

VCC1

+5VDC (Arduino)

A

PA-12 White Wire

B

PA-12 Yellow Wire

GND2

Power Supply GND and PA-12 GND

1Moduł RS-485 jest zasilany z wyjścia +5 VDC Arduino.

2Uziemienie (GND) jest wspólne dla PA-12, zasilacza i modułu RS-485.

Przykładowy kod

W tym poradniku przedstawimy trzy przykładowe kody, które zapewniają wstępny wgląd w niektóre funkcje PA-12 oraz sposób, w jaki funkcje zapisu i odczytu można zaimplementować we własnym kodzie.

  1. PA12_PresentPosition
  2. PA12_StrokeLimit
  3. PA12_ForceLimit

1. Present Position

W tym kodzie użytkownik wprowadza żądaną wartość pozycji z zakresu 0–4095 w monitorze szeregowym. Po zatwierdzeniu polecenie jest wysyłane do PA-12, który uruchamia serwomotor, aby przesunąć pręt do żądanej pozycji. W czasie ruchu wyświetlana jest bieżąca pozycja aż do osiągnięcia pozycji końcowej. 

Kod Arduino

2. Stroke Limit

W tym kodzie PA-12 cyklicznie co 1000 ms pracuje w ramach wprowadzonych parametrów limitów wysuwu i wsuwu. Oznaczenia Long i Short znajdujące się w funkcji limitu skoku

Kod Arduino

3. Force Limit

Prezentowany kod limitu siły to wersja ulotna (volatile). Oznacza to, że przy każdym zaniku zasilania PA-12 wartość limitu siły zostanie przywrócona do ustawienia domyślnego. Użytkownik wprowadza wartość limitu siły z poziomu monitora szeregowego. W tym przypadku wartość 0 oznacza niską siłę, a 1023 oznacza maksymalną siłę.

Kod Arduino

Przyszłe poradniki

W kolejnych poradnikach omówimy:

  • Implementację zaawansowanych funkcji
  • Sterowanie wersją PA-12 TTL i PWM
  • Techniki rozwiązywania problemów
  • Zewnętrzne metody sterowania

PA-12 to wszechstronny i bardzo precyzyjny siłownik, który pozwala użytkownikowi końcowemu uzyskać bezpośrednią kontrolę nad aplikacją. Przy właściwej implementacji PA-12 jest w stanie dokładnie spełnić wymagania Twojego systemu.

Aby uzyskać dodatkowe informacje, napisz do nas na adres sales@progressiveautomations.com lub zadzwoń do naszego zespołu pod numer 1-800-676-6123.