Il PA-12 è un attuatore ad alta precisione che può essere controllato con Arduino. Questa guida introduttiva al PA-12 illustra i metodi di controllo e l’implementazione con la PA-12 Arduino API.
Esistono due versioni del PA-12. Il PA-12-R ha un servomotore DC coreless e protocollo di comunicazione RS-485. Il PA-12-T ha un servomotore DC con nucleo e protocollo di comunicazione TTL/PWM.
Per iniziare con PA-12 e Arduino, occorre considerare la versione di PA-12 utilizzata. In questo tutorial viene impiegato il PA-12-10645012R – Corsa da 1,06”, 4,50 lb di forza, servomotore DC coreless a 12 VDC. Il motore coreless indica che il protocollo di comunicazione per questo attuatore è RS-485.
Arduino Leonardo/Uno non dispone del protocollo di comunicazione RS-485, ma dispone di TTL. In questo tutorial useremo un modulo TTL-RS-485 per comunicare con l’attuatore lineare tramite Arduino.

Figura 1 - Modulo RS-485 a TTL per Arduino
Funzionamento del controllo PA-12
Il PA-12 è controllato direttamente con pacchetti dati inviati tramite comunicazione TTL o RS-485. Ogni pacchetto contiene informazioni usate per eseguire una determinata funzione del PA-12 o per ricevere lo stato attuale del dispositivo. Lo stato attuale del dispositivo può includere, ad esempio, l’ID del servo, il valore della tensione, la posizione della stanga dell’attuatore, ecc.
Attrezzatura e software
- Arduino Leonardo
- Modulo TTL-RS-485
- Attuatore PA-12-10645012R
- Alimentatore +12 VDC
- Cavi jumper
- Arduino IDE
- PA-12 Arduino API
PA-12 API
La PA-12 API può essere scaricata qui. Questa API contiene i seguenti file e cartelle:
- PA12.ino
- Contiene le strutture di comando del PA-12 e le funzioni che trasferiscono e ricevono dati da/verso il PA-12
- Tutte le funzioni usate nei codici di esempio o da implementare nel tuo codice sono contenute in questo file
- PA12.h
- Il file header contiene il protocollo di comunicazione e gli header per la comunicazione seriale
- Contiene dichiarazioni di funzioni e variabili per tutte le funzionalità del PA12
- setPosition, ServoID, presentSpeed, forceEnable
- File di utilità
- Codici di esempio
- Il codice di esempio può essere usato per implementare facilmente il controllo del PA-12 nel tuo sistema
- Tutti i codici di esempio sono programmati per l’uso con Arduino Leonardo; tuttavia, le variabili usate per i pin di trasmissione e ricezione possono essere modificate per essere compatibili con il microcontrollore/Arduino che già possiedi
Importare la libreria PA12
Seleziona ‘Sketch’ --> Include Library --> Add.ZIP Library. Tutti i file presenti nella cartella PA12 verranno importati direttamente nella libreria Arduino dell’attuatore lineare. Questo ti consentirà di usare le funzioni PA12 per controllare l’attuatore.

Figura 2 - Importazione libreria Arduino
Comandi disponibili per PA-12
Di seguito è mostrata una tabella dei comandi. Per maggiori informazioni sui comandi, consulta PA12.ino per i dettagli di programmazione. In questo tutorial tratteremo i comandi di base. I futuri tutorial includeranno funzioni e tecniche di controllo più avanzate.
Funzioni di lettura
Le funzioni elencate nella tabella seguente sono di sola lettura e restituiscono un valore.
|
Funzione di lettura |
Variabile |
Descrizione |
|---|---|---|
|
myServo.getModelNumber(ID_NUM) |
ID_NUM |
Numero di modello del PA-12 |
|
myServo.Version(ID_NUM) |
ID_NUM |
Numero di versione del motore del PA-12 |
|
myServo.CalStroke (ID_NUM, *Length*) |
ID_NUM, Length = Short, Long, or Center |
Verifica della calibrazione della posizione di corsa |
|
myServo.presentVolt((ID_NUM)/10) |
ID_NUM |
Controllo della tensione di ingresso |
|
myServo.presentTemperature(ID_NUM) |
ID_NUM |
Temperatura attuale del motore |
|
myServo.MaxTemperature(ID_NUM) |
ID_NUM |
Lettura del limite massimo di temperatura |
|
myServo.presentPosition(ID_NUM) |
ID_NUM |
Posizione attuale dell’attuatore |
|
myServo.moving(ID_NUM) |
ID_NUM |
Valore restituito dello stato del motore. 1 = In movimento, 0 = Fermato |
|
myServo.limitVolt(ID_NUM, *Highest/Lowest*) |
ID_NUM, High Voltage Level = Highest or Low Voltage Level = Lowest |
Lettura dell’impostazione di tensione alta o bassa |
|
myServo.alarmLed(ID_NUM) |
ID_NUM |
Legge lo stato del LED di allarme. 1 = ON, 0 = Off |
|
myServo.alarmShutdown(ID_NUM) |
ID_NUM |
Legge lo stato della modalità di arresto per allarme |
|
myServo.StrokeLimit(ID_NUM, *Long/Short*) |
ID_NUM, Extend Limit = Long o Retract Limit = Short |
Legge i limiti di corsa massimi e minimi |
|
myServo.ResolutionFactor(ID_NUM) |
ID_NUM |
Legge il fattore di risoluzione del servomotore |
|
myServo.movingSpeed(ID_NUM) |
ID_NUM |
Legge il valore della velocità del servomotore |
|
myServo.forceLimit(ID_NUM) |
ID_NUM |
Legge la forza massima del servomotore (impostazione volatile) |
|
myServo.maxForce(ID_NUM) |
ID_NUM |
Legge la forza massima del servomotore (impostazione non volatile) |
Funzioni di scrittura
|
Funzione di scrittura |
Variabile |
Descrizione |
|---|---|---|
|
myServo(&Serial, enable_pin, Tx Level) |
Numero della porta seriale, pin di enable, pin di trasmissione |
Impostazione della porta di comunicazione |
|
myServo.begin(*Baud Setting Value*) |
Baud Setting Value (vedi tabella) |
Baud rate della comunicazione seriale |
|
myServo.ServoID(ID_NUM, ID_Sel) |
ID_NUM, ID_Sel |
Modifica il valore dell’ID del servo |
|
myServo.ledOn(ID_NUM, *LED RGB Value*) |
ID_NUM, LED RBB Value (vedi tabella) |
Accende un LED specificato |
|
myServo.MaxTemperature(ID_NUM, Temperature) |
ID_NUM, Temperature |
Imposta il limite massimo di temperatura |
|
myServo.goalPosition(ID_NUM, *Position Value*) |
ID_NUM, Position Value (vedi tabella) |
Imposta una posizione di corsa desiderata |
|
myServo.limitVolt(ID_NUM, *Highest/Lowest*, LimitVolt) |
ID_NUM, Higher Value = Highest o Lower Value = Lowest, LimitVolt |
Imposta il livello di tensione alto o basso |
|
myServo.alarmLed(ID_NUM, *Alarm Variable*) |
ID_NUM, Alarm Bit |
Impostazione LED di allarme. Vedi tabella per maggiori info. |
|
myServo.alarmShutdown(ID_NUM, *enable*) |
ID_NUM, Enable: 0 = off, 1 = on |
Impostazione di arresto per allarme motore. Se l’allarme si attiva, il motore può essere spento |
|
myServo.StrokeLimit(ID_NUM, *Long/Short*, *Position Value*) |
ID_NUM, Extend Limit = Long o Retract Limit = Short, Position Value (vedi tabella) |
Imposta i limiti di corsa massimo e minimo |
|
myServo.ResolutionFactor(ID_NUM, *Resolution Factor*) |
ID_NUM, Resolution Factor (vedi tabella) |
Imposta il valore di risoluzione per il posizionamento della corsa dell’attuatore. |
|
myServo.movingSpeed(ID_NUM, *Moving Speed Value*) |
ID_NUM, Moving Speed Value (vedi tabella) |
Imposta la velocità del servomotore |
|
myServo.forceLimit(ID_NUM, *Force Value*) |
ID_NUM, Force Value (vedi tabella) |
Imposta la forza massima del servomotore (impostazione volatile) |
|
myServo.maxForce(ID_NUM, *Force Value*) |
ID_NUM, Force Value (vedi tabella) |
Imposta la forza massima del servomotore (impostazione non volatile) |
Impostazioni delle variabili
Le tabelle seguenti contengono i valori delle variabili da inserire nelle funzioni.
Baud rate
|
Valore variabile Baud |
Baud rate |
|
16 |
115200 |
|
32 |
57600 |
|
64 |
19200 |
|
128 |
9600 |
Valore LED
|
Valore LED RGB |
|
RED |
|
GREEN |
|
BLUE |
Servo ID
|
Valore ID servo |
|
0 |
|
1 - 253 |
|
254 |
Per la variabile Servo Motor ID ID_NUM: sono disponibili in totale 255 opzioni. Il valore 0 è l’impostazione predefinita. Puoi selezionare un valore da 1 a 253 per un ID individuale. Il valore 254 è riservato come ID di broadcasting, attivando quindi tutti i PA-12 presenti in una rete.
Impostazioni allarme
|
Tipo di allarme |
Valore impostazione allarme |
|
Errore tensione in ingresso |
0 |
|
Errore limite di corsa |
1 |
|
Errore di intervallo |
3 |
|
Errore di checksum |
4 |
|
Errore di sovraccarico |
5 |
|
Errore di istruzione |
6 |
|
*Riservato* |
7 |
Fattore di risoluzione della corsa
|
Valore del fattore di risoluzione |
Risoluzione |
|
1 |
4096 |
|
2 |
2048 |
|
3 |
1024 |
|
4 |
512 |
Più alto è il valore di risoluzione, maggiore è l’accuratezza di posizionamento.
Velocità di movimento
|
Valore velocità di movimento |
Impostazione di velocità |
|
0 |
Velocità massima |
|
1 - 1023 |
1 = Minima, 1023 = Massima |
Valore della forza
|
Valore della forza |
Impostazione della forza |
|
0 - 1023 |
1 = Minima, 1023 = Massima |
Valore di posizione
|
Valore di posizione |
Posizione |
|
0 - 4095 |
0 = completamente retratto, 4095 = completamente esteso |
Guida al cablaggio
Il PA-12 è collegato al modulo RS-485, che a sua volta è collegato direttamente ad Arduino. Questa versione del PA-12 richiede un alimentatore a 12 VDC per l’alimentazione del servomotore.

| RS-485 lato A | Arduino |
| DI | Pin 1 |
| DE | Pin 2 |
| RE | Pin 2 |
| R0 | Pin 0 |
Il Pin 0 su Arduino è la ricezione TTL. Il Pin 1 su Arduino Leonardo è la trasmissione TTL. Il Pin 2, nei codici di esempio, è impostato come pin di enable.
|
Connettore a 4 pin del PA-12 |
Valore |
|
Nero |
GND |
|
Rosso |
Servomotore +VDC |
|
Bianco |
Pin di comunicazione A |
|
Giallo |
Pin di comunicazione B |

Figura 3- Connessioni porta PA-12
|
RS-485 lato B |
Connessione |
|
VCC1 |
+5 VDC (Arduino) |
|
A |
Filo bianco del PA-12 |
|
B |
Filo giallo del PA-12 |
|
GND2 |
GND dell’alimentatore e GND del PA-12 |
1Il modulo RS-485 riceve alimentazione dall’uscita +5 VDC dell’Arduino.
2La massa è condivisa tra PA-12, alimentatore e modulo RS-485.
Codice di esempio
In questo tutorial mostriamo tre codici di esempio che forniscono un’introduzione ad alcune funzionalità del PA-12 e a come le funzioni di scrittura e lettura possono essere implementate nel tuo codice.
- PA12_PresentPosition
- PA12_StrokeLimit
- PA12_ForceLimit
1. Present Position
In questo codice, l’utente inserirà nel monitor seriale il valore di posizione desiderato tra 0 e 4095. Una volta inserito, il comando viene inviato al PA-12, che attiverà il servomotore per portare la stanga alla posizione desiderata. Durante il movimento del motore, la posizione attuale verrà visualizzata fino al raggiungimento della posizione finale.

2. Stroke Limit
In questo codice, il PA-12 cicla ogni 1000 ms tra i parametri di limite di estensione e retrazione inseriti. Le designazioni Long e Short presenti nella funzione stroke limit

3. Force Limit
Il codice del limite di forza mostrato qui è la versione volatile. Ciò significa che ogni volta che il PA-12 perde alimentazione, il valore del limite di forza viene reimpostato al valore predefinito. L’utente inserirà il valore del limite di forza dal monitor seriale. In questo caso, il valore 0 indica una forza bassa e 1023 indica una forza massima.

Prossimi tutorial
Nei prossimi tutorial tratteremo:
- Implementazione di funzioni avanzate
- Controllo PA-12 versione TTL e PWM
- Tecniche di risoluzione dei problemi
- Metodi di controllo esterni
Il PA-12 è un attuatore versatile e altamente preciso che permette all’utilizzatore di ottenere un controllo diretto sulla propria applicazione. Con la giusta implementazione, il PA-12 è in grado di soddisfare esattamente i requisiti del tuo sistema.
Per ulteriori informazioni, inviaci un’e-mail a sales@progressiveautomations.com o chiama il nostro team al 1-800-676-6123.