17 de outubro de 2021

Do bit Ao Byte

Embarcados, Linux e programação

Hybrid Servo Drive : HBS860H ou Kalatec?

Hybrid Servo Drive

Há alguns artigos anteriores a esse em que introduzi o controle de motores de passo com o HBS860H. Bem, trata-se de um projeto de um cliente, que apresentarei em artigos posteriores. O problema foi que quando o “Hybrid Servo Drive” foi adquirido, o motor de passo não tinha o encoder. Leia o artigo “Motor de passo com HBS860H” para detalhes. Assim sendo, o motor foi adquirido à parte, no Brasil mesmo. Mas Brasil é sempre Brasil e esse motor de passo vinha como cabo serial DB9. Logo, qual seria o pinout do encoder? Senta que lá vem história.

Após adquirir o motor de passo, seria necessário saber o pinout para fazer o encoder funcionar. Entrando em contato com o fornecedor do motor (a Kalatec automação) disseram que não dariam nenhum tipo de suporte. Apenas deram os datasheets do motor, sem a interconexão com o Hybrid Servo Drive – que para ter suporte, deveria ser adquirido deles. Ok, lá foi o cliente comprar o drive das mãos deles, para ter o cabo serial compatível com a conexão de cores. Logo, pensando que o cabo já viria atrelado ao dispositivo. Nem cabo veio.

Ao receber o drive sem o cabo serial, mais uma vez o cliente teve que entrar em contato e solicitar o cabo. Haja paciência. Depois de uns 14 dias de clamor, finalmente estava nas mãos do cliente o cabo também. Ainda falta fazer o wiring. mas repararam na imagem de destaque? Os drives só tem diferença no silk. Pensei: Não é possível que eles sejam tão caras-de-pau.

Hybrid Servo Drive por dentro

Obviamente que tendo os dois em mãos não poderia deixar de abrir e comparar. Bem, a semelhança interna também é notória, mas não são idênticos. Um usa uma MCU TMS320F280x (Texas Instruments) ea outra usa um ARM Cortex-M4 GD32F330 cuja marca nunca vi, mas não sou o maior especialista na “fauna” digital. Só olhei para os datasheets, não comparei nada, portanto não sei se há semelhança na arquitetura e se um pode substituir o outro, mas considerando a semelhança do hardware, é bem provável que utilizem a mesma lógica, independente de compatibilidade. O funcionamento de ambos sim, poderei testar e se forem iguais, recomendaria o HBS860H. A indústria brasileira não se ajuda (não em sua totalidade, mas uma grande parte). O atendimento da Kalatec é ruim, demorado e eventualmente dará ainda alguns transtornos, a depender do que acontecer enquanto escrevo e filmo o procedimento.

Hybrid Servo Drive - HBS860 vs Kalatec

Hybrid Servo Drive em malha fechada

Se não sabe a diferença de malha aberta e malha fechada, recomendo fortemente a leitura do artigo anterior relacionado, onde descrevo pontos importantes sobre diversos aspectos de operação e referencio diversos outros artigos relacionados a motores de passo e drives para motores de passo.

O propósito final é controlar esse dispositivo com Raspberry – isso é, se o nível lógico for compatível, porque não faz muito sentido adicionar mais componentes a um projeto pronto. Nesse caso, tem uma outra opção que pode ser viável a esse projeto em específico, que é adicionar o Arduino como ponte entre o Raspberry e o drive. Esse é o plano C, mas tudo já está previsto e considerando essa possibilidade e a possibilidade de usar apenas Arduino, estou utilizando o Arduino Leonardo, que pode ser substituído pelo UNO de forma transparente sem alterar código ou wiring.

O wiring do encoder depende das especificações. Se porventura tive a desventura de ter adquirido da Kalatec, ao menos por ventura você poderá seguir exatamente esse tutorial. Tendo adquirido o motor, cabo serial e controladora, as conexões serão essas:

Hybrid Servo Drive - wiring

Repare que o segundo conector da esquerda para a direta está com um fio cinza e vermelho. O cinza está saindo do GND do Arduino e entrando aí no GND da fonte. O GND “tem” que ser comum a ambos os dispositivos, por isso essa recomendação.

Código de teste do Hybrid Servo Drive

No vídeo mostrarei claramente as conexões e explicarei as tabelas que estão sobre a tampa do drive. O código para utilizar com Arduino Uno ou Leonardo é esse a seguir, mas para usar com outras plataformas com diferentes pinouts basta usar a IDE do Arduino ou PlatformIO no VS Code e mudar os pinos descritos nessa struct:

struct pcon{
    uint8_t EN = 5;
    uint8_t DIR = 6;
    uint8_t PUL = 7;
} pins_num;

Enfim, para fazer o teste de funcionamento inicial, recomendo que use esse código sem modificar nada e após comprovar o funcionamento, modifique-o para que atenda suas necessidades. Veremos esse motor atuando no projeto em outros artigos relacionados que disporei em mais algumas semanas.

O código completo de teste, incluindo o wiring do Arduinco com o drive. Onde estiver VCC, coloque 5V do Arduino. Não esqueça de colocar um GND do Arduino ao GND da fonte de alimentação:

#include <Arduino.h>

/*
Se estiver configurado para 400 no dip switch (ON ON ON ON _ _ _ _) e o valor em sw_conf for mantido em 400, teremos 1 volta completa. 
Se a configuração for 800 (OFF ON ON ON _ _ _ _) e for mantido 400, será dada meia volta. Para uma volta completa na metade da velocidade inicial, use 800 e OFF ON ON ON _ _ _ _.
Lembre-se: A tabela mostra pulsos por revolução, então podemos controlar velocidade e avanço.


WIRING (UNO Leonardo etc) e Control Signal:
Arduino / Drive
D5     ---> ENA-
VCC    ---> ENA+
GND    ---> DIR-    
D6     ---> DIR+
D7     ---> PUL-
VCC    ---> PUL+
*/
unsigned int sw_conf = 400; //Configuração de pulsos, conforme tabela sobre o drive. No exemplo, estamos dando 1 volta completa.

struct pcon{
    uint8_t EN = 5;
    uint8_t DIR = 6;
    uint8_t PUL = 7;
} pins_num;

void setup(){
    for (uint8_t i = 5; i < 8; i++){
        pinMode(i, OUTPUT);
    }

    digitalWrite(pins_num.EN, HIGH);
}

void loop(){
    digitalWrite(pins_num.DIR, LOW);

    for (int i=0; i<sw_conf; i++){
        digitalWrite(pins_num.PUL, HIGH);
        delayMicroseconds(sw_conf);
        digitalWrite(pins_num.PUL, LOW);
        delayMicroseconds(sw_conf);
    }

    digitalWrite(pins_num.DIR, HIGH);
    
    delay(1000);

    for (int i=0; i<sw_conf; i++){
        digitalWrite(pins_num.PUL, HIGH);
        delayMicroseconds(sw_conf);
        digitalWrite(pins_num.PUL, LOW);
        delayMicroseconds(sw_conf);
    }
    delay(40000);
}

HBS860H vs KTC-DR34EC-K

Apesar de ter sido obrigado a comprar o drive para ter acesso ao wiring, pelo menos está funcionando. Mas, será que o HBS860H também é compatível? Já pensou se for só conectar os fios nele e usar? Quer saber se pode ser substituído de forma transparente? Então inscreva-se em nosso canal DobitaobyteBrasil no Youtube e clique no sininho para receber a notificação do vídeo. Aproveite pra dar uma olhada nos vídeos do canal e repare que não tem enrolação. São vídeos sucintos com algum VFX, SFX, tratamento de cor, uma pitada de humor e bastante informação. Não acredita? – Nem eu. Deixa eu conferir se é isso mesmo.

Continue acompanhando a série. Aqui sempre apresento material original e experimentado. Quando ver algo parecido por aí, confira as datas. Estamos às margens dos 1000 artigos publicados, fora os excluídos (por não atenderem mais aos critérios de qualidade) e os artigos publicados para outros blogs, desde 1997. Aqui você encontra tudo, Do bit Ao Byte.