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.

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
- Arduino Leonardo
- Módulo TTL a RS-485
- Actuador PA-12-10645012R
- Fuente de alimentación +12VDC
- Cables puente
- IDE de Arduino
- API de Arduino del PA-12
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.

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.

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

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

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

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.

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.