Skip to main content

CAN-BUS Shield V1.2

CAN-BUS es un bus industrial común debido a su larga distancia de transmisión, velocidad de comunicación media y alta confiabilidad. Se encuentra comúnmente en herramientas de máquinas modernas, como un bus de diagnóstico automotriz.

Este CAN-BUS Shield adopta el controlador CAN Bus MCP2515 con interfaz SPI y el transceptor CAN MCP2551 para dar a tu Arduino/Seeeduino capacidad CAN-BUS. Con un cable convertidor OBD-II agregado y la biblioteca OBD-II importada, estás listo para construir un dispositivo de diagnóstico a bordo o un registrador de datos.

Versión

Este documento se aplica a las siguientes versiones de productos:

VersiónFecha de LanzamientoCómo Comprar
CAN BUS Shield V1.0Oct 14, 2012
CAN BUS Shield V1.1Aug 10, 2013
CAN BUS Shield V1.2Jan 5, 2015
CAN BUS Shield V2.0Aug 01,2017

Qué hay de nuevo en CAN BUS Shield V1.2

  • Pads en la parte posterior del PCBA
  • Cambio de resistor terminal a 120 Ohm

Opción Alternativa

Si tu proyecto tiene limitaciones de espacio y tampoco necesitas otras funciones excepto CAN-BUS, aquí tienes un módulo Grove CAN-BUS que es compatible con Arduino, más compacto y rentable, por favor haz clic aquí para visitar su página.

Qué pasa si quiero conectar este shield a mi coche

Si quieres leer datos o controlar tu coche, hay un cable OBD>DB9 disponible para ti, este cable hace más fácil conectar al conector OBD y al conector DB9. Este cable también funcionará con cualquier cosa que tenga un conector OBD. Añadir un interruptor de alimentación hace un clic tan satisfactorio.

Analizador USB-CAN

Si quieres un Analizador de Bus CAN para depurar tu Bus CAN, se recomienda este Analizador USB-CAN.

Características


  • Implementa CAN V2.0B con velocidad de hasta 1 Mb/s
  • Velocidad de interfaz SPI de hasta 10 MHz
  • Tramas de datos y remotas estándar (11 bit) y extendidas (29 bit)
  • Dos buffers de recepción con almacenamiento de mensajes priorizados
  • Conector DB-9 estándar industrial
  • Indicadores LED
note

CAN BUS Shield funciona bien con Arduino UNO (ATmega328), Arduino Mega (ATmega1280/2560) así como Arduino Leonardo (ATmega32U4).

Descripción General del Hardware


  1. Interfaz DB9 - para conectar a la Interfaz OBDII a través de un Cable DBG-OBD.
  2. V_OBD - Obtiene alimentación de la Interfaz OBDII (desde DB9)
  3. Indicador Led:
    • PWR: alimentación
    • TX: parpadea cuando se están enviando datos
    • RX: parpadea cuando hay datos recibiendo
    • INT: interrupción de datos
  4. Terminal - CAN_H y CAN_L
  5. Pines de Arduino UNO
  6. Conector Grove serial
  7. Conector Grove I2C
  8. Pines ICSP
  9. IC - MCP2551, un transceptor CAN de alta velocidad (hoja de datos)
  10. IC - MCP2515, controlador CAN independiente con interfaz SPI (hoja de datos)
caution

Cuando uses más de dos CAN Bus Shield en una red, debes tomar en consideración la impedancia. Debes cortar P1 en el PCB con un cuchillo, o simplemente remover R3 en el PCB.

Mapa de pines

note

El pin FREE está disponible para otros usos.

Interfaz DB9&OBDii

Pin CS

El pin SPI_CS de V1.2 está conectado a D9 por defecto. Si quieres cambiar a D10, por favor sigue las siguientes instrucciones.

  • Paso1: Echa un vistazo a la parte posterior del PCBA, encontrarás un pad llamado CS.

  • Paso2: Corta el cable entre el pad9 y el pad del medio.

  • Paso3: Solda el pad del medio y el pad 10.

caution

Ten cuidado con el cúter, es fácil lastimarte a ti mismo o al PCBA.

Pines SPI

Los pines SPI (SCK, MISO, MOSI) están enrutados a los pines ICSP por defecto. Pero para algunas placas, los pines SPI están ubicados en D11~D13. Si esto sucede, necesitas hacer algún cambio al PCBA. Echa un vistazo a la parte posterior del PCBA, hay tres pads, MOSI, MISO y SCK, están conectados a A por defecto. Puedes cambiarlos a B si es necesario.

note

Para Arduino UNO, Arduino Mega, Arduino Leonardo y cualquier otra placa Arduino basada en AVR, funciona bien con la configuración por defecto.

caution

Ten cuidado cuando vayas a cambiar los pines SPI, es fácil lastimarte a ti mismo o al PCBA.

Primeros Pasos


Aquí tienes un ejemplo simple para mostrarte cómo funciona el CAN-BUS Shield. En este ejemplo necesitamos 2 piezas de CAN-BUS Shields así como Arduino o Seeeduino.

note

Este ejemplo está construido bajo Arduino IDE versión 1.6.9.

PASO 1: Qué necesitamos

NombreFunciónCantEnlace
CAN-BUS ShieldComunicación CAN Bus2enlace
Seeeduino V4.2Controlador2enlace
Cable Puenteconexión2enlace

PASO 2: Conexión de Hardware

Inserta cada CAN-BUS Shield en Seeeduino V4.2, y conecta los 2 CAN-BUS Shield entre sí mediante 2 cables puente. Se muestra en las imágenes a continuación.

note

CAN_H a CAN_H, CAN_L a CAN_L

PASO 3: Software

Por favor sigue los procedimientos de cómo instalar una librería de arduino para instalar la librería del CAN BUS shield.

Haz clic en el botón de abajo para descargar la librería.

Instala la librería en tu Arduino IDE cuando esté descargada.

Uno de los nodos (un nodo significa Seeeduino + CAN_BUS Shield) actúa como maestro, el otro actúa como esclavo. El maestro enviará datos al esclavo constantemente.

note

Cada nodo puede actuar como maestro antes de que el código sea cargado.

Abre el ejemplo send (File > Examples > CAN_BUS_Shield-master > send) y cárgalo al maestro. Abre el ejemplo receive_check (File > Examples > CAN_BUS_Shield-master > receive_check) y cárgalo al esclavo.

PASO 4: Ver Resultado

Abre el Monitor Serie del Arduino IDE(esclavo), obtendrás los datos enviados desde el maestro.

APIs


1. Establecer la velocidad de baudios

Esta función se utiliza para inicializar la velocidad de baudios del sistema CAN Bus.

Las velocidades de baudios disponibles se listan a continuación:

#define CAN_5KBPS 1 #define CAN_10KBPS 2 #define CAN_20KBPS 3 #define CAN_25KBPS 4 #define CAN_31K25BPS 5 #define CAN_33KBPS 6 #define CAN_40KBPS 7 #define CAN_50KBPS 8 #define CAN_80KBPS 9 #define CAN_83K3BPS 10 #define CAN_95KBPS 11 #define CAN_100KBPS 12 #define CAN_125KBPS 13 #define CAN_200KBPS 14 #define CAN_250KBPS 15 #define CAN_500KBPS 16 #define CAN_666kbps 17 #define CAN_1000KBPS 18

2. Establecer Máscara y Filtro de Recepción

Hay 2 registros de máscara de recepción y 5 registros de filtro en el chip controlador que garantizan que obtengas datos del dispositivo objetivo. Son útiles especialmente en una red grande que consiste en numerosos nodos.

Proporcionamos dos funciones para que utilices estos registros de máscara y filtro. Son:

Máscara:

init_Mask(unsigned char num, unsigned char ext, unsigned char ulData);

Filtro:

init_Filt(unsigned char num, unsigned char ext, unsigned char ulData);

  • num representa qué registro usar. Puedes llenar 0 o 1 para máscara y 0 a 5 para filtro.
  • ext representa el estado del marco. 0 significa que es una máscara o filtro para un marco estándar. 1 significa que es para un marco extendido.
  • ulData representa el contenido de la máscara o filtro.

3. Verificar Recepción

El MCP2515 puede operar en modo de sondeo, donde el software verifica un marco recibido, o usando pines adicionales para señalar que un marco ha sido recibido o la transmisión completada.

Usa la siguiente función para sondear marcos recibidos.

INT8U MCP_CAN::checkReceive(void);

La función retornará 1 si llega un marco, y 0 si no llega nada.

4. Obtener ID CAN

Cuando llegan algunos datos, puedes usar la siguiente función para obtener el ID CAN del nodo "send".

INT32U MCP_CAN::getCanId(void)

5. Enviar Datos

CAN.sendMsgBuf(INT8U id, INT8U ext, INT8U len, data_buf);

Es una función para enviar datos al bus. En la cual:

  • id representa de dónde vienen los datos.
  • ext representa el estado del marco. '0' significa marco estándar. '1' significa marco extendido.
  • len representa la longitud de este marco.
  • data_buf es el contenido de este mensaje.

Por ejemplo, en el ejemplo 'send', tenemos:

unsigned char stmp[8] = 7; CAN.sendMsgBuf(0x00, 0, 8, stmp); //envía el mensaje 'stmp' al bus y dice a otros dispositivos que este es un marco estándar desde 0x00.

6. Recibir Datos

La siguiente función se utiliza para recibir datos en el nodo 'receive':

CAN.readMsgBuf(unsigned char len, unsigned char buf); En condiciones donde las máscaras y filtros han sido establecidos. Esta función solo puede obtener marcos que cumplan los requisitos de máscaras y filtros.

  • len representa la longitud de los datos.
  • buf es donde almacenas los datos.

Generar una Nueva Velocidad de Baudios

Hemos proporcionado muchas velocidades de baudios de uso frecuente, como se muestra a continuación:

#define CAN_5KBPS 1 #define CAN_10KBPS 2 #define CAN_20KBPS 3 #define CAN_25KBPS 4 #define CAN_31KBPS 5 #define CAN_33KBPS 6 #define CAN_40KBPS 7 #define CAN_50KBPS 8 #define CAN_80KBPS 9 #define CAN_83KBPS 10 #define CAN_95KBPS 11 #define CAN_100KBPS 12 #define CAN_125KBPS 13 #define CAN_200KBPS 14 #define CAN_250KBPS 15 #define CAN_500KBPS 16 #define CAN_666KBPS 17 #define CAN_1000KBPS 18

Sin embargo, es posible que aún no puedas encontrar la velocidad que deseas. Aquí proporcionamos un software para ayudarte a calcular la velocidad de baudios que necesitas.

Haz clic aquí para descargar el software, está en chino, pero no te preocupes, es fácil de usar.

note

Este software solo es compatible con el sistema Windows. Si no puedes abrirlo, no dudes en contactar a [email protected] para obtener soporte.

Abre el software, lo que necesitas hacer es establecer la velocidad de baudios que deseas, y luego hacer algunas configuraciones simples, después haz clic en calcular.

Entonces obtendrás algunos datos, cfg1, cfg2 y cfg3.

Necesitas agregar algo de código a la biblioteca.

Abre mcp_can_dfs.h, necesitas agregar el código siguiente alrededor de la línea 272:

#define MCP_16MHz_xxxkBPS_CFG1 (cfg1) // xxx es la velocidad de baudios que necesitas #define MCP_16MHz_xxxkBPS_CFG2 (cfg2) #define MCP_16MHz_xxxkBPS_CFG3 (cfg2)

Luego vamos a la línea 390 aproximadamente, agrega el código siguiente:

#define CAN_xxxKBPS NUM // xxx es la velocidad de baudios que necesitas, y NUM es un número, necesitas obtener uno diferente de las otras velocidades.

Abre mcp_can.cpp, ve a la función mcp2515_configRate(alrededor de la línea 190), luego agrega el código siguiente:

case (CAN_xxxKBPS): cfg1 = MCP_16MHz_xxxkBPS_CFG1; cfg2 = MCP_16MHz_xxxkBPS_CFG2; cfg3 = MCP_16MHz_xxxkBPS_CFG3; break;

Entonces puedes usar la velocidad de baudios que necesitas. Y por favor hazme un pull request en github cuando uses una nueva velocidad, así puedo agregarla a la biblioteca para ayudar a otros usuarios.

Proyectos


Si quieres hacer algunos proyectos increíbles con el shield CAN-BUS, aquí hay algunos proyectos de referencia.

Juegos CAN BUS de Volkswagen

¿Alguna vez quisiste jugar un simulador de coche/camión con un tablero real en tu PC? ¡Yo también! Estoy tratando de controlar un tablero de VW Polo 6R vía CAN Bus con un Arduino Uno y un Seeed CAN Bus Shield. Inspirado por Silas Parker. ¡Gracias Sepp e Is0-Mick por su gran apoyo!

Hackea el CAN-BUS de tu vehículo

Los vehículos modernos vienen equipados con un CAN-BUS Controller Area Network, en lugar de tener un millón de cables corriendo de ida y vuelta desde varios dispositivos en tu coche hasta la batería, está haciendo uso de un sistema más inteligente.

Todas las funciones electrónicas están conectadas al TIPM, (Módulo de Potencia Totalmente Integrado), como solenoides/relés para bloquear las puertas o mini motores para subir las ventanas, etc.

Desde cada nodo (es decir, el panel de interruptores que controla tus ventanas o cerraduras eléctricas de puertas) transmite un mensaje a través del CAN. Cuando el TIPM detecta un mensaje válido reaccionará en consecuencia como, bloquear las puertas, encender las luces y así sucesivamente.

FAQ


P1: No puedo obtener datos de otro dispositivo CAN.

  • Verifica si la conexión es correcta
  • Verifica si la configuración de la velocidad de baudios es correcta

P2: El monitor serie imprime Init Fail.

  • Verifica si la configuración del pin CS coincide con el código. Para CAN Bus Shield V1.1/1.2, el pin CS está conectado a D9, otros están conectados a D10.

P3. ¿Dónde puedo encontrar soporte técnico si tengo otros problemas?

Recursos


Soporte Técnico y Discusión de Productos

¡Gracias por elegir nuestros productos! Estamos aquí para brindarte diferentes tipos de soporte para asegurar que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para satisfacer diferentes preferencias y necesidades.

Loading Comments...