Marlin zufälligen Treiberfehler 'coil short circuit crash' beheben (Trinamic TMC)
Problem:
Bei der Verwendung von Trinamic-Treibern mit der Marlin 3D-Drucker-Firmware können gelegentlich Fehler wie
Recv:
Recv: E driver error detected: 0x10136000
Recv: coil short circuit
Recv: X Y Z E
Recv: Enabled true true true true
Recv: Set current 2000 2000 2000 1000
Recv: RMS current 1999 1999 1999 990
Recv: MAX current 2819 2819 2819 1396
Recv: Run current 31/31 31/31 31/31 19/31
Recv: Hold current 15/31 15/31 15/31 9/31
Recv: Global scaler 167/256 167/256 167/256 133/256
Recv: CS actual 31/31 31/31 22/31 19/31
Recv: PWM scale 196716 33095745 65576 33488924
Recv: vsense
Recv: stealthChop true true true true
Recv: msteps 128 128 128 128
Recv: interp true true true true
Recv: tstep 171 678 max 1580
Recv: PWM thresh. 24 24 411 13
Recv: [mm/s] 102 102 3 41
Recv: OT prewarn false false false false
Recv: triggered
Recv: OTP false false false false
Recv: off time 4 4 4 4
Recv: blank time 24 24 24 24
Recv: hysteresis
Recv: -end 2 2 2 2
Recv: -start 1 1 1 1
Recv: Stallguard thrs 0 0 0 0
Recv: uStep count 62 32 227 497
Recv: DRVSTATUS X Y Z E
Recv: sg_result 0 0 395 0
Recv: stallguard
Recv: fsactive
Recv: stst * * *
Recv: olb
Recv: ola
Recv: s2gb *
Recv: s2ga
Recv: otpw
Recv: ot
Recv: Driver registers:
Recv: X 0x00:1F:40:00
Recv: Y 0x00:1F:40:00
Recv: Z 0x80:16:41:8B
Recv: E 0x10:13:60:00
Recv:
Recv:
Recv: echo:Driver error
Recv: Error:Printer halted. kill() called!
Changing monitoring state from "Printing" to "Error"Lösung
Wenn der Fehler immer am Anfang jedes Drucks auftritt, überprüfen Sie unbedingt Ihre Schrittmotor-Einrichtung auf tatsächliche Kurzschlüsse! Messen Sie die Induktivität mit einem LCR-Messgerät, um sicher zu sein; sie sollte etwa dem Nennwert Ihres Motors entsprechen! Siehe diesen Beitrag für Informationen über typische Schrittmotor-Induktivität.
Wenn der Fehler gelegentlich auftritt, wird im Datenblatt empfohlen, konservativere Kurzschluss-Erkennungseinstellungen zu verwenden.
Sie müssen diese Änderung in Marlin/src/module/stepper/trinamic.cpp vornehmen.
Gehen Sie zum Abschnitt für den Treibertyp, den Sie verwenden. In meinem Beispiel wäre dies
// ...
void tmc_init(/* ... */) {
// HINWEIS: tmc_init() ist die Funktion, in die wir Code einfügen müssen!
}
#endifFügen Sie nun direkt vor der TERN(HYBRID_THRESHOLD, /* ... */)-Zeile ein (falls eine solche Zeile nicht existiert, am Ende der Funktion einfügen):
st.shortfilter(3); // 3us SHORT-Filter
st.s2vs_level(15); // Niedrigste Empfindlichkeit Kurzschluss zu Versorgungsspannung
st.s2g_level(15); // Niedrigste Empfindlichkeit Kurzschluss nach Masse
st.shortdelay(1); // 1,5us statt 0,75us Kurzschluss-Verzögerung
Dies sind die konservativsten Einstellungen, die mit diesem Setup möglich sind.
Versuchen Sie nun Ihren Druck erneut.
Falls dies immer noch nicht hilft, können Sie den Kurzschlussschutz vollständig deaktivieren. Beachten Sie, dass der Kurzschlussschutz existiert, um Schäden an Ihrem Schrittmotor, Ihrem Mainboard und Ihrer Verkabelung zu verhindern, daher sollten Sie ihn nur deaktivieren, wenn es keine andere Möglichkeit gibt!
Um den Kurzschlussschutz vollständig zu deaktivieren, fügen Sie diesen Code-Block anstelle des konservativen Einstellungs-Code-Blocks von oben ein:
st.diss2g(true);
st.diss2vs(true);Getestet mit Marlin-Version 2.0.9.1