Problema con CAN en STM32

2

Quiero permitir que dos STM32 se comuniquen a través del bus CAN. Uno como transmisor y el otro como receptor. Para hacer eso, combiné cada uno con un transceptor MCP2551. Mientras el Modo de operación CAN se configuró en LOOPBACK, todo parecía estar bien: el controlador pudo enviar mensajes CAN, recibirlos (los suyos) y enviarlos a través de UART a mi PC (funcionó bien). Como siguiente paso quería dejar que se comunicaran entre ellos. Puse el modo de funcionamiento de ellos en NORMAL. Mientras el transmisor enviaba los mismos mensajes que en el modo Loopback y el Receptor no enviaba nada (solo esperaba que llegara algún mensaje), no sucedió nada. Una medición mostró 2,5 V constantes en la salida de los transceptores (estado recesivo) y 3,3 V constantes en el STM32 TX (PA12). ¿Alguien tiene una idea de lo que estoy haciendo mal?

    
pregunta zerocool

2 respuestas

2
Uno como transmisor y el otro como receptor

No funciona de esa manera. CAN es una red de igual a igual. Cualquier nodo puede enviar un mensaje en cualquier momento, y todos los demás nodos de la red reciben el mensaje.

constante 3,3V en el STM32 TX

Esto es claramente un error de firmware. La señal no llega al chip del transceptor del bus CAN, y mucho menos al propio bus CAN.

Cosas a tener en cuenta:

  1. Las líneas CAN se deben juntar alrededor de 60. Eso debería ser 120 Ω en cada extremo del autobús. Si el bus es realmente corto, como unas pocas pulgadas en una sola placa de PC, entonces una sola resistencia de 60 Ω puede ser aceptable.

    En un bus real, esto termina la línea para evitar reflexiones. Sin embargo, esta "terminación" sigue siendo necesaria incluso cuando todo el sistema está agrupado. La resistencia funciona como un conjunto para mantener el bus en estado recesivo cuando no se dirige explícitamente al estado dominante. Esta terminación no es opcional, incluso cuando no tiene nada que ver con terminar la línea de transmisión.

  2. Necesita al menos dos nodos en funcionamiento para tener un bus CAN en funcionamiento. Esto se debe a que el transmisor de un mensaje espera ver confirmado el bit ACK. Con nada más que el transmisor en el bus, nada hará valer ACK, y el transmisor pensará que el mensaje se corrompió y lo reenvió. Pero vea el punto 3.

  3. El estándar CAN intenta evitar que los nodos rotos destruyan todo el bus. Si un nodo ve demasiadas condiciones de error, se apagará por un tiempo. Si solo tiene un nodo que nunca ve ACK, es posible que parte de esta lógica de error se dispare después de un tiempo. No recuerdo de la parte superior de mi cabeza qué condiciones causan el nivel de desactivación, pero no tener un bus completo podría causar que el nodo único se deshabilite solo, al menos un poco.

respondido por el Olin Lathrop
1

Como mencionó que puede ver una constante 3V3 en su TX, le sugiero que verifique su programa nuevamente. Sospecho que un programa se congela después de la puesta en marcha.

Supongo que las conexiones de sus sistemas se realizaron correctamente y que el transceptor sigue funcionando.

    
respondido por el HatimB

Lea otras preguntas en las etiquetas