Notifications
Clear all

Hyperfine bed leveling?  

Stránka 13 / 22
  RSS
jeremiah.r
(@jeremiah-r)
Active Member
Re: Hyperfine bed leveling?

Love the Hyperfine bed leveling. But I need to invert the Z-Probe on mine as I killed my PINDA probe and have a SN-08 square probe now. I have it working with the official MK2 firmware but I can not even get the Hyperfine to compile. I uncommented the thermal runaway stuff as mentioned somewhere in this thread (I didn't think it was the problem) But I kept getting the same error.

Arduino: 1.8.4 (Windows 10), Board: "RAMBo"

In file included from sketch\temperature.h:24:0,

from sketch\ultralcd.cpp:1:

sketch\ultralcd.cpp: In function 'void lcd_commands()':

ultralcd.cpp:932: error: 'MSG_M117_V2_CALIBRATION' was not declared in this scope

; enquecommand_P(MSG_M117_V2_CALIBRATION);

^

sketch\Marlin.h:227:42: note: in definition of macro 'enquecommand_P'

#define enquecommand_P(cmd) enquecommand(cmd, true)

^

exit status 1
'MSG_M117_V2_CALIBRATION' was not declared in this scope

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

Maybe you can help me out..... It would be nice to be able to use the HyperFine mesh correction. TY.

Napsal : 03/01/2018 5:29 am
3d-gussner
(@3d-gussner)
Reputable Member Prusa-Translations
Re: Hyperfine bed leveling?


Love the Hyperfine bed leveling. But I need to invert the Z-Probe on mine as I killed my PINDA probe and have a SN-08 square probe now. I have it working with the official MK2 firmware but I can not even get the Hyperfine to compile. I uncommented the thermal runaway stuff as mentioned somewhere in this thread (I didn't think it was the problem) But I kept getting the same error.

Arduino: 1.8.4 (Windows 10), Board: "RAMBo"

In file included from sketch\temperature.h:24:0,

from sketch\ultralcd.cpp:1:

sketch\ultralcd.cpp: In function 'void lcd_commands()':

ultralcd.cpp:932: error: 'MSG_M117_V2_CALIBRATION' was not declared in this scope

; enquecommand_P(MSG_M117_V2_CALIBRATION);

^

sketch\Marlin.h:227:42: note: in definition of macro 'enquecommand_P'

#define enquecommand_P(cmd) enquecommand(cmd, true)

^

exit status 1
'MSG_M117_V2_CALIBRATION' was not declared in this scope

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

Maybe you can help me out..... It would be nice to be able to use the HyperFine mesh correction. TY.

Hi,

That is too bad that you broke your PINDA, i don't know the SN-08 square probe and how it works. This could be a challenge as the firmware expects a PINDA probe.

1. You need to download or clone the newest version https://github.com/3d-gussner/Prusa-Firmware/tree/MK2-Private_build
2. Following the https://github.com/3d-gussner/Prusa-Firmware/blob/MK2-Private_build/BUILDING.md you should be able to compile the firmware

The exit status 1 tell me that you are missing a MSG in the language files. I have this MSGs on my github, so maybe you have a mix of old and new code.
You also may need to run the perl script /Firmware/langtool.pl or /Firmware/langtool_xx_yy.....pl script depending which languages you want to be compiled.

Hope that helps

Napsal : 03/01/2018 10:53 am
jeremiah.r
(@jeremiah-r)
Active Member
Re: Hyperfine bed leveling?

I was using the Hyperfine branch.... And I supposed to compile the master branch? I thought I did that first and it was just the stock 3.1.0 FW... I'm going to retry the Master branch and see what it does.. Thank you. If this is my problem I'm sorry for being dumb.... You have so many branches I figured I had to choose the hyperfine branch for it to work.

BTW as for the square probe I'm using. It's works a treat. It's just not PNP like the PINDA or at least I had to inverst the probe logic. It works great. Did an XYZ calibration and it's been super repeatable. It is even using all the same wiring which I assume is 5v powered.

EDIT: I used Git Desktop to help me navigate your changes and installed Perl and ran the language.pl script. That changed the language files and then it would compile. Thank you for you contribution to this already great FW. Now to wait for my current print to finish so I can upload this new FW.

Napsal : 04/01/2018 4:31 pm
3d-gussner
(@3d-gussner)
Reputable Member Prusa-Translations
Re: Hyperfine bed leveling?


I was using the Hyperfine branch.... And I supposed to compile the master branch? I thought I did that first and it was just the stock 3.1.0 FW... I'm going to retry the Master branch and see what it does.. Thank you. If this is my problem I'm sorry for being dumb.... You have so many branches I figured I had to choose the hyperfine branch for it to work.

BTW as for the square probe I'm using. It's works a treat. It's just not PNP like the PINDA or at least I had to inverst the probe logic. It works great. Did an XYZ calibration and it's been super repeatable. It is even using all the same wiring which I assume is 5v powered.

please use the MK2-private_build branch as this is the most recent and used to compile the release bed files

Napsal : 04/01/2018 5:18 pm
jeremiah.r
(@jeremiah-r)
Active Member
Re: Hyperfine bed leveling?



I was using the Hyperfine branch.... And I supposed to compile the master branch? I thought I did that first and it was just the stock 3.1.0 FW... I'm going to retry the Master branch and see what it does.. Thank you. If this is my problem I'm sorry for being dumb.... You have so many branches I figured I had to choose the hyperfine branch for it to work.

BTW as for the square probe I'm using. It's works a treat. It's just not PNP like the PINDA or at least I had to inverst the probe logic. It works great. Did an XYZ calibration and it's been super repeatable. It is even using all the same wiring which I assume is 5v powered.

please use the MK2-private_build branch as this is the most recent and used to compile the release bed files

That is what I needed. I used the private build and ran the language perl script for the least amount of languages. ReCalibrating now. Thank you much.

Napsal : 04/01/2018 9:31 pm
3d-gussner
(@3d-gussner)
Reputable Member Prusa-Translations
Re: Hyperfine bed leveling?

Glad it works now and you can use all the features including the new sensor!

Napsal : 04/01/2018 9:38 pm
reid.b
(@reid-b)
Reputable Member
Re: Hyperfine bed leveling?

I'm curious what it would take to port the hyperfine mods to the MK3 branch?

Napsal : 07/01/2018 7:53 am
3d-gussner
(@3d-gussner)
Reputable Member Prusa-Translations
Re: Hyperfine bed leveling?


I'm curious what it would take to port the hyperfine mods to the MK3 branch?

I asked few YouTuber to print the hyperfine bed leveling stl files but no answer jet. As my MK3 upgrade kit comes
end February or in March I am not able to test it or even to see if that is necessary. The MK52 bed with spring steel sheet looks quite 'flat' compared to the MK2/s MK42 bed. Implementing is quiet easy!

So if you own a MK3 let us know if there is a need for.

Napsal : 07/01/2018 10:27 am
3d-gussner
(@3d-gussner)
Reputable Member Prusa-Translations
Re: Hyperfine bed leveling?

I got a new firmware release with few changes. Checkout https://github.com/3d-gussner/Prusa-Firmware/releases/latest

Napsal : 08/01/2018 11:03 am
Zinga
(@zinga)
Trusted Member
Re: Hyperfine bed leveling?

tl;dr: Here's a block of code to add to Marlin_main.cpp so you can use the G80 gcode to adjust any of the 7x7 points on your bed (these are added on top of the other bed level corrections).

I've been having issues getting a perfect first layer all around my bed. PJR's code for adding adjustments to the 8 measured points helped a lot with that (and motivated me to get the Arduino IDE set up so I could build the firmware myself); I could now print anywhere on the bed, although there were spots in between the probe points that were a little off that no amount of adjusting seemed to help. I dug into the bed leveling code and as I understand it (correct me if I'm wrong), the firmware takes the 9 measured points and uses a bicubic interpolation algorithm (lagrange polynomials) to turn a 3x3 grid into a 7x7 grid. Each point affects all the other points in the horizontal and vertical, the more distant the point, the less effect it has. Unfortunately, this makes it very difficult to do something (somewhat) convenient like make adjustments on a 5x5 grid. Instead, I made this hacky way to adjust any of the points on the final 7x7 grid MBL uses.

Add this code to Marlin_main.cpp:
SERIAL_ECHOLNPGM("Bed leveling correction finished");
mbl.upsample_3x3();
SERIAL_ECHOLNPGM("Upsample finished");
// ----New Code----------------------
for (uint8_t i = 'j'; i < 'x'; i++)
{
float correction = 0;
if(code_seen(i))
{
correction = (float)code_value();
int intCode = (int)correction;

int xval = abs(((int)correction) / 10);
int yval = abs((int)correction) - xval*10;
float offset = (float)(correction - intCode)/10;

SERIAL_ECHOPGM("X: ");
SERIAL_ECHO(xval);
SERIAL_ECHOPGM(" Y: ");
SERIAL_ECHO(yval);
SERIAL_ECHOPGM(" Offset: ");
SERIAL_ECHOLN(offset);

// Make sure both coordinates are 0-6 and the offset isn't larger
// than 0.1mm
if(xval < 7 && yval < 7 && fabs(offset) < 0.1)
mbl.z_values[yval][xval] += offset;
else
{
SERIAL_ECHOPGM("Invalid coordinates or offset: ");
SERIAL_ECHOLN(correction);
}
}
}
// ----End New Code------------------
mbl.active = 1; //activate mesh bed leveling
SERIAL_ECHOLNPGM("Mesh bed leveling activated");
go_home_with_z_lift();

The way to use it isn't the most user friendly, but I'm working off decade-old high school C++ skills, and this seemed like a good way to keep a low memory footprint and minimize the number of characters used per correction. With the G80 command you can use letters (lowercase) 'j' through 'x' followed by '-' if you need to lower the nozzle, then the XY coordinates that you want to adjust (0-6), decimal point, and then the adjustment value in microns (0-99). ex: '"G80 j13.40 k-53.30" at (1,3) will move the nozzle up 40 microns, and at (5,3) lower the nozzle by 30 microns. The 'j' through 'x' don't matter except to separate the values. The limit of 99 microns is artificial, if you need more you can change the if statement to anything less than 1 (999 microns) Edit: Never mind, you'd also have to change float offset = (float)(correction - intCode)/10 to allow adjustments more than 99 microns. Just remember that these are done on top of the other bed adjustments.

I would suggest using 3d-gussner's fork for this because each line of gcode has a limit of 96 characters (afaik) you can really only correct 15 spots on the bed depending on the values you're giving it, so you can save a lot of space by having the corrections of the 8 measured points set in the menu.

You can test if your values are good by running the G80 command in Pronterface or any other serial terminal, it'll echo back with "X: Y: Offset: ". I tested it quite a bit, but may have missed something.

If someone wants to they can have fun it, maybe add a separate gcode that adjusts the z_value[][] array after G80 finishes, then you could just have blocks of corrections to bypass the command character limit. Also, there's probably some fancy math way to say "Take this point, adjust it by this much, and then bring the surrounding points closer to this".

Hyperfine Bed Correction (ignore the retraction z-hop blobs and the horrible attempt at removing one in the middle upper part 🙄 ):

Ludicrous? Bed Correction:
G80 j-43.30 k-53.50 l-44.35 m-54.50 n-45.30 o-55.40 p-10.30 q-20.30

P.S. At first I used a character array to do the code_seen() thing, but found the Arduino IDE telling me that global variables were using more bytes of dynamic memory, so I changed the for loop to iterate through characters instead which brought it back down. Is that some quirk of the IDE or is an array inside a loop permanently taking memory (high school C++ didn't get into memory management).

Napsal : 14/01/2018 6:17 am
3d-gussner
(@3d-gussner)
Reputable Member Prusa-Translations
Re: Hyperfine bed leveling?


tl;dr: Here's a block of code to add to Marlin_main.cpp so you can use the G80 gcode to adjust any of the 7x7 points on your bed (these are added on top of the other bed level corrections).

I've been having issues getting a perfect first layer all around my bed. PJR's code for adding adjustments to the 8 measured points helped a lot with that (and motivated me to get the Arduino IDE set up so I could build the firmware myself); I could now print anywhere on the bed, although there were spots in between the probe points that were a little off that no amount of adjusting seemed to help. I dug into the bed leveling code and as I understand it (correct me if I'm wrong), the firmware takes the 9 measured points and uses a bicubic interpolation algorithm (lagrange polynomials) to turn a 3x3 grid into a 7x7 grid. Each point affects all the other points in the horizontal and vertical, the more distant the point, the less effect it has. Unfortunately, this makes it very difficult to do something (somewhat) convenient like make adjustments on a 5x5 grid. Instead, I made this hacky way to adjust any of the points on the final 7x7 grid MBL uses.

Add this code to Marlin_main.cpp:
SERIAL_ECHOLNPGM("Bed leveling correction finished");
mbl.upsample_3x3();
SERIAL_ECHOLNPGM("Upsample finished");
// ----New Code----------------------
for (uint8_t i = 'j'; i < 'x'; i++)
{
float correction = 0;
if(code_seen(i))
{
correction = (float)code_value();
int intCode = (int)correction;

int xval = abs(((int)correction) / 10);
int yval = abs((int)correction) - xval*10;
float offset = (float)(correction - intCode)/10;

SERIAL_ECHOPGM("X: ");
SERIAL_ECHO(xval);
SERIAL_ECHOPGM(" Y: ");
SERIAL_ECHO(yval);
SERIAL_ECHOPGM(" Offset: ");
SERIAL_ECHOLN(offset);

// Make sure both coordinates are 0-6 and the offset isn't larger
// than 0.1mm
if(xval < 7 && yval < 7 && fabs(offset) < 0.1)
mbl.z_values[yval][xval] += offset;
else
{
SERIAL_ECHOPGM("Invalid coordinates or offset: ");
SERIAL_ECHOLN(correction);
}
}
}
// ----End New Code------------------
mbl.active = 1; //activate mesh bed leveling
SERIAL_ECHOLNPGM("Mesh bed leveling activated");
go_home_with_z_lift();

The way to use it isn't the most user friendly, but I'm working off decade-old high school C++ skills, and this seemed like a good way to keep a low memory footprint and minimize the number of characters used per correction. With the G80 command you can use letters (lowercase) 'j' through 'x' followed by '-' if you need to lower the nozzle, then the XY coordinates that you want to adjust (0-6), decimal point, and then the adjustment value in microns (0-99). ex: '"G80 j13.40 k-53.30" at (1,3) will move the nozzle up 40 microns, and at (5,3) lower the nozzle by 30 microns. The 'j' through 'x' don't matter except to separate the values. The limit of 99 microns is artificial, if you need more you can change the if statement to anything less than 1 (999 microns) Edit: Never mind, you'd also have to change float offset = (float)(correction - intCode)/10 to allow adjustments more than 99 microns. Just remember that these are done on top of the other bed adjustments.

I would suggest using 3d-gussner's fork for this because each line of gcode has a limit of 96 characters (afaik) you can really only correct 15 spots on the bed depending on the values you're giving it, so you can save a lot of space by having the corrections of the 8 measured points set in the menu.

You can test if your values are good by running the G80 command in Pronterface or any other serial terminal, it'll echo back with "X: Y: Offset: ". I tested it quite a bit, but may have missed something.

If someone wants to they can have fun it, maybe add a separate gcode that adjusts the z_value[][] array after G80 finishes, then you could just have blocks of corrections to bypass the command character limit. Also, there's probably some fancy math way to say "Take this point, adjust it by this much, and then bring the surrounding points closer to this".

Hyperfine Bed Correction (ignore the retraction z-hop blobs and the horrible attempt at removing one in the middle upper part 🙄 ):

Ludicrous? Bed Correction:
G80 j-43.30 k-53.50 l-44.35 m-54.50 n-45.30 o-55.40 p-10.30 q-20.30

P.S. At first I used a character array to do the code_seen() thing, but found the Arduino IDE telling me that global variables were using more bytes of dynamic memory, so I changed the for loop to iterate through characters instead which brought it back down. Is that some quirk of the IDE or is an array inside a loop permanently taking memory (high school C++ didn't get into memory management).

Looks very nice, have to look to that. Thanks for sharing

Napsal : 15/01/2018 12:43 am
Knickohr
(@knickohr)
Member Moderator
Re: Hyperfine bed leveling?

M600-panic after update to latest HFM firmware 😮

I updated to the latest hyperfine bed leveling firmware and now my printer always ask me to switch the filament.

Any suggestions ?

Yes, i choose the right firmware for MK2 (no MM) : https://github.com/3d-gussner/Prusa-Firmware/releases/download/v3.1.0-001-HFM/20171229v1-3.1.0_Build001_EN_CZ_IT_ES_PL_DE_Hyperfine_FRS_1_75mm_MK2-RAMBo13a-E3Dv6full.hex

Thomas

Napsal : 16/01/2018 8:19 pm
3d-gussner
(@3d-gussner)
Reputable Member Prusa-Translations
Re: Hyperfine bed leveling?


M600-panic after update to latest HFM firmware 😮

I updated to the latest hyperfine bed leveling firmware and now my printer always ask me to switch the filament.

Any suggestions ?

Yes, i choose the right firmware for MK2 (no MM) : https://github.com/3d-gussner/Prusa-Firmware/releases/download/v3.1.0-001-HFM/20171229v1-3.1.0_Build001_EN_CZ_IT_ES_PL_DE_Hyperfine_FRS_1_75mm_MK2-RAMBo13a-E3Dv6full.hex

Thomas

you need to go to settings and deactivate/activate/deactivate the filament runout sensor if you don't have one connected to y-max. See the release notes

Napsal : 16/01/2018 9:18 pm
Knickohr
(@knickohr)
Member Moderator
Re: Hyperfine bed leveling?

Yes, I deactivate it in the settings.

Curios ! I will check it tomorrow after a long print.

Thomas

Napsal : 16/01/2018 9:28 pm
3d-gussner
(@3d-gussner)
Reputable Member Prusa-Translations
Re: Hyperfine bed leveling?


Yes, I deactivate it in the settings.

Curios ! I will check it tomorrow after a long print.

Thomas

It is strange, but some user had problems so deactivate/activate/deactivate sets the eeprom value right. I think I found it but didn't compile it yet. And as I didn't had the issue it is difficult to debug for me.

Do you use octoprint? Did the m110 fix fixed some issues? I don't use octoprint that often.

Napsal : 16/01/2018 11:00 pm
Knickohr
(@knickohr)
Member Moderator
Re: Hyperfine bed leveling?

tested 🙂

off/on/off works for me.

No, I never used/use Octoprint.

But another thing, Info says firmware 3.1.0b010 😮 Is that the latest firmware ? I think 3.1.0 is now official, not beta.

Thomas

Napsal : 17/01/2018 11:07 am
3d-gussner
(@3d-gussner)
Reputable Member Prusa-Translations
Re: Hyperfine bed leveling?


tested 🙂

off/on/off works for me.

No, i never used/use Octoprint.

But another thing, Info says firmware 3.1.0b010 😮 Is that the latest firmware ? I think 3.1.0 is now official, not beta.

Thomas

Hi Thomas,
It is fw3.1.0 + m110 fix from official branch + hypefine + frs + pla1st + languages we developed. I copied the mk3 Build information code and the 'b' stands for build not beta 🙂 so I/you can see what build version it is. Easier to track and troubleshoot.

Great that it works for you. Did you test the gcode and stl files from my github? Any suggestions? Try the gcode files and open pronterface you see lot of information that can be handy. Also M45 V20 which is xyz-calibration gives you via pronterface lot of info.

Napsal : 17/01/2018 11:18 am
Knickohr
(@knickohr)
Member Moderator
Re: Hyperfine bed leveling?

M45 V20 : It makes a lot of measurements ! 😯

Is the calibration algorithm different from stock PRUSA ? I ask, because it moves in a different way as the default PRUSA.

I see a lot of information, too much information 😆

No I will test the gcode files.

Thomas

Napsal : 17/01/2018 6:09 pm
Knickohr
(@knickohr)
Member Moderator
Re: Hyperfine bed leveling?

Wonderful what a well calibrated printer can do ! 😎

Do an E-step, then extrusion multiplier, align the z and do a bed leveling.

Whowww, nice print, so smooth and shiny.

Big THX for all the developer of this firmware 😀

Thomas

Napsal : 18/01/2018 9:50 pm
Neal
 Neal
(@neal)
Reputable Member
Re: Hyperfine bed leveling?

Hello,

I have just run the Hyperfine Bed leveling. It all looks okay but I think I may have an over extrusion problem which I'll take care of later. When I run the g-code I get a "File Not Complete" message and the option to run it anyway. Which I have. The other problem is the "G" square is printed a couple of cm's forward of the other two back squares. What am I doing wrong?

Thanks,

Neal

Napsal : 21/01/2018 1:29 pm
Stránka 13 / 22
Share: