Este artículo tiene como objetivo que los lectores exploren cómo conectar el bus CAN con Arduino, que se utiliza para comunicar sensores, actuadores y controladores en un automóvil.
Este proyecto ayuda a comprender los conocimientos de la interfaz del protocolo CAN con Arduino. Controller Area Network o protocolo CAN es una metodología de comunicación entre diversos dispositivos electrónicos como sistemas de gestión del motor, control de marchas, suspensión activa, ABS, control de iluminación, aire acondicionado, airbags, cierre centralizado, etc. Para obtener más aprendizajes, consulte este artículo.
Aquí obtendrá una idea sobre cómo programar Arduino para que interactúe con el controlador CAN (MCP2515) para que actúe como un transceptor.
DESCRIPCIÓN:
Requisitos previos y equipo:
Necesitará lo siguiente:
-
Dos placas Arduino o un clon de Arduino (aquí tienes una guía si la necesitas)
-
Un módulo Bluetooth TTL-UART de 5v.
-
Arduino IDE para programación.
-
Dos tranciever CAN MCP2515.
Características del transistor CAN MCP2515:
-
Implementa CAN V2.0B a hasta 1 Mb/s
-
Interfaz SPI hasta 10 MHz
-
Datos estándar (11 bits) y extendidos (29 bits) y tramas remotas
-
Dos buffers de recepción con almacenamiento de mensajes priorizados
-
Dos indicadores LED
Demostración:
Fig. 1: Prototipo de circuitos transmisores y receptores basados en Arduino para comunicación a través de la interfaz CAN
1. Descargue el archivo de código de biblioteca CAN-BUS para Arduino 1.0 y descomprímalo en el directorio de bibliotecas de la carpeta IDE de Arduino. Para la configuración de mi computadora, está en este directorio.
Bibliotecas XXXarduino-1.0.1
Después de copiar los archivos, el directorio
XXXarduino-1.0.1bibliotecasDHT
2. Abra Arduino-1.0 y navegue hasta Ejemplos donde encontrará ejemplos: recibir_blink, recibir_verificar, recibir_interrupt, Enviar, Enviar_blink. Aquí usaremos send y Receiver_check para verificar nuestro bus CAN.
Fig. 2: Captura de pantalla del código de ejemplo de navegación para el receptor CAN en Arduino IDE
3. Subir Enviar ejemplos a una placa Arduino. Elija la placa navegando a: Herramientas -> Puerto serie -> COMX.
Nota: Recuerde qué tablero seleccionó como nodo “enviador” y qué tablero seleccionó como nodo “receptor”.
4. Abra el "Monitor serie" seleccionando el puerto Com que seleccionó para el receptor, recibirá el mensaje predefinido "0 1 2 3 4 5 6 7" que se envía desde el nodo "enviar". Esto se puede ver en la siguiente imagen.
Fig. 3: Captura de pantalla del puerto serie Arduino que recibe mensajes predefinidos a través de la interfaz CAN
Funciones en la biblioteca CAN:
1. Establecer la velocidad en baudios
Para inicializar la velocidad en baudios del sistema CAN Bus, utilice las siguientes funciones.
Las tarifas de transmisión disponibles son:
CAN_5KBPS, CAN_10KBPS, CAN_20KBPS, CAN_40KBPS, CAN_50KBPS, CAN_80KBPS, CAN_100KBPS, CAN_125KBPS, CAN_200KBPS, CAN_250KBPS, CAN_500KBPS y CAN_1000KBPS
2. Verificar Recibir
MCP2515 tiene dos modos de verificación de recepción, uno es Sondeo donde el código verifica la trama recibida y el otro modo es el modo Interrupción donde se usa un pin de interrupción separado para notificar la trama recibida.
A continuación se muestra el método de sondeo para obtener la trama recibida.
INT8U MCP_CAN::checkReceive(nulo);
La función devolverá 1 si se recibe una trama y 0 si no se recibe nada.
3. Obtenga la identificación CAN
Si desea conocer el CAN ID del nodo emisor cuando se recibe un mensaje, puede utilizar la siguiente función.
INT32U MCP_CAN::getCanId(nulo)
4. Enviar datos
La siguiente función es enviar datos al bus:
CAN.sendMsgBuf (ID INT8U, extensión INT8U, len INT8U, data_buf);
Dónde,
"id" proporciona la ID CAN de los nodos emisores.
“ext” '0' significa marco estándar. '1' significa marco extendido.
"len" da la longitud de este marco.
“data_buf” es el contenido principal de este mensaje.
Por ejemplo, en el ejemplo de 'enviar', tenemos:
carácter sin firmar stmp(8) = {0, 1, 2, 3, 4, 5, 6, 7};
CAN.sendMsgBuf(0x00, 0, 8, stmp); //envía el mensaje 'stmp' al bus y le dice a otros dispositivos que se trata de una trama estándar 0x00.
5. Recibir datos
La siguiente función se utiliza para recibir datos del bus:
CAN.readMsgBuf (char len sin firmar, char buf sin firmar);
"len" da la longitud de los datos.
“bueno” es el contenido principal de este mensaje.
Fig. 4: Prototipo de circuito transmisor CAN basado en Arduino diseñado en una placa de pruebas
Fig. 5: Prototipo de circuito receptor CAN basado en Arduino diseñado en una placa de pruebas
Diagramas de circuito
circuito_30 |
Vídeo del proyecto