Salidas inesperadas de cuadros desde MCP2515 CANTX

0

Hardware

Estoy intentando construir un hardware de bus CAN básico con dispositivos básicos, como:

  • Arduino Nano
  • ruptura de MCP2515 / TJA1050

Fig.1:EsquemadelarupturadeMCP2515/TJA1050

DebidoaquetengodosnodosCAN,elremitenteyelreceptor,losterminadoresde120Restánhabilitadosporpuentesencadaruptura.

Firmware

DescargoelcódigodeejemplodelabibliotecadelescudodebusCANdeSeeedstudioaestosNanos,hagounNanocomoremitenteyelotrocomoreceptor.

Firmwaredelremitente

#include<SPI.h>#include<mcp_can.h>constintSPI_CS_PIN=9;MCP_CANCAN(SPI_CS_PIN);uint8_ttmp[8]={0xFF,0,0xF0,0x0F,0xAA,0x55,0x0F,0xF0};voidsetup(){//putyoursetupcodehere,torunonce:Serial.begin(115200);delay(1000);Serial.println("MCP2515_TJA1050_Send");
  while (CAN_OK != CAN.begin(CAN_500KBPS, MCP_8MHz)){
    Serial.println("CAN BUS init fail");
    Serial.println("Init CAN BUS again");
    delay(100);
  }
  Serial.println("CAN BUS init OK!");
}

void loop() {
  // put your main code here, to run repeatedly:
  CAN.sendMsgBuf(0x00, 0, 8, tmp);
  for(int i=0; i<8; i++){
    Serial.print(tmp[i],HEX);
  }
  Serial.println();
  Serial.println("Sent already!");
  delay(500);
}

Memo

Si elimino las conexiones MISO / MOSI, se imprimen los errores. Eso prueba un hecho de que Arduino Nano habla bien con MCP2515. Al menos el acceso SPI a los registros de MCP está funcionando bien.

CAN.begin (CAN_500KBPS, MCP_8MHz) se usa ya que Seeedstudio usa 16MHz y mi ruptura usa el cristal de 8MHz.

Revisé el prototipo definido en mcp_can.h.

byte sendMsgBuf(unsigned long id, byte ext, byte len, const byte *buf, bool wait_sent=true);

Entonces, CAN.sendMsgBuf (0x00, 0, 8, tmp) significa los siguientes parámetros:

  • id = 0x00,
  • ext = 0 (falso, como marco básico),
  • len = 8,
  • buf = tmp []
  • wait_sent = true;

Y las sondas lógicas de Saleae se utilizan para verificar CAN_L del transceptor TJA1050 y CANTX de MCP2515 desde el remitente. También leí las instrucciones del sitio web de Saleae para la depuración de bus CAN.

Fig.2,engeneraldelosmensajesCANTX,cada2.85ms

Fig. 3, zoom de un mensaje de CANTX

Forma de onda

Con la ayuda de la medición lógica, el ancho de pulso más estrecho es 2us. Así que la tasa de bits de hecho es de 500 Kbps. Sin embargo, la forma de onda de salida CANTX no se clasifica como un marco de datos, un marco de datos extendidos, un marco remoto, un cuadro de error o un cuadro de desbordamiento.

El patrón es:

  • Pulso negativo negativo de 34us, también conocido como 17bit dominante;
  • 50us high, aka 25bit recessive;
  • 2us low, aka 1bit dominante;
  • repite 50us high y 2us low, 15 veces.
|              |-------------------------------|  |------------------------------- 
|     34us     |            50us               |2 |            50us               
|______________|                               |us|

No hay ningún bit de relleno en los mensajes, por lo que podría tratarse de un cuadro de error, pero tampoco se ajusta a la estructura del cuadro de error.

También sondea los siguientes puntos de prueba.

  • CANL del remitente, tiene actividad de bus.
  • CANRX del remitente, nada.
  • CANL del receptor, nada.
  • CANTX del receptor, nada.
  • CANRX del receptor, nada.

Hay un error en esta configuración de laboratorio. Aunque he revisado la mayoría de los pasos.

No sé por qué el CANTX de MCP2515 genera dicha forma de onda. ¿Alguna pista?

    
pregunta Allan K Liu

0 respuestas

Lea otras preguntas en las etiquetas