Resumen:
Este proyecto ayuda a comprender los conocimientos del protocolo CAN que interconecta dos microcontroladores diferentes, es decir, PIC y Arduino. Controller Area Network o protocolo CAN es una metodología de comunicación entre diversos dispositivos electrónicos como sistemas de gestión del motor, control de marchas, suspensión activa, ABS, control de iluminación, aire acondicionado, airbags, cierre centralizado, etc. Para obtener más aprendizajes, consulte este artículo.
Aquí obtendrá una idea sobre cómo programar el microcontrolador PIC para que interactúe con el controlador CAN (MCP2515) para que actúe como un transceptor. Aquí se utiliza un Microcontrolador PIC16f887 y un Arduino, uno es para detectar la temperatura usando LM35 y el otro es para mostrar los valores recibidos a través del CAN BUS.
Descripción:
Requisitos previos y equipo:
Necesitará lo siguiente:
-
Un PIC16F877A y una placa Arduino o un clon de Arduino (aquí tienes una guía si la necesitas)
-
Un módulo Bluetooth TTL-UART de 5v.
-
LCD y sensor de temperatura LM35.
-
Arduino IDE para programación.
-
Dos CAN Tranciever.
Principio de funcionamiento:
Este proyecto incluye dos partes diferenciadas, una sección de transmisor y una sección de receptor. La sección del receptor consta de un Arduino y una pantalla LCD para mostrar la lectura de temperatura recibida del bus CAN. La sección del transmisor consta de un sensor LM35 interconectado con PIC16F877A. La comunicación entre ambas secciones se realiza mediante el transceptor CAN MCP2515.
Implementación del bus CAN del sensor de temperatura:
El diagrama de bloques del proyecto se muestra en la Figura. El sistema consta de dos nodos CAN. Nodo DISPLAY que lee la temperatura del bus CAN y la muestra en una pantalla LCD. Este proceso se repite continuamente. El otro nodo llamado nodo COLECTOR lee la temperatura de un sensor de temperatura LM35.

Fig. 1: Descripción general del microcontrolador Arduino y la comunicación PIC a través de la interfaz CAN
El procesador de pantalla:
El procesador DISPLAY consta de un Arduino con un módulo CAN MCP2515 y un chip transceptor TJA1040. El microcontrolador funciona desde un cristal de 16MHz. Y MCP2515 tiene una interfaz SPI que se utiliza para conectarse mediante pines SPI en Arduino. Los pines CANH y CANL del chip transceptor están conectados al bus CAN. La pantalla LCD está conectada a Arduino para mostrar los valores de temperatura.
Recepción de datos CAN y control de relés:
Cargue el programa RX.ino después de guardarlo en su computadora y ábralo en el IDE de Arduino.
-
Compile el programa en el IDE de Arduino.
La siguiente función se utiliza para recibir valores del bus CAN y mostrarlos en una pantalla LCD. Las instrucciones detalladas se pueden encontrar aquí.
CAN.readMsgBuf(&len, buf);
Cargando software a Arduino:
Si eres nuevo en Arduino, puedes comenzar aquí . Debes comenzar con Arduino IDE (Arduino Integrated Development Environment) . Descargue el código del enlace siguiente y cárguelo en la placa Arduino.
El procesador COLECTOR:
El procesador COLLECTOR consta de un microcontrolador PIC18F887 con un módulo CAN MCP2515 y un chip transceptor TJA1040. El PIC18F887 se opera desde un cristal de 8 MHz. La entrada MCLR está conectada a un botón de reinicio externo. El sensor de temperatura semiconductor tipo LM35DZ está conectado a la entrada analógica AN0 del microcontrolador. El sensor genera un voltaje analógico directamente proporcional a la temperatura medida, la salida es de 10 mV/C. Por ejemplo, a 20 grados Celsius, el voltaje de salida es de 200 mV. Las salidas CANH y CANL de este chip están conectadas directamente a un cable trenzado que termina en el bus CAN. El TJA1040 es un chip de 8 pines que admite velocidades de datos de hasta 1 Mb/s. El chip puede alimentar hasta 112 nodos. Un voltaje de referencia igual a VDD/2 sale del pin 5 del chip.
Para cambiar la velocidad del módulo Can MCP2515 en el lado del colector, puede utilizar el software de calculadora proporcionado por MikroC. Descargue el archivo incluido en la parte inferior para obtener el software.

Fig. 2: Captura de pantalla de los cálculos de CAN realizados para el microcontrolador MCP2515 en la aplicación MikroC
Este es el formato para cambiar la velocidad del módulo can MCP2515,
CANInitialize (SJW, BRP, Phase_Seg1, Phase_Seg2, Prop_Seg, init_flag);
Aquí está la inicialización realizada aquí para alcanzar 250 Kbps.
CANSPINIitialize (1,2,1,2,4,Can_Init_Flags);
Para obtener detalles sobre el uso de MikroC para programar controladores pic, consulte aquí.
El sistema funciona de la siguiente manera:
-
El procesador DISPLAY que espera que el mensaje de temperatura actual sea enviado desde el procesador COLLECTOR a través del bus CAN.
-
El procesador COLLECTOR mide la temperatura, la formatea y la envía al procesador DISPLAY a través del bus CAN.
-
El procesador DISPLAY lee el mensaje del bus CAN y lo muestra en la pantalla LCD que se repite cada segundo.
Montaje de herrajes:

Fig. 3: Imagen que muestra el circuito receptor CAN basado en Arduino

Fig. 4: Imagen que muestra el circuito del transmisor CAN basado en el PIC MCP2515

Fig. 5: Prototipo de circuitos transmisor y receptor CAN diseñado en protoboards
Haga el circuito como se muestra en el diagrama del circuito.
Código fuente del proyecto
Diagramas de circuito
| Diagrama-de-circuito-Arduino-PIC-Microcontrolador-basado-CAN-Transmisor-Receptor-Circuitos | ![]() |
