Bed Map seems to not be working..

I have an HE3D EI3 printer, this is a cartesian printer with 3 print nozzles, (i have removed the 2 outer nozzles and have it set to use only 1 extruder to try to simplify things)..

Here is what I have done so far
I have set the z-probe to home the nozzle (then slide a strip of thermal paper under the nozzle for distance).
I then disable the stepper motors and manually move the print head to each corner and adjust the bed leveling screws to get the same distance for the head in each corner.
After doing this, I re-home all axis and re check the distance with my thermal paper, moving the print head to each corner using the printer controls (not moving the z axis at all).
From here, i run a G32 S2 to set a bed map.
When I print, the first layer seems to not take into account the bed map as the layer height seems different between the front left corner and the right rear corner (the layer is much closer in the right rear than it is in the front left). 
I thought the bed map was to account for minor discrepancies in the bed level?

Am i missing something or am i doing something incorrect?



  • G32 does software rotation but assumes the bed is completely plane. If you have some bumps from heat or what ever you need distorion correction (G33) which you run AFTER G32 S2.
  • When I issue a G33 after the G32 S2 runs, I get an unknown command.
    This is using FIRMWARE_NAME:Repetier_0.92.9
  • Nevermind, i think i found the answer in a different post, i need to recompile with distortion correction enabled.
    Ive never compile the firmware for this machine, should prove an interesting experiment.
  • Ok.. I now have the config files for the printer. When I load it into the config tool, there is no option for the distortion map, can I just add lines to the file and re-load it in the config tool to recimpile? Would the option show up?
  • It is on the 'general'tab near the bottom, just under the circular bed diagram,
    Dont use the 92.9 version, its too old now.
    Use 1.0.2
    this has many improvements especially in the levelling part.

  • ok.. i thought i was getting this correct, when i try to upload the firmware, i get the error 
    "Temp_3_pin was not declared in this scope"
    not sure where to look for this. i went over the config again and everything looks like its configured..

    thoughts please??
  • Not all boards have 4 thermistor inputs predefined (or have at all). Seems to be the case here. Just enter the analog number instead or analog channel for due. TEMP_3_PIN gets defined in pins.h in your boards section if it gets defined. Be aware that a analog input and a thermistor input are different! thermistor inputs are also analog but also have a 4.7K resistor in the schematic to make the voltage divider work.
  • ok.. after several attempts, i was able to use Arduino version 1.0.2 to check the files that were sent by the manufacturer and seen that they "should" upload as they are. So i opened the config tool, left the firmware at .92 (just to try to get this to work), imported the config.h file and changed ONLY the distortion map, downloaded all of the files and tried to check them again in Arduino 1.0.2, now i get the same error about pin_3 not being defined. 
    What is different in the distortion map setting that would cause this?

  • Distortion map does not use additional analog inputs. And the error this time is about the enable pin of the third extruder not being defined. What board are you using? Does it have 3 extruder sockets?
  • I believe it is the ATmega2560 control board and RAMPS 1.4
    There are 3 extruders and 3 sockets on the board
    Here is a pics of the main board

  • Ok, so selecting a RAMPS the error is correc. As you see there are only 2 extruder motor drivers. The third is therefore undefined and you also see it has only 3 thermistor inputs. The board is not prepared for 3 extruder natively, so no variables for this are preset in pins.h.
  • Wouldn't the E2 motor and temp actually be the third extruder? The board shown in this pic just above the LCD interface.
    Since the extruders start at #0, wouldn't Ext0 actually be #1, ext1 being #2 and ext2 be #3??
  • where in pins.h would i find these variables? I am not familiar with programming these boards so i dont know what to change here to be correct.
  • ok.. i changed the distortion map settings in the config.h file
    there were 2 lines...
    #define DISTORTION_CORRECTION 0 .. i changed to #define DISTORTION_CORRECTION 1
       "distortionCorrection": "0", that i changed to    "distortionCorrection": "1",

    all other lines that mentioned distortion i left as they were 
    #define DISTORTION_XMIN 10
    #define DISTORTION_YMIN 10
    #define DISTORTION_XMAX 190
    #define DISTORTION_YMAX 250


    "distortionCorrectionPoints": 5,
        "distortionCorrectionR": 100,
        "distortionPermanent": "1",
        "distortionUpdateFrequency": 15,
        "distortionStartDegrade": 0.5,
        "distortionEndDegrade": 1,
        "distortionExtrapolateCorners": "0",
        "distortionXMin": 10,
        "distortionXMax": 190,
        "distortionYMin": 10,
        "distortionYMax": 250,

    these were the only lines that mentioned distortion in the config.h file. 
    i recompiled and uploaded. there were no errors in the upload.

    ran a g32 s2 (seemed to work fine)
    then i ran 
    and i still get 
    Unknown command:N415 G33 

    am i still missing a bit?
  • You also need FEATURE_Z_PROBE but that is also needed for G32 which works.


        case 33: {

            if(com->hasL()) { // G33 L0 - List distortion matrix


            } else if(com->hasR()) { // G33 R0 - Reset distortion matrix


            } else if(com->hasX() || com->hasY() || com->hasZ()) { // G33 X<xpos> Y<ypos> Z<zCorrection> - Set correction for nearest point

                if(com->hasX() && com->hasY() && com->hasZ()) {

                    Printer::distortion.set(com->X, com->Y, com->Z);

                } else {

                    Com::printErrorFLN(PSTR("You need to define X, Y and Z to set a point!"));


            } else { // G33






    As you see the implementation of G33 only requires DISTORTION_CORRECTION to be non zero. With that no unknown command should appear.
  • It’s almost as if the upload is not making any changes.
    How do I know if the upload made any actual changes to the printer?
  • Send M115 and it tells you when it was compiled in log. It is in the first line of response I think.
  • is it possible that this was originally compiled to not include all messages? 
    When I run M115 this is what I get
    Send: N12128 M115*46Recv: ok 12128Recv: FIRMWARE_NAME:Repetier_0.92.9 
    REPETIER_PROTOCOL:3Recv: Printed filament:873.28m 
    Printing time:10 days 17 hours 29 
    minRecv: PrinterMode:FFF
    Can the issue of the distortion map be caused by the version being at .92.9 and not the latest?
    I tried to use the firmware tool to get the new version and compile it with the settings, but i get the Temp_3 error
    I  have no idea how to modify the pins.h file to make this compile correctly so i can get the new 
    firmware uploaded and get back on track here.
    Any direction would be most appreciated.
  • Don't know if this helps.
    The board pictured above is a 3DYMY RAMPSPLUS2
    Original Repetier firmware can be found here

  • I was always talking about 1.0.2. 0.92 has no working distortion correction for cartesian printers, only for deltas.
  • Does version .92 have working distortion correction for cartesian printers?

  • Not that I know. I'm quite sure at the beginning it was only delta and later on 1.0 I added this for cartesian.
  • sorry... i completely mis-read your last comment about .92 not having support for the distortion mapping in cartesian printers.
    I believe i may need to get more familiar with what these files are actually asking for. I cannot seem to get this to compile with version 1.0.2 because of the error.
    i am a bit lost with this error though, it seems that the code will compile in .92 but not 1.0.2..

    Where can i look to get more information on these files so i can get this all sorted out??

  • Am i actually working against myself here? (would not be the first time)..
    This all started when I was trying to print a plane from I started to watch real close when the first layer was being printed, a 0,0 it seemed to print ok, but at the far end of both axis, it seemed very squished. I re-leveled the bed (comparing several methods to get the bed leveled (at temp). 
    I still get the same first layer issues when i try to print, i dont have an issue with the print lifting, but that first layer is not consistent, am I making this an bigger issue than it needs to be?
    While i would really like to make this work correctly, am i fighting myself here?

    Is there a way to update the firmware, without changing any of the existing parameters (or is this not recommended)?

  • If you use config tool a working 0.92 should upgrade to 1.0 by uploading it. You would then see in orange what gots added and needs your attention. Normally not a big deal.

    One problem might be that you use a board we do not know. So if you have a modified pins.h in the original it might be that you have there a third extruder defined. So compare both pins.h files where MOTHERBOARD has the number you used.
  • ok..
    If i use the OEM files , I can compile in Arduino 1.0.2 and 1.0.3, i get an error in 1.8.5 (seems to be a general error).
    If i import the OEM config.h file into the tool, and do nothing other than download the config files, i get the Temp_3 not defined in this scope in version 1.0.2 and 1.0.3 (and the extruder.cpp tab is selected with this line highlited

    #if ANALOG_INPUTS > 0
    const uint8 osAnalogInputChannels[] PROGMEM = ANALOG_INPUT_CHANNELS;

    And the same general error trying to compile in version 1.8.5

    I have looked in the configuration.h file and the pins.h file, it appears that board #33 is being selected, and it appears that temp_3 is set to use pin 12.
    I tried to upload the config and pins files (the 2 OEM and the 2 from the config tool) to try to keep this thread from being too long, but i get an error that the file is not allowed. 
  • Just paste the 2 section for that motherboard. The rest of the pins.h is not of interest here. 33 is the old RAMPS 1.3 and it has only these values defined:

    #define HEATER_0_PIN       10

    #define HEATER_1_PIN       8

    #define HEATER_2_PIN       9


    #define TEMP_0_PIN         13   

    #define TEMP_1_PIN         14

    #define TEMP_2_PIN         15



    so just add the extra values. You also see it has no third extruder as well. So this was added by the vendor manually.
  • here are those sections in the OEM file now

    #define HEATER_0_PIN       10
    #define HEATER_1_PIN       8
    #define HEATER_2_PIN       7
    #define HEATER_3_PIN       45

    #define TEMP_0_PIN         13  
    #define TEMP_1_PIN         14
    #define TEMP_2_PIN         15
    #define TEMP_3_PIN         12

    is there something wrong with this file?

  • No that is fine, just look a bit before that

    uses ORIG_E2_STEP_PIN,ORIG_E2_DIR_PIN,ORIG_E2_ENABLE_PIN whcih are originally also not there, so they must be defined in your oem pins.h as well for the board.
  • Once I issue the G32 S2 command, i get all points scanned as expected, the head stops in the back right corner, I then send a G33, the head goes to X0 and starts the distortion map (with the scan points starting in the back left corner (x0, y250) and stopping in the front right corner x190, y0.
    Is there something else i need to send after these commands or is that the end of this process?
Sign In or Register to comment.