🛠 CAN bus between two R4 Minimas (external transceiver required)
Objetivo
Intercambiar mensajes entre dos UNO R4 Minimas a través de CAN. El RA4M1 integra el *controlador* CAN, pero el conector solo expone señales a nivel de controlador: debes añadir un transceptor externo (por ejemplo, un módulo SN65HVD230 o MCP2551) para gestionar el bus diferencial.
Cableado
Por nodo: transceptor a los pines CAN de la placa (consulta el manual de usuario para la asignación exacta del conector), CANH del transceptor a CANH y CANL a CANL entre nodos, GND común y terminación de 120 ohmios en cada extremo del bus.
Código (ambas placas, mismo código)
#include <CAN.h>
void setup {
Serial.begin(115200);
CAN.begin(500E3); // 500 kbit/s, both nodes identical
}
void loop {
int packet = CAN.parsePacket;
if (packet) {
Serial.printf("id=0x%lX len=%d\n",
CAN.packetId, packet);
while (CAN.available)
Serial.write(CAN.read);
Serial.println;
}
if (millis % 1000 < 20) { // crude 1 Hz beacon
CAN.beginPacket(0x123);
CAN.write('R'); CAN.write('4');
CAN.endPacket;
}
}
Errores comunes
> NO VERIFICADO: la asignación exacta de los pines CAN en el conector de la R4 no se especifica en las páginas consultadas; consulta el manual de usuario de la placa.
- Sin transceptor: no aparece nada en el bus, el controlador por sí solo no puede generar los niveles de tensión de CAN.
- Falta de terminaciones: tramas intermitentes o nulas.
- Diferentes velocidades de transmisión en los dos nodos; y ten en cuenta la alimentación lógica del transceptor frente a los 5 V de la placa.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-poussoir.inoArduinodac-analogique.inoArduinoentree-analogique.inoArduinopwm-respiration.inoArduinoservo-balayage.inoArduino