Pular para o conteúdo principal

Como estabelecer comunicação entre Jetson e dispositivos EtherCAT

EtherCAT (Ethernet for Control Automation Technology) é um protocolo de barramento de campo Ethernet Industrial em tempo real, de alto desempenho e código aberto, baseado nos padrões IEEE 802.3 Ethernet. Ele opera em uma arquitetura mestre-escravo e é conhecido por sua velocidade, precisão e flexibilidade excepcionais em ambientes de automação industrial

Este documento usa o recomputer robotics J401 como o mestre EtherCAT e o MyActuator X4 como o escravo para demonstrar como estabelecer comunicação entre um Jetson e dispositivos EtherCAT.

1. Conexão de hardware

Como mestre EtherCAT, o Jetson normalmente usa sua interface Ethernet para se conectar aos dispositivos escravos EtherCAT.

Como muitos dispositivos escravos não fornecem uma porta Ethernet padrão, geralmente é necessário um adaptador para converter a conexão Ethernet em uma interface de 4 pinos (Tx+, Tx–, Rx+, Rx–).

nota

Após estabelecer a conexão física EtherCAT, a maioria dos dispositivos escravos ainda requer alimentação externa adicional.

2. Instalar o driver do EtherCAT

Esta seção usa L4T 36.4.3, que corresponde ao BSP JetPack 6.2, como exemplo para mostrar como instalar o driver do EtherCAT no Jetson.

Instale as dependências necessárias para compilar o driver do EtherCAT:

sudo apt update
sudo apt install build-essential cmake libtool autoconf automake

Baixe o código-fonte do driver EtherCAT, depois compile e instale:

git clone https://gitlab.com/etherlab.org/ethercat.git
cd ethercat

./bootstrap # to create the configure script, if downloaded from the repo

./configure --sysconfdir=/etc
make all modules
sudo make modules_install install
sudo depmod -a

Para verificar se o driver foi instalado com sucesso, execute o seguinte comando. Você deverá ver os dois módulos de kernel ec_master e ec_generic:

sudo lsmod | grep "ec_"

3. Configuração do EtherCAT

Depois de instalar o driver EtherCAT, várias configurações são necessárias para ativar a comunicação entre o mestre e os dispositivos escravos.

Primeiro, edite o arquivo de configuração em /etc/ethercat.conf:

sudo vim /etc/ethercat.conf

Modifique os dois parâmetros em /etc/ethercat.conf de acordo com o nome da interface Ethernet conectada ao Jetson:

MASTER0_DEVICE="eno1"  # Replace eno1 with the Ethernet interface used for EtherCAT
DEVICE_MODULES="generic"

Substitua eno1 pela interface Ethernet usada para EtherCAT. Você pode usar o comando ifconfig para verificar o nome da sua interface.

Após reiniciar o serviço EtherCAT, você deverá ver o dispositivo mestre EtherCAT aparecer no diretório /dev:

sudo systemctl restart ethercat
ls /de/EtherCAT*

(opcional) Se /dev/EtherCAT não for encontrado, tente carregar os módulos do kernel manualmente:

sudo modprobe ec_master devices="eno1"  # Replace eno1 with the Ethernet interface used for EtherCAT
sudo modprobe ec_generic
sudo systemctl restart ethercat

Substitua eno1 pela interface Ethernet usada para EtherCAT.

(opcional) Às vezes a interface Ethernet usada para EtherCAT pode estar ocupada pelo NetworkManager. Você pode liberá-la usando os seguintes comandos:

sudo nmcli dev set eno1 managed no  # Replace eno1 with the Ethernet interface used for EtherCAT
sudo nmcli dev set eno1 managed on # Replace eno1 with the Ethernet interface used for EtherCAT

Substitua eno1 pela interface Ethernet usada para EtherCAT.

4. Testar a comunicação entre Jetson e o escravo EtherCAT

Depois de confirmar que o nó mestre EtherCAT está corretamente inicializado no Jetson e que as conexões de hardware estão devidamente estabelecidas, você pode testar a comunicação entre o Jetson e os dispositivos EtherCAT no terminal.

Procure por dispositivos EtherCAT e teste a transmissão de dados para verificar se a taxa de perda de pacotes está dentro de uma faixa normal:

sudo ethercat rescan
sudo ethercat master

Liste todos os dispositivos EtherCAT no barramento:

sudo ethercat rescan
sudo ethercat slaves -v

Veja o status do dispositivo EtherCAT com índice 0:

sudo ethercat rescan
sudo ethercat pdos -p 0 #0 to n

O parâmetro após -p pode ser qualquer valor de 0 a n.

5. Exemplo – Controlando um motor EtherCAT no Jetson (MyActuator X4)

Com base nas etapas de configuração e verificação das seções anteriores, agora você já deve conseguir controlar um motor EtherCAT usando um dispositivo Jetson.

Nesta seção, usamos o MyActuator X4 como exemplo para demonstrar como controlar um motor EtherCAT a partir do Jetson.

nota

Esta seção é apenas para referência. Cada motor EtherCAT utiliza um protocolo de comunicação diferente, portanto você precisará adaptar o exemplo de acordo com o protocolo usado pelo seu dispositivo específico.

Este exemplo fornece um código de amostra para controlar um motor EtherCAT MyActuator X4. Baixe e compile-o a partir do GitHub:

git clone https://github.com/jjjadand/ethercat-myctor.git
cd src/build
cmake ..
make

O exemplo é implementado com base no EtherCAT-Master. O fluxograma do programa é mostrado abaixo:

Fluxograma do programa
                     ┌──────────────────────────────────────┐
1. Master Initialization │
├──────────────────────────────────────┤
│ ecrt_request_master()
│ ecrt_master_create_domain()
│ ecrt_master_slave_config()
│ Configure Distributed Clock (DC)
│ Register PDO entries (RxPDO/TxPDO)
│ ecrt_master_activate()
│ Get domain memory pointer │
└──────────────────────────────────────┘


┌──────────────────────────────────────┐
2. PREOP → SAFEOP Transition │
├──────────────────────────────────────┤
│ Slave boots in PREOP │
│ Master exchanges SDO if needed │
(optional: set 0x6060 = CSP)
│ DC start time prepared │
└──────────────────────────────────────┘


┌──────────────────────────────────────┐
3. SAFEOP → OP Transition │
├──────────────────────────────────────┤
│ Domain becomes active (WKC > 0)
│ Application loop starts running │
│ Master supplies application time
│ Master synchronizes DC clocks │
│ Slave goes OP (operational)
└──────────────────────────────────────┘


┌──────────────────────────────────────┐
4. CiA-402 State Machine │
├──────────────────────────────────────┤
│ Write ControlWord = 0x0006 (Shutdown)
│ Wait READY_TO_SWITCH_ON │
│ Write ControlWord = 0x0007 (SwitchOn)
│ Wait SWITCHED_ON │
│ Write ControlWord = 0x000F (EnableOp)
│ Wait OPERATION_ENABLED │
└──────────────────────────────────────┘


┌──────────────────────────────────────┐
5. Enter CSP Motion Operation │
├──────────────────────────────────────┤
│ Write Mode of Operation (0x6060=8)
│ Read Actual Position (0x6064)
│ Initialize Target Position (607A)
└──────────────────────────────────────┘


┌──────────────────────────────────────┐
6. Real-Time Cyclic Operation │
├──────────────────────────────────────┤
│ loop at 1 kHz (or higher): │
│ - Sleep until next cycle │
│ - ecrt_master_application_time()
│ - ecrt_master_sync_reference_clock │
│ - ecrt_master_sync_slave_clocks │
│ - Receive / process domain │
│ - Generate new target position │
│ - Write ControlWord = 0x000F │
│ - Write OperationMode = 8 (CSP)
│ - Write new TargetPosition │
│ - Queue & send domain │
└──────────────────────────────────────┘


┌──────────────────────────────────────┐
7. Monitoring & Fault Handling │
├──────────────────────────────────────┤
│ Read status word (0x6041) each cycle │
│ Detect faults (bit3)
│ Detect target reached (0x0400)
│ Optionally read torque/velocity │
│ Execute FAULT RESET if needed │
└──────────────────────────────────────┘


┌──────────────────────────────────────┐
8. Shutdown │
├──────────────────────────────────────┤
│ Stop real-time thread │
│ Write ControlWord=0 (disable)
│ Release EtherCAT master │
└──────────────────────────────────────┘

Ao controlar um motor EtherCAT no Jetson sem um kernel em tempo real, é recomendável bloquear a frequência da CPU para garantir uma sincronização estável com o dispositivo EtherCAT.

Após compilar o exemplo, execute os seguintes comandos no terminal:

sudo jetson_clocks # lock CPU frequency for stability
sudo ./ethercat_master

Após executar o programa, espere cerca de dois segundos — o motor começará a se mover em loop.

Recursos

Suporte Técnico & Discussão de Produto

Obrigado por escolher nossos produtos! Estamos aqui para oferecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.

Loading Comments...