¿Es suficiente un microcontrolador habilitado para CAN para conducir un bus CAN?


45

Actualmente hay una serie de módulos CAN integrados en microcontroladores. El PIC18F2480 es un ejemplo de eso. ¿Es ese microcontrolador (con CAN incorporado) capaz de conducir un bus CAN por sí solo o se requiere un transceptor / controlador CAN externo?

Creo que CAN tiene una capa de software y hardware y, por lo que parece, estos microcontroladores habilitados para CAN parecen tener solo el software, pero no indica que pueda o no pueda conducir el bus CAN tal como está.

Estoy buscando conectar más de seis microcontroladores a través de un bus CAN y me gustaría saber si necesito un transceptor en todos ellos o si las cosas integradas pueden manejar la comunicación desde una perspectiva de software y hardware.

Suponga que tendré resistencias de terminación necesarias y otros componentes discretos pequeños (tapas, resistencias, etc.)

Respuestas:


55

Esta es una muy buena pregunta. Como regla general, CAN requiere un transceptor para cada nodo:

ingrese la descripción de la imagen aquí

Sin embargo, bajo ciertas circunstancias, ¡puedes escapar sin ningún transceptor! Esas circunstancias son:

  • Longitud corta del bus (mucho menos de 1 metro)
  • Preferiblemente, todos los microcontroladores están en la misma PCB o pila de PCB.
  • La tasa de bits es baja.
  • El entorno no es demasiado ruidoso eléctricamente.

Estas no son reglas difíciles. Es posible que se salga con la velocidad de bits máxima (1 MB / s) si tiene un bus realmente corto (10 cm).

Para lograr esto, necesita saber un poco sobre lo que hace el transceptor. Como la mayoría de los transceptores, pueden emitir un bus alto o bajo al bus (que representa 1 y 0), pero el 0 puede dominar un 1. IE Si dos transceptores intentan hablar al mismo tiempo, y uno dice 1 y el otro está diciendo 0, entonces el 0 ganará. Podemos recrear la misma situación simplemente usando diodos:

CAN simple

Consulte la nota de aplicación Seimens AP2921: Comunicación a bordo a través de CAN sin transceptor

Pero aquí hay algo aún más interesante: ¡el PIC en realidad tiene soporte de hardware para CAN sin transceptor!

Registro CIOCON

Puede configurar el pin CAN TX para que se comporte exactamente de la misma manera que el transceptor. Esto significa que puede conectar el bus CAN sin los diodos. Sin embargo, todavía necesitarás la resistencia.

CAN más simple


2
Absolutamente fantástica respuesta. Le agradezco mucho el tiempo que tomó para responder. Puede que tenga que ir con el transceptor porque puede haber mucho ruido eléctrico, y aunque todo estará alojado en una "caja", estarán en múltiples pcbs. ¡Gracias de nuevo!
efox29

@ efox29 - De nada. Sin duda, es mejor ir con transceptores si puedes.
Rocketmagnet

Esa configuración sin transceptor era nueva para mí y parece muy interesante para configurar una red simple de controladores en distancias más largas. ¡Agradable!
0x6d64

@ 0x6d64: si lo necesita por mucho tiempo, no olvide utilizar una velocidad de bits baja y la velocidad de respuesta limita los bordes.
Rocketmagnet

1
Tenga en cuenta que esto funcionará si todos los dispositivos en el bus usan la misma configuración y usan un bus CAN de un solo cable. Si desea interactuar con cualquier otra cosa que sea realmente ISO CAN "real" y use un bus de dos hilos, este modo no funcionará.
Jon Watte

10

La familia de microcontroladores LPC11Cxx (basada en ARM Cortex-M0) incluye el transceptor CAN en chip.


3
Si. Derecha. OP pregunta sobre PIC18. Esto no es realmente útil.
Federico Russo

44
@FedericoRusso da un ejemplo con el PIC18, y timrorr ha dado una solución con el controlador incorporado. ¿Qué está mal con eso?
clabacchio

8
@FedericoRusso - No seas tan anal. Esta respuesta es muy interesante.
Rocketmagnet

1
@Rocketmagnet: Entonces P: "¿Cómo hago X?" A: "Haz Y". está bien después de todo? (De su propia respuesta)
Federico Russo

2
@FedericoRusso: si la pregunta ha sido bien respondida a satisfacción del OP, y alguien menciona información relacionada interesante, claro, ¿por qué no?
Rocketmagnet

9

Sí, necesitas un tranceiver. Los pines CAN del micro se reciben y transmiten. El bus CAN en sí utiliza un par trenzado con señalización diferencial en dos cables llamados ALTO y BAJO.

Uno de los trabajos del transceptor es tomar el nivel lógico que presenta en el pin TX y convertirlo en señales de bus CAN:

  • un '1' lógico se representa al no conducir el bus, por lo que las líneas ALTA y BAJA "flotan" a 2.5V, lo que se denomina un "bit recesivo" en la terminología CAN.
  • un '0' lógico se representa conduciendo la línea HIGH hacia arriba y la línea LOW hacia abajo, llamada "bit dominante", ya que anulará cualquier bit recesivo que se transmita.

La otra es tomar lo que está en el bus y volver a convertirlo en un nivel lógico para enviarlo desde el pin RX a su micro.


8

Necesita un chip transceptor CAN entre la CPU y el bus CAN. Echa un vistazo a la MCP2551.

Actualización 17 de agosto de 2017:

Estoy en la conferencia Microchip Masters ahora mismo. Los ingenieros de Microchip me dijeron que una de las piezas nuevas que resultó de la adquisición de Atmel es más barata y mejor que la MCP2551.


1
Microchip está recomendando el 2561 sobre el 2551 ahora. NXP también tiene algunos chips CAN interesantes. La mayoría de las MCU necesitan un transceptor.
Ludwig Schreier

2

Los dispositivos analógicos tienen un circuito transceptor CAN de ejemplo que utiliza un amplificador diferencial.
No he probado esto, solo soy consciente de ello. También interesado si se podría implementar con un amplificador operacional

circuito analógico

Las ventajas de usar el transceptor IC CAN dedicado es que manejarán el arbitraje por usted y no tiene que preocuparse por interferir con el bus. Si solo está observando el bus y no es un entorno de falla crítica, el circuito puede estar bien. Si bien el mcp2551 es muy popular, existen muchas opciones para los chips de interfaz.

Una nueva evolución son los chips de tipo System Base que incluyen regulación de voltaje, modos de alimentación y protección ESD del bus.

Como dijo Timorr anteriormente, el LCP11C24 de NXP es único en el sentido de que el procesador incluye un transceptor CAN. Una placa de demostración con esto cuesta solo $ 19. Otra solución de bajo costo es utilizar la placa de demostración Cypress PSoC5 de $ 9.38, el CY8CKIT-059. El PSoC5 no tiene un controlador CAN; va más allá: el controlador se implementa en los bloques universales tipo FPGA. Los registros del controlador se configuran a través de la GUI del IDE, lo que hace que el filtrado y la I + D sean bastante fáciles.

Un método clave que he encontrado al leer las hojas de datos es que el mcu TTL está etiquetado como CAN-Tx y CAN-Rx, mientras que las líneas de datos de los transceptores al bus siempre están etiquetadas como CAN-H y CAN-L. No me gustan los diagramas en la otra respuesta donde TxRx se muestran conectados al bus; Esto va en contra de la convención y contribuye a la confusión.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.