O PA-12 é um atuador de alta precisão que pode ser controlado com Arduino. Este guia de introdução ao PA-12 apresentará métodos de controle e implementação com a API Arduino do PA-12.
Há duas versões do PA-12. O PA-12-R tem um motor servo CC sem núcleo e protocolo de comunicação RS-485. O PA-12-T tem um motor servo CC com núcleo e protocolo de comunicação TTL/PWM.
Começar com o PA-12 e o Arduino dependerá da versão do PA-12 que está sendo implementada. Neste tutorial, é utilizado o PA-12-10645012R – Recorrido de 1,06”, 4,50 lbf de força, motor CC sem núcleo de 12 VCC. O motor sem núcleo indica que o protocolo de comunicação deste atuador é RS-485.
O Arduino Leonardo/Uno não possui protocolo de comunicação RS-485, mas possui TTL. Utilizaremos um módulo TTL para RS-485 para nos comunicar com o atuador linear no Arduino neste tutorial.

Figura 1 - Módulo Arduino RS-485 para TTL
Operação de controle do PA-12
O PA-12 é controlado diretamente com pacotes de dados enviados por comunicação TTL ou RS-485. Cada pacote de dados contém informações usadas para executar uma determinada função do PA-12 ou para receber o estado atual do dispositivo. O estado atual do dispositivo pode ser, por exemplo, o ID do servo, o valor de tensão, a posição da haste do atuador, etc.
Equipamentos e software
- Arduino Leonardo
- Módulo TTL para RS-485
- Atuador PA-12-10645012R
- Fonte de alimentação +12 VCC
- Cabos jumper
- IDE do Arduino
- API Arduino do PA-12
API do PA-12
A API do PA-12 pode ser baixada aqui. Esta API contém os seguintes arquivos e pastas:
- PA12.ino
- Contém as estruturas de comando do PA-12 e funções que transferem e recebem dados de e para o PA-12
- Todas as funções usadas nos códigos de exemplo ou que serão implementadas no seu código são armazenadas neste arquivo
- PA12.h
- O arquivo de cabeçalho contém o protocolo de comunicação e os arquivos de cabeçalho de comunicação serial
- Contém declarações de funções e variáveis para todos os recursos e funcionalidades do PA12
- setPosition, ServoID, presentSpeed, forceEnable
- Arquivos utilitários
- Códigos de exemplo
- O código de exemplo pode ser usado para implementar facilmente o controle do PA-12 no seu próprio sistema
- Todos os códigos de exemplo são programados para uso com o Arduino Leonardo; no entanto, as variáveis usadas para os pinos de transmissão e recepção podem ser alteradas para serem compatíveis com o microcontrolador/Arduino que você já possui
Para importar a biblioteca PA12
Selecione ‘Sketch’ --> Include Library --> Add .ZIP Library. Todos os arquivos localizados na pasta PA12 serão importados diretamente para a biblioteca do Arduino do atuador linear. Isso permitirá que você use as funções do PA12 para controlar o atuador.

Figura 2 - Importação da biblioteca do Arduino
Comandos disponíveis para o PA-12
Uma tabela de comandos é exibida abaixo. Para mais informações sobre os comandos, revise o PA12.ino para obter detalhes de codificação. Vamos abordar os comandos básicos neste tutorial. Tutoriais futuros incluirão funções e técnicas de controle mais avançadas.
Funções de leitura
As funções localizadas na tabela abaixo são apenas leitura e retornam um valor.
|
Função de leitura |
Variável |
Descrição |
|---|---|---|
|
myServo.getModelNumber(ID_NUM) |
ID_NUM |
Número do modelo do PA-12 |
|
myServo.Version(ID_NUM) |
ID_NUM |
Número da versão do motor do PA-12 |
|
myServo.CalStroke (ID_NUM, *Length*) |
ID_NUM, Length = Short, Long, or Center |
Verificação de calibração da posição de Recorrido |
|
myServo.presentVolt((ID_NUM)/10) |
ID_NUM |
Verificação da tensão de entrada |
|
myServo.presentTemperature(ID_NUM) |
ID_NUM |
Temperatura atual do motor |
|
myServo.MaxTemperature(ID_NUM) |
ID_NUM |
Ler o limite máximo de temperatura |
|
myServo.presentPosition(ID_NUM) |
ID_NUM |
Posição atual do atuador |
|
myServo.moving(ID_NUM) |
ID_NUM |
Valor retornado do status do motor. 1 = Em movimento, 0 = Parado |
|
myServo.limitVolt(ID_NUM, *Highest/Lowest*) |
ID_NUM, Nível de Tensão Alta = Mais alto ou Nível de Tensão Baixa = Mais baixo |
Ler a configuração de tensão alta ou baixa |
|
myServo.alarmLed(ID_NUM) |
ID_NUM |
Lê o status do LED de alarme. 1 = LIGADO, 0 = Desligado |
|
myServo.alarmShutdown(ID_NUM) |
ID_NUM |
Lê o status do modo de desligamento por alarme |
|
myServo.StrokeLimit(ID_NUM, *Long/Short*) |
ID_NUM, Limite de Extensão = Long ou Limite de Retração = Short |
Lê os limites máximo e mínimo de Recorrido |
|
myServo.ResolutionFactor(ID_NUM) |
ID_NUM |
Lê o fator de resolução do motor de servo |
|
myServo.movingSpeed(ID_NUM) |
ID_NUM |
Lê o valor da Velocidade do motor de servo |
|
myServo.forceLimit(ID_NUM) |
ID_NUM |
Lê a força máxima do motor de servo (Configuração volátil) |
|
myServo.maxForce(ID_NUM) |
ID_NUM |
Lê a força máxima do motor de servo (Configuração não volátil) |
Funções de escrita
|
Função de escrita |
Variável |
Descrição |
|---|---|---|
|
myServo(&Serial, enable_pin, Tx Level) |
Número da porta serial, pino de habilitação, pino de transmissão |
Configuração da porta de comunicação |
|
myServo.begin(*Baud Setting Value*) |
Valor de configuração de baud (consulte a tabela) |
Taxa de baud da comunicação serial |
|
myServo.ServoID(ID_NUM, ID_Sel) |
ID_NUM, ID_Sel |
Alterar o valor de ID do servo |
|
myServo.ledOn(ID_NUM, *LED RGB Value*) |
ID_NUM, Valor de LED RBB (consulte a tabela) |
Liga um LED específico |
|
myServo.MaxTemperature(ID_NUM, Temperature) |
ID_NUM, Temperature |
Escreve o limite máximo de temperatura |
|
myServo.goalPosition(ID_NUM, *Position Value*) |
ID_NUM, Position Value (consulte a tabela) |
Definir uma posição de Recorrido desejada |
|
myServo.limitVolt(ID_NUM, *Highest/Lowest*, LimitVolt) |
ID_NUM, Valor superior = Mais alto ou Valor inferior = Mais baixo, LimitVolt |
Definir a configuração de tensão alta ou baixa |
|
myServo.alarmLed(ID_NUM, *Alarm Variable*) |
ID_NUM, Alarm Bit |
Configuração do LED de alarme. Consulte a tabela para mais informações. |
|
myServo.alarmShutdown(ID_NUM, *enable*) |
ID_NUM, Enable: 0 = off, 1 = on |
Configuração de desligamento do motor por alarme. Se o alarme for ativado, o motor pode ser desligado |
|
myServo.StrokeLimit(ID_NUM, *Long/Short*, *Position Value*) |
ID_NUM, Limite de Extensão = Long ou Limite de Retração = Short, Position Value (consulte a tabela) |
Escreve os limites máximo e mínimo de Recorrido |
|
myServo.ResolutionFactor(ID_NUM, *Resolution Factor*) |
ID_NUM, Resolution Factor (consulte a tabela) |
Define o valor de resolução para o posicionamento do Recorrido do atuador. |
|
myServo.movingSpeed(ID_NUM, *Moving Speed Value*) |
ID_NUM, Moving Speed Value (consulte a tabela) |
Define a Velocidade do motor de servo |
|
myServo.forceLimit(ID_NUM, *Force Value*) |
ID_NUM, Force Value (consulte a tabela) |
Define a força máxima do motor de servo (Configuração volátil) |
|
myServo.maxForce(ID_NUM, *Force Value*) |
ID_NUM, Force Value (consulte a tabela) |
Define a força máxima do motor de servo (Configuração não volátil) |
Configurações de variáveis
As tabelas abaixo contêm o valor da variável que será inserido nas funções.
Taxa de baud
|
Valor da variável de baud |
Taxa de baud |
|
16 |
115200 |
|
32 |
57600 |
|
64 |
19200 |
|
128 |
9600 |
Valor de LED
|
Valor de LED RGB |
|
VERMELHO |
|
VERDE |
|
AZUL |
ID do servo
|
Valor de ID do servo |
|
0 |
|
1 - 253 |
|
254 |
Para a variável de ID do motor de servo ID_NUM: Há um total de 255 opções disponíveis. O valor 0 é a configuração padrão. Você pode selecionar um valor de 1 a 253 para um ID individual. O valor 254 é reservado para uma ID de transmissão, ativando, portanto, todos os PA-12 localizados em uma rede.
Configurações de alarme
|
Configuração de alarme |
Valor de configuração de alarme |
|
Erro de tensão de entrada |
0 |
|
Erro de limite de Recorrido |
1 |
|
Erro de faixa |
3 |
|
Erro de checksum |
4 |
|
Erro de sobrecarga |
5 |
|
Erro de instrução |
6 |
|
*Reservado* |
7 |
Fator de resolução do Recorrido
|
Valor do fator de resolução |
Resolução |
|
1 |
4096 |
|
2 |
2048 |
|
3 |
1024 |
|
4 |
512 |
Quanto maior o valor de resolução, maior a precisão posicional.
Velocidade de movimento
|
Valor de Velocidade de movimento |
Ajuste de Velocidade |
|
0 |
Velocidade máxima |
|
1 - 1023 |
1 = Mais baixa, 1023 = Mais alta |
Valor de força
|
Valor de força |
Ajuste de força |
|
0 - 1023 |
1 = Mais baixa, 1023 = Mais alta |
Valor de posição
|
Valor de posição |
Posição |
|
0 - 4095 |
0 = Totalmente recolhido, 4095 = Totalmente estendido |
Guia de cabeamento
O PA-12 é conectado ao módulo RS-485, que então é conectado diretamente ao Arduino. Esta versão do PA-12 requer uma fonte de alimentação de 12 VCC para a alimentação do motor de servo.

| Lado A RS-485 | Arduino |
| DI | Pino 1 |
| DE | Pino 2 |
| RE | Pino 2 |
| R0 | Pino 0 |
O pino 0 no Arduino é o RX TTL. O pino 1 no Arduino Leonardo é o TX TTL. O pino 2, nos códigos de exemplo, é configurado para ser usado como pino de habilitação.
|
Conector de 4 pinos do PA-12 |
Valor |
|
Preto |
GND |
|
Vermelho |
Motor de servo +VCC |
|
Branco |
Pino de comunicação A |
|
Amarelo |
Pino de comunicação B |

Figura 3- Conexões de portas do PA-12
|
Lado B RS-485 |
Conexão |
|
VCC1 |
+5 VCC (Arduino) |
|
A |
Fio branco do PA-12 |
|
B |
Fio amarelo do PA-12 |
|
GND2 |
GND da fonte de alimentação e GND do PA-12 |
1O módulo RS-485 recebe alimentação da saída +5 VCC do Arduino.
2O terra é compartilhado entre o PA-12, a fonte de alimentação e o módulo RS-485.
Código de exemplo
Neste tutorial, exibiremos três códigos de exemplo que fornecem uma visão preliminar de alguns dos recursos do PA-12 e como as funções de escrita e leitura podem ser implementadas no seu próprio código.
- PA12_PresentPosition
- PA12_StrokeLimit
- PA12_ForceLimit
1. Posição atual
Neste código, o usuário inserirá o valor de posição desejado entre 0 e 4095 no monitor serial. Uma vez inserido, o comando é enviado ao PA-12, que então ativará o motor de servo para mover a haste para a posição desejada. Enquanto o motor estiver em movimento, a posição atual será exibida até que a posição final seja atingida.

2. Limite de Recorrido
Dentro deste código, o PA-12 cicla a cada 1000 ms dentro dos parâmetros de limite de extensão e retração inseridos. As designações Long e Short localizadas na função de limite de Recorrido

3. Limite de força
O código de limite de força exibido aqui é a versão volátil. Isso significa que, cada vez que o PA-12 perde energia, o valor do limite de força será redefinido para sua configuração padrão. O usuário inserirá o valor do limite de força pelo monitor serial. Neste caso, o valor máximo de força de 0 significa um valor de força baixo, e 1023 significa um valor de força máximo.

Tutoriais futuros
Nos próximos tutoriais, abordaremos:
- Implementação de funções avançadas
- Controle do PA-12 versão TTL e PWM
- Técnicas de solução de problemas
- Métodos de controle externo
O PA-12 é um atuador versátil e altamente preciso que permite ao usuário final obter controle direto sobre sua aplicação. Com a implementação correta, o PA-12 é capaz de atender exatamente aos requisitos do seu sistema.
Para informações adicionais, envie-nos um e-mail para sales@progressiveautomations.com, ou ligue para nossa equipe no 1-800-676-6123.