Z_MIN & Z Probe auf dem gleichen Pin, derzeit eine sehr dumme Idee. Getestet bis 1.0.4 dev

Ich wollte einen billigen ANet A8 um AutoBed Leveling erweitern. Ich schloss einen kapazitiven Sensor parallel zum Z_MIN an und brachte mit Mühe den notwendigen Code unter - auf Kurven G2/G3 musste ich verzichten.

Nur, der Drucker lief nicht mehr richtig. Z Homing klappt manchmal, meistens nur beim ersten Auslösen von Z_MIN und beim erneuten Runterfahren bei dem Homing wurde der EndStop ignoriert. Das ABL funktionierte im Prinzip. Ich hatte über Wochen einen Hardwarefehler im Verdacht, doch eine alte eingespielte Firmware funktionierte einwandfrei. Damit beließ ich es frustriert.

Heute passte ich diese Repetier Config an einen P3Steel an. Ich hatte fast 2h versucht zu verstehen, warum Z_MIN seitens der Firmware nicht erkannt wurde. Nach einem M119 sah ich, das ein Z-Probe Sensor erwartet wurde, der löste brav aus, aber nicht Z_MIN. FEATURE_Z_PROBE = 0 sorgte dann für ein problemloses Arbeiten.

Ich bin nun etwas zu müde, um genauer in den Code zu schauen. Ich vermute mal im Schnellschuss, das der Status des Port ausgelesen wird und in einer Variablen gespeichert wird. Die einfachste Lösung wäre dann hier, beide Variablen als volatile zu definieren und auf die gleiche Adresse zu legen. Ich werde mich die Tage mal ransetzen.

Es mag eine Frage sein, ob es ein Bug oder nur ein seltener Seiteneffekt einer undokumentierten Möglichkeit ist, doch ich halte es eher für einen Bug. Manche Boards haben nicht genug Ports und diese Konfiguration, Z-Probe und Z-Min auf dem selben Port  logische Lösung.

Comments

  • z-min und z probe müssen identisch sein, es muss aber auch NUR der z-probe angeschlossen sein also kein echter z-min endstop! z-min wird dabei immer L melden aber für z-homing wird z-probe verwendet. Grund ist das der induktive sensor bereits vor z=0 auslöst, was bei z-min bedeutet du kommst nicht mehr runter.

    Wenn er bei Z=0 nicht mehr z-probe H anzeigt must du z-raise before homing aktivieren. Passiert bei manchen Sensoren und dann kann man nicht 2 mal homen weil er beim zweiten mal wegen Z=0 nicht auslöst. Ist aber wie gesagt Sensorabhängig.
  • Dann wäre hier das Problem, das sowohl z-min als auch z-probe definiert sind. Dadurch versucht die Firmware ein normales Z Home zu starten, wechselt aber mittendrin auf z-probe um und prüft beim gestarteten homing beim zweiten Runterfahren weiterhin nur z-min. Den er geht dabei auch nicht auf die fürs ABL definierten Punkte.

    Ich werde es heute Abend testen.

    Im besten Fall sollte dann ein Macro die gleichzeitige Verwendung von z-min und z-probe beim Compilieren abfangen, oder die Firmware auch sicher statt Z Homing die ABL Routinen nutzen.

    Wie auch immer, ich war durch reines Home all in der Lage, ein gedrucktes Teil am Drucker zu zerbrechen, weil die Z Achse in den physikalischen Anschlag fuhr. Insofern halte ich diese jetzige Situation für einen Bug.

    Ursprünglich wollte ich z-min als zusätzlichen Fallsave, wenn der ABL Sensor ausfällt, hier ist notfalls Stop. Nicht ganz sinnlos, der Schlitten fürs Hotend hat etwas Spiel, wenn er mit Gewalt auf das Bett gedrückt wird. Genug, damit ein Schalter dann doch auslöst, wenn der eigentliche Sensor ausgefallen wäre.
    Das sollte gehen, aber er darf wohl dann in der Firmware nicht als z-min definiert sein.
  • Du hast es nicht ganz verstanden. Indem du beides mit gleichem Pin angibst sagst du er soll z probe zum homen verwenden. Das muss sein, weil er sonst das autoleveling nicht korrekt nutzen kann. Evtl. must du sogar die homing coordinaten für Z angeben damit er auf dem Bett ist. Er macht kein neues autoleveling aber mist dabei den Abstand zum Bett und rechnet dann aus der bekannten Bettneigung die Position korrekt aus.

    Du kannst zmin parallel haben, aber er muss so tief sein das er erst unterhalb des Betts triggert. Dabei ist wegen der Rotation der tiefste Punkt des Betts gemeint. Macht natürlich nur sinn wenn das Bett über federn gelagert ist und nachgeben kann. Triggert er vorher kann homing falsch sein. Hängt wie gesagt alles von der Bettrotation und dem Triggerpunkt der echten Probe ab.
  • Das ist ja richtig, wenn man ignoriert, das Repetier hier nicht weiß, ob das Signal vom Sensor oder vom Schalter kommt.
    Physisch triggert der Z-Min Schalter ca. 2 mm nach Z-Probe, Bett ist federnd gelagert. Es geht normalerweise nur im negativen XY Bereich, da der Sensor dann durch den Offset zur Düse quasi in der Luft hängt.


    Mal konkret, warum geht es hier schief?:

    Home Order XYZ, Anet A8, also Cartesian Printer. X-min-pos ist mit -21 angegeben, y-min-Pos mit -12, X-max-length und y-max-length mit je 200, Druckbereich ist 0-200. z-min-Pos ist 0, z-max-length 190. (Vielleicht sollte ich z-min-pos auch mit -2 angeben). Z-Probe war default, nur der Offset zur Düse angepasst. Schalter und Sensor arbeiten, Signal kommt auf dem Board am Testpunkt an. ( In der Home Order kommt das Heizbrett erst hinzu, wenn es prinzipiell funktioniert )
    Der nun beschriebene Ablauf ist bei  1.0.3 und 1.0.4-dev identisch:

    Mit Feature-Z-PROBE 1

    Home All zur Eröffnung-> X macht Home, Y macht Home, ist nun X ist -21, Y -12. Soweit noch gut.
    Nun macht Z Home, wieso auch immer: 
    Beim ersten Kontakt wird z-min auf H gesetzt gesetzt, Z Achse geht wieder ein Stück nach oben. Nun fährt sie langsam runter. Beim nächsten Kontakt bleibt z-min auf L und z-probe geht auf H.
    Repetier ignoriert es und fährt weiter runter.
    Wieso ?
    Es wurde auch nicht die XY Position für das Bedleveling angefahren, XY war wegen der Homeorder da schon mit X -21 und Y mit -12 bekannt. Also war es die normale Homeing Routine, welche sich nicht für das z-probe H interessiert.

    Egal wie man es dreht, er hätte nicht weiter runterfahren dürfen. Das ist bei einer Firmware immer noch ein Fehler, auch Bug genannt, selbst wenn er nur unter seltenen Nebenbedingungen auftritt.

    Oder wieso versucht mit Feature-Z-PROBE 1 Repetier ein normales Z-Homing, wenn es von der Programlogik laut Ihrer Aussage nicht geht ? Eventuell, weil nur einmal eine Auslösung des Schalters erwartet wird, er sich aber zweimal rantastet? Beim ersten Mal wird ja z-min auf H gesetzt. Dann wäre das zweimalig Antasten ein Fehler, nur das war so  bei mir schon bei allen Repetier-Firmware Versionen, ich halte/hielt es daher für normal.


    Mit Feature-Z-PROBE 0 geht es so:

    Home All zur Eröffnung-> X-Home normal, Y-Home normal, Z-Home geht auf Kontakt, fährt wieder ein Stück hoch und nähert sich nochmal langsam dem Kontakt. z-min geht wieder auf H und Z-Achse bleibt stehen.


    Ich baue den A8 gerade auf Alurahmen um, dabei wird auch das Anet Board wegen der begrenzten Flash Kapazität durch ein GenL mit ATmega 2560 ersetzt. Das sollte am Wochenende fertig sein und ich werde dann gerne andere Config's nach Ihren Vorgaben versuchen und auf Wunsch incl. Video posten, falls Ihr diesen Ablauf nicht glaubt.

    Und ja, die Configuration.h wurde extra mit dem Tool erzeugt, ich hatte schon die Erfahrung gemacht, das eine rein manuelle Anpassung nicht immer sinnvoll ist ;) . Ich würde gerne, alleine wegen der privat gekauften Serverlizenz bei Repetier bleiben, daher bleiben auch die SKR 1.3 Boards noch im Schrank. Und es gibt Dinge, die gefallen mir in der Menü Gestaltung bei Repetier einfach besser als bei Marlin.
  • In Endstop.cpp gibt es diesen code:

    #if FEATURE_Z_PROBE
    #if Z_PROBE_PIN == Z_MIN_PIN && MIN_HARDWARE_ENDSTOP_Z
    if (newRead & ENDSTOP_Z_MIN_ID) // prevent different results causing confusion
    newRead |= ENDSTOP_Z_PROBE_ID;
    if (!Printer::isHoming())
    newRead &= ~ENDSTOP_Z_MIN_ID; // could cause wrong signals depending on
    // probe position
    if (Z_PROBE_ON_HIGH ? READ(Z_PROBE_PIN) : !READ(Z_PROBE_PIN))
    newRead |= ENDSTOP_Z_PROBE_ID;
    #endif

    Wie du siehst wird wenn homing flag nicht gesetzt ist z min signal auf low gesetzt. Muss also homing aktiv sein.

    Jetzt mal z homing betrachtet:

    if ((MIN_HARDWARE_ENDSTOP_Z && Z_MIN_PIN > -1 && Z_HOME_DIR == -1) || (MAX_HARDWARE_ENDSTOP_Z && Z_MAX_PIN > -1 && Z_HOME_DIR == 1)) {
    offsetZ2 = 0;
    #if Z_HOME_DIR < 0 && Z_PROBE_PIN == Z_MIN_PIN && FEATURE_Z_PROBE
    if (!Printer::startProbing(true)) {
    return;
    }
    coordinateOffset[Z_AXIS] = 0; // G92 Z offset
    UI_STATUS_UPD_F(Com::translatedF(UI_TEXT_HOME_Z_ID));
    steps = (zMaxSteps - zMinSteps) * Z_HOME_DIR;
    currentPositionSteps[Z_AXIS] = -steps;
    setHoming(true);
    #if defined(Z_PROBE_DELAY) && Z_PROBE_DELAY > 0 && Z_MIN_PIN == Z_PROBE_PIN && Z_HOME_DIR == -1
    HAL::delayMilliseconds(Z_PROBE_DELAY);
    #if NONLINEAR_SYSTEM
    transformCartesianStepsToDeltaSteps(currentPositionSteps, currentNonlinearPositionSteps);
    PrintLine::moveRelativeDistanceInSteps(0, 0, 2 * steps, 0, homingFeedrate[Z_AXIS], true, true);
    currentPositionSteps[Z_AXIS] = (Z_HOME_DIR == -1) ? zMinSteps : zMaxSteps;
    #if NONLINEAR_SYSTEM
    transformCartesianStepsToDeltaSteps(currentPositionSteps, currentNonlinearPositionSteps);
    PrintLine::moveRelativeDistanceInSteps(0, 0, axisStepsPerMM[Z_AXIS] * -ENDSTOP_Z_BACK_MOVE * Z_HOME_DIR, 0, homingFeedrate[Z_AXIS] / ENDSTOP_Z_RETEST_REDUCTION_FACTOR, true, false);
    #if defined(ZHOME_WAIT_UNSWING) && ZHOME_WAIT_UNSWING > 0
    HAL::delayMilliseconds(ZHOME_WAIT_UNSWING);
    #if defined(Z_PROBE_DELAY) && Z_PROBE_DELAY > 0 && Z_MIN_PIN == Z_PROBE_PIN && Z_HOME_DIR == -1
    HAL::delayMilliseconds(Z_PROBE_DELAY);
    #if Z_HOME_DIR < 0 && Z_PROBE_PIN == Z_MIN_PIN && FEATURE_Z_PROBE
    #ifdef Z_PROBE_RUN_AFTER_EVERY_PROBE
    GCode::executeFString(PSTR(Z_PROBE_RUN_AFTER_EVERY_PROBE));
    PrintLine::moveRelativeDistanceInSteps(0, 0, axisStepsPerMM[Z_AXIS] * 2 * ENDSTOP_Z_BACK_MOVE * Z_HOME_DIR, 0, homingFeedrate[Z_AXIS] / ENDSTOP_Z_RETEST_REDUCTION_FACTOR, true, true);   // <------- Zweiter retest mit homing ok
    #if Z_HOME_DIR < 0 && Z_PROBE_PIN == Z_MIN_PIN && FEATURE_Z_PROBE
    Printer::finishProbing();
    setHoming(false);
    int32_t zCorrection = 0;
    #if Z_HOME_DIR < 0 && MIN_HARDWARE_ENDSTOP_Z && FEATURE_Z_PROBE && Z_PROBE_PIN == Z_MIN_PIN
    // Fix error from z probe testing
    zCorrection -= axisStepsPerMM[Z_AXIS] * EEPROM::zProbeHeight();
    // Correct from bed rotation
    //updateCurrentPosition(true);
    //float xt,yt,zt;
    //transformToPrinter(currentPosition[X_AXIS],currentPosition[Y_AXIS],0,xt,yt,zt);
    //zCorrection -= zt;
    #endif

    Er sollte da also zumindest kurz anhalten, ist ja die gleiche Funktion wie beim ersten test wo es auch geklappt hat.

    Danach kommt allerdings eine z korrektur bei der end stops keine Rolle mehr spielen. Insbesondere
    zCorrection -= axisStepsPerMM[Z_AXIS] * EEPROM::zProbeHeight();

    Solange der wert positiv ist kommt er danach also dem Bett näher. Es ist also wichtig das er nicht größer ist als er wirklich ist sonst geht es in der tat ins Bett rein. Hier unbedingt auch nachsehen was im eeprom steht.

    Ist z probing an xhome/yhome ok? Wenn nicht must do homing order HOME_ORDER_XYTZ verwenden, dabei kannst du bestimmen wo z homing geschehen soll. Extruder temperatur kannst du auf 0 lassen für ist egal.
  • Homing bei  X+Y ist einwandfrei, das Problem ist nur beim zweiten Antasten des Schalters. Und er hält dabei nach Augenschein auch nicht an oder verzögert kurz, er fährt gleichmäßig weiter. Laut Repetier Host M119 wurde dabei z-probe ausgelöst. Ich weiß, das das Signal dabei vom Endstop kam. Der war bei einem Aufbau eine Lichtschranke, ist halt einfach zu justieren mit einer Schraube, die in die Schranke reingeht. Das Signal steht dann also auch länger an, wenn die Runterfahrt nicht gestoppt wird.

    Ist kein Vorwurf, der angedachte Umbau auf Alurahmen hat sich durch das Problem etwas beschleunigt. Wie gesagt, hatte Knack gemacht beim billigst A8. Ich brauchte einfach zu lange, vom Überwachen der Endstops am PC bis zur Auslösung des Notstop. Bin halt auch etwas älter und nicht mehr so flink ;)

    Noch ist der P3Steel mit dem Druck der benötigten Teile für den Umbau beschäftigt, der umgebaute A8 bzw. neue AM8 sollte Sonntag wieder verfügbar sein. Ich riskiere es nicht, 2 Drucker gleichzeitig zu verlieren.

    Ich mag mich irren und bin schon lange aus der Materie raus, aber ich werde nach deinen Vorschlägen hinterher auch einen Patch versuchen, der die ersten beiden Male z-min setzt ( bzw. mit setzt) und nicht nur beim allerersten Mal. Irgendwie habe ich das Bauchgefühl, da liegt in dieser Config das Problem. Homing scheint erst nach dem 2.ten Auslösen von z-min wirklich abgeschlossen zu sein. Könnte natürlich auch so schnell geschehen, das ich es nicht mitbekommen kann und daher irre.
  • Homing macht immer 2 tests, das ist korrekt. Er geht beim ersten auslösen zurück und dann noch mal langsamer zum 2. auslösen. Danach kommt halt wie gesagt noch die Korrektur wegen z probe height, bed coating, autoleveling wo keine Prüfung erfolgt.
  • Ich bin am Problem noch dran, der Umbau auf AM8 verzögert sich, ein paar Schrauben sind im Versand.
    Den P3Steel habe ich, da die TMC2209 ankamen, auf SKR1.3 und  somit zwingend Merlin umgerüstet. Keine Probleme, es arbeitet wie ich es erwartet habe. Also ganz unfähig bin ich auch nicht o:)

    Den AM8 werde ich dann nochmal mit Repetier flashen, diesem Problem möchte ich doch nachgehen. Denn ich habe den A8 mehrfach frisch gezogen über fast 1 Jahr mit Repetier aufgesetzt, ohne es je in den Griff zu bekommen. Ist es ein Super DAU Fehler meinerseits oder doch ein sehr rarer Bug. Wie gesagt, beim A8 beim letzten Test war der Sperrholzrahmen gebrochen. Beim stabileren P3Steel musste ich nur ein X-Endstepper ersetzen. 

    Was ich von der Logik einfach nicht verstehe, wenn Homing im Programablauf abgeschlossen wäre und er jetzt beim Z-Probe ist, warum wird dann das vorhandene Signal Z-Probe ignoriert und er fährt weiter runter. Darum denke ich ja, er müsste noch im Homing festhängen, wo das Z-Probe Signal keine Rolle spielt.

    Egal, der nächste Post sagt dann, alles ok, ich bin nur zu Blöd, oder ich poste die Config.h. In jedem Fall ziehe ich  frische Source, nur um irrtümlichen vergessene Änderungen vorzubeugen.
  • Wenn ich das wüste warum es bei dir ignoriert wird ich würds ja sagen. Ich hab einen Drucker mit der Konfiguration und der klappt problemlos. Das einzige was ich mir vorstellen kann ist die korrektur nach dem 2. Test die ja z prpbe height und bed coating ausgleicht. Die könnte zu einer ungewollten Bewegung führen wenn die falsch im eeprom stehen.
Sign In or Register to comment.