PIC como identificador de tramas CAN
Para la programación del PIC como emisor de tramas, hemos programado el
microcontrolador empleando la librería existente sobre el bus CAN de
alta velocidad (según norma ISO 11898) y el conexionado al módulo
MCP2515.
Hemos realizado dos versiones de PIC identificador de tramas: una con
una pantalla LCD con integrado I2C y otra con una pantalla OLED
integrada en los pines digitales 2 a 7 del PIC.
Las GPIOs 10, 11, 12 y 13 están reservadas para el conexionado con el
integrado MCP2515 de igual forma que en los apartados anteriores.
El scketch se ha programado de forma que en pantalla indique los
parámetros correspondientes a la trama recibida a través del bus al que
esté conectada la unidad. Los parámetros son:
- Identificador hexadecimal (ID)
- Longitud del campo de datos (DLC) (de 1 a 8 en trama de mensaje y
0 en trama remota).
- Byte o bytes del campo mensaje
Sólo se muestran valores en pantalla cuando se detecta una trama en el
bus (imagen b), permaneciendo la pantalla en reposo si el bus se
encuentra en reposo (imagen a).
El mismo sketch puede emplearse con una ligera modificación para
obtener datos del vehículo a través del conector de diagnosis EOBD.
Para ello sólo es necesario añadir al sketch, en la función loop(), una línea que solicite el
dato que se desea (PIC, según SAE). Para ello emplearemos el
identificador 0x7DF y el campo de datos será {0x02. 0x01. 0xXX. 0x00.
0x00. 0x00. 0x00. 0x00}, siendo XX el valor del byte 3 correspondiente
al dato de la información (PID, en ingles Performance Information Data) que
se pretende obtener (velocidad, temperatura, velocidad de giro del
motor,…).
Los valores de los bytes del campo de datos de la trama de envío para
los distintos PID según la norma SAE pueden consultarse en el siguiente
enlace:
La trama de respuesta obtenida presenta el ID 0x7E8 y su campo de datos
se decodifica según el enlace anterior para cada PID.
Un ejemplo de datos obtenidos con este montaje puede observarse en la
siguiente imagen, para un valor de temperatura del aire de 19 ºC
(obtenido del valor decimal del byte 4 tras la correspondiente
decodificación).
Identificando en el sketch la respuesta para cada PID recibido y
tratando cada dato podremos establecer un entorno de obtención de
información más "amigable". En el siguiente enlace mostramos un breve
vídeo en el que se observa el conexionado del microcontrolador al
conector EOBD a través del módulo MCP2515 y la obtención de la
información solicitada al vehículo.
Otra funcionalidad que nos permite el uso de los PIDs consiste en la
implementación del microcontrolador en el bus CAN del vehículo para
equipar un cuadro de instrumentos digital en el vehículo. El cuadro
digital diseñado muestra los valores usuales de un cuadro de
instrumentos: valores numéricos de velocidad (en km/h) y temperatura
del refrigerante (en ºC) y revoluciones por minuto del motor mediante
un indicador a través de una barra gráfica.
El montaje utilizado es idéntico al empleado de la obtención de PIDs y
el sketch empleado, también similar al del apartado anterior, solicita
de forma cíclica y mediante el identificador 0x7DF y el byte 3, la
información a mostrar en pantalla simultáneamente mediante los PIDs
0x05, (temperatura motor) 0x0C (rpm) y 0x0D (velocidad).
En el siguiente enlace mostramos un breve vídeo en el que se observa el funcionamiento de la pantalla.
[Sketch del identificador
CAN con LCD para
IDE de Arduino]
[Sketch del identificador
CAN con OLED para
IDE de Arduino]
[Sketch de identificador
CAN a demanda en EOBD para
IDE de Arduino]
[Sketch de cuadro digital CAN
mediante EOBD para
IDE de Arduino]
[Librería Wire]
[Librería
LiquidCrystal_I2C]
[Librería Adadfruit_GFX]
[Librería Adafruit-SSD1331]
[Librería SPI]
[Librería
mcp_can]