Академический Документы
Профессиональный Документы
Культура Документы
Pr ctica 1
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
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.
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
FlagRcv =0;
Timer 2 = 0;
¿Timer2
>= 100 ms?
Sí
Lectura de los
sensores
¿FlagRcv No
=
1?
Sí
Leer y guardar
mensaje
Figura 1: Rutina
3 principal.
EXPLICACIÓN DE LA FIGURA 1: RUTINA PRINCIPAL
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𝐻𝑧
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”.
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
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