Skip to content

El bus CAN se cae con los cuatro motores: revisar la terminacion #21

Description

@mmggjj

Síntoma

Con los cuatro motores de tracción conectados, el bus CAN deja de funcionar y el FL (0x141) no responde. Con menos motores parece ir.

Ese «solo falla con los cuatro» es la pista: apunta a un problema de bus, no de software ni de un motor concreto.

La hipótesis principal: terminación

CAN es una línea, no una estrella. Los nodos se cuelgan de un único par de hilos, y los dos extremos físicos —solo esos— llevan una resistencia de 120 Ω entre CAN-H y CAN-L.

  [120Ω]══════╤═══════════╤═══════════╤═══════════[120Ω]
              │           │           │
            motor       motor       ESP32

Sirven para absorber la señal al llegar al final del cable. Sin ellas rebota y se superpone a la señal real, corrompiendo bits.

Las resistencias quedan en paralelo, así que cuantas más haya, menos resistencia total:

Terminaciones Total Qué pasa
1 120 Ω Rebotes desde el extremo suelto; fallo intermitente
2 60 Ω Correcto
3 40 Ω El transceptor va justo
4 30 Ω No puede imponer el nivel dominante: el bus muere

Si cada motor lleva su propia resistencia —el error clásico— con uno o dos el bus aún tira y al conectar los cuatro se cae. Encaja exactamente con el síntoma.

La medida que lo zanja

Con todo sin alimentación, polímetro en resistencia entre CAN-H y CAN-L, en cualquier punto del bus:

Lectura Diagnóstico
~60 Ω Correcto
~120 Ω Solo una terminación
~40 Ω Tres
~30 Ω Cuatro — esta es la causa
Muy alta Ninguna, o el bus está cortado

Son diez segundos. Hacerlo antes de comprar el transceptor: si sale 30 Ω, cambiar de módulo CAN no arregla nada.

Descartar la otra causa

La otra explicación posible es de temporización: hay un fallo conocido del FL cuando las tramas se mandan demasiado seguidas, que se corrige con 250 µs de separación (CAN_INTER_FRAME_US). Ya está aplicado en todos los firmwares y en el sketch del MKR de main.

Para distinguirlas, el comando d de test_can_mkr manda tramas con y sin el retardo y cuenta las respuestas perdidas:

  • Pierde sin retardo y no con retardo → era temporización, y ya está resuelto
  • Pierde en los dos casos → es el bus, y el retardo solo lo estaba tapando

Al montar el SN65HVD230

Muchos módulos traen los 120 Ω soldados en placa. Hay que decidir si el ESP32 queda en un extremo del bus:

  • En un extremo → que lleve su resistencia
  • Colgando del medio → quitarla o cortar el puente

Si no, se añade una tercera terminación y se reproduce el problema.

Criterio de aceptación

  • Medidos ~60 Ω entre CAN-H y CAN-L con el bus completo y sin alimentación
  • Los cuatro motores responden al barrido de IDs (e de test_can_mkr) con los cuatro conectados a la vez
  • Anotado en qué punto del bus está cada nodo y dónde están las dos terminaciones

Relacionado

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bloqueanteBloquea otros trabajoshardwareRequiere el robot o instrumentacionpuesta-en-marchaValidacion con el robot delante

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions