can-boucle.ino

Arduino GIGA R1 · Archivo : can-boucle.ino · Lenguaje : Arduino · Uso : Envoyer et recevoir sur le bus CAN (FDCAN)

El ADN industrial de la GIGA: su FDCAN ligado a un conector dedicado. Dos GIGA unidas (CANH/CANL + masa, 120 Ω en los extremos) intercambian tramas a 500 kbit/s: el automatismo empieza ahí.

Hardware necesario

Una placa Arduino Giga R1 (STM32H747 doble núcleo M7 a 480 MHz + M4, 76 E/S, 2 DAC, FDCAN) alimentada por USB-C o 5-24 V. 2 placas con transceptor CAN (o un adaptador USB-CAN) + resistencia de 120 Ω.

Cableado

CANTX/CANR/GND lado MCU: HACE FALTA un transceptor SN65HVD230 entre la placa y el bus. CANH-CANH, CANL-CANL, masas comunes, 120 Ω en ambos extremos.

Funcionamiento

CAN.begin arma el FDCAN a 500 kbit/s; beginPacket/endPacket encapsula la trama estándar de 11 bits. onReceive se llama por interrupción en trama recibida. En el Arduino IDE, instale la plataforma « Arduino Zephyr-based Boards » (o Mbed), elija « Arduino Giga R1 » y suba. Lógica de 3,3 V.

Para ir más lejos

Protocolo casero (ID = sensor, datos = float de 4 bytes), o bus hacia un driver de motor paso a paso CAN.

can-boucle.ino

// CAN sur le connecteur CANTX/CANR/GND de la GIGA (pas de transceiver !).
// Relier CANH a CANH, CANL a CANL avec une autre carte, terminaison 120 ohms.
#include <CAN.h>

void setup() {
  Serial.begin(115200);
  if (!CAN.begin(500000)) {
    Serial.println("FDCAN indisponible ?"); for (;;);
  }
  CAN.onReceive([](int packetSize) {
    uint32_t id = CAN.packetId();
    while (CAN.available())
      Serial.printf("<%03X> %02X ", id, CAN.read());
    Serial.println();
  });
  Serial.println("CAN 500 kbit/s pret");
}

void loop() {
  static unsigned long precedent = 0;
  if (millis() - precedent >= 1000) {
    precedent = millis();
    CAN.beginPacket(0x123);
    CAN.write((uint8_t)(millis() & 0xFF));      // trame 1 octet
    CAN.endPacket();
    Serial.println("> 0x123 envoye");
  }
}

← Volver a la ficha