Getting Started with Arduino and PA-12

Primeiros passos com Arduino e PA-12

Anna Sapiga
Anna Sapiga
PA Engineer

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.

Módulo Arduino

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

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.

Biblioteca do Arduino

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.

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

Conexões de portas - PA-12

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.

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

Código Arduino

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

Código Arduino

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.

Código Arduino

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.