Escolar Documentos
Profissional Documentos
Cultura Documentos
www.hiwinmikro.com.tw
HIWIN SERVO MOTOR MANUAL PDL
Sumário
Prefácio .......................................................................................................... 2
1 : Homing index ............................................................................................ 3
Instruções para utilização : ......................................................................... 3
Notas da Aplicação: ..................................................................................... 4
2 : Parada forçada por colisão e homing ........................................................ 5
Instruções para utilização: .......................................................................... 6
Notas da Aplicação: ..................................................................................... 7
3 : Pulso na I/O move o motor a uma distância fixa....................................... 8
Instruções para utilização: .......................................................................... 9
Notas da Aplicação: ..................................................................................... 9
4 : Conversão de unidades ........................................................................... 10
Instruções para utilização: ........................................................................ 11
Notas da Aplicação: ................................................................................... 11
5 : Função grava e busca posição ................................................................. 12
Instruções para utilização: ........................................................................ 13
Notas da Aplicação: ................................................................................... 14
6 : Movimento continuo (JOG) ..................................................................... 15
Instruções para utilização: ........................................................................ 15
Notas da Aplicação: ................................................................................... 16
Prefácio
Servo motor
Torque constante em toda faixa de velocidade
Baixa inércia do rotor
Alta capacidade de sobrecarga
Alta rigidez no eixo
Precisão no posicionamento e encoder de alta resolução
Respostas rápidas no movimento e na aceleração
Servo Drive
Supressão de ruídos
E-gear e emulador de encoder
Software de fácil parametrização
Tamanho compacto
Auto-tuning de ganhos
Compensação de backlash em fusos de esferas
Monitoração em tempo real
Programação PDL
PDL(Process Description Language) é uma linguagem de programação simples usada para escrever
programas PDL que rodam nos controladores HIWIN.
O programa PDL é escrito no host (PC) por qualquer editor de texto padrão (*.txt). Este arquivo é compilado
(*.pdl) e enviado para o drive. O processador do software pode manipular todas as variáveis do driver (controle do
motor, I/O, comunicação, velocidade, rampas, etc) e também interpretar um PDL compilado armazenado na
memória flash.
Os principais recursos do PDL são:
Multitasking – recurso para rodar várias tasks em paralelo. (até 4 tasks)
Variáveis de usuário são definidas (nome, tipo, tamanho) dentro do programa.
Suporta arrays e pointers.
Procedimentos com parâmetros.
Loop, while, if, else, till, goto comandos para controlar o nível do programa.
Funções matemáticas.
Lock, Unlock – comandos para realizar sincronização de tasks.
Capacidade de memória para o código é de até 128 Kbytes.
Capacidade de memória para variáveis de usuário de até 16000 long words.
1 : Homing index
Número do programa : 1
Nome do arquivo : 1.pdl
Drive aplicável : Drive série D2
Versão do software : Lightening 0.177
Firmware do drive : FR 0.031
Função : Após um pulso de um controlador externo na entrada digital I2 inicia-se a função homing.
Quando home estiver OK a saída digital O2 envia um pulso de resposta para o controlador
externo.
Entrada utilizada : I2
Saída utilizada : O2
Programa :
// =============================macros===================================================
#define pulse_width 20 // Define a largura do pulso de saída (ms)
// =============================programa principal=========================================
#task/1; // estabelece a serie de tarefas como task 1
_input_home_loop:
till(~I2); // I2 aguarda em estado OFF
setoff O2; // O2 e definida no estado OFF
till(I2); // Aguarde ate que o I2 fique ON
call _go_home;
goto _input_home_loop;
ret;
// =========== procedimento de homing ==============
_go_home:
call _X_init_exec; // Chama o recurso homing interno no software do drive
sleep 100; // Atraso de 100 ms
till(X_I_flag<>1); // Espera a funcao de homing terminar
if(X_I_flag<>2) do // Se o flag X_I_flag nao for 2, entao indica falha no homing
retprintl/101("Falha no processo de homing.");
goto _input_home_loop;
end;
// após homing OK, pulso de saída para controlador externo
seton O2; // O2 esta definido em estado ON
sleep pulse_width; // Atraso de uma largura de pulso definida
setoff O2; // O2 e definido no estado OFF
ret;
Notas da Aplicação:
Antes de entrar no programa principal, declaramos a tarefa numero um como #task/1 com o objetivo de o
usuário trabalhar com a função multitarefas. O aplicativo PDL pode executar simultaneamente até quatro tarefas
(codificadas de 0 a 3), onde 0 é a tarefa de sistema (sys.pdl) e as restantes (1 a 3) podem ser alteradas livremente
pelo usuário.
No software do drive, a função _X_init_exec é caracterizada como a função de homing. Ao ser executada, ele
realiza o movimento busca de posição home. Os parâmetros referentes a essa função estão definidos na janela
HOMING da pagina APPLICATION CENTER, conforme mostrado na figura 1.1.
Figura 1.1
Também no programa de exemplo, é usado no homing um flag X_I_flag variável, que indica o status atual do
homing, como mostra a Tabela 1-1.
Ao utilizar entradas digitais na aplicação PDL desencadeando eventos, o usuário deve defini-las como ”Not
Configured” para evitar conflitos com a função.
No programa de exemplo, a largura de pulso (pulse width) é definida pelo usuário com a intenção de
prolongar o tempo do sinal recebido pelo controlador externo a fim de evitar erros.
Passo 2: Clique
nesse botão para
Passo 3: Clique nesse botão para abrir a abrir a janela Plot
tabela de estatísticas. view.
Figura 2.1
O valor de corrente não pode ser definido muito alto, caso contrário, a colisão da parada forçada pode danificar o
equipamento.
Notas da Aplicação:
Caso o usuário necessite usar um fim de curso para dar um pulso, poderá fazer uma pequena alteração no
programa e nas configurações das entradas digitais.
1. Configuração no software:
No I/O center defina Limit Switch nas configurações das entradas digitais, como mostrado na figura abaixo:
Figura 2.2
2. Configuração no programa:
Uma vez configurada a entrada I6 como Left Limit Switch, seguem as modificações a serem feitas:
till (X_curr_abs > CurrThreshold); modificado para till (I6);
Ou a entrada I9, caso o motor estiver girando para o outro lado. Lembrando que essas funções podem ser
configuradas em qualquer entrada, não necessariamente I6 e I9, e não é necessário definir o limite atual. Além disso,
o programa usa as funções X_stop, para parada do motor e X_index_vel, para definir a velocidade e a direção da
função homing. No exemplo, o código X_stop=1 é o comando que para o motor, e a instrução X_index_vel é o valor
do campo de velocidade slower speed, mostrado na figura 1.1.
goto _trigger_loop;
ret;
Notas da Aplicação:
No programa PDL, a instrução X_trg executa um movimento em coordenada absoluta. Se o feedback do
valor atual do encoder for diferente ao do solicitado pelo movimento, o motor move-se para posição X_trg. Além
disso, pode-se alterar o valor do deslocamento durante o funcionamento do programa.
Quando o usuário necessita a função X_trg para obter movimento em coordenadas relativas, é necessário
escrever no programa uma posição de referência. Os dois exemplos a seguir ilustram uma posição de referencia
utilizando uma posição de feedback:
o X_trg = X_enc_pos + distance;
o X_trg = X_ref_pos + distance;
No primeiro exemplo, poderá ocorrer um erro acumulado de posicionamento porque entre o tempo de um
comando e outro pode haver mudanças nos valores de referencia de posicionamento do encoder, que devido a
imperfeições no sistema mecânico ou pequenas variações de posição do eixo do motor acarretam erros cumulativos
na leitura do encoder dentro do programa PDL.
Portanto, ao trabalhar com a função X_trg no PDL com coordenadas relativas, é recomendado utilizar o
segundo exemplo (posição de referência) para evitar esses problemas.
4 : Conversão de unidades
Numero do programa : 4
Nome do arquivo : 4.pdl
Drive aplicável : Drive série D2
Versão do software : Lightening 0.177
Firmware do drive : FR 0.031
Função : As unidades mm e graus(deg) serão convertidas para count, afim de facilitar os cálculos para
trabalhar com os motore e suas relações.
Entrada utilizada : nenhuma
Saída utilizada : nenhuma
Programa :
// =============================macros==================================================
#define distance 45 // Defina a distancia percorrida (mm ou deg)
// =============================programa principal=========================================
// Quando utilizar motor linear, a conversao sera de mm para count
// Quando utilizar AC servo motor com fuso de esferas, conversao do passo em mm para count
// Quando utilizar Torque motor, conversao de graus (deg) para count
// ===============================================================
#task/1; // Estabelece a serie de tarefas como task 1
#float LMCntPerMM;
#float disTemp;
Notas da Aplicação:
Neste programa de exemplo, há um registro interno com unidade variável que indica o passo do fuso numa
configuração de AC Servo Motor: X_pitchScrew
Além disso, o registro X_rotaryType indica a escolha do motor padrão, como mostrado na tabela 4-1:
Também nesse exemplo é utilizado o registro interno X_cntperunit, que é a variável da resolução do
encoder. A definição dessa variável vai muda segundo os diferentes tipos de motores, como mostrado na Tabela 4-2:
// =============================macros==================================================
#define BufferSize 4 // Define o tamanha do registro de gravacao
// =============================variáveis globais===========================================
#short BufferNum; // Valor do indice do registro de busca
#long PosBuff[BufferSize]; // Registro de Localizacao, utilizado para armazenar as posicoes
// =============================programa principal=========================================
#task/1; // Estabelece a serie de tarefas como task 1
BufferNum=0; // Posicao inicial do registrador de indice
_trigger_loop:
if (I2) do // Quando I2 em estado on, a posicao atual e gravada
call _PosMem; // Chama a sub-rotina que grava posicao de memoria
till (~I2);
end;
if (I6) do
if (X_en=0) do // Motor nao habilitado
printl/101("Motor nao habilitado!"); // Imprime mensagem de aviso
till (~I6);
goto _trigger_loop; // Espera I6=0 para voltar ao inicio
end;
call _Move2Tar; // Chama sub-rotina que move para posicao gravada
till (~I6);
end;
goto _trigger_loop;
ret;
// ==============Programa PosMem======================
// Descrição: grava a posição nos registros específicos
_PosMem:
#long posTemp;
posTemp=X_enc_pos;
PosBuff[BufferNum]= posTemp; // A posicao de feedback do encoder e armazenada
printl/103("Ponto %ld, Posicao=%ld ",BufferNum, posTemp);
// Imprime o numero da posicao e seu valor
// ==============Programa Move2Tar======================
// Descrição: Com a configuração de I4 e I3, seleciona uma posição para movimento
_Move2Tar:
#short index;
if (~I4 & ~I3) do //(I4,I3) = (0,0)
index =0;
end;
if (~I4 & I3) do //(I4,I3) = (0,1)
index=1;
end;
if (I4 & ~I3) do //(I4,I3) = (1,0)
index=2;
end;
if (I4 & I3) do //(I4,I3) = (1,1)
index=3;
end;
X_trg=PosBuff[index]; // Move motor para posicao requerida
till (~X_run); // Ok quando chega na posicao
printl/103("Move para ponto %ld ended.",index); // Imprime mensagem da posicao escolhida
printl/103("Posicao=%ld",PosBuff[index]); // Imprime mensagem do valor do deslocamento
sleep 100;
ret;
A entrada I2 grava a posição dependendo da quantidade de vezes que for acionada, como mostrado na
tabela 5-2.
Tabela 5-2
Valor do índice Grava a posição
0 Grava o valor do feedback de posição no ponto 0
1 Grava o valor do feedback de posição no ponto 1
2 Grava o valor do feedback de posição no ponto 2
3 Grava o valor do feedback de posição no ponto 3
Esse programa pode gravar até quatro posições. Se I2 for disparada mais de quatro vezes, a partir do
primeiro será gravada a nova posição sobre outra, reiniciando as gravações.
O drive quando reiniciado, as posições necessitam ser gravadas novamente.
As combinações das entradas I4 e I3 carregam a posição definida e um pulso na entrada I6 realiza o
movimento. Essa logica é mostrada na tabela 5-3.
Tabela 5-3
Status da entrada
Ação
I4 I3 I6
OFF OFF Pulso na borda de subida Move para o ponto 0
OFF ON Move para o ponto 1
ON OFF Move para o ponto 2
ON ON Move para o ponto 3
Notas da Aplicação:
Quando trabalhar com entradas digitais na programação PDL, não esquecer de deixar as entradas como ”Not
Configured” para evitar conflitos com a função.
// =============================macros==================================================
#define CW_JOG I2 // I2 e definido como um botao de movimento continuo de avanco
#define CCW_JOG I3 // I3 e definido como um botao de inversão do movimento de avanco
// ===========================programa principal===============================
#task/1; // Estabelece a série de tarefas como task 1
_loop:
if (X_en=1) do // Aguarda o motor estar habilitado
if (CW_JOG) do // Aguarda acionar a entrada continuamente
X_jvl=X_vel_max; // Acelera o motor no sentido de avanco com vel max
till(~CW_JOG); // Aguarda desacionar a entrada
X_stop_m=1; // Para o movimento do motor
end;
if (CCW_JOG) do // Aguarda acionar a entrada continuamente
X_jvl=-X_vel_max; // Acelera o motor no sentido de recuo com vel max
till(~CCW_JOG); // Aguarda desacionar a entrada
X_stop_m=1;
end;
else do
printl/101("Motor nao habilitado!. "); // Exibe mensagem descrita
printl/103("Favor soltar o botao de Jog para habilitar o motor"); // Exibe mensagem descrita
till(X_en=1 & ~CW_JOG & ~CCW_JOG); // Reinicia se motor ok e botoes desacionados
end;
goto _loop;
ret;
Tabela 6-1
Entrada digital Função
I2 JOG sentido positivo
I3 JOG sentido negativo
A função JOG baseia-se nos parâmetros de movimento no Lightening, na parte Motion Protection, como
mostrado na tabela 6-2.
Tabela 6-2 de parâmetros de movimento do Motion Protection
Parâmetros de movimento Parâmetros correspondentes ao Motion Protection
Velocidade Speed
Aceleração Acc.
Desaceleração Dec. Kill.
Notas da Aplicação:
No começo do programa usamos a macro #define CW_JOG I2. Dessa forma CW_JOG no programa
corresponde diretamente à entrada digital I2. Esse método é uma forma mais flexível para definir uma variável, por
exemplo, caso o usuário necessite alterar a entrada de I2 para I9, basta modificar a macro para #define CW_JOG I9.
No programa também são utilizadas três variáveis internas mostradas na tabela 6-3.
Tabela 7-3
Variável interna Função
X_jvl Habilita a função JOG definindo a velocidade do motor (count/s)
X_vel_max Valor de velocidade máxima definida pelo usuário (count/s)
X_stop_m Definir 1 para parada do motor
A função X_trg (como descrita no exemplo 3) e a função X_jvl não atuam ao mesmo tempo, existindo as
seguintes condições:
Quando definir um valor para X_trg e acionar a função, com o motor em movimento ao atuar X_jvl, a função
JOG não atuara no motor.
Quando definir um valor para X_jvl e acionar a função, com o motor em movimento ao atuar X_trg, a função
se iniciara assim que a função X_jvl terminar de movimentar o motor.
Revisão: 150106.002HP