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–).

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.
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.