Вы находитесь на странице: 1из 20

Redes

Automotrices (ISAM 405)

Dr. Luis Abraham Sánchez Gaspariano

Pr ctica 1

Ingeniería en Sistemas Automotrices


FCE-BUAP
Edif. FCE3, planta baja (entre laboratorio de autoacceso y laboratorio de cómputo).
Ciudad Universitaria.

luis.sanchezgas@correo.buap.mx
CAN bus en Arduino UNO

Entre las muchas ventajas que ofrece el Arduino UNO está su capacidad de
expandir sus funciones al conectarse con periféricos especializados para
diferentes tareas. Se pueden encontrar disposi@vos que se montan directamente sobre la placa,
alineándose a los pines hembra del Arduino y a su forma sin necesidad de conectar cables
adicionales. Un periférico que cumpla esta descripción es conocido como shield. Si bien los
shields conectan todos sus pines con los del Arduino, no u@lizan la totalidad de ellos.
Naturalmente, necesitan de un @po de comunicación para poder operar la cual se lleva a cabo
mediante la conexión de sólo una cierta can@dad de pines, lo cual indica que el resto se deja
libre para otras asignaciones. Muchas veces se refiere con el término “apilables” a la forma en
que se conectan, esto significa que muchos de ellos se puedan conectar uno encima de otro,
reduciendo el espacio; no obstante, la comunicación de estos se debe asegurar asignando los
pines adecuados mediante programación.
CAN bus en Arduino UNO

Otra limitante es la capacidad energé@ca de la placa Arduino, pues aunque


el espacio permita conectar varios a la vez no hay garanKa
de que se les pueda alimentar a todos a un nivel ́op@mo,
hay que recordar que la tarjeta puede suministrar 5V a 500
mA.
La can@dad de shields que uno se puede encontrar se
limita a la clase de proyecto que se requiera. Actualmente
hay un shield para cada aplicación que el usuario piense,
creados por fabricantes reconocidos, pequeñas empresas
de electrónica y la comunidad de aficionados y usuarios de
Arduino. Los hay para controlar actuadores, motores, pantallas LCD, cámaras, circuitos
analógicos, para implementar protocolos de comunicación, etc.
Tipos de shields CAN bus para Arduino UNO

A pesar de los cambios de diseño y los componentes que puedan tener estos shields, todas la
opciones @enen la caracterís@ca común de basarse en los chips MCP2515 y MCP2551, usados
comúnmente en las unidades de control de los vehículos.
Tipos de shields CAN bus para Arduino UNO

hYps://www.sparkfun.com/products/13262
hYp://cdn-reichelt.de/documents/datenblaY/A300/113030021_01.pdf
hYp://www.libelium.com/downloads/documenta@on/canbus_communica@on_guide.pdf
MCP2515 – Controlador CAN independiente con
interfaz SPI
El MCP2515 es un transceptor CAN con interfaz de comunicación SPI de alta
velocidad (hasta 10 MHz) para µcontroladores, capaz de transmi@r y recibir
tanto tramas estándar,
extendidas y remotas, con
una longitud del campo de
datos de 0 a 8 bytes.
Cuenta con 2 máscaras y 6
filtros de aceptación de
mensajes. Su consumo es
muy bajo, opera en el
rango de 2.7V a 5.5V con
una corriente de 5mA
cuando está ac@vo.

Su estructura consta de 3 segmentos: un módulo CAN, otro que se encarga de la lógica de


control y un tercer bloque de protocolo SPI.
MCP2515 – Controlador CAN independiente con
interfaz SPI
En el módulo CAN es donde se manipulan los mensajes recibidos y
transmi@dos. Aquí se crean las tramas para enviarse cuando se cargan los
registros y los buffers
apropiados, se verifican
los mensajes recibidos y
pasan por los filtros de
aceptación, se detectan
errores en las tramas
recibidas y se decide en
cual buffer se guardan.
MCP2515 – Controlador CAN independiente con
interfaz SPI
La lógica de control se encarga de pasar información entre los otros dos
bloques. Se encuentran aquí las líneas de transmisión, de interrupción y
reset del controlador.
MCP2515 – Controlador CAN independiente con
interfaz SPI
El bloque de protocolo SPI conecta al transceptor MCP2515 con el
µcontrolador usando comandos de lectura y escritura. Su velocidad permite
que no se pierda la
información generada por
la unidad CAN.
Ejemplo de aplicación del MCP2515

hYp://ww1.microchip.com/downloads/en/devicedoc/21801e.pdf
Empaquetado y descripción de pines
MCP2551 –interfaz entre el controlador del
protocolo CAN y el bus
MCP2551 –interfaz entre el controlador del
protocolo CAN y el bus
MCP2551 –interfaz entre el controlador del
protocolo CAN y el bus

hYp://ww1.microchip.com/downloads/en/
devicedoc/21667e.pdf
En suma …

Uno de sus proyectos de fin de curso consiste en elaborar una red intravehicular con tres nodos
(ECUs). Para asegurar que logre realizar completamente esta encomienda, la primer prácHca del
curso consiste en realizar la red de forma simple, es decir, que conecte mediate un par trenzado
tres shields y verifique en un ordenador que la comunicación es efec@va.
Es importante que tome en cuenta lo siguiente: verificar los pines reservados del Arduino UNO
cuando el shield de CAN bus está montado en éste; que frecuencia de reloj del Arduino es más
conveniente para la red y como puede modificarla mediantep programación; piense en la
conveniencia de uBlizar interrupciones internas y externas en su solución para simplicar la
comunicación. La siguiente semana estaremos dedicando las dos sesiones de la clase para la
realización de la prác@ca. Es importante que esta semana compren sus shields.
Se le comparte el siguiente documento para ayudarlo:
Inicio

Asignación de pines

Configurar e inicializar
ISR_Timer1

Inicializar comunicación Inicializar


entre Shield y Arduino ISR_CAN

FlagRcv =0;

Timer 2 = 0;

¿Timer2
>= 100 ms?

Lectura de los
sensores

¿FlagRcv No
=
1?

Leer y guardar
mensaje

Figura 1: Rutina
3 principal.
EXPLICACIÓN DE LA FIGURA 1: RUTINA PRINCIPAL

Se inicia declarando el pin encargado de la


comunicación entre el Shield y el Arduino el cual es
el D10, esto debido a que:
“Los pines D10, D11, D12 y D13, tienen asignados las líneas SS, MOSI, MISO y SCK
respectivamente para comunicaciones por protocolo SPI.”

Consecutivamente viene la configuración del Timer 1 del Arduino, esto se realizó conforme
a:
• El Timer1 es de 16 bits, puede contar hasta
65535.
• La velocidad del temporizador depende del
cristal de la placa, que es de 16 MHz:
• Según la hoja de datos del ATmega328P, son
4 registros vinculados con el Timer1:
o TCNT1, que almacena el valor del contador.
o OCR1A/B, que es un registro que almacena un valor de comparación.
o TCCR1A/B, que controla al temporizador y sus modos de operación.
o ICR1, que es el registro de captura de entrada.
• Se modificó el registro TIMSK1, que almacena una máscara para la interrupción por
temporizador.
• El registro TCCR1A/B, que se divide en dos bytes, aloja la información para
modificar el preescalador.
Para configurar OCR1A/B se usó un preescalador de 256, con lo que se calculó su valor con
la ecuación:

16 𝑀𝐻𝑧
𝑂𝐶𝑅1𝐴/𝐵 = − 1 = 31249
256 × 2𝐻𝑧

Para terminar de configurar la interrupción interna se tiene que habilitar el modo de


activación por comparación del temporizador 1. Esto se logra escribiendo un 1 a algunos bits
del registro TISMK1, y configurar los demás bits de este registro.

4
Posteriormente se configura la velocidad de
transmisión de 125 Kbps del CAN bus,
asimismo, con ello se le da instrucciones al
Arduino que su conexión con el shield será
de 125 Kbps. Si se establece bien la
conexión, el monitor serial del IDE mandará un “ok”, de lo contrario un “init fail”.

Se pone la bandera de recepción como 0, en sí es una


declaración o una inicialización de su primer estado

Se inicializa el segundo contador, mismo que se ocupará en


bucle, este es para el tiempo
de actualización de datos de los sensores (particularmente,
en esta práctica no se ocuparon sensores, por lo que siempre
se estará mandando:
datos [4] = {n, n, n, n};
Donde 𝑛 = 1 … 6, que son los seis nodos utilizados en la práctica.

5
ISR_CAN

¿Mensaje en No
Buffer?

Si

FlagRcv = 1

Fin

ISR_Timer1

¿Timer 1 >=
No
500 ms?

Si

Enviar mensaje

ID= 0xn

MsgData [0,1,2,3]

Timer1 =0;

Fin

Figura 2: Interrupciones
6 de comunicación.
EXPLICACIÓN FIGURA 2: INTERRUPCIONES DE COMUNICACIÓN

Ambos diagramas de flujos representan una interrupción, la cual se define como:


“Una interrupción indica la ocurrencia de un evento a un procesador. _Este, al recibir la
interrupción, detiene la tarea que está ejecutando, guardando el estado en que la dejó para
pasar a realizar otra subtarea conocida como Subrutina de Servicio de Interrupción (ISR por
el término en inglés Interrupta Servicie Subroutine), saltando hacia la localización en la
memoria asociada con la interrupción. Después de correr la ISR, el procesador restaura el
estado en que había dejado su tarea principal y continúa con su ejecución.”

Con la línea attachInterrupt (0, MCP2515_ISR,


FALLING), se implementó una interrupción
externa, en la que el flanco de bajada del pin será la
activación de la misma, donde al haber una
interrupción externa, hará que la bandera Flagrcv se
ponga en alto, indicando que hay un mensaje.

Se define la ISR correspondiente a la interrupción por comparación. Cabe destacar que, de


acuerdo con la hoja de datos del microcontrolador, esta subrutina tiene una redacción que se
debe respetar para que se reconozca su localización. El nombre que se le debe dar es
ISR(TIMERx_COMPy_vect), donde la variable
\x" se refiere al número de temporizador que se
utiliza y la variable \y" al registro que se compara
(recuérdese que existen 2: OCR1A y OCR1B). En
el caso de la configuración antes declarada el
nombre adecuado que se le debe dar es
ISR(TIMER1_COMPA_vect). Dentro de la ISR
irán solamente la instrucción de envío de
mensaje y un reinicio del contador, por cualquier tipo de retraso que pueda presentarse.

Asimismo, se agregó un código para realizar un monitoreo de la red (siendo en nodo 0),
donde las 6 ECUs pueden enviar y recibir información al CAN bus, en tanto que el nodo de
monitoreo, que simula un sistema de diagnóstico por OBD (“Sistema de Diagnostico Abordo;
se refiere al sistema que monitorea sistemas del auto para validar su correcto funcionamiento,
monitorea principalmente, el control de emisiones y el sistema de control de motor.”)

Referencias
Autor, A., & Autor, A. (Año). Título de la tesis (Tesis de pregrado, maestria o doctoral).
Nombre de la institución, Lugar.
7

Вам также может понравиться