test-can.ino

Arduino Due · Fichier : test-can.ino · Langage : Arduino · Usage : Émettre et recevoir des trames CAN avec les contrôleurs de la Due

Le SAM3X intègre deux contrôleurs CAN : la Due devient nœud bus CAN (automobile, industrie) avec un simple transceiver SN65HVD230/TJA1050. La bibliothèque due_can masque les registres. Attention au brochage 3,3 V.

Matériel requis

Une Arduino Due (AT91SAM3X8E, ARM Cortex-M3 84 MHz) reliée par USB à son port « Programming ». Attention : logique 3,3 V, jamais 5 V sur les broches. 1 transceiver CAN (SN65HVD230 3,3 V recommandé) + 2e nœud ou bus avec résistance 120 Ω.

Branchement

CANH/CANL du transceiver sur le bus (avec 120 Ω en bout), TXCAN/RXCAN sur les broches CAN de la Due (GCC), VCC/GND.

Fonctionnement

CAN.init configure le contrôleur à 500 kbit/s ; writeTx place une trame en file, readRx récupère les trames reçues (boucle-back possible sur soi-même). Dans l'Arduino IDE, choisissez « Arduino Due (Programming Port) » puis Téléverser ; le moniteur série tourne à la vitesse choisie dans le code.

Pour aller plus loin

Filtrez les ID avec les masques CAN, ou loggez un bus OBD-II via un connecteur 16 broches.

test-can.ino

// CAN0 de la Due (requiert un transceiver 5V/3.3V externe sur le bus).
#include <due_can.h>

void setup() {
  Serial.begin(115200);
  CAN.init(CAN_USE_GCC, 500000); // GCC = pinout standard, 500 kbit/s
  Serial.println(F("CAN0 emetteur/recepteur a 500 kbit/s"));
}

void loop() {
  static uint32_t compteur = 0;
  CAN_MESSAGE msg;
  msg.can_id = 0x123;
  msg.can_dlc = 4;
  msg.can_data_byte[0] = compteur & 0xFF;
  msg.can_data_byte[1] = (compteur >> 8) & 0xFF;
  msg.can_data_byte[2] = 0xAA;
  msg.can_data_byte[3] = 0x55;
  CAN.writeTx(msg);

  if (CAN.readRx(msg)) { // trame recue ?
    Serial.print(F("Rx id=0x")); Serial.println(msg.can_id, HEX);
  }
  compteur++;
  delay(200);
}

← Retour à la fiche