ESP32 CAN funktioniert nicht mit 500Kb/s

OP #7014159
Lesenswert?

Hallo,

ich verwende einen ESP32 mit einem SN65HVD230 CAN-Transceiver und den 
ESP32 standard Funktionen für CAN (keine Bibliothek). Das funktioniert 
gut auf 125Kb/s, aber nicht mit höheren Bitraten.
Die Ziel-Bitrate ist 500Kb/s, aber dabei bekomme ich einen 
ESP_ERR_INVALID_STATE Fehler.
Ich habe es schon ohne Verbindung zu einem CAN Bus getestet, mit einem 
Abschlusswiderstand und an den Bus angeschlossen, jedes Mal das gleiche 
Ergebnis.
Leider habe ich nur ein analoges Oszilloskop und einen Logicanalyzer für 
die Fehlersuche, falls das ein Hardware Problemen ist.
Irgendwelche Ideen, was der Fehler sein könnte?
1
#include "driver/gpio.h"
2
#include "driver/can.h"
3

4
can_message_t message;
5

6
void setup() {
7
  Serial.begin(115200);
8

9
  can_general_config_t g_config = CAN_GENERAL_CONFIG_DEFAULT(GPIO_NUM_4, GPIO_NUM_5, CAN_MODE_NO_ACK);
10
  can_timing_config_t t_config = CAN_TIMING_CONFIG_500KBITS();
11
  can_filter_config_t f_config = CAN_FILTER_CONFIG_ACCEPT_ALL();
12

13
  can_driver_install(&g_config, &t_config, &f_config);
14
  can_start();
15

16
  message.identifier = 0x23;
17
  message.flags = CAN_MSG_FLAG_EXTD;
18
  message.data_length_code = 1;
19
  message.data[0] = 0x04;
20
}
21

22
void loop() {
23
  esp_err_t error = can_transmit(&message, pdMS_TO_TICKS(4300));
24
  if (error != ESP_OK) Serial.println(esp_err_to_name(error));
25
  delay(500);
26
}
Gast #7014294
Lesenswert?

Max B. schrieb:
> Leider habe ich nur ein analoges Oszilloskop und einen Logicanalyzer für
> die Fehlersuche, falls das ein Hardware Problemen ist.
> Irgendwelche Ideen, was der Fehler sein könnte?

Das wird an unsauberen Signalen, falschem Timing oder einem Fehler in 
der Software liegen.

Also solltest du erstmal mit dem Oszi gucken, wie die Signale aussehen, 
dann mit dem LA gucken, ob der den Datenverkehr sauber mitbekommt und 
alles aussieht, wie erwartet und falls nicht, gucken was falsch ist.
OP #7014541
Lesenswert?

Ich bin davon ausgegangen, dass man mit dem analog oszi nichts sieht, 
aber geht, wenn das Signal periodisch gesendet wird.

Bei 125Kb/s sieht alles gut aus. Des ESP sendet ein sinnvolles Signal an 
den Transceiver und das Signal auf dem CAN Bus sieht auch gut aus.

Bei 250Kb/s mach das Signal vom ESP keinen Sinn, deshalb passt auch der 
Bus nicht. Die Flanken haben irgendwie vor dem Umschalten noch ne kleine 
Stufe sollte aber eigentlich kein Problem sein.

Bei 500Kb/s sendet der ESP nichts mehr und auf dem Bus kommt auch nichts 
an.

Das Problem scheint also am ESP zu liegen und nicht am Transceiver.
Ich werde mal probieren das Ganze in Platform.io oder dem ESP-SDK zu 
programmieren, vielleich mach die Arduino IDE was falsch.
Angehängte Dateien:
#7014713
Lesenswert?

Max B. schrieb:
> Bei 250Kb/s mach das Signal vom ESP keinen Sinn, deshalb passt auch der
> Bus nicht. Die Flanken haben irgendwie vor dem Umschalten noch ne kleine
> Stufe sollte aber eigentlich kein Problem sein.

Klingt nach falschen Einstellungen für das Bittiming. Da muss man mal 
schauen, das ist auch ein wenig aufwämndiger, als ein einfacher UART.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren