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

Objetivos

El chip SAM3X8E integra DOS controladores CAN — el argumento estrella de la Due para el sector automotriz e industrial — pero la hoja de datos oficial es clara: « CAN : Yes (ext. transceiver needed) ». No hay ningún transceptor soldado en la placa. Este tutorial configura un enlace CAN a 500 kbit/s con la comunidad due_can (collin80) y un pequeño módulo transceptor de 3,3 V, para luego enviar y recibir tramas.

Material

Código completo

// 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);
}

Verificación esperada

Con un segundo nodo (otra Due o adaptador USB-CAN configurado a 500 kbit/s), las tramas con ID 0x123, de 8 bytes, que contienen el valor de millis en little-endian, se muestran cada 10 ms. En el adaptador USB-CAN: candump muestra 0123 [8] ... con un contador que aumenta. Los dos LED TX/RX del transceptor parpadean.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales