Distorsion MAP in cartesian Prusa I3 Steel

Hi I have been several days reading everythings about bed leveling (G32 commands).
I have trammed my bed with a dial indicator in 4 points. So I think G32 is not for me. But in order to get better bonding in my printer and using all the bed  G33 could be a great feature.  X axis prusa have  0,2mm  bending in center with respect to edges. 


Now I want to do a resume in order to know if my approach to get Distorsion Map working is right or wrong. 

1) Its mandatory to use Zmax for homing Z. So I would like can avoid this with the next recipe. I can´t wait until Zmax in hitted a lot of time:

a)  #define ALWAYS_CHECK_ENDSTOPS 0
 
  b) Definitions of limit switches ( Xmin,Ymin & Zmin )
#define ENDSTOP_PULLUP_X_MIN true
#define ENDSTOP_X_MIN_INVERTING false
#define MIN_HARDWARE_ENDSTOP_X true
#define ENDSTOP_PULLUP_Y_MIN true
#define ENDSTOP_Y_MIN_INVERTING false
#define MIN_HARDWARE_ENDSTOP_Y true
#define ENDSTOP_PULLUP_Z_MIN true
#define ENDSTOP_Z_MIN_INVERTING true

      c)  Probe definition 
#define Z_PROBE_Z_OFFSET 0
#define Z_PROBE_Z_OFFSET_MODE 0
#define UI_BED_COATING 1
#define FEATURE_Z_PROBE 1
#define Z_PROBE_BED_DISTANCE 10
#define Z_PROBE_PIN ORIG_Z_MIN_PIN
#define Z_PROBE_PULLUP 1
#define Z_PROBE_ON_HIGH 0
#define Z_PROBE_X_OFFSET 0
#define Z_PROBE_Y_OFFSET -28.14
#define Z_PROBE_WAIT_BEFORE_TEST 0
#define Z_PROBE_SPEED 2
#define Z_PROBE_XY_SPEED 150
#define Z_PROBE_SWITCHING_DISTANCE 3
#define Z_PROBE_REPETITIONS 2
#define Z_PROBE_HEIGHT 3.8
#define Z_PROBE_START_SCRIPT ""
#define Z_PROBE_FINISHED_SCRIPT ""
#define Z_PROBE_REQUIRES_HEATING 0
#define Z_PROBE_MIN_TEMPERATURE 150
#define FEATURE_AUTOLEVEL 1
#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 5
#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

So I am sharing pin Z_min and Pin Z_probe, beacause both are the same. With this configuration I can put in 
#define Z_PROBE_START_SCRIPT "G28\n G1 Z6,2\n G92 Z10\n "

I have already Z probe in 10, 3,8 offset when probe it´s hitted +6,2, and later I make a new reference Z axiz with G92.
Let´s say I am triying to do an Z axis calibartion.
It´s ok this approach ?

Now If it´s correct , I will invoke the command G33 S1 ( in order to store in eeprom).
And finally In the start script of my gcode I will put { G28
M323 S1 }

If everything is OK I woul be printing with bump map feature until 1 mm layer.

Do you think that this workflow should work ?

Thanks in advance and sorry for english

imageimage

Comments

  • No, I do not think the approach is correct. G28 will not work since your z probe has an offset. You need instead of homing
    G28 X0 Y0
    G1 X<-xprobeoffset> Y<-yprobeoffset>
    G28 Z0

    but for most printers the G1 move is not possible since that position is not reachable, but rotation is around 0,0 axis so that is the only valid position to measure zmin. In that case you need G32 instead of G28 Z0.

    G33
    Is all you need, is always stored in eeprom. Also distortion correction is stored until disabled so no need to activate again.

    Bump map will vanish at height you defined.

    remove your z probe start script. Faking wrong z positions is bad. Just make sure to disable printer at low z height so next time probing is fast again not needing to go too low.

    That is how I think it would work.
  • Thanks a lot of for quick response.  I answer you between lines blue color

    No, I do not think the approach is correct. G28 will not work since your z probe has an offset. You need instead of homing 
    G28 X0 Y0
    G1 X<-xprobeoffset> Y<-yprobeoffset>
    X offset =0 Y offset= - 28.14 .
    The probe is in center with nozzle. In Marlin when I do G28 X0 Y0 probe is already inside of heatBed. I have design an wade extruder in order to locate the probe in this position.
    Probe is not inductive or capacitive is an hall effect sensor with allen key plus neodimium. Repetitibility is enough good.

    In short in Marlin when  I do G28 home in 3 axis. Probe position is (x,y,z) (0,0,0) and nozzle position (0,0,3.8)

    So I dont understood well the need of G1 X<-xprobeoffset> Y<-yprobeoffset> Could you develop a little bit this point ?

    But for most printers the G1 move is not possible since that position is not reachable, but rotation is around 0,0 axis so that is the only valid position to measure zmin. In that case you need G32 instead of G28 Z0.

    ??? I dont follow you. My printer is well trammed. What is the need for G32 ? Reading other post you have write : G32 takes 3 points and puts a plane
    trough it so it adjusts z for every position according to your bed rotation. 
    Do you think it´s necessary G32 instead G28 ?

    G33
    Remove your z probe start script. I agree. I will do outside if you agree with my workflow I still think the need of G28 X0 Y0 and G28 Z0 or G28 instead G32.

    Faking wrong z positions is bad. I am not faking Z position. Mechanical probe hit when nozzle is  3,8 mm from bed. So probe TIP is too at 3,8mm from bed. In order to get the same value this parameter 
    #define Z_PROBE_BED_DISTANCE 10, I do 3,8+6,2 G1 z6,2; G92 Z10. The position real in TIPS probe and nozzle are 10mm or can avoid the #define Z_PROBE_BED_DISTANCE 10.

    Thanks in advance



  • G28 is homing and not probing. This makes all things so difficult. It does not enable probe, so it does not add offset for xy. It was also never meant for mechanical endstops that need to be enabled/disabled. So you have to that manually and move with G1 such that the probe is at x = y = 0 to get the correct height. If z probe pin = z min pin, then homing also adds z probe height to measured value, so it will add your 3.8mm. G92 is therefore not needed.

    G32 will measure bed rotation and also sets z position correctly and also enables/disables z probe, so this is an alternative to G28 Z0 with all the extra things you have to do.
  • Thanks a lot of. 
    Im going to try this weekend. 
    I post results.
  • Morning. 

    Yesterday I configured repetier.
    Everythings work fine. I could print one first layer in the whole heatBed 160x160 without Distorsion MAP, with a good layer adhesion, maybe some spots not perfect.

    Later I configured firmware for support autolevelling and distorsion MAP. Again everythings fine. I have created a bump map of 7x7. Unfortunately I can´t try a real printing.

    Today reading some post I rise to a doubt. It´s necessary in a cartesian printer in order to work distorsion Map run previously an G32 command.

    As I mentioned my printer ir well leveled with díal indicator so I think G32 it´s not necessary.

    When everythings it´s working OK I will put a video or a miniTutorial.

    Thanks in Advanced

  • G33 is independent of G32. The only thing is it should get values around 0 some plus some minus. So if you did not level with G32 it depends on z probe height what difference gets added. But you can of course change z probe height until the resulting map swings around 0.
  • Hi Morning.

    Works Perfectly. 
    Thanks a lot of for this great piece of software.

    Distorsion Map is a feature that I have not seen in another firmware. Let´s say REPETIER is the first in enable this funcionality.

    So the yesterday trial was:

    1) Make a bump map with Repetier Host without compensation. You will see difference between Zmax-Zim is 0,3mm with this difference is very difficult get the whole table for printing.

    2) Activation of compensation (M323 S1)

    3) Make a bump map with Repetier Host with compensation enabled. Now the difference between Zmax - Zmin is 0.09. Wooa I could print the first layer with heigh of 0.2 without problem in the whole bed.

    4) Triying in a real model. It´s a matrix of circles covering the bed 160x160. You must see working the printer it´s magical as Z axis was compensating an the musicality of Z steppers.

    Again Thanks a lot of.

    I have made a link for everybody in google drive with the files and 2 photos of my test 

    I left the configuration file to help another people. You must load the file in the web tool in order to see the config in a friendly format.

    Enjoy
  • I need to say thanks again.

    I have two new questions. Promise will be easy.
    I woould like to have 2 bump maps saved. 
    I am using a mirror surface for printing PLA & PETG and polycarbonate surface with PVA covered for Nylon & PC filaments.

    So the question is. Is there any method to load one bump map or other in function of my needs. 
    I think that a good work around could be:
    1) G33. Make profile for mirror surface
      2) G33 L0 and save in txt file profile 1. 
    3) G33 Make profile for Polycarbonate+PVA surface
    4) G33 L0 and save in txt file profile 2

    Now I need a routine read the txt file and load in the Eprom positions where is stored bump map.

    Do you understand my need ?

    Question 2 is about Delay between double/quad steps ?
    I have not idea about value for DRV8825 drivers. Recomendation ?

    Question 3 is. If I enable babystepping do you think will be enhanced bump map compensation or does not apply .

    Thanks in Advance
  • 1) Not simply possible, but with some work it is. You already know G33 L0 to list the map. You could use this to create a script using G33 X<pos> Y<pos> Z<correction> to set these values. Then make next map and script. Now you can just run the script with G33 values to set it to these values. What might be an idea is to tweak G33 L0 output to be exactly that script.
    I have already done it locally Printer.cpp void Distortion::showMatrix() { should end with






    Com::printF(PSTR("G33 X"),x,2);

    Com::printF(PSTR(" Y"),y,2);

    Com::printFLN(PSTR(" Z"),z,3);

    }

    }

    }

    to create the required script as output. In host you then just copy the log part and save it as script.


    2) DRV8825 needs 1.9us high/low signals. With AVR boards I think that is no problem to have delays 0 and double step delay 1 or 2. On due based boards you need at least 1 to catch all signals.


    3) Babystepping is for correcting on the fly if overall start height is wrong. It has no influence on bump correction. It just moves z up/down without telling anyone it did.









  • Thanks a lot of.

    Just what I wanted. I´ll try this evening. You have coded on the fly my suggestion, very professional.

    Dont doubt I´ll do a donation and recommend your software in forums about CNC where I participate.

    My next adventure will be dual extruder & Repetier but a few months later.

    Thanks a lot of for your help and continue with this great Job. After this days I think REPETIER is the best firmware for 3D printer.

    Ciao
  • The patch is now online.
Sign In or Register to comment.