error de TXERR en la comunicación CAN

1

Intenté la comunicación CAN usando PIC18F25K80 y MCP2551 . Utilizando dos Nodos, podría transmitir datos de un nodo a otro. Pero, los datos se transmitieron solo cuando el búfer del receptor se configuró para ignorar todos los errores y ambos nodos se configuraron en "Modo normal". Y luego configuré el nodo receptor en el 'Modo de solo escuchar' y los datos se recibieron incluso cuando el búfer de recepción se configuró para 'Recibir todos los mensajes válidos según el bit EXIDEN en el registro RXFnSIDL'.

Pero, como los bits TXERR e IRXIF se establecieron en el nodo de transmisión, los bits TXREQ no se borraron y el mensaje se envió continuamente. ¿Cuál podría ser la razón que causa estos errores?

(He utilizado el oscilador RC interno establecido a 64 MHz y la velocidad en baudios se estableció en 100 kbit / s.)

    
pregunta Arun Shekhar R

3 respuestas

4

El bus CAN debe tener al menos DOS nodos activos. CAN Transmitter considera que una transmisión es exitosa solo si recibe ACK.

Cuando configura un nodo en "Modo de solo escucha", recibe datos pero no lo reconoce. Como no hay otro nodo en el bus, el transmisor no recibe ningún ACK y, por lo tanto, error.

Intente conectar un nodo activo más en el bus y haga la misma experiencia. En cuanto a mi experiencia, no obtendrá ningún error.

    
respondido por el Swanand
4

Como dice Martin, la falta de terminadores adecuados ciertamente puede ser un problema. Sin embargo, los osciladores R-C generalmente no son lo suficientemente precisos para CAN. Por lo general, necesita menos de 1% de desajuste, lo que implicaría un .5% de precisión en cada extremo, lo que los osciladores internos de estos PIC no le darán. Pruebe con un cristal manejando cada PIC y vea si todavía tiene problemas.

Por cierto, he usado el 18F25K80 y el MCP2551 en numerosos diseños y nunca tuve un problema. Sin embargo, usé un cristal cada vez.

Añadido:

Ahora aparece otro problema, que es posible que no tenga una conexión a tierra común entre los dos nodos. Por supuesto esto es importante. Las líneas CAN conducidas por el MCP2551 son diferenciales, pero aún están conectadas directamente. Como tales, tienen un rango de modo común limitado. Ambas líneas flotan a aproximadamente 2.5 V cuando están en estado pasivo. En el estado dominante, cada línea se extrae a unos 900 mV del nivel de inactividad. El MCP2551 puede tolerar una cantidad razonable de compensación de modo común en la recepción, pero, por supuesto, necesita que las líneas estén bastante cerca de los valores nominales cuando transmiten. Tales sistemas CAN requieren una conexión a tierra. En este caso, CAN es un bus de tres hilos: CANH, CANL y tierra.

Lo que probablemente esté sucediendo es que el desplazamiento del modo común está dentro del rango del nodo receptor que se recibirá. Es por esto que obtiene el marco correctamente. Sin embargo, debido al desplazamiento en modo común, no puede colocar con éxito el bit ACK en el bus de tal manera que el transmisor lo vea. Por lo tanto, el transmisor piensa que hay un error y se reintenta.

    
respondido por el Olin Lathrop
1

Lo más probable es que no se termine el cable en ambos extremos con la resistencia 120R. Si se ha hecho y todavía hay problemas, asegúrese de haber configurado la misma configuración de baudios y de CAN en los dos extremos.

    
respondido por el Martin

Lea otras preguntas en las etiquetas