Explorando la Red CAN con Arduino y MCP2515: Desde la Conexión hasta la Comunicación - Tecneu

Explorando la Red CAN con Arduino y MCP2515: Desde la Conexión hasta la Comunicación

Comentarios

Introducción 

En este tutorial, vamos a explorar cómo configurar una comunicación bidireccional entre dos placas de Arduino mediante una red CAN y el uso de módulos MCP2515. La red Controller Area Network (CAN) es un protocolo de comunicaciones robusto y eficiente, frecuentemente utilizado en sistemas embebidos como los vehículos automotores. Para facilitar el uso de este protocolo en Arduino, vamos a utilizar el chip MCP2515, un controlador de CAN independiente.

Protocolo CAN

El protocolo CAN (Controller Area Network) es un protocolo de comunicación estándar utilizado en numerosas aplicaciones, desde automóviles y camiones hasta maquinaria agrícola, médica e industrial. Fue desarrollado por Bosch en los años 80 y sigue siendo uno de los protocolos de comunicación en red más populares en la industria.

Aquí están algunas de las características clave del protocolo CAN:

  1. Comunicación basada en bus: En una red CAN, todos los nodos están conectados a un único bus de comunicación. Cuando un nodo necesita enviar un mensaje, lo coloca en el bus para que todos los demás nodos lo puedan ver.
  2. Identificación de mensajes, no de nodos: A diferencia de otros protocolos en los que cada nodo tiene su propia dirección única, en CAN cada mensaje tiene su propio identificador único. Esto significa que cualquier nodo puede enviar cualquier mensaje, y cada nodo decide por sí mismo qué mensajes le interesan y cuáles no.
  3. Arbitraje sin pérdida: Si dos nodos intentan enviar un mensaje al mismo tiempo, el nodo con el identificador de mensaje más bajo siempre gana sin que se pierda ningún mensaje. Esto es útil en sistemas de tiempo real donde algunos mensajes pueden tener una prioridad más alta que otros.
  4. Verificación y manejo de errores: CAN tiene varias características integradas para verificar la precisión de los datos y manejar los errores. Esto incluye un checksum CRC, repetición automática de mensajes en caso de errores, y una característica para quitar de la red a los nodos que generan demasiados errores.
  5. Robustez: CAN está diseñado para ser muy robusto y operar en entornos con mucho ruido eléctrico, como el de un coche o un camión.

MCP2515

El MCP2515 es un controlador autónomo para el protocolo CAN. Fue desarrollado por Microchip Technology.
A continuación, se presentan algunas de sus características y detalles clave:

  1. Comunicación CAN: MCP2515 es capaz de transmitir y recibir mensajes de datos a través de la red CAN, y proporciona todo el control de datos y manipulación de errores necesarios para el protocolo.
  2. Interfaz SPI: El MCP2515 se comunica con un microcontrolador (como un Arduino) a través de una interfaz SPI (Interfaz Periférica en Serie). Esto permite una implementación flexible del protocolo CAN en una variedad de microcontroladores.
  3. Buffers de transmisión y recepción: MCP2515 tiene tres buffers de transmisión y dos buffers de recepción, lo que permite la manipulación eficiente de mensajes entrantes y salientes.
  4. Filtrado de mensajes: El MCP2515 proporciona una capacidad de filtrado y enmascaramiento de mensajes, lo que permite seleccionar y priorizar qué mensajes deben ser procesados.

Materiales

  • 2 Arduino Uno o similar.
  • Módulo MCP2515 CAN con transceptor TJA1050
  • Cables de conexión

Conexiones

Conecta tu módulo MCP2515 a tu Arduino de la siguiente manera:

  • VCC (MCP2515) a 5V (Arduino)
  • GND (MCP2515) a GND (Arduino)
  • CS (MCP2515) a pin 10 (Arduino)
  • SI (MCP2515) a pin 11 (Arduino)
  • SO (MCP2515) a pin 12 (Arduino)
  • SCK (MCP2515) a pin 13 (Arduino)
  • INT (MCP2515) a pin 2 (Arduino)
  • Conecta 'L' y 'H' de los dos módulos MCP2515

MCP2515

Instalar la biblioteca Adafruit MCP2515

La biblioteca "Adafruit_MCP2515" es necesaria para interactuar con el módulo MCP2515 utilizando Arduino. Puedes instalarla desde el Gestor de Bibliotecas en el entorno de desarrollo de Arduino (IDE). Simplemente ve al menú Sketch -> Include Library -> Manage Libraries... y busca "Adafruit MCP2515". Haz clic en Install para instalar la biblioteca.

Si te pide instalar otras dependencias hazlo.

Programar el Arduino

Ahora estás listo para programar tu Arduino. En este escenario, vamos a trabajar con dos Arduinos en una red CAN. El primer Arduino estará configurado para enviar una trama de datos a través del bus CAN. Por otro lado, el segundo Arduino estará configurado para recibir estos datos. Al recibir una trama de datos, este Arduino imprimirá la información relevante del mensaje, lo que incluye el identificador del mensaje, la longitud o tamaño de la trama y el contenido del mensaje recibido. Para cargar el programa a tu Arduino, ve al IDE de Arduino y selecciona File -> New. Pega el siguiente código en el editor y luego selecciona Sketch -> Upload.

Código del Arduino que envia:

Primeramente, se define el pin de control del chip (CS_PIN) y la tasa de baudios del bus CAN (CAN_BAUDRATE). Luego, se crea una instancia del controlador MCP2515 en el pin de control definido. Además, se define la cadena "Tecneu" que será enviada en los paquetes CAN.

En la función setup(), se inicia la comunicación serie con una tasa de baudios de 115200 para depuración y también se inicia el controlador MCP2515 con la tasa de baudios definida para la comunicación CAN.

La función loop() se ejecuta continuamente. En cada iteración, se va generando un paquete CAN con un identificador de 0x64 y se escribe cada carácter de la cadena "Tecneu" en el paquete. Una vez que todos los caracteres de la cadena se han escrito al paquete, se termina y se envía el paquete a través del bus CAN. Después, el programa se detiene por un segundo (delay(1000)) antes de comenzar la siguiente iteración y enviar el siguiente paquete.

 Código del Arduino que recibe:

 En cada iteración, verifica si hay un nuevo paquete disponible en el bus CAN y, si es así, imprime detalles sobre el paquete. Primero, se imprime la cadena "Paquete recibido ", luego se imprime el ID del paquete en formato hexadecimal, seguido por la longitud del paquete. Después, se imprime cada byte de datos en el paquete como un carácter. Finalmente, se imprime una línea en blanco antes de la siguiente iteración del bucle.

Resultados

Abre el monitor serial a 115200 baudios en el Arduino que configuraste para recibir la trama de datos. Si todo está correcto, deberías poder ver lo siguiente:

Intenta modificar el código para enviar tus propios mensajes CAN o para realizar acciones en base a los mensajes CAN recibidos.

Conclusiones

Este tutorial te ha llevado a través de los pasos básicos para configurar una comunicación CAN con Arduino y MPC2515, pero hay muchas más cosas que puedes hacer con esta configuración. Podrías, por ejemplo, experimentar enviando diferentes tipos de datos, recibir mensajes de diferentes dispositivos, o incluso construir una pequeña red de dispositivos CAN. ¡Diviértete explorando las posibilidades!

 

 

Productos Relacionados

Ver artículo

Ver artículo

Comentarios 

Sin comentarios

Dejar un comentario
Tu correo no será publicado, los campos requeridos estan marcados con *
Artículos relacionados
Suscríbete
Suscríbete a nuestro boletín y recibe las últimas ofertas y novedades.