Un tutorial sencillo para CANBUS: 8 pasos
Un tutorial sencillo para CANBUS: 8 pasos
Anonim
Un tutorial sencillo para CANBUS
Un tutorial sencillo para CANBUS

He estado estudiando CAN durante tres semanas y ahora he completado algunas aplicaciones para validar mis resultados de aprendizaje. En este tutorial, aprenderá a usar Arduino para implementar la comunicación CANBUS. Si tiene alguna sugerencia, bienvenido a dejar un mensaje.

Suministros:

Hardware:

  • Maduino Zero CANBUS
  • Módulo de temperatura y humedad DHT11
  • 1.3 "I2C OLED 128x64 - Azul
  • Cable DB9 a DB9 (hembra a hembra)
  • Línea Dupont

Software:

IDE de Arduino

Paso 1: ¿Qué es CANBUS?

¿Qué es CANBUS?
¿Qué es CANBUS?
¿Qué es CANBUS?
¿Qué es CANBUS?

Acerca de CAN

CAN (Controller Area Network) es una red de comunicación en serie que puede realizar un control distribuido en tiempo real. Está desarrollado para la industria automotriz para reemplazar el arnés de cableado complejo con un bus de dos cables.

El protocolo CAN define la capa de enlace de datos y parte de la capa física en el modelo OSI.

El protocolo CAN está estandarizado por ISO con ISO11898 e ISO11519. ISO11898 es el estándar de comunicación CAN de alta velocidad con una velocidad de comunicación de 125 kbps-1 Mbps. ISO11519 es el estándar de comunicación CAN de baja velocidad con una velocidad de comunicación de menos de 125 kbps.

Aquí nos centramos en CAN de alta velocidad.

ISO-11898 describe cómo se transmite información entre dispositivos en una red y se ajusta al modelo de interconexión de sistemas abiertos (OSI) que se define en términos de capas. La comunicación real entre dispositivos conectados por el medio físico está definida por la capa física del modelo

  • Cada unidad CAN conectada al bus puede denominarse nodo. Todas las unidades CAN están conectadas a un bus terminado en cada extremo con resistencias de 120 Ω para formar una red. El bus consta de líneas CAN_H y CAN_L. El controlador CAN determina el nivel del bus basándose en la diferencia en el nivel de potencia en ambos cables. Los niveles de bus se dividen en niveles dominantes y recesivos, que debe ser uno de ellos. El remitente envía el mensaje al receptor haciendo un cambio en el nivel del bus. Cuando se ejecuta la línea lógica "y" en el bus, el nivel dominante es "0" y el nivel recesivo es "1".
  • En el estado dominante, el voltaje de CAN_H es de aproximadamente 3,5 V y el voltaje de CAN_L es de aproximadamente 1,5 V. En el estado recesivo, el voltaje de ambas líneas es de alrededor de 2.5V.
  • La señal es diferencial, por eso CAN obtiene su robusta inmunidad al ruido y tolerancia a fallas. La señal diferencial balanceada reduce el acoplamiento de ruido y permite altas tasas de señalización sobre cable de par trenzado. La corriente en cada línea de señal es igual pero en la dirección opuesta, lo que da como resultado un efecto de cancelación de campo que es clave para bajas emisiones de ruido. El uso de receptores diferenciales balanceados y cableado de par trenzado mejora el rechazo de modo común y la alta inmunidad al ruido de un bus CAN.

CAN Transceptor

El CAN Transceptor es responsable de la conversión entre el nivel lógico y la señal física. Convierta una señal lógica a un nivel diferencial o una señal física a un nivel lógico.

Controlador CAN

El controlador CAN es el componente central de CAN, que realiza todas las funciones de la capa de enlace de datos en el protocolo CAN y puede resolver automáticamente el protocolo CAN.

MCU

La MCU es responsable del control del circuito de función y del controlador CAN. Por ejemplo, los parámetros del controlador CAN se inicializan cuando se inicia el nodo, la trama CAN se lee y se envía a través del controlador CAN, etc.

Paso 2: Acerca de las comunicaciones CAN

Cuando el bus está inactivo, todos los nodos pueden comenzar a enviar mensajes (control multimaestro). El nodo que accede primero al bus tiene derecho a enviar (modo CSMA / CA). Cuando varios nodos comienzan a enviar al mismo tiempo, el nodo que envía el mensaje de ID de alta prioridad obtiene el derecho de enviar.

En el protocolo CAN, todos los mensajes se envían en un formato fijo. Cuando el bus está inactivo, todas las unidades conectadas al bus pueden comenzar a enviar nuevos mensajes. Cuando más de dos células comienzan a enviar mensajes al mismo tiempo, la prioridad se determina en función del identificador. El ID no representa la dirección de destino del envío, sino la prioridad del mensaje que accede al bus. Cuando más de dos celdas comienzan a enviar mensajes al mismo tiempo, cada bit de la identificación libre de intereses se arbitra uno por uno. La unidad que gana el arbitraje puede continuar enviando mensajes, y la unidad que pierde el arbitraje deja de enviar inmediatamente y recibe el trabajo.

El bus CAN es un tipo de bus de transmisión. Esto significa que todos los nodos pueden "escuchar" todas las transmisiones. todos los nodos captarán invariablemente todo el tráfico. El hardware CAN proporciona filtrado local para que cada nodo pueda reaccionar solo a los mensajes interesantes.

Paso 3: marcos

Marcos
Marcos

Los dispositivos CAN envían datos a través de la red CAN en paquetes llamados tramas. CAN tiene cuatro tipos de tramas:

  • Trama de datos: una trama que contiene datos de nodo para su transmisión.
  • Trama remota: una trama que solicita la transmisión de un identificador específico
  • Trama de error: trama transmitida por cualquier nodo que detecta un error.
  • Marco de sobrecarga: un marco para inyectar un retraso entre los datos o el marco remoto

Marco de datos

Hay dos tipos de marcos de datos, estándar y extendido.

El significado de los campos de bits de la Figura es:

  • SOF: el bit de inicio de trama dominante único (SOF) marca el inicio del mensaje y se utiliza para sincronizar los nodos de un bus después de estar inactivos.
  • Identificador: el identificador CAN estándar de 11 bits establece la prioridad del mensaje. Cuanto menor sea el valor binario, mayor será su prioridad.
  • RTR: el bit de solicitud de transmisión remota única (RTR)
  • IDE: un bit de extensión de identificador único dominante (IDE) significa que se está transmitiendo un identificador CAN estándar sin extensión.
  • R0: bit reservado (para su posible uso en futuras modificaciones de la norma).
  • DLC: el código de longitud de datos (DLC) de 4 bits contiene el número de bytes de datos que se transmiten.
  • Datos: se pueden transmitir hasta 64 bits de datos de la aplicación.
  • CRC: la comprobación de redundancia cíclica (CRC) de 16 bits (15 bits más delimitador) contiene la suma de comprobación (número de bits transmitidos) de los datos de la aplicación anterior para la detección de errores.
  • ACK – ACK tiene 2 bits, uno es el bit de reconocimiento y el segundo es un delimitador.
  • EOF: este campo de 7 bits de final de trama (EOF) marca el final de una trama CAN (mensaje) y desactiva el relleno de bits, lo que indica un error de relleno cuando es dominante. Cuando se producen sucesivamente 5 bits del mismo nivel lógico durante el funcionamiento normal, se introduce un bit del nivel lógico opuesto en los datos.
  • IFS: este espacio entre tramas (IFS) de 7 bits contiene el tiempo requerido por el controlador para mover una trama recibida correctamente a su posición adecuada en un área de búfer de mensajes.

Arbitraje

En el estado inactivo del bus, la unidad que comienza a enviar el mensaje primero obtiene el envío correcto. Cuando varias unidades comienzan a enviar al mismo tiempo, cada unidad de envío comienza en el primer bit del segmento de arbitraje. La unidad con el mayor número de niveles dominantes de salida continua puede continuar enviando.

Paso 4: velocidad y distancia

Velocidad y distancia
Velocidad y distancia

El bus CAN es un bus que conecta varias unidades al mismo tiempo. En teoría, no hay límite para el número total de unidades que se pueden conectar. En la práctica, sin embargo, el número de unidades que se pueden conectar está limitado por el retardo de tiempo en el bus y la carga eléctrica. Reduzca la velocidad de comunicación, aumente la cantidad de unidades que se pueden conectar y aumente la velocidad de comunicación, la cantidad de unidades que se pueden conectar disminuye.

La distancia de comunicación está inversamente relacionada con la velocidad de comunicación, y cuanto mayor sea la distancia de comunicación, menor será la velocidad de comunicación. La distancia más larga puede ser de 1 km o más, pero la velocidad es inferior a 40 kps.

Paso 5: hardware

Hardware
Hardware

El módulo Maduino Zero CAN-BUS es una herramienta desarrollada por Makerfabs para la comunicación CANbus, se basa en Arduino, con el controlador CAN y el transceptor CAN, para crear un puerto CAN-bus listo para usar.

  • MCP2515 es un controlador CAN independiente que implementa la especificación CAN. Es capaz de transmitir y recibir datos estándar y extendidos y tramas remotas.
  • El MAX3051 interactúa entre el controlador de protocolo CAN y los cables físicos de las líneas de bus en una red de área de controlador (CAN). El MAX3051 proporciona capacidad de transmisión diferencial al bus y capacidad de recepción diferencial al controlador CAN.

Paso 6: Conexión

Conexión
Conexión

Conecte el módulo DHT11 al módulo CAN-BUS Maduino Zero con cables que se utilizarán como instrumento para admitir la comunicación CAN. Del mismo modo, conecte la pantalla al módulo para recibir los datos y mostrarlos.

La conexión entre Maduino Zero CANBUS y DHT11:

Maduino Zero CANBUS - DHT11

3v3 ------ VCC GND ------ GND D10 ------ DATOS

La conexión entre Maduino Zero CANBUS y OLED:

Maduino Zero CANBUS - OLED

3v3 ------ VCC TIERRA ------ TIERRA SCL ------ SCL SDA ------ SDA

Utilice un cable DB9 para conectar los dos módulos Maduino Zero CANBUS.

Paso 7: Código

El MAX3051 completa la conversión de niveles diferenciales en señales lógicas. El MCP2515 completa la función CAN, como la codificación y decodificación de datos. La MCU solo necesita inicializar el controlador y enviar y recibir datos.

  • Github:
  • Después de instalar Arduino, no hay ningún paquete para admitir la placa (Arduino zero) que se necesita instalar.
  • Seleccione herramientas -> Placa -> Administrador de placa, busque "Arduino zero" e instale "Arduino SAMD Boards".
  • Seleccione Herramientas -> Placa -> Arduino Zero (Puerto USB nativo), seleccione Herramientas -> Puerto -> com…
  • Después de obtener el programa de GitHub, debe asegurarse de que todos los archivos estén en el directorio del proyecto, que contiene archivos de biblioteca compatibles con CANBUS.
  • Instale la biblioteca de sensores DHT de Adafruit, que se utiliza para impulsar el DHT11 para obtener temperatura y humedad.
  • Utilice diferentes direcciones para enviar la temperatura y la humedad por separado en el código Test_DHT11.ino.

CAN.sendMsgBuf (0x10, 0, stmp1.length (), stmp_send1);

retraso (500); CAN.sendMsgBuf (0x11, 0, stmp2.length (), stmp_send2); retraso (500);

"0x10" significa la ID del mensaje, "0" significa el marco estándar, "stmp1.length ()" significa la longitud del mensaje, "stmp_send1" son los datos enviados.

  • En el código Test_OLED.ino, todos los mensajes en el CANBUS se reciben por consulta y la información requerida se muestra en el OLED.
  • Cargue el programa Maduino-CANbus-RS485 / Test_DHT11_OLED / Test_DHT11 / Test_DHT11.ino al módulo que se conectó al sensor y cargue el programa Maduino-CANbus RS485 / Test_DHT11_OLED / Test_OLED / Test_OLED.ino a otro módulo que se conectó al OLED.

Paso 8: mostrar

Show
Show
Show
Show

Encienda los dos módulos, la temperatura y la humedad se mostrarán en la pantalla.