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
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.
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:
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:
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 demain.Para distinguirlas, el comando
ddetest_can_mkrmanda tramas con y sin el retardo y cuenta las respuestas perdidas: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:
Si no, se añade una tercera terminación y se reproduce el problema.
Criterio de aceptación
edetest_can_mkr) con los cuatro conectados a la vezRelacionado