CAN (Controller Area Network) es una red de área de controlador, que es una red de comunicación en serie que puede realizar un control distribuido en tiempo real.
Cuando se piensa en CAN, hay que pensar en la empresa alemana Bosch, porque CAN es desarrollado por esta empresa (e Intel) CAN tiene muchas características excelentes que lo hacen ampliamente utilizado. Por ejemplo: la velocidad de transmisión es de hasta 1 Mbps, la distancia de comunicación es de hasta 10 km, mecanismo de arbitraje de bits sin pérdidas, estructura multimaestro.
En los últimos años, los precios de los controladores CAN se han vuelto cada vez más bajos, y muchas MCU también tienen controladores CAN integrados. Ahora todos los coches están equipados con bus CAN.
Un escenario de aplicación CAN típico:
Estándar de bus CAN
El estándar de bus CAN solo especifica la capa física y la capa de enlace de datos, y se requiere la capa de aplicación definida por el usuario. Los diferentes estándares CAN difieren solo en la capa física.
El transceptor CAN es responsable de la conversión entre niveles lógicos y señales físicas.
Convierta una señal lógica en una señal física (nivel diferencial) o convierta una señal física en un nivel lógico.
Hay dos estándares CAN, a saber, IOS11898 e IOS11519, que tienen diferentes características de nivel diferencial.
La amplitud de nivel alto y bajo es baja y la velocidad de transmisión correspondiente es rápida;
* El modo común de par trenzado elimina la interferencia porque el nivel cambia al mismo tiempo y la diferencia de voltaje permanece sin cambios.
Capa fisica
CAN tiene tres dispositivos de interfaz
Cuando se conectan varios nodos, siempre que uno de ellos sea bajo, el bus es bajo, y solo cuando todos los nodos tienen salida alta, es alto. La llamada "línea y".
Después de que el bus CAN tenga 5 bits idénticos consecutivos, inserte un bit opuesto para generar un borde de transición para la sincronización. Eliminando así los errores acumulados.
Como 485 y 232, la velocidad de transmisión de CAN es inversamente proporcional a la distancia.
Bus CAN, conexión de resistencia terminal:
¿Por qué es de 120Ω, porque la impedancia característica del cable es de 120Ω, para simular una línea de transmisión infinita?
Capa de enlace de datos
La transmisión del bus CAN es una trama CAN, la trama de comunicación CAN se divide en cinco tipos, a saber, trama de datos, trama remota, trama de error, trama de sobrecarga e intervalo de trama.
Las tramas de datos se utilizan para enviar y recibir datos entre nodos, y son el tipo de trama más utilizado; las tramas remotas se utilizan para recibir datos de un nodo receptor a un nodo emisor; las tramas de error son tramas que se utilizan para notificar a otros nodos cuando un nodo encuentra un error de trama; las tramas de sobrecarga son una trama utilizada por el nodo receptor para informar al nodo remitente de su capacidad de recepción; una trama utilizada para aislar tramas de datos y tramas remotas de tramas anteriores.
El marco de datos se divide en marco estándar (2.0A) y marco extendido (2.0B) según la longitud de la sección de arbitraje
Inicio del cuadro
El inicio de la trama se compone de un bit dominante (nivel bajo), el nodo emisor envía el inicio de la trama y otros nodos se sincronizan con el inicio de la trama;
El final de la trama consta de 7 bits invisibles (nivel alto).
Sección de arbitraje
¿Cómo resuelve el bus CAN el problema de la competencia multipunto?
La respuesta la da la sección de arbitraje.
El controlador de bus CAN monitorea el nivel del bus mientras envía datos, si los niveles son diferentes, deja de enviar y realiza otro procesamiento. Si el bit está en la sección de arbitraje, saldrá de la competencia de bus; si está en otras secciones, se generará un evento de error.
Cuanto menor sea el ID de la trama, mayor será la prioridad. Dado que el bit RTR de la trama de datos está en el nivel dominante y la trama remota está en el nivel recesivo, si el formato de trama y el ID de trama son iguales, la trama de datos tiene prioridad sobre la trama remota; dado que el bit IDE de la trama La trama estándar está en el nivel dominante, El bit IDE de la trama extendida es invisible Para tramas estándar y tramas extendidas con el mismo ID en los primeros 11 bits, la prioridad de la trama estándar es mayor que la de la trama extendida.
Sección de control
Hay 6 bits en total. La sección de control de la trama estándar está compuesta por el bit de bandera de trama extendida IDE, el bit reservado r0 y el código de longitud de datos DLC; la sección de control de trama extendida está compuesta por IDE, r1, r0 y DLC.
Segmento de datos
0-8 bytes, estructura de trama corta, buen rendimiento en tiempo real, adecuado para campos de control automotriz e industrial;
Etapa de CRC
El segmento de verificación CRC está compuesto por un valor CRC de 15 bits y un delimitador CRC.
Etapa ACK
Cuando no hay error desde el inicio de la trama recibida por el nodo receptor al segmento CRC, enviará un nivel dominante en el segmento ACK, el nodo emisor enviará un nivel recesivo, y la línea y el resultado serán dominantes. nivel.
Marco remoto
La trama remota se divide en 6 segmentos, que también se dividen en tramas estándar y tramas extendidas, y el bit RTR es 1 (nivel recesivo)
CAN es un bus muy confiable, pero también tiene cinco errores.
Error de CRC: este error se produce cuando los valores de CRC enviados y recibidos son diferentes;
Error de formato: el error se produce cuando el formato del marco es ilegal;
Error de respuesta: este error ocurre cuando el nodo emisor no recibe el mensaje de respuesta en la fase ACK;
Error de envío de bits: el nodo emisor encuentra que el nivel de bus no coincide con el nivel de envío al enviar información y se produce este error;
Error de relleno de bits: este error ocurre cuando se violan las reglas de comunicación en el cable de comunicación.
Cuando ocurre uno de estos cinco errores, el nodo emisor o el nodo receptor enviará una trama de error
Para evitar que algunos nodos cometan errores y envíen tramas de error todo el tiempo, interfiriendo con la comunicación de otros nodos, el protocolo CAN estipula 3 estados y comportamientos de los nodos.
Marco de sobrecarga
Cuando un nodo no está listo para recibir, enviará una trama de sobrecarga para notificar al nodo emisor.
Intervalo de fotogramas
Se utiliza para aislar tramas de datos, tramas remotas y tramas antes de ellos, y no se agrega ningún intervalo de trama antes de tramas de error y tramas de sobrecarga.
Construir nodo CAN
Construya un nodo para realizar el control correspondiente. Se divide en cuatro partes de abajo hacia arriba: circuito de nodo CAN, controlador de controlador CAN, protocolo de capa de aplicación CAN, programa de aplicación de nodo CAN.
Aunque las funciones realizadas por diferentes nodos son diferentes, todos tienen la misma estructura de hardware y software.
El transceptor CAN y el controlador corresponden a la capa física y la capa de enlace de datos de CAN respectivamente para completar el envío y recepción de mensajes CAN; el circuito funcional completa funciones específicas, como la adquisición de señales o periféricos de control; el controlador principal y el software de aplicación siguen El formato del mensaje analiza el mensaje y completa el control correspondiente.
El controlador de hardware CAN es un programa que se ejecuta en el controlador principal (como P89V51). Principalmente completa las siguientes tareas: operaciones basadas en registros, inicializar el controlador CAN, enviar mensajes CAN y recibir mensajes CAN;
Si usa el controlador de hardware CAN directamente, debe modificar el programa de aplicación superior cuando cambie el controlador, que es deficiente en portabilidad. Agregar una capa de unidad virtual a la capa de aplicación y la capa de unidad de hardware puede proteger las diferencias entre los diferentes controladores CAN.
Además de completar la función de comunicación, un nodo CAN también incluye algunos circuitos de función de hardware específicos. El circuito de función impulsa el circuito de función de control directo hacia abajo, y el circuito hacia arriba proporciona la interfaz de función del circuito de función de control para la capa de aplicación. Las funciones específicas incluyen adquisición de señales, visualización hombre-máquina, etc.
El transceptor CAN es para realizar el intercambio del nivel lógico del controlador CAN y el nivel diferencial en el bus CAN. Hay dos esquemas para implementar transceptores CAN, uno es usar el IC del transceptor CAN (es necesario agregar aislamiento de la fuente de alimentación y aislamiento eléctrico), y el otro es usar el módulo transceptor de aislamiento CAN. Se recomienda el segundo tipo.
El controlador CAN es el componente central de CAN, implementa todas las funciones de la capa de enlace de datos en el protocolo CAN y puede completar automáticamente el análisis del protocolo CAN. En general, hay dos tipos de controladores CAN, uno es el controlador IC (SJA1000) y el otro es el MCU (LPC11C00) integrado con el controlador CAN.
La MCU es responsable del control del circuito funcional y el controlador CAN: cuando se inicia el nodo, inicializa los parámetros del controlador CAN; lee y envía tramas CAN a través del controlador CAN; cuando se interrumpe el controlador CAN, maneja la excepción de interrupción del controlador CAN; Señales de control de salida de acuerdo con los datos recibidos;
Lógica de gestión de interfaz: interprete las instrucciones de la MCU, dirija las unidades de registro de cada módulo funcional en el controlador CAN y proporcione información de interrupción e información de estado al controlador principal.
El búfer de envío y el búfer de recepción pueden almacenar la información completa en la red de bus CAN.
El filtrado de aceptación consiste en comparar el código de verificación almacenado con el código de identificación del mensaje CAN, y solo la trama CAN que coincide con el código de verificación se almacenará en el búfer de recepción.
El núcleo CAN implementa todos los protocolos del enlace de datos.
Descripción general de la capa de aplicación del protocolo CAN
El bus CAN solo proporciona servicios de transmisión confiables, por lo que cuando un nodo recibe un mensaje, debe usar el protocolo de la capa de aplicación para determinar quién envió los datos y cuál es el significado de los datos. Los protocolos de capa de aplicación CAN comunes son: CANOpen, DeviceNet, J1939, iCAN, etc.
El controlador de protocolo de la capa de aplicación CAN es un programa que se ejecuta en el controlador principal (como P89V51), define el mensaje CAN de acuerdo con el protocolo de la capa de aplicación y completa el análisis y ensamblaje del mensaje CAN. Por ejemplo, usamos el ID de la trama para indicar la dirección del nodo. Cuando la ID de la trama recibida no pasa la ID del propio nodo, se descarta directamente; de lo contrario, se pasa a la capa superior para su procesamiento; cuando se envía, la ID de la trama es establecido en la dirección del nodo receptor.
CAN transceptor
Hay muchos modos de salida de SJA1000, el más utilizado es el modo de salida normal, el modo de entrada generalmente no selecciona el modo comparador, lo que puede aumentar la distancia de comunicación y reducir la corriente en suspensión.
Según la velocidad de comunicación, el transceptor se divide en transceptor CAN de alta velocidad y transceptor CAN tolerante a fallas.
Se debe utilizar el mismo transceptor CAN en la misma red.
Habrá muchas señales de interferencia en la línea de conexión CAN, y es necesario agregar filtros y circuitos antiinterferentes al hardware
También se puede utilizar un transceptor de aislamiento CAN (filtro integrado y circuito antiinterferencias).
Modo de conexión del controlador CAN y MCU
SJA1000 se puede considerar como una RAM externa, el ancho de la dirección es de 8 bits y admite hasta 256 registros
#define REG_BASE_ADDR 0xA000 // 寄存器基址
unsigned char *SJA_CS_Point = (unsigned char *) REG_BASE_ADDR ;
// 写SJA1000寄存器
void WriteSJAReg(unsigned char RegAddr, unsigned char Value) {
*(SJA_CS_Point + RegAddr) = Value;
return;
}
// 读SJA1000寄存器
unsigned char ReadSJAReg(unsigned char RegAddr) {
return (*(SJA_CS_Point + RegAddr));
}
Escriba los datos en el búfer en el registro continuamente
…… for (i=0;i<len;i++) { WriteSJAReg(RegAdr+i,ValueBuf[i]); }……
Leer continuamente varios registros en el búfer
……for (i=0;i<len;i++) { ReadSJAReg(RegAdr+i,ValueBuf[i]); }……
El archivo de encabezado contiene el esquema:
Cada programa contiene los archivos de encabezado utilizados
Cada programa contiene un archivo de encabezado común, que incluye todos los demás archivos de encabezado
#ifndef __CONFIG_H__ // 防止头文件被重复包含
#define __CONFIG_H__
#include <8051.h> // 包含80C51寄存器定义头文件
#include "SJA1000REG.h" // 包含SJA1000寄存器定义头文件
// 定义取字节运算
#define LOW_BYTE(x) (unsigned char)(x)
#define HIGH_BYTE(x) (unsigned char)((unsigned int)(x) >> 8)
// 定义振荡器时钟和处理器时钟频率(用户可以根据实际情况作出调整)
#define OSCCLK 11059200UL
// 宏定义MCU的时钟频率
#define CPUCLK (OSCCLK / 12)
#endif // __CONFIG_H__
El SJA1000 está en estado de reinicio después del encendido y debe inicializarse antes de que pueda funcionar.
(1) Configure el Bit0 del registro de modo para ingresar al modo de reinicio;
(2) Configure el registro de división de frecuencia del reloj para seleccionar la frecuencia del reloj y el modo CAN;
(3) Configure el filtro de aceptación, configure el código de verificación y el código de protección;
(4) Configure los registros 0 y 1 del temporizador de bus para configurar la tasa de baudios CAN;
(5) Configure el modo de salida;
(6) Borre el Bit0 del registro de modo para salir del modo de reinicio;
Registro de modo
Modo de solo detección: SJA1000 no comprueba el bit de respuesta al enviar tramas CAN;
Modo de solo escucha: En este modo, SJA1000 no enviará tramas de error para la detección automática de la velocidad en baudios; SJA1000 recibe tramas CAN a diferentes velocidades en baudios. Cuando se reciben tramas CAN, indica la velocidad en baudios actual y la velocidad en baudios del bus de la misma manera.
Ajuste de velocidad en baudios
El bus CAN no tiene reloj y utiliza transmisión en serie asíncrona; la velocidad en baudios son los bits de datos enviados en 1 segundo;
Transmisión de tramas CAN:
Pasos para enviar tramas CAN: 1. Verifique el registro de estado y espere a que el búfer de envío esté disponible;
2. Llene el mensaje al búfer de envío;
3. Empiece a enviar.
SJA1000 tiene un búfer de 12 bytes, el mensaje que se enviará se puede escribir a través del registro 16-28, o escribir o leer a través del registro 96-108
Establecer modo de envío
char SetSJASendCmd(unsigned char cmd) {
unsigned char ret;
switch (cmd) {
default:
case 0:
ret = SetBitMask(REG_CAN_CMR, TR_BIT); //正常发送
break;
case 1:
ret = SetBitMask(REG_CAN_CMR, TR_BIT|AT_BIT); //单次发送
break;
case 2:
ret = SetBitMask(REG_CAN_CMR, TR_BIT|SRR_BIT);//自收自发
break;
case 0xff:
ret = SetBitMask(REG_CAN_CMR, AT_BIT);//终止发送
break;
}
return ret;
}
Función de envío
unsigned char SJA_CAN_Filter[8] = { // 定义验收滤波器的参数,接收所有帧
0x00, 0x00, 0x00, 0x00,
// ACR0~ACR3
0xff, 0xff, 0xff, 0xff
// AMR0~AMR3
};
unsigned char STD_SEND_BUFFER[11] = { // CAN 发送报文缓冲区
0x08, // 帧信息,标准数据帧,数据长度 = 8
0xEA, 0x60, // 帧ID = 0x753
0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa // 帧数据
};
void main(void) // 主函数,程序入口{
timerInit();// 初始化
D1 = 0;
SJA1000_RST = 1; // 硬件复位SJA1000
timerDelay(50); // 延时500ms
SJA1000_RST = 0;
SJA1000_Init(0x00, 0x14, SJA_CAN_Filter); // 初始化SJA1000,设置波特率为1Mbps
// 无限循环,main()函数不允许返回
for(;;) {
SJASendData(STD_SEND_BUFFER, 0x0);
timerDelay(100); // 延时1000ms
}
}
¿Por qué el ID de la trama es 0x753? Esto está relacionado con el formato de almacenamiento de la trama CAN en el búfer.
La resistencia del terminal es muy importante, cuando la velocidad en baudios es alta y no se agrega la resistencia del terminal, la señal sobrepasada es muy grave.
SJA1000 tiene un búfer de recepción de 64 bytes (FIFO), que puede reducir los requisitos de MCU. MCU puede confirmar que SJA1000 lee el mensaje después de recibir el mensaje mediante consulta o interrupción.
3. Raspberry Pi Pico: MCU por solo $ 4
4. Hay muchas razones por las que MCU admite la función AI ~
5. En 2020, aprendí 20 principios de ingeniería de software ~
6. La aplicación de ideas de máquinas de estado en el desarrollo integrado ~
Descargo de responsabilidad: este artículo se reproduce en línea y los derechos de autor pertenecen al autor original. Si está involucrado en problemas de derechos de autor, contáctenos, confirmaremos los derechos de autor en función de los materiales de certificación de derechos de autor que proporcione y pagaremos la remuneración del autor o eliminaremos el contenido.