🛠 Monter la Due sur un bus CAN 500 kbit/s avec un transceiver externe

Arduino Due · avance · Schéma : IMG-due-avance-1-can-bus-500k-due-can.svg — signaux CAN0 (broches 68 RX / 69 TX) de l'Arduino Due reliés à un module transceiver CAN 3,3 V (TJA1050/SN65HVD230) connecté au bus CAN_H/CAN_L avec résistance de terminaison 120 Ω, mention « transceiver externe requis ».

Objectifs

La puce SAM3X8E intègre DEUX contrôleurs CAN — l'argument phare de la Due pour l'automobile et l'industriel — mais la fiche technique officielle est claire : « CAN : Yes (ext. transceiver needed) ». Aucun transceiver n'est soudé sur la carte. Ce tuto monte une liaison CAN 500 kbit/s avec la communauté due_can (collin80) et un petit module transceiver 3,3 V, puis envoie et reçoit des trames.

Matériel

Code complet

// Emetteur CAN0 a 500 kbit/s — transceiver externe obligatoire
#include <due_can.h>

void setup {
  SerialUSB.begin(115200);
  Can0.begin(CAN_500KBPS);        // CAN0 @ 500 kbit/s
  SerialUSB.println("CAN0 pret (500 kbit/s)");
}

void loop {
  // 1) Emission periodique
  can_frame tx;
  tx.canId = 0x123;
  tx.canIdLength = ONE_BIT;
  tx.dataLength = 8;
  uint32_t t = millis;
  for (int i = 0; i < 8; i++) tx.data[i] = (t >> (i * 8)) & 0xFF;
  Can0.sendMessage(tx);           // non bloquant

  // 2) Reception eventuelle
  can_frame rx;
  if (Can0.getMessage(rx)) {
    SerialUSB.printf("Rx id=0x%X len=%u\n", rx.canId, rx.dataLength);
  }
  delay(10);
}

Vérification attendue

Avec un second nœud (autre Due ou adaptateur USB-CAN configuré à 500 kbit/s), les trames ID 0x123, 8 octets, contenant le millis en little-endian, défilent toutes les 10 ms. Sur l'adaptateur USB-CAN : candump affiche 0123 [8] ... avec un compteur qui augmente. Les deux LED TX/RX du transceiver clignotent.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels