Alois hat geschrieben:Wenn ich den RF1000 einschalte reagieren die beiden Z-Endschalter sofort. Fahre ich abwärts und drücke den unteren Enschalter hält die Achse sofort an.
Fahre ich aufwärts und drücke den oberen Endschalter hält die Achse sofort an. Bei gedrückten Endschaltern lässt sich die Z-Achse immer in die Gegenrichtung freifahren.
Anders ist das Verhalten nach einer HOME-Fahrt. Beim unteren Endschalter ändert sich nichts. Der obere Endschalter reagiert erst wenn er in seiner Ist-Position ins Minus gefahren wird.
Ist das Normal? Kann man den oberen Endschalter nicht dauerhaft aktiviert lassen?
Das ist kein Bug sondern ein Feature.
Anscheinend ist das Verhalten beim RF1000 genauso wie beimRF2000. Trotz separatem Z-Achse Endschalter passiert nach einer HOME-Fahrt etwas mit dem Z-MIN-ENDSCHALTER.
Das Zauberwort heisst FEATURE_ENABLE_Z_SAFETY
Der obere Z-Achse Endschalter reagiert vor einer HOME-Fahrt sofort. Nach einer HOME-Fahrt wird der Z-Achse Endschalter solange deaktiviert bis die Achse ins MINUS gefahren gefahren wird. Fährt die Achse ins Minus und der obere Endschalter spricht an, fährt die Achse automatisch ein Stück in die Gegenrichtung frei und bleibt dann stehen. Im Display erscheint "EMERGENCY BLOCK". Einen Zustand den es eigentlich nicht geben sollte. Man muss das Gerät auschalten, sonst kommt man aus dieser Nummer nicht mehr raus.
Setzt man man das Feature in der Datei
Configuration.h auf 0 wird die Achse auch nach einer HOME-Fahrt beim Betätigen des oberen Z-Achse Enschalter sofort angehalten. Egal an welcher Position.
Das kann man aber nur machen, wenn man so wie ich die original Enschalter gegen mechanische Endschalter (Präzisions-Mikroschalter Hartmann MBZ1) ausgetauscht hat, die einen gewisses Überfahren erlauben ohne sich gleich zu zerlegen (zerstören).
Der dafür verantwortliche Programmteil für das oben beschriebene Phänomen steht in der Datei
motion.h
Code: Alles auswählen
// Test Z-Axis every step if necessary, otherwise it could easyly ruin your printer!
if(isZNegativeMove() && Printer::isZMinEndstopHit())
{
#if FEATURE_Z_MIN_OVERRIDE_VIA_GCODE && FEATURE_ENABLE_Z_SAFETY
if( Printer::isHomed() )
{
// the following checks shall not allow to continue the z-move in case the z home position is unknown
if( Printer::currentZSteps > -Z_OVERRIDE_MAX )
{
// we allow to overdrive Z-min a little bit so that also G-Codes are able to move to a smaller z-position even when Z-min has fired already
return;
}
// during normal operation, we never should end up here ... typically, the Z-min hardware switch must be reconfigured when you end up here
doEmergencyStop( STOP_BECAUSE_OF_Z_MIN );
}
#endif // FEATURE_Z_MIN_OVERRIDE_VIA_GCODE && FEATURE_ENABLE_Z_SAFETY
setZMoveFinished();
}
if(isZPositiveMove() && Printer::isZMaxEndstopHit())
{
setZMoveFinished();
}