Getting Started with Arduino and PA-12

Primeros pasos con Arduino y PA-12

Anna Sapiga
Anna Sapiga
PA Engineer

El PA-12 es un actuador de alta precisión que puede controlarse con Arduino. Esta guía de introducción al PA-12 presentará métodos de control e implementación con la API de Arduino del PA-12.

Existen dos versiones del PA-12. El PA-12-R tiene un servomotor DC sin núcleo y protocolo de comunicación RS-485. El PA-12-T tiene un servomotor DC con núcleo y protocolo de comunicación TTL/PWM.

Comenzar con el PA-12 y Arduino dependerá de la versión del PA-12 que se implemente. En este tutorial se usa el PA-12-10645012R – carrera de 1.06”, 4.50 LBS de fuerza, motor DC sin núcleo de 12VDC. El motor sin núcleo indica que el protocolo de comunicación de este actuador es RS-485.

El Arduino Leonardo/Uno no tiene protocolo de comunicación RS-485, pero sí cuenta con TTL. En este tutorial usaremos un módulo TTL a RS-485 para comunicarnos con el actuador lineal mediante Arduino.

Módulo de Arduino

Figura 1 - Módulo Arduino RS-485 a TTL


Operación de control del PA-12

El PA-12 se controla directamente con paquetes de datos enviados mediante comunicación TTL o RS-485. Cada paquete contiene información que se utiliza para ejecutar una función del PA-12 o para recibir el estado actual del dispositivo. El estado actual puede incluir, por ejemplo, el ID del servo, el valor de voltaje, la posición de la varilla del actuador, etc.

Equipos y software

API del PA-12

La API del PA-12 se puede descargar aquí. Esta API contiene los siguientes archivos y carpetas:

  • PA12.ino
    • Contiene las estructuras de comandos del PA-12 y las funciones que transfieren y reciben datos hacia/desde el PA-12
    • Todas las funciones que se usan en los códigos de ejemplo o que implementará en su propio código se guardan en este archivo
  • PA12.h
    • El archivo de cabecera contiene el protocolo de comunicación y los archivos de cabecera de comunicación serial
    • Incluye las declaraciones de funciones y variables para todas las características y funcionalidades del PA12
    • setPosition, ServoID, presentSpeed, forceEnable
  • Archivos de utilidad
  • Códigos de ejemplo
    • El código de ejemplo puede utilizarse para implementar fácilmente el control del PA-12 en su propio sistema
    • Todos los códigos de ejemplo están programados para usar con Arduino Leonardo; sin embargo, las variables usadas para los pines de transmisión y recepción pueden modificarse para ser compatibles con el microcontrolador/Arduino que ya tenga

Para importar la biblioteca PA12

Seleccione ‘Sketch’ --> Include Library --> Add.ZIP Library. Todos los archivos ubicados en la carpeta PA12 se importarán directamente a la biblioteca de Arduino del actuador lineal. Esto le permitirá usar las funciones de PA12 para controlar el actuador.

Biblioteca de Arduino

Figura 2 - Importación de biblioteca de Arduino


Comandos disponibles para el PA-12

A continuación se muestra una tabla de comandos. Para más información sobre los comandos, revise el PA12.ino para detalles de codificación. En este tutorial cubriremos los comandos básicos. En futuros tutoriales se incluirán funciones y técnicas de control más avanzadas.

Funciones de lectura

Las funciones de la tabla a continuación son solo de lectura y devuelven un valor.

Función de lectura

Variable

Descripción

myServo.getModelNumber(ID_NUM)

ID_NUM

Número de modelo del PA-12

myServo.Version(ID_NUM)

ID_NUM

Número de versión del motor del PA-12

myServo.CalStroke (ID_NUM, *Length*)

ID_NUM, Length = Short, Long o Center

Comprobación de calibración de posición de carrera

myServo.presentVolt((ID_NUM)/10)

ID_NUM

Comprobación de voltaje de entrada

myServo.presentTemperature(ID_NUM)

ID_NUM

Temperatura actual del motor

myServo.MaxTemperature(ID_NUM)

ID_NUM

Lee el límite máximo de temperatura

myServo.presentPosition(ID_NUM)

ID_NUM

Posición actual del actuador

myServo.moving(ID_NUM)

ID_NUM

Valor devuelto del estado del motor. 1 = En movimiento, 0 = Detenido

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

ID_NUM,  Nivel de alto voltaje = Highest o Nivel de bajo voltaje = Lowest

Leer la configuración de voltaje alto o bajo

myServo.alarmLed(ID_NUM)

ID_NUM

Lee el estado del LED de alarma. 1 = Encendido, 0 = Apagado

myServo.alarmShutdown(ID_NUM)

ID_NUM

Lee el estado del modo de apagado por alarma

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

ID_NUM, Límite de extensión = Long o Límite de retracción = Short

Lee los límites máximo y mínimo de carrera

myServo.ResolutionFactor(ID_NUM)

ID_NUM

Lee el factor de resolución del servomotor

myServo.movingSpeed(ID_NUM)

ID_NUM

Lee el valor de la velocidad del servomotor

myServo.forceLimit(ID_NUM)

ID_NUM

Lee la fuerza máxima del servomotor (ajuste volátil)

myServo.maxForce(ID_NUM)

ID_NUM

Lee la fuerza máxima del servomotor (ajuste no volátil)

Funciones de escritura

Función de escritura

Variable

Descripción

myServo(&Serial, enable_pin, Tx Level)

Número de puerto serie, pin de habilitación, pin de transmisión

Configuración del puerto de comunicación

myServo.begin(*Baud Setting Value*)

Valor de ajuste de baudios (Consulte la tabla)

Velocidad en baudios de la comunicación serial

myServo.ServoID(ID_NUM, ID_Sel)

ID_NUM, ID_Sel

Cambiar el valor del ID del servo

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

ID_NUM, LED RBB Value (Consulte la tabla)

Enciende un LED específico

myServo.MaxTemperature(ID_NUM, Temperature)

ID_NUM, Temperature

Escribe el límite máximo de temperatura

myServo.goalPosition(ID_NUM, *Position Value*)

ID_NUM, Position Value (Consulte la tabla)

Establecer una posición de carrera deseada

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

ID_NUM, Valor más alto = Highest o Valor más bajo = Lowest, LimitVolt

Establecer la configuración de voltaje alto o bajo

myServo.alarmLed(ID_NUM, *Alarm Variable*)

ID_NUM, bit de alarma

Configuración del LED de alarma. Consulte la tabla para más información.

myServo.alarmShutdown(ID_NUM, *enable*)

ID_NUM, Enable: 0 = apagado, 1 = encendido

Ajuste de apagado por alarma del motor. Si la alarma se activa, se puede apagar el motor

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

ID_NUM, Límite de extensión = Long o Límite de retracción = Short, Position Value (Consulte la tabla)

Escribe los límites máximo y mínimo de carrera

myServo.ResolutionFactor(ID_NUM, *Resolution Factor*)

ID_NUM, Resolution Factor (Consulte la tabla)

Establece el valor de resolución para el posicionamiento de la carrera del actuador.

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

ID_NUM, Moving Speed Value (Consulte la tabla)

Establece la velocidad del servomotor

myServo.forceLimit(ID_NUM, *Force Value*)

ID_NUM, Force Value (Consulte la tabla)

Establece la fuerza máxima del servomotor (ajuste volátil)

myServo.maxForce(ID_NUM, *Force Value*)

ID_NUM, Force Value (Consulte la tabla)

Establece la fuerza máxima del servomotor (ajuste no volátil)


Configuración de variables

Las tablas a continuación contienen el valor de variable que se ingresará en las funciones.

Velocidad en baudios

Valor de variable de baudios

Velocidad en baudios

16

115200

32

57600

64

19200

128

9600


Valor de LED

Valor RGB del LED

RED

GREEN

BLUE


ID del servo

Valor de ID del servo

0

1 - 253

254


Para la variable ID_NUM del servomotor: hay un total de 255 opciones disponibles. El valor 0 es la configuración predeterminada. Puede seleccionar un valor de 1 a 253 para un ID individual. El valor 254 está reservado para un ID de difusión, activando por lo tanto todos los PA-12 presentes en una red.

Configuración de alarmas

Ajuste de alarma

Valor del ajuste de alarma

Error de voltaje de entrada

0

Error de límite de carrera

1

Error de rango

3

Error de suma de comprobación

4

Error por sobrecarga

5

Error de instrucción

6

*Reservado*

7

Factor de resolución de carrera

Valor del factor de resolución

Resolución

1

4096

2

2048

3

1024

4

512


Cuanto mayor sea el valor de resolución, mayor será la precisión posicional. 

Velocidad de movimiento

Valor de velocidad de movimiento

Ajuste de velocidad

0

Velocidad máxima

1 - 1023

1 = Más baja, 1023 = Más alta


Valor de fuerza

Valor de fuerza

Ajuste de fuerza

0 - 1023

1 = Más baja, 1023 = Más alta


Valor de posición

Valor de posición

Posición

0 - 4095

0 = Totalmente retraído, 4095 = Totalmente extendido


Guía de cableado

El PA-12 se conecta al módulo RS-485, que a su vez se conecta directamente al Arduino. Esta versión del PA-12 requiere una fuente de alimentación de 12VDC para alimentar el servomotor.

Servomotor

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

 

El pin 0 del Arduino es el de recepción TTL. El pin 1 del Arduino Leonardo es el de transmisión TTL. En los códigos de ejemplo, el pin 2 está configurado para usarse como pin de habilitación.

Conector de 4 pines del PA-12

Valor

Negro

GND

Rojo

+VDC del servomotor

Blanco

Pin de comunicación A

Amarillo

Pin de comunicación B

 

Conexiones de puerto - PA-12

Figura 3- Conexiones de puertos del PA-12

Lado RS-485 B

Conexión

VCC1

+5VDC (Arduino)

A

Cable blanco del PA-12

B

Cable amarillo del PA-12

GND2

GND de la fuente de alimentación y GND del PA-12

1El módulo RS-485 recibe alimentación de la salida de +5VDC del Arduino.

2La tierra (GND) se comparte entre el PA-12, la fuente de alimentación y el módulo RS-485.

Código de ejemplo

En este tutorial mostraremos tres códigos de ejemplo que brindan una visión preliminar de algunas funciones del PA-12 y cómo se pueden implementar en su propio código las funciones de escritura y lectura.

  1. PA12_PresentPosition
  2. PA12_StrokeLimit
  3. PA12_ForceLimit

1. Posición actual

En este código, el usuario ingresará el valor de posición deseado entre 0 y 4095 en el monitor serial. Una vez ingresado, se envía el comando al PA-12, que activará el servomotor para mover la varilla a la posición deseada. Mientras el motor está en movimiento, se mostrará la posición actual hasta que se alcance la posición final. 

Código de Arduino

2. Límite de carrera

En este código, el PA-12 cicla cada 1000 ms dentro de los parámetros de límite de extensión y retracción ingresados. Las designaciones Long y Short ubicadas en la función de límite de carrera

Código de Arduino

3. Límite de fuerza

El código de límite de fuerza que se muestra aquí es la versión volátil. Esto significa que cada vez que el PA-12 pierde la alimentación, el valor del límite de fuerza se restablece a su configuración predeterminada. El usuario ingresará el valor del límite de fuerza desde el monitor serial. En este caso, el valor de fuerza de 0 indica una fuerza baja y 1023 indica una fuerza máxima.

Código de Arduino

Próximos tutoriales

En futuros tutoriales cubriremos:

  • Implementación de funciones avanzadas
  • Control del PA-12 versión TTL y PWM
  • Técnicas de solución de problemas
  • Métodos de control externos

El PA-12 es un actuador versátil y muy preciso que permite al usuario final lograr un control directo sobre su aplicación. Con la implementación adecuada, el PA-12 puede cumplir exactamente con los requisitos de su sistema.

Para más información, envíenos un correo electrónico a sales@progressiveautomations.com o llame a nuestro equipo al 1-800-676-6123.