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.

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
- Arduino Leonardo
- Moduł TTL do RS-485
- Siłownik PA-12-10645012R
- Zasilacz +12 VDC
- Przewody połączeniowe (jumpery)
- Arduino IDE
- PA-12 Arduino API
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.

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.

| 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 |

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.
- PA12_PresentPosition
- PA12_StrokeLimit
- 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.

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

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łę.

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.