Forum: Mikrocontroller und Digitale Elektronik CAN-Bus funktioniert plötzlich nicht mehr.


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Evahase (Gast)


Lesenswert?

Hey Leute, ich bin am Verzweifeln.

ich habe einen CAN-Bus gebaut. Mittlerweile bin ich wieder in einem 
Laborumfeld in welchen 3 Module an einer Strecke von 3m aufgebaut sind 
(vorne und hinten 120Ohm).

Das Modul ist ein ESP32 mit aufgesetztem SN65HVD230 an PIN4 & 5.

mein Code:
1
#include <CAN.h>
2
3
void setup() {
4
  Serial.begin(115200);
5
  while (!Serial);
6
7
  Serial.println("CAN Sender");
8
9
  // start the CAN bus at 500 kbps
10
  if (!CAN.begin(500E3)) {
11
    Serial.println("Starting CAN failed!");
12
    while (1);
13
  }
14
}
15
16
void loop() {
17
  // send packet: id is 11 bits, packet can contain up to 8 bytes of data
18
  Serial.print("Sending packet ... ");
19
20
  CAN.beginPacket(0x12);
21
  CAN.write('h');
22
  CAN.write('e');
23
  CAN.write('l');
24
  CAN.write('l');
25
  CAN.write('o');
26
  CAN.endPacket();
27
28
  Serial.println("done");
29
}

das "done" wird nie erreicht. Auch nicht mit einer Datenrate von 20. Bei 
endPacket (also da wo die Daten dann auch in der Library versendet 
werden) hängt der ESP bis der Watchdog sein übriges tut...

Ich habe bereits 15 Module mit weit aus komplexeren Code im betrieb. 
Jetzt habe ich nochmal 10 Nachproduziert. Plötzlich greift der Watchdog 
und startet neu. Also habe ich nochmal den Bootloader neu geflasht, und 
mal einen einfachen Code hochgeladen (wie im Beispiel oben). Also habe 
ich eines der 15 "guten" aus meinem Bus genommen, auch hier den SPIFFS 
gelöscht, nen neuen Bootloader drauf und auch diesen einfach CAN-Code 
drauf. Auch das "alte" Modul läuft nun nicht mehr.

Ich verstehe nicht woran es hakt... ich weiß auch nicht wie ich das 
weiter Analysieren kann.

über Tipps würde ich mich freuen

- EVA

von Evahase (Gast)


Lesenswert?

habe hier einen issue gefunden der ganz gut passt:

https://github.com/sandeepmistry/arduino-CAN/issues/10

allerdings ist ja bei mir der transiver dran. Wenn ich die 
entsprechenden Code-Zeilen ersetze, läuft er zwar weiter <- aber eine 
Kommunikation findet dennoch nicht statt :(

EVA

von Achim M. (minifloat)


Lesenswert?

Evahase schrieb:
> Mittlerweile bin ich wieder in einem Laborumfeld

Wo warst du zwischendurch und hat es dort funktioniert?

Evahase schrieb:
> Also habe ich eines der 15 "guten" aus meinem Bus genommen, auch hier
> den SPIFFS gelöscht, nen neuen Bootloader drauf und auch diesen einfach
> CAN-Code drauf. Auch das "alte" Modul läuft nun nicht mehr.

Hast du ein SCM, dann geh in der Historie bis zum known-to-work zurück. 
Irgendwas hat sich verändert. Framework Upgrade, irgendwas im Code, 
Hardware, Versuchsaufbau, Stecker verdreht, Wackelkontakt in der 
Versorgung, usw.

Ach ja, Masseversatz zwischen den CAN-nodes... Jeder differentielle Bus 
funktioniert nur, wenn der input common mode range der Transceiver nicht 
überschritten wird. Im Vehikel macht das notfalls die Karosserie. 
Verbinde mal alle Massen der Teilnehmer entlang des CAN-Bus. Vielleicht 
bringt's ja was?

mfg mf

PS.Evahase schrieb:
> nen neuen Bootloader drauf
Was konfiguriert der BL an der Hardware?
Irgendwelche Write-Once-Per-Power-Cycle-Register?
Geht es mit dem alten Bootloader?

: Bearbeitet durch User
von Kevin M. (arduinolover)


Lesenswert?

Evahase schrieb:
> Ich verstehe nicht woran es hakt... ich weiß auch nicht wie ich das
> weiter Analysieren kann.

Die Funktionen geben doch einen Wert zurück, damit kannst du über die 
Konsole ja zumindest mal einen Status auslesen. Ein Debugger wäre hier 
natürlich von Vorteil.

Hast du dir die Bibliothek mal angeshaut? Für mich sieht das so aus als 
ob die Funktionen mehr Übergabewerte wollen. CAN.beginPacket will neben 
ID noch DLC und RTR.

: Bearbeitet durch User
von Evahase (Gast)


Lesenswert?

Hallo,

na die "alten" Module "sind und bleiben" funktional bei mir im Haus 
installiert auf einem Bus mit einer länge von ~120m.

Allerdings ist der Bus nicht vollständig und daher habe ich noch Module 
nachproduziert. Die neuen Module gehen aber alle nicht, während die 
alten Module alle von Anfang an keine Probleme gemacht haben <- Hardware 
kann ich eigentlich ausschließen (wobei ich evtl. "zufällig" ne 
schlechte Charge erwischt habe und zufällig genau die 10 neuen nicht 
gehen - habe bereits noch nachbestellt). <- allerdings, was gegen dem 
Zufall spricht ist dass ich eben auch ein Funktionierendes Modul "kaputt 
geflashd" habe und jetzt auch der "primitive  Code" nicht mehr 
funktioniert.

das Stimmt, der Wert wird zurückgegeben, <- aber warum ist der 
"plötzlich" ein anderer? Bzw. mein Modul behauptet dass kein Transiver 
vorhanden ist?

DLC und RTR ist ja ein "optionaler" Parameter. Aber auch wenn ich diese 
übergebe ändert sich nichts :/

Ich werde heute nochmal genau die Hardware prüfen kann mir aber schon 
vorstellen bei 1-2 Modulen was verbockt zu haben, aber nicht bei 10 :(

Wenn jemand noch eine andere Idee hat wäre ich dankbar.
Ich mess auch mal mit dem Oszi was am ESP rauskommt und was der BUS 
macht.

EVA

von Evahase (Gast)


Lesenswert?

ach, noch kurz zum Bootloader. Ich habe alle Module (sowohl die alten, 
alsauch die neuen) auf die Version 2.0.1 geflasht. Und das habe ich auch 
nochmal gemacht. Ebenso habe ich die 2.0.0 versucht. <- ist aber immer 
exakt das selbe.

von Peter D. (peda)


Lesenswert?

Evahase schrieb:
> Das Modul ist ein ESP32 mit aufgesetztem SN65HVD230 an PIN4 & 5.

Im Datenblatt des ESP32 finde ich keinen CAN-Bus.
Poste mal nen Link auf den Schaltplan und die CAN-Lib.

Die CAN-Aufrufe sehen extrem merkwürdig aus.
Typisch füllt man einen Puffer mit dem Datenarray, dem ID und der Länge. 
Und zum Schluß setzt man das Sendeflag, damit der CAN-Controller 
loslegen kann.

von Evahase (Gast)


Lesenswert?

@peda na doch, der ESP32 hat nen CAN und wie gesagt es funktioniert ja 
15x

die Lib ist hier:
https://github.com/sandeepmistry/arduino-CAN

was für ein Schaltplan, ich habe einen SN65HVD230 an Pin 4 und 5 
angelötet!

ein vorheriger Thread wäre ggf. "informativ" <- aber dennoch nicht 
direkt das Thema: Beitrag "Probleme mit CAN-Bus und ESP32"

von Peter D. (peda)


Lesenswert?

Evahase schrieb:
> @peda na doch, der ESP32 hat nen CAN und wie gesagt es funktioniert ja
> 15x

Also ich finde nichts im Datenblatt.
Zeig mal den Link zum ESP32 mit CAN.

Lt. der Lib ist da noch ein SJA1000 oder MCP2515 angeschlossen.

von Evahase (Gast)


Lesenswert?


von CÄN (Gast)


Lesenswert?

Peter D. schrieb:

> Lt. der Lib ist da noch ein SJA1000 oder MCP2515 angeschlossen.

Sind die ESP32 CAN Register vielleicht  SJA1000 kompatibel?

von Evahase (Gast)


Lesenswert?

@ Gast

wie gesagt, 15 meiner 25 Module laufen ja problemfrei (wobei ich eines 
der 15 zum "defekt" bekehrt habe) also nur noch 14 von 25.

Selbe Hardware, selbe Software und auch selber BUS.

Jetzt hab ich die 10/11 neuen aus dem Bus rausgenommen und habe einen 
kleinen BUS unter "Laborbedingungen" mit n paar Meter Kabel aufgebaut.

Suche aber nach soliden Debugging-Möglichkeiten (daher dieser Thread 
hier)

- EVA

von Thomas O. (kosmos)


Lesenswert?

hast du 2 Abschlusswiderstände oder 14?

von my2ct (Gast)


Lesenswert?

Thomas O. schrieb:
> hast du 2 Abschlusswiderstände oder 14?

Evahase schrieb:
> Mittlerweile bin ich wieder in einem Laborumfeld in welchen 3 Module
> an einer Strecke von 3m aufgebaut sind (vorne und hinten 120Ohm).

von Evahase (Gast)


Lesenswert?

@kosmos

2 :)

auf dem Bus ~61 Ohm

Aber jo, den Fehler hatte ich auch schon ... da kackt der Bus aber schon 
beim ~8. Modul ab

von Thomas O. (kosmos)


Lesenswert?

Ich habe bei mir meine Nodes mit einem 4 adrigen EIB/KNX Kabel verbunden 
sie hängen also alle an der gleichen +5V, GND, CANL und CANH Leitung 
vielleicht umgehe ich damit einige Probleme.

Bist du dir mit dem Watchdog Reset sicher nicht das dein Reset durch 
Brown out entsteht.

Könntest mal ein paar Elkos entlang deiner Stromversorgung streuen obs 
damit besser wird.

von Peter Z. (hangloose)


Lesenswert?

Wie ist denn die Slope Control beschaltet?

: Wiederhergestellt durch Moderator
von Thomas O. (kosmos)


Lesenswert?

von der Datenrate habe ich noch nichts gelesen bei HighSpeed wirds der 
Slopecontroll Pin auf Masse gelegt.

von Evahase (Gast)


Lesenswert?

ich weiß nicht warum, aber das Aufsetzmodul war defekt ^^

ich habe neue Bestellt und nun läuft wieder alles =)

danke für jeden Tipp

von Thomas O. (kosmos)


Lesenswert?

schick auch mal ein paar Bilder deiner Aufsetztboards

von Evahase (Gast)


Lesenswert?


Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.