Sendefehler MCP2515 / Arduino nur bei 10 kbps

OP #7365967
Lesenswert?

Hallo zusammen,

ich habe ein paar MCP2515/TJA1050/8MHz Can-Bus Modul (siehe Google, "MCP2515_CAN", diese blauen Dinger mit zwei Schraubterminals).

Angebunden an einen Arduino Nano, nutze PlatformIO + https://github.com/autowp/arduino-mcp2515 als Library.

Zum Testen habe ich zwei Arduinos+MCP2515, H/L verbunden, und die jumper für die 120Ohm Widerstände gesetzt.

Daten Senden klappt einwandfrei mit 20kbps, 50kbps, 100kbps oder 500kbps. Egal ob mit/ohne Wiederstände, und egal ob kurzes/langes Kabel etc.

Nur mit 10kbps klappt es nicht. TXERR bit gesetzt, Fehlerzähler geht hoch, andere Seite empfängt auch nicht.

Habe zum Testen mal auf eine andere Library umgebaut (https://github.com/pierremolinaro/acan2515), und auch die CNF1-3 register mal mit verschiedenen Einstellungen von https://www.kvaser.com/support/calculators/bit-timing-calculator/ geupdated, hilft alles nichts.

Habe dann den MCP2515 an ein eigenes Netzteil angeschlossen, und wenn ich die Spannung zwischen 5 und 6V variiere, kommt hin und wieder mal ein Paket durch, aber nicht dauerhaft.

Empfangen mit 10kbps (Heizung, Heatronic) klappt ohne Probleme.

Im Oszilloskop kann ich nichts seltsames erkennen.

Hat hier mal einer ähnliche Erfahrungen gemacht oder eine Idee dazu?

Ganz vielen Dank vorab

Moritz

#7365989
Lesenswert?

Christian K. schrieb:

Soweit ich mich erinnern kann, gibt es CAN Transceiver mit integrierter Überwachung auf Busblockaden, die sprechen bei zu langen dominanten Zuständen an und unterbinden diese. Da gibt es welche, die mindestens 20kbs sehen wollen. Wenn auf deinem Board der TJY1050 verbaut ist, dann steht in dessen Datenblatt 60 kbaud up to 1 Mbaud.

Das scheint es wohl zu sein. Der TJA1050 hat ein Timeout wenn TXD zu lange LOW ist von typ. 450us. Durch das bit stuffing ist TXD zwar maximal 5 bits lang LOW, aber bei 10kHz sind das halt dann 500us ...

LG, Sebastian

Angehängte Dateien:
OP #7366089
Lesenswert?

Super vielen Dank, das scheint es zu sein.

Schade, dass da echt nur tdom(TXD) irgendwo versteckt im Datasheet steht, und nicht irgendwo eine minimum usable baud rate oder so etwas.

Der MCP2551 scheint auch nur bis auf 40 kbps runter zu können.

Hier https://github.com/Neuroquila-n8fall/JunkersControl wird das obige Board empfohlen zur Kommunikation mit einer Junkers Heatronic, dann hat der Herr wahrscheinlich mit Glück eins der TJAs bekommen, der eher bei 250us statt 450us liegt...

Es scheint auch keine Transceiver zu geben, die 10 kbps wirklich unterstützen, vielleicht mal was für nen raspberry pico mit bitbanging :/

Danke!

Moritz

#7366102
Lesenswert?

Moritz M. schrieb:

Der MCP2551 scheint auch nur bis auf 40 kbps runter zu können.

Nö, 16kbit/s, RTFM.

"1.5 TXD Permanent Dominant Detection If the MCP2551 detects an extended Low state on the TXD input, it will disable the CANH and CANL output drivers in order to prevent the corruption of data on the CAN bus. The drivers are disabled if TXD is Low for more than 1.25 ms (minimum). This implies a maximum bit time of 62.5 μs (16 kb/s bus rate), allowing up to 20 consecutive transmitted Dominant bits during a multiple bit error and error frame scenario. The drivers remain disabled as long as TXD remains Low. A rising edge on TXD will reset the timer logic and enable the CANH and CANL output drivers."

Seite 12

14 TtxL2busZ TX Permanent Dominant Timer Disable Time 1.25 4 ms

Der kann also mit etwas Glück auch 10kbit/s.

#7366362
Lesenswert?

Moritz M. schrieb:

Schade, dass da echt nur tdom(TXD) irgendwo versteckt im Datasheet steht, und nicht irgendwo eine minimum usable baud rate oder so etwas.

Etwas Salz in die Wunde : Im Datenblatt des 1050er steht ganz am Anfang :It is primarily intended for high-speed automotive applications using baud rates from 60 kbaud up to 1 Mbaud.

Es muss wohl jeder Entwickler irgendwann mal schmerzhaft lernen das man Datenblätter VOLLSTÄNDIG lesen muss. Jede Zeile auf jeder Seite. Oft verstecken sich wichtige Informationen irgendwo ganz weit hinten im Text.

OP #7366594
Lesenswert?

Naja, "primarily intended" heisst für mich nicht "only usable for" ;)

Trotzdem ganz vielen Dank, ich probier mich mal an dem MCP2551 (ja - habe im datasheet gesehen - 16 kbaud).

Ansonsten habe ich endlich einen Grund, mir das programmable input/output vom raspberry pico mal anzuschauen.

Besten Dank an alle!

Moritz

#7366643
Lesenswert?

Mal ne blöde Idee. Man könnte eventuell die Schutzschaltung des TJA1050 überlisten indem man alle 200us den TXD ganz kurz (5-10ns) auf HIGH zieht. Unter Umständen wird das noch nicht einmal auf dem CAN-Bus sichtbar. Ein solch kurzes Signal zu generieren ist für den ATmega328P aber schwierig, und man müsste das Signal noch zwischen MCP2515 TXCAN und den TJA1050 TXD rein-odern ...

LG, Sebastian

#7366999
Lesenswert?

Bau doch einen anderen Transceiver ein. Die sind ja allesamt recht pinkompatibel, hier und da mal ein Pin, der ggf. anderweitig beschaltet werden muss. TJA1042T, MCP2551, SN65HVD255 usw. Bevor wieder herumgemotzt wird, ich habe die Eignung dieser Transceiver auf 10kBit vor dem Schreiben des Beitrags nicht validiert.

Edit: sehe gerade, teilweise schon genannt…

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