can-boucle.ino

Arduino GIGA R1 · Fichier : can-boucle.ino · Langage : Arduino · Usage : Envoyer et recevoir sur le bus CAN (FDCAN)

L'ADN industriel de la GIGA : son FDCAN relié à un connecteur dédié. Deux GIGA reliées (CANH/CANL + masse, 120 Ω en bout) échangent des trames à 500 kbit/s — l'automatisme commence là.

Matériel requis

Une carte Arduino Giga R1 (STM32H747 double cœur M7 480 MHz + M4, 76 E/S, 2 DAC, FDCAN) alimentée par USB-C ou 5-24 V. 2 cartes avec transceiver CAN (ou un adaptateur USB-CAN) + résistance 120 Ω.

Branchement

CANTX/CANR/GND côté MCU : il FAUT un transceiver SN65HVD230 entre la carte et le bus. CANH-CANH, CANL-CANL, masses communes, 120 Ω aux deux extrémités.

Fonctionnement

CAN.begin arme le FDCAN à 500 kbit/s ; beginPacket/endPacket encapsule la trame standard 11 bits. onReceive est appelé en interruption sur trame reçue. Dans l'Arduino IDE, installez la plateforme « Arduino Zephyr-based Boards » (ou Mbed), choisissez « Arduino Giga R1 », puis Téléverser. Logique 3,3 V.

Pour aller plus loin

Protocole maison (ID = capteur, données = 4 octets float), ou bus vers un module moteur pas-à-pas 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");
  }
}

← Retour à la fiche