Usando tranceivers del bus CAN con una capa de enlace de datos personalizada

1

Necesitábamos un protocolo de ruido inmune, de bajo costo, multipunto, maestro múltiple (en tiempo real y distribuido) y parece que el bus CAN solo cumple con estos requisitos.

Dado que no hay controladores de lata (hardware de capa de enlace de datos) para MCU de muy bajo costo (como STM32F0) y no hay API fácil de usar que pudimos encontrar para comenzar, no podemos considerar el bus CAN como una pila de comunicación predeterminada de nuestros proyectos.

Entonces, creo que puedo implementar una capa muy pequeña que permitirá implementar cualquier protocolo (como Modbus) sobre UART sobre la capa física CAN mientras aprovecho la detección de colisión de datos utilizando 1 byte inicial como cebo.

Además, supongo que cualquier hardware I2C o 1-Wire puede usar directamente un transmisor CAN para su protocolo de bus con un simple truco de resistencia de diodo, similar a 1-cable < - > uart diodo-resistencia hackear.

Sospecho que me estoy perdiendo algo, ya que este enfoque trae consigo muchas ventajas con un esfuerzo relativamente pequeño, aunque no hay ninguna implementación que pueda encontrar para este propósito.

¿Hay consecuencias ocultas en esta encuesta?

Editar

1-Wire (con corte UART) no funciona con el transceptor CAN MCP2551, ya que el transceptor comienza a alimentarse con cero (dominante) en el punto final (el lado de 1-Wire) lo que evita que cualquier dispositivo escriba "1" en el bus hasta que la función de "detección permanente de TXD" del transceptor asuma el control. Por lo tanto, es inútil desde el punto de vista del "simple extensor de rango de 1 cable". Lo que significa que los pines RXD / TXD del transceptor de bus CAN no se pueden convertir en una línea de drenaje abierta con un simple truco de conversión de 1 cable / uart, por lo que tampoco funcionará con un bus I2C.

Edit-2

El uso de 1 byte como cebo no es eficaz, ya que tenemos que usar solo 1 bit como cero, lo que significa que tenemos que usar 100 bits solo para direccionar si planeamos conectar 100 dispositivos en el mismo bus porque aunque pudimos detectar alguien más está hablando al mismo tiempo pero no podemos detectar la prioridad (por ejemplo, si node#0b101 y node#0b011 hablan al mismo tiempo, leeremos 0b001 , que es la misma respuesta cuando node#0b011 y% El node#0b001 habla. Por lo tanto, node#011 nunca sabrá si tiene la prioridad o no. Por lo tanto, esto es imposible si no usamos una técnica de bit banging y leemos el RX puerto bit a bit. Lo que no tiene sentido porque está reinventando el bus CAN como se mencionó.

    
pregunta ceremcem

3 respuestas

6
  1. Muchos microcontroladores pequeños y baratos tienen CAN incorporado. Mire algunos de los PIC 18 con "8" en su número de pieza. Solo necesita agregar el transceptor CAN físico, como un MCP2551.
  2. Si solo desea una señal diferencial, puede usar una cantidad de controladores / receptores de línea diferencial. No hay nada de malo en usar transceptores CAN para esto, RS-485 u otros también son opciones.

En general, usaría CAN hasta el final. Necesitará una línea de controladores / receptores de una manera u otra. Los transceptores CAN son tan buenos como cualquier otro, pero es más fácil usar el resto de CAN. La principal diferencia con CAN es que los niveles más bajos del protocolo han sido bien pensados y están disponibles a bajo costo e integrados directamente en muchos microcontroladores. RS-485 te ofrece una especificación eléctrica, luego estás solo.

Es mucho más difícil obtener todos los detalles de un bus multipunto correcto y robusto de lo que la mayoría de las personas cree. Utilice CAN. Todo ha sido elaborado y hecho por ti. Envías paquetes enteros a nivel de firmware. El hardware se encarga de la detección de colisiones, el reintento y la generación y validación de la suma de comprobación CRC. Estas son todas las cosas que quieres, y con CAN puedes obtenerlas de forma gratuita.

    
respondido por el Olin Lathrop
2

Hay controladores discretos (MCP2515) que requieren SPI y algunos otros GPIO.

    
respondido por el Lior Bilia
1

No es cierto que CAN no esté disponible en partes pequeñas de Cortex m0. Mira a LPC11C22; Tiene un transceptor CAN incorporado. O el STM32F042. NXP es 3 $ en cantidad, STM32 alrededor de 2 $ pero requiere un transceptor externo que agregue el costo.

Si el costo adicional de una pieza con el controlador CAN no se ajusta a su proyecto, asumo que debe cobrar una tarifa de diseño muy grande para inventar su propio sistema CAN de software y poder compensar. Construir casos de prueba y probar que su propio sistema de bus de datos es confiable, inmune al ruido, "libre" de error de bit, detección de colisiones, árbitro de bus, etc. no es fácil.

    
respondido por el Hans

Lea otras preguntas en las etiquetas