Back to top

Implementando Contador Multivoltas no KAS (Relação de Acoplamento Não Binária)

Em aplicações rotativas com encoders absolutos multivoltas é possível que o controlador perca a contagem do número de voltas. Se a máquina usa um redutor com redução de acoplamento não binária (Ex. 3:1), o periodo da máquina não é um divisor inteiro se comparado com o periodo do encoder, possibilitando que posição de feedback não seja a mesma após desligar e ligar a máquina. Em outra palavras, a posição do eixo pode ser deslocada devido ao não acumulo do numero correto de voltas.

Para evitar essa situação o Drive AKD é capaz de armazenar o número de voltas do eixo da aplicação, sobrepondo o contador do feedback. Para habilitar essa função, deve-se setar o parametro FB1.EXTENDEDMULTITURN = 1. Essa configuração garante que a posição FB1.P (32-Bits) será sempre a mesma, depois de desligar e ligar a máquina. 

No presente momento, a posição EtherCAT lida pelo KAS é limitadas a 20-Bits, os 12-Bits onde são armazenado o número de voltas do eixo é ignorado. Levando isso em conderação, mesmo que o parâmetro FB1.EXTENDEDMULTITURN permita que o drive grave o numero de voltas, a informação é desconsiderada pelo KAS.

Para contornar esse problema um bloco de função foi desenvolvido.  Ele lê o parâmetro FB1.P do AKD, extrai o numero de voltas e calcula o número de vezes que o encoder passou pelo rollover.
Logo depois da inicialização da rede e da engine de movimento, o bloco de função é chamando e corrige a posição do eixo com base nos calculos.

Em anexo esta o projeto .kas. Ele usa o bloco de função UDFB_AbsExtendedMultiturn, aplicado no Template SFC. A função é adicionada logo depois da inicialização. 

image

Entendendo o UDFB_AbsExtendedMultiturn 

O bloco de função deve ser chamado logo depois que a rede for incializada. O bloco esta pronto para ser implementado em todos as linguagens de programação. 

Ações executadas pelo Bloco de Função:

  1. Seta FB1.EXTENDEDMULTITURN​​​​​​ - 1;
  2. Seta FB1.PIN - 1048576;
  3. Seta FB1.POUT - 1;
  4. Seta FB1.PUNIT - 3 (PIN/POUT);
  5. Lê User Units per Rev;
  6. Lê Axis Rollover;
  7. Lê FB1.P;
  8. Calcula o número de revolução e vezes que o encoder passou pelo rollover.
  9. Calcula a nova posição do eixo;
  10. Seta a posição calculada no eixo;

Representação do bloco em FFLD:

image

Inputs 
IN_boEnable    - BOOL - Habilita o bloco;
IN_Axis           - AXIS_REF - Estrutura que especifica o Eixo;

Outputs
OUT_boDone                      - BOOL - Execução do bloco concluída ;
OUT_boActive                     - BOOL - Bloco ativo;
OUT_boError                       - BOOL - Existe uma falha ativa no bloco;
OUT_iErrorID                     - INT - Número do erro:
                                                           1 para Falha ao escrever o parâmetro FB1.EXTENDEDMULTITURN;
                                                                   Verifique se o tipo de feedback configurado no motor é valido;
                                                           4 for Falha no Eixo;
OUT_lrStartPos                  - LREAL - Posição do eixo antes do ajuste do bloco;
OUT_diNumOfRev             - DINT - Número de revolução FB1.P/(2^20);    
OUT_diNumOfUnwinds     - DINT - Número de vezes que o encoder passou pelo rollover.
OUT_lrNewHomePos        - LREAL - Posição escrita no eixo após a execução do bloco.