test-can.ino

Arduino Due · Archivo : test-can.ino · Lenguaje : Arduino · Uso : Émettre et recevoir des trames CAN avec les contrôleurs de la Due

El SAM3X integra dos controladores CAN: con un simple transceptor SN65HVD230/TJA1050 la Due pasa a ser nodo de bus CAN (automoción, industria). La librería due_can oculta los registros. Ojo al cableado de 3,3 V.

Hardware necesario

Un Arduino Due (AT91SAM3X8E, ARM Cortex-M3 a 84 MHz) conectado por USB a su puerto « Programming ». Ojo: lógica de 3,3 V, nunca 5 V en los pines. 1 transceptor CAN (SN65HVD230 de 3,3 V recomendado) + un 2º nodo o bus con resistencia de 120 Ω.

Cableado

CANH/CANL del transceptor al bus (120 Ω en los extremos), TXCAN/RXCAN a los pines CAN de la Due (GCC), VCC/GND.

Funcionamiento

CAN.init configura 500 kbit/s; writeTx encola una trama y readRx recoge las recibidas (loopback posible). En el Arduino IDE, elija « Arduino Due (Programming Port) » y Subir; el monitor serie va a la velocidad fijada en el código.

Para ir más lejos

Filtre IDs con las máscaras CAN, o registre un bus OBD-II vía conector de 16 pines.

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

← Volver a la ficha