Getting Started with Arduino and PA-12

Primi passi con Arduino e PA-12

Anna Sapiga
Anna Sapiga
PA Engineer

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.

Arduino Module

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

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.

Arduino Library

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.

Servo Motor

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

 

Connessioni porta - PA-12

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.

  1. PA12_PresentPosition
  2. PA12_StrokeLimit
  3. 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. 

Arduino Code

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

Arduino Code

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.

Arduino Code

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.