Conexión de microcontrolador a bus de diagnosis mediante EOBD

Vamos a emplear un PIC con el módulo MCP2515 y una pantalla LDC con módulo I2C para conectar al bus CAN de diagnóstico de un vehículo a través del conector EOBD (pin 6 para CAN-H y pin 14 para CAN-L) para obtener tramas de datos del vehículo.

Para identificar los datos de las tramas circulantes a través de un bus CAN (ID, DLC y bytes) emplearemos un microcontrolador Arduino UNO R3 o compatible.

Como materiales para el control electrónico, emplearemos:

Tenemos que considerar que un vehículo transmite datos a través del terminal OBD “a pedido”. Por tanto, debemos realizar una petición a través del microcontrolador que conectemos al conector OBD. Esta petición tiene un formato determinado, establecido por la SAE (en inglés Society of Automotive Engineers) en función del modo de prueba de diagnóstico OBD. Con esta actividad práctica accederemos a datos “en vivo” o “flujo de datos” (modo 1), proporcionando datos en tiempo real.

Para ello emplearemos el identificador 0x7DF y los bytes transmitidos son {0x02. 0x01. 0xXX. 0x00. 0x00. 0x00. 0x00. 0x00.}, siendo XX el byte correspondiente a los datos de información de rendimiento (PID, en ingles Performance Information Data) que se pretenden obtener (velocidad, temperatura, velocidad de giro del motor,…).

Un esquema del conexionado necesario puede verse en la siguiente imagen.

Micro en EOBD


El sketch del identificador CAN con  pantalla LCD lo modificaremos de forma que añadiremos una primera línea a la función loop()que permita enviar la trama de petición. En esta trama de petición, el byte 3 tomará el valor hexadecimal dado por la norma J1939 de la SAE para el envío de datos por un bus CAN bus en sistemas de automoción.

Los valores de los bytes del campo de datos de la trama de envío para los distintos PID según la norma SAE puede consultarse en el siguiente enlace:

[PID SAE Wikipedia]


Como ejemplo de datos obtenidos en la comunicación con el vehículo a través del conector EOBD, el byte 3 puede tomar el valor de:

La trama de respuesta obtenida presenta el ID 0x7E8 y su campo de datos se decodifica de la siguiente forma:

Además de los pines de alimentación Vcc y GND del módulo de relés y de la pantalla LCD, en la siguiente tabla mostramos todos los pines de conexión del PIC.

Pin
Entrada/Salida
D10
Conexión a pin CS de MCP215
D11
Conexión a pin SI de MCP2515
D12
Conexión a pin SO de MCP2515
D13
Conexión a pin SCK de MCP2515
D18=A4
Conexión a pin SDA de módulo I2C de pantalla LCD
D19=A5
Conexión a pin SCL de módulo I2C de pantalla LCD


El conexionado que debe realizarse entre los pines del microcontrolador y los del módulo MCP2515 es el mostrado en la siguiente figura.

MCP2515


La programación del microcontrolador mediante el IDE necesita tener instalado las librerías correspondientes al módulo I2C (Wire), a la pantalla LCD (LiquidCrystal_I2C) y al bus CAN (SPI y mcp_can).