Sensor de temperatura usando interface CAN do microcontrolador PIC

Sensor de temperatura que utiliza la interfaz CAN del microcontrolador PIC

RESUMEN:

Este proyecto ayuda a comprender los conocimientos de la interfaz del protocolo CAN con el microcontrolador PIC. Controller Area Network o protocolo CAN es una metodología de comunicación entre dispositivos electrónicos como sistemas de gestión del motor, control de marchas, suspensión activa, ABS, airbags, control de iluminación, aire acondicionado, 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 utilizan dos microcontroladores PIC16f887, uno para la detección de temperatura mediante LM35 y el otro para mostrar los valores recibidos a través del CAN BUS.

DESCRIPCIÓN:

Requisitos previos y equipo:

Necesitará lo siguiente:

  1. Dos microcontroladores PIC16F887.

  2. Programador de microcontroladores PIC.

  3. Sensor de temperatura LM35.

  4. MikroC a PIC para programación.

  5. Dos CAN Tranciever.

El protocolo CAN se basa en una topología de bus y sólo se requieren dos cables para la comunicación a través de un bus CAN. El bus tiene una estructura multimaestro donde cada dispositivo del bus puede enviar o recibir datos. Sólo un dispositivo puede enviar datos a la vez mientras todos los demás escuchan. Si dos o más dispositivos intentan enviar datos al mismo tiempo, el que tiene mayor prioridad puede enviar sus datos mientras los demás vuelven al modo de recepción.

La siguiente figura muestra un bus CAN con tres nodos. El protocolo CAN se basa en el protocolo CSMA/CD+AMP (Detección de colisiones/acceso múltiple con detección de operador con arbitraje en prioridad de mensajes), que es similar al protocolo utilizado en LAN Ethernet. transmitiendo y esperando

Visão geral da interface CAN

Fig. 1: Descripción general de la interfaz CAN

un período de tiempo aleatorio antes de intentar enviar nuevamente. El protocolo CAN, sin embargo, resuelve el problema de las colisiones utilizando el principio de arbitraje, según el cual sólo el nodo de mayor prioridad tiene derecho a enviar sus datos. Básicamente existen dos tipos de protocolos CAN: 2.0A y 2.0B. CAN 2.0A es el estándar anterior con 11 bits de identificación, mientras que CAN 2.0B es el nuevo estándar ampliado con 29 bits de identificación. Los controladores 2.0B son totalmente compatibles con los controladores 2.0A y pueden recibir y transmitir mensajes en cualquier formato. Hay dos tipos de controladores de 2.0A. El primero es capaz de enviar y recibir sólo mensajes 2.0A, y la recepción de un mensaje 2.0B indicará un error. El segundo tipo de controlador 2.0A (conocido como 2.0B pasivo) envía y recibe mensajes 2.0A, pero también acusa recibo de mensajes 2.0B y luego los ignora.

TERMINACIÓN CAN BUS:

Un bus CAN está terminado para minimizar los reflejos de la señal en el bus. ISO-11898 requiere que el bus tenga una impedancia característica de 120 ohmios. El autobús se puede terminar mediante uno de los siguientes métodos:

  1. Terminación estándar

  2. Terminación dividida

  3. Terminación dividida sesgada

En la terminación estándar, el método de terminación más común, se utiliza una resistencia de 120 ohmios en cada extremo del bus, como se muestra en la Figura siguiente. En la terminación dividida, los extremos del bus están divididos y se utiliza una única resistencia de 60 ohmios, como se muestra en la Figura siguiente. La terminación dividida permite reducir las emisiones y este método está ganando popularidad. La terminación dividida polarizada es similar a la terminación dividida excepto que se utilizan un circuito divisor de voltaje y un capacitor en cada extremo del bus. Este método aumenta el rendimiento EMC del autobús.

Visão geral dos diferentes tipos de terminação de barramento CAN

Fig. 2: Resumen de los diferentes tipos de terminación de bus CAN

Interfaz del microcontrolador PIC CAN:

En general, se puede utilizar cualquier tipo de microcontrolador PIC en diseños basados ​​en bus CAN, pero algunos microcontroladores PIC (por ejemplo, PIC18F258) tienen módulos CAN integrados, que pueden simplificar el diseño de sistemas basados ​​en bus CAN. Los microcontroladores sin módulos CAN integrados también se pueden utilizar en aplicaciones de bus CAN, pero se requiere hardware y software adicional. La figura muestra el diagrama de bloques de una aplicación de bus CAN basada en un microcontrolador PIC, utilizando un microcontrolador tipo PIC16 o PIC12 (por ejemplo, PIC16F887) sin un módulo CAN integrado. El microcontrolador se conecta al bus CAN mediante un chip controlador CAN externo MCP2515 y un chip transceptor de bus MCP2551 o TJA1040CAN. Esta configuración es adecuada para una actualización rápida a un diseño existente utilizando cualquier microcontrolador PIC.

Para obtener detalles sobre los microcontroladores PIC, consulte este enlace y para obtener detalles sobre el uso de MikroC para programar controladores PIC , consulte aquí .

Funciones MikroC CAN:

El lenguaje mikroC proporciona dos bibliotecas para aplicaciones de bus CAN: la biblioteca para microcontroladores PIC con módulos CAN integrados y la biblioteca basada en el uso de un bus SPI para microcontroladores PIC sin módulos CAN integrados.

Se proporcionan las siguientes funciones MikroC:

  • CANSetOperaciónModo

  • CANGetOperationMode

  • CANInicializar

  • CANSetBaudRate

  • CANSetMáscara

  • Filtro CANSet

  • Puedo leer

  • Puede escribir

Modo de funcionamiento CANSet:

La función CANSetOperationMode establece el modo de operación CAN. El prototipo de función es:

voidCANSetOperationMode (modo de carácter, indicador de espera de carácter)

El parámetro wait_flag es 0 o 0 x FF. Si se establece en 0 x FF, los bloques de funciones no regresarán hasta que se establezca el modo solicitado. Si se establece en 0, la función regresa como una llamada sin bloqueo.

El modo puede ser uno de los siguientes:

  • CAN_MODE_NORMAL Modo de funcionamiento normal

  • CAN_MODE_SLEEP Modo de operación en suspensión

  • CAN_MODE_LOOP Modo de operación de bucle invertido

  • CAN_MODE_LISTEN Modo de funcionamiento de sólo escucha

  • CAN_MODE_CONFIG Modo de configuración de operación

CANGetOperationMode:

La función CANGetOperationMode devuelve el modo de operación CAN actual. El prototipo de función es:

charCANGetOperationMode(nulo)

CANInicializar:

La función CANInitialize inicializa el módulo CAN. Todos los registros de máscara se restablecen a 0 para permitir todos los mensajes. Después de ejecutar esta función, se establece el modo normal. El prototipo de función es:

voidCANInitialize(char SJW, char BRP, char PHSEG1, char PHSEG2,

carácter PROPEG, carácter CAN_CONFIG_FLAGS)

dónde,

SJW es el ancho del salto de sincronización

BRP es el preescalador de velocidad en baudios

PHSEG1 es el parámetro de temporización Phase_Seg1

PHSEG2 es el parámetro de temporización Phase_Seg2

PROPSEG es Prop_Seg

CAN_CONFIG_FLAGS puede ser uno de los siguientes indicadores de configuración:

  • CAN_CONFIG_DEFAULT: indicadores predeterminados

  • CAN_CONFIG_PHSEG2_PRG_ON: utilice el valor PHSEG2 proporcionado

  • CAN_CONFIG_PHSEG2_PRG_OFF: utilice el máximo de PHSEG1 o tiempo de procesamiento de información (IPT), lo que sea mayor.

  • CAN_CONFIG_LINE_FILTER_ON: utiliza el filtro de línea de bus CAN para activar

  • CAN_CONFIG_FILTER_OFF: no utilizar el filtro de línea de bus CAN

  • CAN_CONFIG_SAMPLE_ONCE: bus de muestreo una vez en el punto de muestreo

  • CAN_CONFIG_SAMPLE_THRICE: bus de muestreo tres veces antes del punto de muestreo

  • CAN_CONFIG_STD_MSG: acepta solo mensajes de identificador estándar

  • CAN_CONFIG_XTD_MSG: solo acepta mensajes de identificadores extendidos

  • CAN_CONFIG_DBL_BUFFER_ON: utiliza doble almacenamiento en búfer para recibir datos

  • CAN_CONFIG_DBL_BUFFER_OFF: no utilizar doble buffer

  • CAN_CONFIG_ALL_MSG: aceptar todos los mensajes, incluidos los no válidos

  • CAN_CONFIG_VALID_XTD_MSG: acepta solo mensajes de identificador extendido válidos

  • CAN_CONFIG_VALID_STD_MSG: acepta solo mensajes de identificador estándar válidos

  • CAN_CONFIG_ALL_VALID_MSG: acepta todos los mensajes válidos; estos valores de configuración se pueden aplicar con AND bit a bit para formar valores de configuración complejos.

CANEstablecer tasa de baudios:

La función CANSetBaudRate se utiliza para configurar la velocidad en baudios del bus CAN. El prototipo de función es:

voidCANSetBaudRate(char SJW, char BRP, char PHSEG1, char PHSEG2,

carácter PROPSEG, carácter CAN_CONFIG_FLAGS)

Los argumentos de la función son como en la función CANInitialize.

Máscara CANSet:

La función CANSetMask define la máscara para filtrar mensajes. El prototipo de función es:

voidCANSetMask(char CAN_MASK, valor largo, char CAN_CONFIGFLAGS)

CAN_MASK puede ser uno de los siguientes:

  • CAN_MASK_B1 Recibe el valor de la máscara del buffer 1

  • CAN_MASK_B2 Recibir valor de máscara del buffer 2

value es el valor del registro de máscara. CAN_CONFIG_FLAGS puede ser CAN_CONFIG_XTD (mensaje extendido) o CAN_CONFIG_STD (mensaje estándar).

Filtro CANSet:

La función CANSetFilter establece valores de filtro. El prototipo de función es:

voidCANSetFilter(char CAN_FILTER, valor largo, char CAN_CONFIG_FLAGS)

CAN_FILTER puede ser uno de los siguientes:

  • CAN_FILTER_B1_F1 Filtro 1 para el búfer 1

  • CAN_FILTER_B1_F2 Filtro 2 para el buffer 1

  • CAN_FILTER_B2_F1 Filtro 1 para el buffer 2

  • CAN_FILTER_B2_F2 Filtro 2 para el buffer 2

  • CAN_FILTER_B2_F3 Filtro 3 para el buffer 2

  • CAN_FILTER_B2_F4 Filtro 4 para el buffer 2

CAN_CONFIG_FLAGS puede ser CAN_CONFIG_XTD (mensaje extendido) o CAN_CONFIG_STD (mensaje estándar).

Puedo leer:

La función CANRead se utiliza para leer mensajes del bus CAN. Si no hay ningún mensaje disponible, se devuelve 0. El prototipo de función es:

charCANRead(long *id, char *datos, char *datalen, char *CAN_RX_MSG_FLAGS)

id es el identificador del mensaje CAN. Sólo se pueden utilizar 11 o 29 bits según el tipo de mensaje (estándar o extendido). Los datos son una matriz de bytes de hasta 8 donde se almacenan los datos recibidos. datalen es la longitud de los datos recibidos (1 a 8).

CAN_RX_MSG_FLAGS puede ser uno de los siguientes:

  • CAN_RX_FILTER_1 El filtro de búfer de recepción 1 aceptó este mensaje

  • CAN_RX_FILTER_2 El filtro 2 del buffer de recepción aceptó este mensaje

  • CAN_RX_FILTER_3 El filtro 3 del buffer de recepción aceptó este mensaje

  • CAN_RX_FILTER_4 El filtro de búfer de recepción 4 aceptó este mensaje

  • CAN_RX_FILTER_5 El filtro de búfer de recepción 5 aceptó este mensaje

  • CAN_RX_FILTER_6 El filtro de búfer de recepción 6 aceptó este mensaje

  • CAN_RX_OVERFLOW Se produjo un desbordamiento del búfer de recepción

  • CAN_RX_INVALID_MSG Mensaje no válido recibido

  • CAN_RX_XTD_FRAME Mensaje de identificador extendido recibido

  • CAN_RX_RTR_FRAME Mensaje de trama RTR recibido

  • CAN_RX_DBL_BUFFERED Este mensaje tiene doble buffer

Estos indicadores se pueden aplicar con AND bit a bit si se desea.

Puede escribir:

La función CANWrite se utiliza para enviar un mensaje al bus CAN. Se devolverá un cero si el mensaje no se puede poner en cola (búfer lleno). El prototipo de función es:

charCANWrite(id largo, char *datos, char datalen, char CAN_TX_MSG_FLAGS)

id es el identificador del mensaje CAN. Sólo se pueden utilizar 11 o 29 bits según el tipo de mensaje (estándar o extendido). data es un array de bytes de hasta 8 donde se almacenan los datos a enviar. datalen es la longitud de los datos (1 a 8).

CAN_TX_MSG_FLAGS puede ser uno de los siguientes:

  • CAN_TX_PRIORITY_0 Prioridad de transmisión 0

  • CAN_TX_PRIORITY_1 Prioridad de transmisión 1

  • CAN_TX_PRIORITY_2 Prioridad de transmisión 2

  • CAN_TX_PRIORITY_3 Prioridad de transmisión 3

  • CAN_TX_STD_FRAME Mensaje de identificador predeterminado

  • CAN_TX_XTD_FRAME Mensaje de identificador extendido

  • CAN_TX_NO_RTR_FRAME Mensaje no RTR

  • CAN_TX_RTR_FRAME Mensaje RTR

Estos indicadores se pueden aplicar con AND bit a bit si se desea.

Programación de bus CAN:

Para operar el microcontrolador PIC18F258 en el bus CAN, realice los siguientes pasos:

  • Configurar las direcciones de los puertos de E/S del bus CAN (RB2 y RB3)

  • Inicializar el módulo CAN (CANInitialize)

  • Configure el módulo CAN en modo CONFIG (CANSetOperationMode)

  • Establecer registros de máscara (CANSetMask)

  • Establecer registros de filtro (CANSetFilter)

  • Configure el módulo CAN en modo normal (CANSetOperationMode)

  • Escribir/leer datos (CANWrite/CANRead)

Implementación del bus CAN del sensor de temperatura:

A continuación se muestra un diseño simple basado en bus CAN de dos nodos. 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.

Representação em bloco da interface do microcontrolador PIC16F887 no barramento CAN

Fig. 3: Representación en bloque de la interfaz del microcontrolador PIC16F887 en el bus CAN

Procesador de pantalla:

El procesador DISPLAY consta de un microcontrolador PIC18F887 con un módulo CAN MCP2515 y un chip transceptor TJA1040. El PIC18F887 funciona desde un cristal de 8MHz. La entrada MCLR está conectada a un botón de reinicio externo. Y MCP2515 tiene una interfaz SPI que se utiliza para conectarse mediante pines SPI en PIC16f887. Los pines CANH y CANL del chip transceptor están conectados al bus CAN. La pantalla LCD está conectada al PORTB de PIC18F887 para mostrar los valores de temperatura.

Procesador COLECTOR:

El procesador COLLECTOR consta de un microcontrolador PIC18F887 con un módulo CAN MCP2515 y un chip transceptor TJA1040. El PIC18F887 funciona desde un cristal de 8MHz. La entrada MCLR está conectada a un botón de reinicio externo. El sensor de temperatura semiconductor tipo LM35DZ se conecta 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 10mV/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 controlar hasta 112 nodos. El pin 5 del chip emite un voltaje de referencia igual a VDD/2.

El listado de programas se divide en dos partes: el programa DISPLAY y el programa COLLECTOR.

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:

Imagem do circuito receptor baseado em microcontrolador PIC16F887 em um lado do barramento CAN

Fig. 4: Imagen del circuito receptor basado en microcontrolador PIC16F887 en un lado del bus CAN

Protótipo de comunicação PIC16F887 para PIC16F887 via barramento CAN

Fig. 5: Prototipo de comunicación PIC16F887 a PIC16F887 mediante bus CAN

Diagramas de circuito

Diagrama de circuito-PIC16F887-PIC16F887-Microcontrolador-Prototipo de comunicación de bus CAN

Vídeo del proyecto

Volver al blog

Deja un comentario

Los comentarios deben ser aprobados antes de su publicación.