Core XY - one axis is always wrong

Hello, I am trying to install the Repetier FW on my CORE XY. 
previously was for years Marlin on the printer, but since I also change to TCM drivers I have to I anyway to the FW.
at the moment the old drivers are still on it to not have all the problems at the same time. 

For hours I plague with the problem that always runs at least axis Wrong around.

Example X is correct, but Y drives during homing in the wrong direction.
If I change the direction of Y 
I trigger a homeing of Y drives the X axis brotal in front of the frame because of course the limit switch of Y can not trigger.

I have the feeling that every change achieves exactly the opposite.
I do not understand the logic behind this. 

is there any other point besides INVERT_*_DIR 

it can't be the wiring? under Marlin everything ran correctly. 
«1

Comments

  • last try

    // ################# XYZ movements ###################

    #define X_ENABLE_ON 0
    #define Y_ENABLE_ON 0
    #define Z_ENABLE_ON 0
    #define DISABLE_X 0
    #define DISABLE_Y 0
    #define DISABLE_Z 0
    #define DISABLE_E 0
    #define PREVENT_Z_DISABLE_ON_STEPPER_TIMEOUT
    #define INVERT_X_DIR -1
    #define INVERT_X2_DIR 0
    #define INVERT_Y_DIR 0
    #define INVERT_Y2_DIR 0
    #define INVERT_Z_DIR 1
    #define INVERT_Z2_DIR 0
    #define INVERT_Z3_DIR 0
    #define INVERT_Z4_DIR 0
    #define X_HOME_DIR -1
    #define Y_HOME_DIR -1
    #define Z_HOME_DIR -1
    #define X_MAX_LENGTH 220
    #define Y_MAX_LENGTH 190
    #define Z_MAX_LENGTH 230
    #define X_MIN_POS 0
    #define Y_MIN_POS 0
    #define Z_MIN_POS 0
    #define PARK_POSITION_X 0
    #define PARK_POSITION_Y 0
    #define PARK_POSITION_Z_RAISE 10
  • Hi,

    I know this problem.
    For Firmware 1.0x

    1. step:
    check if you have used the right drive system:
    #define DRIVE_SYSTEM 1  ??

    check the description in config tool;

    2. if this is correct, you may have connect the x-Motor to the y-Motor pins - and the other one too..
    Its hard to know which motor is for what axis due to the fact, that for each move both have to move with the right stepps, defined with step 1.
    In my case the wrong  x and y motor assignment was the reason..

    3. is there any other point besides INVERT_*_DIR 

    --> you do not need to change the direction in firmware and re-kompilation - just switch of your printer and then change your motor-pins by turning 180°.- on your board or the pin-Connection out of your motors..

    4. Maybe..
    you set the wrong homing-direction.
    were are your endstoppes located? at x and y min or max position..

    #define X_HOME_DIR -1
    #define Y_HOME_DIR -1

    not sure but -1 could be for max..


  • #define INVERT_X_DIR -1

    think value is 0 or to revert use value 1


    for kinematics there are 2 possibilities :

    2 = z axis + xy H-gantry (x_motor = x+y, y_motor = y-x)
    1 = z axis + xy H-gantry (x_motor = x+y, y_motor = x-y)

    so if you have  #define DRIVE_SYSTEM 1 try to change to

    #define DRIVE_SYSTEM 2




    #define X_HOME_DIR -1
    #define Y_HOME_DIR -1

    is for homing to min
     1 is for max



  • Hallo.
    Danke für die schnelle Antwort.
    Dann auf deutsch 

    Frage 1: Ja steht auf 1

    Die Entwickler Option habe ich nicht genutzt ist also 1.0.4

    2: indirekt habe ich es so gemacht ich hab mal die Stecker der Motoren getauscht, und dann noch mal alle Möglichkeiten bei  INVERT_*_DIR  durchgespielt.

    Dann hat es funktioniert! Aber wie gesagt die Logik dahinter erschießt sich mir nicht.
    Jetzt ist die Frage ob das jetzt nur Zufall ist das es passt?

    weiter unten ~ Zeile 780 hab ich noch was gefunden.
    "xMinEndstop": 1,
        "yMinEndstop": 0,
        "zMinEndstop": 1,
        "xMaxEndstop": 0,
        "yMaxEndstop": 1,

    gibt es noch mal Einstellungen zum den Endstops.  Die passte nicht zu einstellungen in der Endstop Sektion von 284
    eigenatig dass das 2x vorkommt...

    Wenn #define *_HOME_DIR -1 nicht -1 ist hat der endsprechende Endschalter keine Funktion mehr. = "Rums"

    Max Endschalter habe ich nicht.

    Ich habe ein MKS Gen 1.4 Board. Da gibt es Jumper um die Achsen zu drehen? Wenn Ja würde sich das nicht nur auf einen Motor beziehen?

    Kann man hier die ganze config hochladen?

    Gruß Sebastian
  • Wenn Homing und Richtungen sind wie erwartet - mach mal einen Testdruck.
    du kannst über motor-stecker drehen zwar falsche Pins und richtungen kompensieren - evtl. sind dennoch die Achsen vertauscht.
    Hatte ich auch - Schrift war dann "gespiegelt"
    Teste einfach mal was mit Schrift.

    gibt es noch mal Einstellungen zum den Endstops. 

    eigentlich nur auf der Seite "mechanics" ; Bereich "Endstopps"

    Achtungspunkt hier noch:
    Always check endstops. Only enable if you have no cross talk from your motors, which could trigger wrong signals causing the print to skew. (ALWAYS_CHECK_ENDSTOPS)

    -> hab ich immer leer, Endstopps werden dann nur beim Homing abgefragt..



  • Danke für den Spiegelhinweis.

    Kann ich aber gerade nicht testen, weil sich der Bltouch bei den Versuchen zerlegt hat.  

    Der „Pimmel“ rührt sich nicht mehr. Shit happens. (liegt aber nicht an der FW)

    d.h. jetzt muss ich erst mal auf der Bestellung warten…

  • Mit etwas glück kann man den zurück biegen, aber der ist da sehr empfindlich. Hab mir den auch mal verbogen und musste dann den pin austauschen weil er nicht mehr zuverlässig ging.
  • Ich habe den Sensor zerlegt den Stab durch ein CFK Pin ersetzt.

    O wunder es funktioniert (aber für die Dauer ist das nix, weil er spiel hat.)

    Auf jeden Fall konnte ich die Situation nachstellen warum das Bett den Sensor gecrasht hat. Diesmal hatte ich ihn nur am Board angeschlossen und schon mit Sicherheitshöhe manuell ausgeht.

    Nachdem die Messung abgeschlossen wurde fährt das Bett mit Volldampf weiter in den negativen Bereich für 20mm. 

    Nehme ich die Invertierung der Z-Achse raus passiert kein Unglück (weil das Bett fährt ja nach unten aber wie erwartet ich dann Z falsch rum.


    Ich habe dies Video Tutorial verwendet.

    Allerdings ist der da verwendete Drucker ein Kartesischer. 

    Ich habe viel probiert bin aber ratlos was ich da übersehe.


    #define Z_PROBE_Z_OFFSET 0

    #define Z_PROBE_Z_OFFSET_MODE 0

    #define UI_BED_COATING 0

    #define FEATURE_Z_PROBE 1

    #define EXTRUDER_IS_Z_PROBE 0

    #define Z_PROBE_DISABLE_HEATERS 0

    #define Z_PROBE_BED_DISTANCE 10

    #define Z_PROBE_PIN ORIG_Z_MIN_PIN

    #define Z_PROBE_PULLUP 0

    #define Z_PROBE_ON_HIGH 1

    #define Z_PROBE_X_OFFSET 35

    #define Z_PROBE_Y_OFFSET 20

    #define Z_PROBE_WAIT_BEFORE_TEST 0

    #define Z_PROBE_SPEED 2

    #define Z_PROBE_XY_SPEED 150

    #define Z_PROBE_SWITCHING_DISTANCE 4

    #define Z_PROBE_REPETITIONS 2

    #define Z_PROBE_USE_MEDIAN 0

    #define Z_PROBE_HEIGHT 0

    #define Z_PROBE_DELAY 0

    #define Z_PROBE_START_SCRIPT "M340 P0 S700"

    #define Z_PROBE_FINISHED_SCRIPT "M340 P0 S1500"

    #define Z_PROBE_RUN_AFTER_EVERY_PROBE ""

    #define Z_PROBE_REQUIRES_HEATING 0

    #define Z_PROBE_MIN_TEMPERATURE 150

    #define FEATURE_AUTOLEVEL 1

    #define FEATURE_SOFTWARE_LEVELING 0

    #define Z_PROBE_X1 20

    #define Z_PROBE_Y1 20

    #define Z_PROBE_X2 160

    #define Z_PROBE_Y2 20

    #define Z_PROBE_X3 100

    #define Z_PROBE_Y3 160

    #define BED_LEVELING_METHOD 1

    #define BED_CORRECTION_METHOD 0

    #define BED_LEVELING_GRID_SIZE 3

    #define BED_LEVELING_REPETITIONS 5

    #define BED_MOTOR_1_X 0

    #define BED_MOTOR_1_Y 0

    #define BED_MOTOR_2_X 200

    #define BED_MOTOR_2_Y 0

    #define BED_MOTOR_3_X 100

    #define BED_MOTOR_3_Y 200

    #define BENDING_CORRECTION_A 0

    #define BENDING_CORRECTION_B 0

    #define BENDING_CORRECTION_C 0

    #define FEATURE_AXISCOMP 0

    #define AXISCOMP_TANXY 0

    #define AXISCOMP_TANYZ 0

    #define AXISCOMP_TANXZ 0

  • Z_PROBE_HEIGHT 0 ist sicher falsch sonst wäre die Düse auf trigger höhe aber daher eigentlich sogar auf der sicheren Seite. Es sei denn im eeprom steht da ein großer Wert. Das ist nämlich wie viel man runter muss damit die Düse auf z=0 ist. Im eeprom auch bed coating prüfen - sollte hier auch 0 sein sonst führt das zu einem extra z move.

    Bei welchem Befehl passiert dieser extra Z Move? G28/G30/G32/G33 ? Ich würde erst mal g30 in der Luft testen. Der sollte ja immer zum Ursprung zurück gehen.
    Die anderen nutzen das gleiche nur am Ende können sie sich unterscheiden. G28 fährt ja gerne dann die homing position an und hat auch noch ein paar extra parameter für Z. Bei G32/G33 fällt mir da direkt nicht ein.
  • Coating ist 0

    G30 
    Recv:12:33:22.304: Z-probe:219.566 X:0.00 Y:0.00
    Richtet kein Unheil an. fährt wieder zurück zum Start.

    G32 verhält sich wie G28 und fährt nach Abschluss der Messung wieder voll in den negativen Bereich. nur gut das ich jetzt den Bltouch mit nen Gummi an der X Achse festgemacht hab sonst wäre der wieder im Anus.

    Mesg:12:15:14.663: Dtr: true Rts: true
    Mesg:12:15:14.669: Connection started
    Mesg:12:15:14.670: Dtr: false Rts: false
    Mesg:12:15:14.692: Dtr: true Rts: true
    Recv:12:15:15.607: start
    Recv:12:15:15.637: Detected EEPROM version:20
    Recv:12:15:15.639: Transformation matrix: 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000
    Recv:12:15:15.640: XY jerk was too low, setting to 11.63
    Recv:12:15:15.641: Z jerk was too low, setting to 0.71
    Recv:12:15:18.261: Free RAM:1360
    Recv:12:15:18.517: Card successfully initialized.
    Recv:12:15:18.533: SelectExtruder:0
    Mesg:12:15:18.613: Warning: Missed line detected - correcting buffer usage.
    Recv:12:15:18.656: DebugLevel:6
    Recv:12:15:18.657: info:Continue from fatal state
    Recv:12:15:18.666: FIRMWARE_NAME:Repetier_1.0.4 COMPILED:Jan 28 2021 FIRMWARE_URL:https://github.com/repetier/Repetier-Firmware/ PROTOCOL_VERSION:1.0 MACHINE_TYPE:Core_XY EXTRUDER_COUNT:1 REPETIER_PROTOCOL:3
    Recv:12:15:18.675: Cap:PROGRESS:1
    Recv:12:15:18.677: Cap:AUTOREPORT_TEMP:1
    Recv:12:15:18.678: Cap:HOST_RESCUE:1
    Recv:12:15:18.678: Cap:EEPROM:1
    Recv:12:15:18.679: Cap:AUTOLEVEL:1
    Recv:12:15:18.680: Cap:Z_PROBE:1
    Recv:12:15:18.680: Cap:SOFTWARE_POWER:1
    Recv:12:15:18.681: Cap:TOGGLE_LIGHTS:0
    Recv:12:15:18.682: Cap:PAUSESTOP:1
    Recv:12:15:18.682: Cap:PREHEAT:1
    Recv:12:15:18.683: Cap:EMERGENCY_PARSER:1
    Recv:12:15:18.688: Printed filament:0.01m Printing time:0 days 0 hours 4 min
    Recv:12:15:18.688: PrinterMode:FFF
    Recv:12:15:18.694: Info:No case lights
    Recv:12:15:18.699: X:0.00 Y:0.00 Z:0.000 E:0.0000
    Recv:12:15:18.702: DebugLevel:6
    Recv:12:15:18.746: Config:Baudrate:115200
    Recv:12:15:18.746: Config:InputBuffer:127
    Recv:12:15:18.747: Config:NumExtruder:1
    Recv:12:15:18.747: Config:MixingExtruder:0
    Recv:12:15:18.748: Config:HeatedBed:1
    Recv:12:15:18.748: Config:SDCard:1
    Recv:12:15:18.749: Config:Fan:1
    Recv:12:15:18.749: Config:Fan2:0
    Recv:12:15:18.750: Config:LCD:1
    Recv:12:15:18.750: Config:SoftwarePowerSwitch:1
    Recv:12:15:18.751: Config:XHomeDir:-1
    Recv:12:15:18.751: Config:YHomeDir:-1
    Recv:12:15:18.752: Config:ZHomeDir:-1
    Recv:12:15:18.752: Config:XHomePos:0.00
    Recv:12:15:18.753: Config:YHomePos:0.00
    Recv:12:15:18.753: Config:ZHomePos:0.000
    Recv:12:15:18.754: Config:SupportG10G11:1
    Recv:12:15:18.754: Config:SupportLocalFilamentchange:1
    Recv:12:15:18.755: Config:CaseLights:0
    Recv:12:15:18.756: Config:ZProbe:1
    Recv:12:15:18.756: Config:Autolevel:1
    Recv:12:15:18.757: Config:EEPROM:1
    Recv:12:15:18.791: Config:PrintlineCache:32
    Recv:12:15:18.791: Config:JerkXY:11.63
    Recv:12:15:18.792: Config:KeepAliveInterval:2000
    Recv:12:15:18.792: Config:JerkZ:0.71
    Recv:12:15:18.793: Config:RetractionLength:3.00
    Recv:12:15:18.793: Config:RetractionLongLength:13.00
    Recv:12:15:18.794: Config:RetractionSpeed:40.00
    Recv:12:15:18.794: Config:RetractionZLift:0.00
    Recv:12:15:18.795: Config:RetractionUndoExtraLength:0.00
    Recv:12:15:18.796: Config:RetractionUndoExtraLongLength:0.00
    Recv:12:15:18.797: Config:RetractionUndoSpeed:20.00
    Recv:12:15:18.799: Config:XMin:0.00
    Recv:12:15:18.799: Config:YMin:0.00
    Recv:12:15:18.800: Config:ZMin:0.00
    Recv:12:15:18.800: Config:XMax:220.00
    Recv:12:15:18.800: Config:YMax:190.00
    Recv:12:15:18.801: Config:ZMax:230.00
    Recv:12:15:18.801: Config:XSize:220.00
    Recv:12:15:18.801: Config:YSize:190.00
    Recv:12:15:18.802: Config:ZSize:230.00
    Recv:12:15:18.838: Config:XPrintAccel:1000.00
    Recv:12:15:18.839: Config:YPrintAccel:1000.00
    Recv:12:15:18.839: Config:ZPrintAccel:100.00
    Recv:12:15:18.840: Config:XTravelAccel:1700.00
    Recv:12:15:18.840: Config:YTravelAccel:1700.00
    Recv:12:15:18.840: Config:ZTravelAccel:100.00
    Recv:12:15:18.841: Config:PrinterType:Cartesian
    Recv:12:15:18.841: Config:MaxBedTemp:120
    Recv:12:15:18.841: Config:Extr.1:Jerk:20.00
    Recv:12:15:18.842: Config:Extr.1:MaxSpeed:50.00
    Recv:12:15:18.842: Config:Extr.1:Acceleration:5000.00
    Recv:12:15:18.842: Config:Extr.1:Diameter:0.00
    Recv:12:15:18.843: Config:Extr.1:MaxTemp:280
    Recv:12:15:18.846: RESCUE_STATE: OFF
  • Hast du ein log davon? 

    Wann genau danach fährt er ins negative? Sofort nach dem letzten Punkt oder noch eine xy verschiebung?
    Beim G32 wundert es mich am meisten, weil da nur

    Printer::finishProbing();
    #if BED_CORRECTION_METHOD != 1
    Printer::setAutolevelActive(
    true); // only for software correction or we can spare the comp. time
    if (s >= 2) {
    EEPROM::storeDataIntoEEPROM();
    }
    #if DISTORTION_CORRECTION
    if (distEnabled)
    Printer::distortion.enable(
    false); // if level has changed, distortion is also invalid
    Printer::updateCurrentPosition(true);
    Commands::printCurrentPosition();
    #if DRIVE_SYSTEM == DELTA
    Printer::homeAxis(
    true, true,
    true); // shifting z makes positioning invalid, need to recalibrate
    Printer::feedrate = oldFeedrate;

    steht. finishProbing ist womit auch G30 aufhört. Was für einen S Wert nutzt du? Bei S2 könnte er evtl max z homing versuchen wenn das in dem Drucker eingestellt ist. Aber wenn der extrude rnicht gerade einen riesigen Z offset het seh ich sonst nichts wo er massiv ins negative geht. Außer G33 L0 würde große werte ausgeben da das hier offenbar aktiviert wird. Wenn da also zufällig was großes drin steht würde das nach unten gehen. Und auch bei G28 wird es dann aktiviert.
    G33 R0 würde distortion correction erst mal überall auf 0 setzen.
  • auf XY gibts keine Bewegung.

    G33 R0 kennt er gar nicht.

    hier das Log vom Server.

    Recv:19:17:53.462: ok 16
    Recv:19:21:24.956: wait (207)
    Send:19:21:25.120: N17 G1 Z100.00 F600
    Recv:19:21:25.132: ok 17
    Recv:19:21:48.519: wait (23)
    Send:19:21:48.848: N18 G32
    Send:19:21:48.850: N19 M114
    Recv:19:21:48.855: ok 18
    Recv:19:22:08.916: busy:processing (10)
    Recv:19:22:10.733: start
    Send:19:22:10.734: N0 M110 N0
    Send:19:22:10.735: N1 M999 ; In case we did not reset recover from fatal state
    Send:19:22:10.736: N0 M110 N0
    Send:19:22:10.739: N2 M115 ; Check firmware and capabilities
    Send:19:22:10.740: N3 M220 S100 ; set speed multiplier
    Send:19:22:10.741: N4 M221 S100 ; set flow multiplier
    Send:19:22:10.742: N5 M355 ; get light status
    Send:19:22:10.743: N6 G92 E0 ; reset extrude rposition
    Send:19:22:10.744: N7 G90 ; absolute coordinates
    Send:19:22:10.747: N8 M82 ; absolute E values
    Recv:19:22:10.756: Detected EEPROM version:20
    Recv:19:22:10.758: Transformation matrix: 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000
    Recv:19:22:10.758: XY jerk was too low, setting to 11.63
    Recv:19:22:10.759: Z jerk was too low, setting to 0.71
    Recv:19:22:13.379: Free RAM:1360
    Recv:19:22:13.537: Card successfully initialized.
    Recv:19:22:13.538: SelectExtruder:0
    Recv:19:22:13.540: FlowMultiply:100
    Recv:19:22:13.541: ok
    Send:19:22:13.542: N9 G21 ; units are mm
    Recv:19:22:13.654: ok 1
    Recv:19:22:13.655: DebugLevel:6
    Recv:19:22:13.655: info:Continue from fatal state
    Recv:19:22:13.656: ok
    Recv:19:22:13.656: ok 1
    Recv:19:22:13.659: ok 2
    Recv:19:22:13.660: FIRMWARE_NAME:Repetier_1.0.4 COMPILED:Jan 28 2021 FIRMWARE_URL:https://github.com/repetier/Repetier-Firmware/ PROTOCOL_VERSION:1.0 MACHINE_TYPE:Core_XY EXTRUDER_COUNT:1 REPETIER_PROTOCOL:3
    Recv:19:22:13.661: Cap:PROGRESS:1
    Recv:19:22:13.662: Cap:AUTOREPORT_TEMP:1
    Recv:19:22:13.663: Cap:HOST_RESCUE:1
    Recv:19:22:13.663: Cap:EEPROM:1
    Recv:19:22:13.664: Cap:AUTOLEVEL:1
    Recv:19:22:13.665: Cap:Z_PROBE:1
    Recv:19:22:13.666: Cap:SOFTWARE_POWER:1
    Recv:19:22:13.666: Cap:TOGGLE_LIGHTS:0
    Recv:19:22:13.667: Cap:PAUSESTOP:1
    Recv:19:22:13.667: Cap:PREHEAT:1
    Recv:19:22:13.668: Cap:EMERGENCY_PARSER:1
    Send:19:22:13.669: N10 M114 ; check position
    Send:19:22:13.670: N11 M111 S6 ; debug flags
    Send:19:22:13.671: N12 M360 ; get configuration
    Recv:19:22:13.699: Printed filament:0.01m Printing time:0 days 0 hours 4 min
    Recv:19:22:13.700: PrinterMode:FFF
    Recv:19:22:13.700: ok 3
    Recv:19:22:13.702: SpeedMultiply:100
    Recv:19:22:13.703: ok 4
    Recv:19:22:13.705: FlowMultiply:100
    Recv:19:22:13.706: ok 5
    Recv:19:22:13.706: Info:No case lights
    Recv:19:22:13.707: ok 6
    Recv:19:22:13.708: ok 7
    Recv:19:22:13.708: ok 8
    Recv:19:22:13.709: ok 9
    Recv:19:22:13.709: ok 10
    Recv:19:22:13.710: X:0.00 Y:0.00 Z:0.000 E:0.0000
    Recv:19:22:13.711: ok 11
    Recv:19:22:13.711: DebugLevel:6
    Recv:19:22:13.712: ok 12
    Recv:19:22:13.713: Config:Baudrate:115200
    Recv:19:22:13.713: Config:InputBuffer:127
    Recv:19:22:13.714: Config:NumExtruder:1
    Recv:19:22:13.714: Config:MixingExtruder:0
    Recv:19:22:13.715: Config:HeatedBed:1
    Recv:19:22:13.715: Config:SDCard:1
    Recv:19:22:13.716: Config:Fan:1
    Recv:19:22:13.716: Config:Fan2:0
    Recv:19:22:13.716: Config:LCD:1
    Recv:19:22:13.717: Config:SoftwarePowerSwitch:1
    Recv:19:22:13.718: Config:XHomeDir:-1
    Recv:19:22:13.718: Config:YHomeDir:-1
    Send:19:22:13.719: N13 M539 S1
    Send:19:22:13.719: @getip
    Send:19:22:13.726: N14 M155 S1
    Send:19:22:13.727: N15 M415
    Send:19:22:13.728: N16 M117 192.168.200.29:3344
    Recv:19:22:13.741: Config:ZHomeDir:-1
    Recv:19:22:13.742: Config:XHomePos:0.00
    Recv:19:22:13.742: Config:YHomePos:0.00
    Recv:19:22:13.743: Config:ZHomePos:0.000
    Recv:19:22:13.744: Config:SupportG10G11:1
    Recv:19:22:13.744: Config:SupportLocalFilamentchange:1
    Recv:19:22:13.745: Config:CaseLights:0
    Recv:19:22:13.745: Config:ZProbe:1
    Recv:19:22:13.746: Config:Autolevel:1
    Recv:19:22:13.746: Config:EEPROM:1
    Recv:19:22:13.747: Config:PrintlineCache:32
    Recv:19:22:13.747: Config:JerkXY:11.63
    Recv:19:22:13.748: Config:KeepAliveInterval:2000
    Recv:19:22:13.748: Config:JerkZ:0.71
    Recv:19:22:13.749: Config:RetractionLength:3.00
    Recv:19:22:13.749: Config:RetractionLongLength:13.00
    Recv:19:22:13.750: Config:RetractionSpeed:40.00
    Recv:19:22:13.750: Config:RetractionZLift:0.00
    Recv:19:22:13.752: Config:RetractionUndoExtraLength:0.00
    Recv:19:22:13.782: Config:RetractionUndoExtraLongLength:0.00
    Recv:19:22:13.783: Config:RetractionUndoSpeed:20.00
    Recv:19:22:13.783: Config:XMin:0.00
    Recv:19:22:13.783: Config:YMin:0.00
    Recv:19:22:13.784: Config:ZMin:0.00
    Recv:19:22:13.784: Config:XMax:220.00
    Recv:19:22:13.784: Config:YMax:190.00
    Recv:19:22:13.785: Config:ZMax:230.00
    Recv:19:22:13.785: Config:XSize:220.00
    Recv:19:22:13.785: Config:YSize:190.00
    Recv:19:22:13.786: Config:ZSize:230.00
    Recv:19:22:13.786: Config:XPrintAccel:1000.00
    Recv:19:22:13.786: Config:YPrintAccel:1000.00
    Recv:19:22:13.787: Config:ZPrintAccel:100.00
    Recv:19:22:13.787: Config:XTravelAccel:1700.00
    Recv:19:22:13.787: Config:YTravelAccel:1700.00
    Recv:19:22:13.788: Config:ZTravelAccel:100.00
    Recv:19:22:13.788: Config:PrinterType:Cartesian
    Recv:19:22:13.788: Config:MaxBedTemp:120
    Recv:19:22:13.789: Config:Extr.1:Jerk:20.00
    Recv:19:22:13.808: Config:Extr.1:MaxSpeed:50.00
    Recv:19:22:13.809: Config:Extr.1:Acceleration:5000.00
    Recv:19:22:13.809: Config:Extr.1:Diameter:0.00
    Recv:19:22:13.810: Config:Extr.1:MaxTemp:280
    Recv:19:22:13.810: ok 13
    Recv:19:22:13.811: ok 14
    Recv:19:22:13.811: ok 15
    Recv:19:22:13.812: RESCUE_STATE: OFF
    Recv:19:22:13.812: ok 16
    Recv:19:22:21.807: wait (8)
  • hier mal ein Video von der Situation:
    https://youtu.be/IwbzN-oCP-A
    das Unglück wurde mit einem "Reset" am Display abgebrochen. 
  • Im log sehe ich
    Send:19:21:48.848: N18 G32
    Send:19:21:48.850: N19 M114
    Recv:19:21:48.855: ok 18
    Recv:19:22:08.916: busy:processing (10)
    Recv:19:22:10.733: start

    Da ist nicht eine Ausgabe der Punkte die gemessen wurden. Ich dachte der Fehler kommt am Ende bis dahin sollten doch x ausgaben von allen Punkten erfolgen? Oder passiert es bei G32 beim ersten Punkt?

    G33 distortion hast du dann vermutlich nicht einkompiliert - gut dann können wir den auch auschließen.

    Wie gut sind deine Programmierkenntnisse? Da ich du offenbar keinen üblen Wert siehst im eeprom und ich auch nicht und ich keine Idee habe wo es passierte müsste die Stelle gefundne werden wo der falsche Move passiert. Dann weiß man welche Parameter hier reinfließen und warum die Bewegung falsch ist. Dazu BedLeveling.cpp in der Funktion bool runBedLeveling(int s) { anfangen Testausgaben wie
    Com::printFLN(PSTR("P1"));HAL::delayMilliseconds(1000);

    einzubauen. P1 dann durch P2 P3.. ersetzen. An strategischen stellen. Das delay verzögert 1s damit du die Meldung lesen kannst und zuordnen. So kreise ich immer die Probleme ein wenn ich die selber testen kann.

    Wenn man grob die Stelle kennst kann man es dann im nächsten Schritt weiter einkreisen oder man sieht schon welche variable da das Problem ist.
  • Ich bin kein Coder, aber versuche mein Glück.
    solange ich nichts selber schreiben muss besteht Hoffnung dass ich es hinbekomme.
    Versuche heute Abend mal mein Glück.
    vielleicht sollte man den Thead umbennen auf "bltouch debugging"? 
  • Nein Programmieren musst du nicht. Nur dem code folgen und die stelle finden wo der "falsche" move passiert.

    Umbenennen können wir uns sparen - sind eh nur wir 2 hier am diskutieren und eigentlich klappt es bei den anderen.  Abe res gibt immer wieder Kombinationen oder Fälle die man nicht sieht. Ach ja wenn du die stelle findest bitte den code und grobe Zeilenangaben posten. Ich nutze immer 1.0.5dev und Zeilen verscheiben sich immer etwas.
  • Ich habe wie gewünscht auf meine config in die aktuelle Dev übertragen.

    Die Funktion hab ich gefunden und die Zeile darunter eingesetzt.  Zeile 334

    Neu gebaut und in den Drucker eingespielt.

    Im Log erscheint P aber es wird keine Pause gemacht.

    Wie hast du das nun gemeint? ich soll die Zeile  der Reihe nach in jede if Schleife packen und schauen bis die Sekunde beim Hochfahren auftaucht?

    Ich hab das bis Zeile 487 so gemacht bekomme aber nur das Pi wenn ich es ganz Oben bei 334 setze.

    Mir ist noch was aufgefallen:

    Z_PROBE_REPETITIONS setzt ich da mal 3 fährt er trotzdem nur 2 mal raus.

    Fahr ich nach dem Reset das Bett mit Rep Server das Bett 10mm runter um den Sensor wieder gerade zu rücken Fährt das Bett über 100mm runter.

    Beim zweiten Klick sind es dann nur 10mm  ist bei 1mm das gleiche.

    Ich dachte erst die Steps stimmen nicht, aber nach dem ist nicht so.

  • > Wie hast du das nun gemeint? ich soll die Zeile  der Reihe nach in jede if Schleife packen und schauen bis die Sekunde beim Hochfahren auftaucht?
    Wo soll ich das gesagt haben? Hab nirgends Schleifen erwähnt. Su sollst es an strategischen stellen einbauen und den Text ändern damit du nachverfolgen kannst wann er wo im code ist bei G32. Zeig doch mal was du draus gemacht hast, das ist einfacher.

  • offensichtlich hab ich keine Ahnung was ich da mache.

    bool runBedLeveling(int s) {
     Com::printFLN(PSTR("P1"));HAL::delayMilliseconds(1000);
        bool success = true;
    #if DISTORTION_CORRECTION
        bool distEnabled = Printer::distortion.isEnabled();
        Printer::distortion.disable(
            false); // if level has changed, distortion is also invalid
        Printer::prepareForProbing();
    #if defined(Z_PROBE_MIN_TEMPERATURE) && Z_PROBE_MIN_TEMPERATURE && Z_PROBE_REQUIRES_HEATING
        float actTemp[NUM_EXTRUDER];
        for (int i = 0; i < NUM_EXTRUDER; i++) {
            actTemp[i] = extruder[i].tempControl.targetTemperatureC;
             Com::printFLN(PSTR("P3"));HAL::delayMilliseconds(1000);
            
        }
        Printer::moveToReal(
            IGNORE_COORDINATE, IGNORE_COORDINATE,
            RMath::max(EEPROM::zProbeBedDistance() + (EEPROM::zProbeHeight() > 0 ? EEPROM::zProbeHeight() : 0),
                       static_cast<float>(ZHOME_HEAT_HEIGHT)),
            IGNORE_COORDINATE, Printer::homingFeedrate[Z_AXIS]);
        Commands::waitUntilEndOfAllMoves();
          Com::printFLN(PSTR("P3"));HAL::delayMilliseconds(1000);
          
    #if ZHOME_HEAT_ALL
        for (int i = 0; i < NUM_EXTRUDER; i++) {
            Extruder::setTemperatureForExtruder(
                RMath::max(actTemp[i], static_cast<float>(ZPROBE_MIN_TEMPERATURE)), i,
                false, false);
                 
        }
        for (int i = 0; i < NUM_EXTRUDER; i++) {
            if (extruder[i].tempControl.currentTemperatureC < ZPROBE_MIN_TEMPERATURE)
                Extruder::setTemperatureForExtruder(
                    RMath::max(actTemp[i], static_cast<float>(ZPROBE_MIN_TEMPERATURE)), i,
                    false, true);
                     
        }
        if (extruder[Extruder::current->id].tempControl.currentTemperatureC < ZPROBE_MIN_TEMPERATURE)
            Extruder::setTemperatureForExtruder(
                RMath::max(actTemp[Extruder::current->id],
                           static_cast<float>(ZPROBE_MIN_TEMPERATURE)),
                Extruder::current->id, false, true);
                 
    #endif //  defined(Z_PROBE_MIN_TEMPERATURE) ...

        float h1, h2, h3, hc, oldFeedrate = Printer::feedrate;
        Printer::setAutolevelActive(false); // iterate
        Printer::resetTransformationMatrix(
            true); // in case we switch from matrix to motorized!
    #if DRIVE_SYSTEM == DELTA
        // It is not possible to go to the edges at the top, also users try
        // it often and wonder why the coordinate system is then wrong.
        // For that reason we ensure a correct behavior by code.
        if (!Printer::isHomedAll()) {
            Printer::homeAxis(true, true, true);
        }
        Printer::moveTo(IGNORE_COORDINATE, IGNORE_COORDINATE,
                        EEPROM::zProbeBedDistance() + (EEPROM::zProbeHeight() > 0 ? EEPROM::zProbeHeight() : 0),
                        IGNORE_COORDINATE, Printer::homingFeedrate[Z_AXIS]);
        if (!Printer::isXHomed() || !Printer::isYHomed())
            Printer::homeAxis(true, true, false);
        Printer::updateCurrentPosition(true);
        // Printer::moveTo(EEPROM::zProbeX1(), EEPROM::zProbeY1(), IGNORE_COORDINATE,
        // IGNORE_COORDINATE, EEPROM::zProbeXYSpeed());
        Printer::moveTo(IGNORE_COORDINATE, IGNORE_COORDINATE, IGNORE_COORDINATE,
                        IGNORE_COORDINATE, EEPROM::zProbeXYSpeed());
                         Com::printFLN(PSTR("P2"));HAL::delayMilliseconds(1000);
        Printer::coordinateOffset[X_AXIS] = Printer::coordinateOffset[Y_AXIS] = Printer::coordinateOffset[Z_AXIS] = 0;
        if (!Printer::startProbing(true)) {
            return false;
             Com::printFLN(PSTR("P3"));HAL::delayMilliseconds(1000);
        }
        // GCode::executeFString(Com::tZProbeStartScript);
        Plane plane;
    #if BED_CORRECTION_METHOD == 1
        success = false;
        for (int r = 0; r < BED_LEVELING_REPETITIONS; r++) {
    #if DRIVE_SYSTEM == DELTA
            if (r > 0) {
                Printer::finishProbing();
                Printer::homeAxis(true, true, true);
                Printer::moveTo(
                    IGNORE_COORDINATE, IGNORE_COORDINATE,
                    EEPROM::zProbeBedDistance() + (EEPROM::zProbeHeight() > 0 ? EEPROM::zProbeHeight() : 0),
                    IGNORE_COORDINATE, Printer::homingFeedrate[Z_AXIS]);
                if (!Printer::startProbing(true)) {
                    return false;
                     Com::printFLN(PSTR("P4"));HAL::delayMilliseconds(1000);
                }
            }
    #endif // DELTA
    #endif // BED_CORRECTION_METHOD == 1
            if (!measureAutolevelPlane(plane)) {
                Com::printErrorFLN(
                    PSTR("Probing had returned errors - autoleveling canceled."));
                UI_MESSAGE(1);
                return false;
            }
            correctAutolevel(plane);

            // Leveling is finished now update own positions and store leveling data if
            // needed
            // float currentZ = plane.z((float)Printer::currentPositionSteps[X_AXIS] *
            // Printer::invAxisStepsPerMM[X_AXIS],(float)Printer::currentPositionSteps[Y_AXIS]
            // * Printer::invAxisStepsPerMM[Y_AXIS]);
            float currentZ = plane.z(
                0.0, 0.0); // we rotated around this point, so that is now z height
            // With max z end stop we adjust z length so after next homing we have also
            // a calibrated printer
            Printer::zMin = 0;
    #if MAX_HARDWARE_ENDSTOP_Z
            // float xRot,yRot,zRot;
            // Printer::transformFromPrinter(Printer::currentPosition[X_AXIS],Printer::currentPosition[Y_AXIS],Printer::currentPosition[Z_AXIS],xRot,yRot,zRot);
            // Com::printFLN(PSTR("Z after rotation:"),zRot);
            // With max z end stop we adjust z length so after next homing we have also
            // a calibrated printer
            if (s != 0) {
                // at origin rotations have no influence so use values there to update
                Printer::zLength += currentZ - Printer::currentPosition[Z_AXIS];
                // Printer::zLength += /*currentZ*/
                // plane.z((float)Printer::currentPositionSteps[X_AXIS] *
                // Printer::invAxisStepsPerMM[X_AXIS],(float)Printer::currentPositionSteps[Y_AXIS]
                // * Printer::invAxisStepsPerMM[Y_AXIS]) - zRot;
                Com::printFLN(Com::tZProbePrinterHeight, Printer::zLength);
                 Com::printFLN(PSTR("P5"));HAL::delayMilliseconds(1000);
            }

  • Grundsätzlich wie ich es meinte nur die Positionen sind etwas ungünstig gewählt udn bei einigen hätte man das delay verkleiner können. Versuch mal so:

    bool runBedLeveling(int s) {
     Com::printFLN(PSTR("P1"));HAL::delayMilliseconds(100);
        bool success = true;
    #if DISTORTION_CORRECTION
        bool distEnabled = Printer::distortion.isEnabled();
        Printer::distortion.disable(
            false); // if level has changed, distortion is also invalid
        Printer::prepareForProbing();
    #if defined(Z_PROBE_MIN_TEMPERATURE) && Z_PROBE_MIN_TEMPERATURE && Z_PROBE_REQUIRES_HEATING
        float actTemp[NUM_EXTRUDER];
        for (int i = 0; i < NUM_EXTRUDER; i++) {
            actTemp[i] = extruder[i].tempControl.targetTemperatureC;        
        }
        Printer::moveToReal(
            IGNORE_COORDINATE, IGNORE_COORDINATE,
            RMath::max(EEPROM::zProbeBedDistance() + (EEPROM::zProbeHeight() > 0 ? EEPROM::zProbeHeight() : 0),
                       static_cast<float>(ZHOME_HEAT_HEIGHT)),
            IGNORE_COORDINATE, Printer::homingFeedrate[Z_AXIS]);
        Commands::waitUntilEndOfAllMoves();
          Com::printFLN(PSTR("P2"));HAL::delayMilliseconds(1000);
          
    #if ZHOME_HEAT_ALL
        for (int i = 0; i < NUM_EXTRUDER; i++) {
            Extruder::setTemperatureForExtruder(
                RMath::max(actTemp[i], static_cast<float>(ZPROBE_MIN_TEMPERATURE)), i,
                false, false);
                 
        }
        for (int i = 0; i < NUM_EXTRUDER; i++) {
            if (extruder[i].tempControl.currentTemperatureC < ZPROBE_MIN_TEMPERATURE)
                Extruder::setTemperatureForExtruder(
                    RMath::max(actTemp[i], static_cast<float>(ZPROBE_MIN_TEMPERATURE)), i,
                    false, true);
                     
        }
        if (extruder[Extruder::current->id].tempControl.currentTemperatureC < ZPROBE_MIN_TEMPERATURE)
            Extruder::setTemperatureForExtruder(
                RMath::max(actTemp[Extruder::current->id],
                           static_cast<float>(ZPROBE_MIN_TEMPERATURE)),
                Extruder::current->id, false, true);
                 
    #endif //  defined(Z_PROBE_MIN_TEMPERATURE) ...

        float h1, h2, h3, hc, oldFeedrate = Printer::feedrate;
        Printer::setAutolevelActive(false); // iterate
        Printer::resetTransformationMatrix(
            true); // in case we switch from matrix to motorized!
    #if DRIVE_SYSTEM == DELTA
        // It is not possible to go to the edges at the top, also users try
        // it often and wonder why the coordinate system is then wrong.
        // For that reason we ensure a correct behavior by code.
        if (!Printer::isHomedAll()) {
            Printer::homeAxis(true, true, true);
        }
        Printer::moveTo(IGNORE_COORDINATE, IGNORE_COORDINATE,
                        EEPROM::zProbeBedDistance() + (EEPROM::zProbeHeight() > 0 ? EEPROM::zProbeHeight() : 0),
                        IGNORE_COORDINATE, Printer::homingFeedrate[Z_AXIS]);
        if (!Printer::isXHomed() || !Printer::isYHomed())
            Printer::homeAxis(true, true, false);
       Com::printFLN(PSTR("P3"));HAL::delayMilliseconds(1000);

        Printer::updateCurrentPosition(true);
        // Printer::moveTo(EEPROM::zProbeX1(), EEPROM::zProbeY1(), IGNORE_COORDINATE,
        // IGNORE_COORDINATE, EEPROM::zProbeXYSpeed());
        Printer::moveTo(IGNORE_COORDINATE, IGNORE_COORDINATE, IGNORE_COORDINATE,
                        IGNORE_COORDINATE, EEPROM::zProbeXYSpeed());
                         Com::printFLN(PSTR("P2"));HAL::delayMilliseconds(1000);
        Com::printFLN(PSTR("P4"));HAL::delayMilliseconds(1000);

        Printer::coordinateOffset[X_AXIS] = Printer::coordinateOffset[Y_AXIS] = Printer::coordinateOffset[Z_AXIS] = 0;
        if (!Printer::startProbing(true)) {
            return false;
        }
        // GCode::executeFString(Com::tZProbeStartScript);
        Plane plane;
    #if BED_CORRECTION_METHOD == 1
        success = false;
        for (int r = 0; r < BED_LEVELING_REPETITIONS; r++) {
    #if DRIVE_SYSTEM == DELTA
            if (r > 0) {
                Printer::finishProbing();
                Printer::homeAxis(true, true, true);
                Printer::moveTo(
                    IGNORE_COORDINATE, IGNORE_COORDINATE,
                    EEPROM::zProbeBedDistance() + (EEPROM::zProbeHeight() > 0 ? EEPROM::zProbeHeight() : 0),
                    IGNORE_COORDINATE, Printer::homingFeedrate[Z_AXIS]);
                if (!Printer::startProbing(true)) {
                    return false;
                     Com::printFLN(PSTR("P4"));HAL::delayMilliseconds(1000);
                }
            }
    #endif // DELTA
    #endif // BED_CORRECTION_METHOD == 1
             Com::printFLN(PSTR("P5"));HAL::delayMilliseconds(1000);

            if (!measureAutolevelPlane(plane)) {
                Com::printErrorFLN(
                    PSTR("Probing had returned errors - autoleveling canceled."));
                UI_MESSAGE(1);
                return false;
            }
             Com::printFLN(PSTR("P6"));HAL::delayMilliseconds(1000);

            correctAutolevel(plane);
             Com::printFLN(PSTR("P7"));HAL::delayMilliseconds(1000);

            // Leveling is finished now update own positions and store leveling data if
            // needed
            // float currentZ = plane.z((float)Printer::currentPositionSteps[X_AXIS] *
            // Printer::invAxisStepsPerMM[X_AXIS],(float)Printer::currentPositionSteps[Y_AXIS]
            // * Printer::invAxisStepsPerMM[Y_AXIS]);
            float currentZ = plane.z(
                0.0, 0.0); // we rotated around this point, so that is now z height
            // With max z end stop we adjust z length so after next homing we have also
            // a calibrated printer
            Printer::zMin = 0;
    #if MAX_HARDWARE_ENDSTOP_Z
            // float xRot,yRot,zRot;
            // Printer::transformFromPrinter(Printer::currentPosition[X_AXIS],Printer::currentPosition[Y_AXIS],Printer::currentPosition[Z_AXIS],xRot,yRot,zRot);
            // Com::printFLN(PSTR("Z after rotation:"),zRot);
            // With max z end stop we adjust z length so after next homing we have also
            // a calibrated printer
            if (s != 0) {
                // at origin rotations have no influence so use values there to update
                Printer::zLength += currentZ - Printer::currentPosition[Z_AXIS];
                // Printer::zLength += /*currentZ*/
                // plane.z((float)Printer::currentPositionSteps[X_AXIS] *
                // Printer::invAxisStepsPerMM[X_AXIS],(float)Printer::currentPositionSteps[Y_AXIS]
                // * Printer::invAxisStepsPerMM[Y_AXIS]) - zRot;
                Com::printFLN(Com::tZProbePrinterHeight, Printer::zLength);
                 Com::printFLN(PSTR("P5"));HAL::delayMilliseconds(1000);
            }
    #endif
             Com::printFLN(PSTR("P8"));HAL::delayMilliseconds(1000);



    Dann noch einen am ende der Funktion.
  • es kommt nur:
    Mesg:19:51:57.891: Warning: Seems like we missed a ok - continue sending.
    Recv:19:52:02.097: P1


    dann  muss ich mit reset abbrechen. 


  • Warum mustest du abbrechen? Da hat er ja noch nicht mal angefangen zu proben. Erst nach P4 fängt das messen des Rasters an und so viel ich weiß passiert es erst nachdem er fertig ist. Ich brauch hier echt mehr infos - ich weiß doch nicht was du änderst, siehst, warum du abbrichst oder was er bis dahin schon alles gemacht hat etc.
  • na weil das Bett nach dem zweiten messen über den Sensor das Bett gnadenlos nach oben fahren würde und alles kaputt machen würde. die YT video.
    es wird kein zweiter punkt angefahren. 
  • Nutzt du meinen code mit printFLN Anweisungen oder deine Version alte? Bei meiner macht das grad wenig sinn weil in deinem Video macht er ein probing und danach kommt das Problem. Aber erstes probing ist bei meiner Version erst nach P4. Dann wäre das ja noch die Positionierung für den ersten Test.
  • ich hab den kompletten codeblock ausgetauscht und wie gewünscht am ende noch einen stop eingebaut,
    oder hätte ich eine neue dev Version ziehen sollen und das da machen?  

  • Die idee ist die anweisungen zu verfeinern bis man weiß wo es passiert. Problem ist ich weiß nicht in welche Codeteile er bei dir geht weil ich deine config nicht kenne. Denke aber das P3 eigentlich ausgeführt werden sollte, muss also in diesem stück passieren:

    bool runBedLeveling(int s) {
     Com::printFLN(PSTR("P1"));HAL::delayMilliseconds(100);
        bool success = true;
    #if DISTORTION_CORRECTION
        bool distEnabled = Printer::distortion.isEnabled();
        Printer::distortion.disable(
            false); // if level has changed, distortion is also invalid
        Printer::prepareForProbing();
    #if defined(Z_PROBE_MIN_TEMPERATURE) && Z_PROBE_MIN_TEMPERATURE && Z_PROBE_REQUIRES_HEATING
        float actTemp[NUM_EXTRUDER];
        for (int i = 0; i < NUM_EXTRUDER; i++) {
            actTemp[i] = extruder[i].tempControl.targetTemperatureC;        
        }
        Printer::moveToReal(
            IGNORE_COORDINATE, IGNORE_COORDINATE,
            RMath::max(EEPROM::zProbeBedDistance() + (EEPROM::zProbeHeight() > 0 ? EEPROM::zProbeHeight() : 0),
                       static_cast<float>(ZHOME_HEAT_HEIGHT)),
            IGNORE_COORDINATE, Printer::homingFeedrate[Z_AXIS]);
        Commands::waitUntilEndOfAllMoves();
          Com::printFLN(PSTR("P2"));HAL::delayMilliseconds(1000);
          
    #if ZHOME_HEAT_ALL
        for (int i = 0; i < NUM_EXTRUDER; i++) {
            Extruder::setTemperatureForExtruder(
                RMath::max(actTemp[i], static_cast<float>(ZPROBE_MIN_TEMPERATURE)), i,
                false, false);
                 
        }
        for (int i = 0; i < NUM_EXTRUDER; i++) {
            if (extruder[i].tempControl.currentTemperatureC < ZPROBE_MIN_TEMPERATURE)
                Extruder::setTemperatureForExtruder(
                    RMath::max(actTemp[i], static_cast<float>(ZPROBE_MIN_TEMPERATURE)), i,
                    false, true);
                     
        }
        if (extruder[Extruder::current->id].tempControl.currentTemperatureC < ZPROBE_MIN_TEMPERATURE)
            Extruder::setTemperatureForExtruder(
                RMath::max(actTemp[Extruder::current->id],
                           static_cast<float>(ZPROBE_MIN_TEMPERATURE)),
                Extruder::current->id, false, true);
                 
    #endif //  defined(Z_PROBE_MIN_TEMPERATURE) ...

        float h1, h2, h3, hc, oldFeedrate = Printer::feedrate;
        Printer::setAutolevelActive(false); // iterate
        Printer::resetTransformationMatrix(
            true); // in case we switch from matrix to motorized!
    #if DRIVE_SYSTEM == DELTA
        // It is not possible to go to the edges at the top, also users try
        // it often and wonder why the coordinate system is then wrong.
        // For that reason we ensure a correct behavior by code.
        if (!Printer::isHomedAll()) {
            Printer::homeAxis(true, true, true);
        }
        Printer::moveTo(IGNORE_COORDINATE, IGNORE_COORDINATE,
                        EEPROM::zProbeBedDistance() + (EEPROM::zProbeHeight() > 0 ? EEPROM::zProbeHeight() : 0),
                        IGNORE_COORDINATE, Printer::homingFeedrate[Z_AXIS]);
        if (!Printer::isXHomed() || !Printer::isYHomed())
            Printer::homeAxis(true, true, false);
       Com::printFLN(PSTR("P3"));HAL::delayMilliseconds(1000);

    Wenn #if defined(Z_PROBE_MIN_TEMPERATURE) && Z_PROBE_MIN_TEMPERATURE && Z_PROBE_REQUIRES_HEATING

    gültig ist müsste P2 erscheine kurz nachdem er eine erste bewegung macht.

    Ach ja hast du gehomed bevor du G32 startest? Wenn nicht wird er ja wenigstens noch x und y homen 
        if (!Printer::isXHomed() || !Printer::isYHomed())
            Printer::homeAxis(true, true, false);

    Aber da sollte eigentlich kein z move sein. Und danach gibt er P3 aus kommt also nicht da an wie du sagst.

    Ok seh grade er geht in prepareForHoming
    void Printer::prepareForProbing() {
    #ifndef SKIP_PROBE_PREPARE
    // 1. Ensure we are homed so positions make sense
    if (!Printer::isHomedAll()) {
    Printer::homeAxis(true, true, true);
    }

    und das erste was er da macht ist alles homen. Also auch Z. Ich meine du sagtest ja das homen auch nicht geht. Dann ist es also das Z homing in G32 das da bereits schief läuft. Ich denke daher sollten wir G28 zuerst fixen weil es womöglich das Problem löst, also in Printer.cpp ungefähr Zeile 2159 in

    bool Printer::homeZAxis() { // Cartesian homing
    direkt
    Com::printFLN(PSTR("z1"));HAL::delayMilliseconds(1000);
    ..
    Com::printFLN(PSTR("z2"));HAL::delayMilliseconds(1000);
    #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);
    #if SAFE_HOMING
    if (Z_HOME_DIR < 0) {
    if (!Endstops::zMin()) {
    return false;
    }
    } else {
    if (!Endstops::zMax()) {
    return false;
    }
    }
    #endif
    Com::printFLN(PSTR("z3"));HAL::delayMilliseconds(1000);

    #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;
    #if defined(ENDSTOP_Z_BACK_ON_HOME)
    // If we want to go up a bit more for some reason
    if (ENDSTOP_Z_BACK_ON_HOME > 0)
    zCorrection -= axisStepsPerMM[Z_AXIS] * ENDSTOP_Z_BACK_ON_HOME * Z_HOME_DIR;
    #endif
    Com::printFLN(PSTR("z4:"), zCorrection, 4);HAL::delayMilliseconds(1000);
    #if Z_HOME_DIR < 0
    // Fix bed coating
    #if Z_PROBE_Z_OFFSET_MODE == 0 // Only if measure through coating e.g. inductive
    zCorrection += axisStepsPerMM[Z_AXIS] * zBedOffset;
    //Com::printFLN(PSTR("Z-Correction-Steps:"),zCorrection); // TEST
    Com::printFLN(PSTR("z5:"), zCorrection, 4);HAL::delayMilliseconds(1000);
    PrintLine::moveRelativeDistanceInSteps(0, 0, zCorrection, 0, homingFeedrate[Z_AXIS], true, false);
    currentPositionSteps[Z_AXIS] = ((Z_HOME_DIR == -1) ? zMinSteps : zMaxSteps - zBedOffset * axisStepsPerMM[Z_AXIS]);
    #if NUM_EXTRUDER > 0
    #if (EXTRUDER_IS_Z_PROBE == 0 || Z_HOME_DIR > 0)
    // currentPositionSteps[Z_AXIS] -= Extruder::current->zOffset;
    Printer::offsetZ = -Extruder::current->zOffset * Printer::invAxisStepsPerMM[Z_AXIS];
    #if DISTORTION_CORRECTION && Z_HOME_DIR < 0 && Z_PROBE_PIN == Z_MIN_PIN && FEATURE_Z_PROBE
    // Special case where z probe is z min end stop and distortion correction is enabled
    if (Printer::distortion.isEnabled()) {
    Printer::zCorrectionStepsIncluded = Printer::distortion.correct(Printer::currentPositionSteps[X_AXIS], currentPositionSteps[Y_AXIS], currentPositionSteps[Z_AXIS]);
    currentPositionSteps[Z_AXIS] += Printer::zCorrectionStepsIncluded;
    }
    updateCurrentPosition(true);
    #if Z_HOME_DIR < 0 && Z_PROBE_PIN == Z_MIN_PIN && FEATURE_Z_PROBE
    // If we have software leveling enabled and are not at 0,0 z position is not zero, but we measured
    // for z = 0, so we need to correct for rotation.
    currentPositionSteps[Z_AXIS] -= (axisStepsPerMM[Z_AXIS] * currentPosition[Z_AXIS] - zMinSteps);
    currentPosition[Z_AXIS] = zMin;
    #if NONLINEAR_SYSTEM
    transformCartesianStepsToDeltaSteps(currentPositionSteps, currentNonlinearPositionSteps);
    setZHomed(true);
    #if FEATURE_BABYSTEPPING
    Printer::zBabysteps = 0;
    }
    Com::printFLN(PSTR("z6"));HAL::delayMilliseconds(1000);

    #if defined(SENSORLESS_HOMING) && TMC2130_ON_Z
    while (!Printer::tmc_driver_z->stst())
    ; // Wait for motor stand-still
    Printer::tmc_driver_z->coolstep_min_speed(coolstep_speed);
    Printer::tmc_driver_z->stealth_max_speed(stealth_max_sp);
    Printer::tmc_driver_z->stealthChop(stealth_state);
    return true;
    }


    Ich vermute das die bewegung nach z5 die problematische ist, da korrigiert er nach dem homing. Daher hab ich in z4 und z5 auch den Korrekturwert mit ausgeben lassen. Da sehen wir dann wie viel er korrigieren will und auch an welcher stelle der Wert hinzu kommt.
  • Ich habe deine Code Änderungen in der Printer.cpp eingefügt und sie greife auch.

    Recv:15:38:35.568: z1
    Recv:15:38:43.486: z2
    Recv:15:38:44.494: z3
    Recv:15:38:46.590: z4:-16092.0000
    Recv:15:38:47.598: z5:-16092.0000

    danach geht's in de negativen Bereich und ich muss mit reset abbrechen.
     aber scheint mir auch kein Wunder zu sein bei dem Wert. 
  • Kann ich mir vorstellen. Er will demnach 16 meter nach unten. Die 16 meter fängt er sich hier ein:

    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;
    #if defined(ENDSTOP_Z_BACK_ON_HOME)
    // If we want to go up a bit more for some reason
    if (ENDSTOP_Z_BACK_ON_HOME > 0)
    zCorrection -= axisStepsPerMM[Z_AXIS] * ENDSTOP_Z_BACK_ON_HOME * Z_HOME_DIR;
    #endif
    Com::printFLN(PSTR("z4:"), zCorrection, 4);HAL::delayMilliseconds(1000);

    Also kommen die von einem dieser Werte:
    EEPROM::zProbeHeight(); - im eeprom gespeichete z probe height
    ENDSTOP_Z_BACK_ON_HOME - steht in deine configuration.h sollte bei z min homing 0 sein.

    Prüfe also mal welcher der beiden auf 16092 steht. Hast du vielleicht z probe height in schritten statt mm eingegeben?
  • zProbeHeight seht bei mir auf 40mm (wie in dem YT Tutoral)

    wo kann de Wert herkommen? noch ein Marlin Relekt im EEPROM? 
  • schau am besten mal mit dem eeprom editor ob du den wert irgendwo findest , interessant wäre wo er ist.

Sign In or Register to comment.