Perhaps I'm confused about the instructions, but I don't see any evidence of the pinda preheat referred to when a new print is started. I'm reasonably confident that I did the calibration correctly and selected use of the calibration. I couldn't get a good z offset tune selected at all either.
What i found from the code is that temperature calibration takes place only when printing from sd card.
It looks we need to reproduce the procedure via gcode when using Octoprint for example? @PavelSindler can you help us?
BTW, this is my current gcode:
M115 U3.0.11 ; use the latest firmware version
G28 W ; home all axes without mesh bed leveling
G1 X10 Y-3 Z150 ; move extruder above bed in front for easier cleaning
M104 S160 ; preheat extruder temp to 160C to soften filament
M109 S160 ; wait for extruder temp
G4 P15000 ; wait for 15 secs (15000ms) for nozzle cleaning
G28 W ; home all axes without mesh bed leveling
M140 S[first_layer_bed_temperature] ; set bed temp for first layer
M190 S[first_layer_bed_temperature] ; wait for bed temp
G4 P120000 ; wait for 120 secs (120000ms) for pinda to heat up
G80 ; run mesh bed leveling routine
G1 Y-3.0 F1000.0 ; move outside print area for priming
M104 S[first_layer_temperature] ; set extruder temp for first layer
M109 S[first_layer_temperature] ; wait for extruder temp
G1 X60.0 E9.0 F1000.0 ; prime line
G1 X100.0 E12.5 F1000.0 ; prime line
You should replace G1 X10 Y-3 Z150 ; with G1 Z150 ;
I used this and Y axis skips steps (on prusa I3 mk2s with 3.0.11-RC1).
Great, have you worked out a way to implement the pinda calibration via gcode, when not printing from the SD card?
I actually can't see the pinda temperature calibration ever happening. I've completed the calibration, started a few prints, but the pinda is never held at the bed for 2 minutes before the levelling is started?
I could remove card.sdrpinting == true from the line,
if (run == false && card.sdprinting == true && temp_cal_active == true && calibration_status() < CALIBRATION_STATUS_PINDA) {
temp_compensation_start(); in Marlin_main.cpp
but i consider printing from sd more stable.
I will compile for you a firmware with this line removed when a get home.
Great, I just think that most use Octoprint to initiate prints? I'm still trying to get my probe to actually do the 2 minute warm up period, it seems to just act like before I enabled temp calibration?
Wouldn't the pinda temp calibration command have to be inserted in the gcode by slic3R one way or another?
I don't believe the pinda temp calibration is working at all for me, not even when printing from SD, given anything I put on SD needs to come from Slic3r which contains start and end gcode, I'm not entirely clear what's at fault. Certainly it doesn't seem to work, even when printing the demo prints (batman etc).
Update: I ran the temp calibration again, for the first time during the start of a print it says "PINDA heating". This was seen while printing the batman STL off the SD card. I still need to try some of my own prints exported via Slic3r.
Update 2: Even when exporting gcode from Slic3r to the SD with custom start / end gcode it still seems to implement the pinda warming routine (nice!).
Update 3: Why oh why does it sit for 2 minutes right where the purge line is laid later? It seems the nozzle then runs over the deposited blob as it lays the purge line. Would it make more sense to heat the extruder later, before the purge line is laid? @josefprusa @PavelSindler
Update 4: Sweet, I figured out that the pinda 2 minute wait period / calibration is integrated into the G80 command! So we can use octoprint etc with no problem if the firmware is changed to allow the calibration to run when not printing from the SD card.
Current gcode:
; set extrusion tuning ***last done 8/5/2017***
; to get this preheat and measure 120mm of filament from extruder housing and send M83 followed by G1 E100 F100
; 120 - measurement = X | E = 16130 / X
; can also be saved to EEPROM by sending above cmd(s) in terminal followed by M500 (send M503 after to check)
M92 E175.3
M500
; set bed PID tuning ***last done 8/5/2017***
; to get this send M303 E-1 S100 C8 when bed is at ambient temperature
; can also be saved to EEPROM by sending above cmd(s) in terminal followed by M500 (send M503 after to check)
M304 P89.99 I3.85 D525.22
M500
M115 U3.0.11 ; use the latest firmware version
G28 W ; home all axes without mesh bed leveling
G1 Z100 ; move extruder up to to allow easy cleaning
M104 S160 ; preheat extruder temp to 160C to soften filament but prevent oozing
M109 S160 ; wait for extruder temp
G4 P15000 ; wait 15 secs (15000ms) for nozzle cleaning if required
M140 S[first_layer_bed_temperature] ; set bed temp for 1st layer
M190 S[first_layer_bed_temperature] ; wait for bed temp
G28 W ; home all axes without mesh bed leveling
G80 ; run mesh bed leveling routine which will include 2 min pinda calibration time if it鈥檚 activated in settings
G1 Y-3.0 F1000.0 ; move outside print area for priming
M104 S[first_layer_temperature] ; set extruder temp for 1st layer
M109 S[first_layer_temperature] ; wait for extruder temp
G1 X60.0 E9.0 F1000.0 ; thin prime line
G1 X100.0 E12.5 F1000.0 ; thicker prime line
Temperature calibration is a step in G80. You can change the temperature whenever you want in the startup gcode. I heat the extruder temp to 170, do home and bed leveling, then heat to first layer temperature, when the nose is down so the blob is stuck to the heatbed.
M115 U3.0.10 ; use the latest firmware version
M83 ; extruder relative mode
M140 S[first_layer_bed_temperature] ; set bed temp
M104 S170 ; set extruder temp to 170 not to ooze and to soften the blob before homing and leveling
M109 S170 ; wait for extruder temp
G28 W ; home all without mesh bed level
G1 Z100 ; move extruder above bed in front for easier cleaning
M190 S[first_layer_bed_temperature] ; wait for bed temp
G28 W ; home all without mesh bed level
G80 ; mesh bed leveling
G1 Y-3.0 F1000.0 ; go outside print area
M104 S[first_layer_temperature] ; set extruder temp
M109 S[first_layer_temperature] ; wait for extruder temp
G92 E0 ; reset extrusion distance
G1 X60.0 E9.0 F1000.0 ; intro line
G1 X100.0 E12.5 F1000.0 ; intro line
@mionut why do you have the M83 and G92?
Hello and thank you for feedback. Yes, preheating PINDA probe is part of G80 (mesh bed leveling) gcode and happens when printing from sd card and temperature cal. is activated.
To reproduce this procedure when not printing from SD card, you need to move extruder to PINDA preheat position and wait for 120 s before G80. But I will improve it for usage with octoprint so you don't need to play with start gcode sequences.
@markaswift You are right that nozzle is in purge line area when preheating PINDA. When PINDA is preheated, it could happen with some materials that blob under the nozzle occurs. You don't want to have preheat position somewhere in print area, because of this blob which could probably also damage the heatbed surface little bit after long term usage. So that is why it is in purge line.
Heating nozzle later would be an option, but it prolonges overall time.
@PavelSindler thank you for the upcoming tweaks and feedback, appreciated!
Can the preheat position not be moved passed the purge line (still outside of the print area)?
BTW, if we simulate it right now with Octoprint, will it still apply the pinda temp calibration after we simulate the 2 minute wait? I presumed it wouldn't as it seems to completely skip the pinda calibration routine? A revised version that we can use with Octoprint would be amazing!
M83 was in the original Prusa Slic3r startup code, and G92 i don't know if it is necessary, i found it in another person's code.
As @PavelSindler said, you can change position of the probe to x 70 Y -3 Z 1 and wait for 120 sec between g28 and g80. Temperature calibration values are used even if the probe is not moved to this position and a wait of 2 minutes occurs in g80(when not printing from sd), if temp calibration is active.
Be carefull with Y -3, because i think after G28 the proble is at Y0 and cannot go lower because is on endstop, but after G80 the probe is set at Y-3, so i think that the location is actualy Y0.
@markaswift Actually it will work if you add 2 minutes preheating to your start sequence. I wanted to avoid 2 minutes delay when running mesh bed leveling alone (for example from calibration menu or just by sanding gcode over serial). That is why it was done like that. But it will apply temp. caliration Z shift at the end of mesh bed leveling.
It is good to add also some retraction before heating PINDA and unretract after that (because of the blob).
I guess the issue is having a consistent gcode that works with both SD and Octoprint etc. When will you likely make the change (I'm available to test!).
Guys, I'm trying to setup the 2 minute pause... issuing G1 X70 Y-3 Z1 makes the printer move extremely slow in Octoprint, also not sure yet if it should be -3 or 0. Any ideas? (SOLVED via acceleration settings).
Update 1: This is my current gcode
M115 U3.0.11 ; use the latest firmware version
M83 ; extruder relative mode
; extrusion tuning ***last done 8/5/2017***
; to get this preheat and measure 120mm of filament from extruder housing and send M83 followed by G1 E100 F100
; 120 - measurement = X | E = 16130 / X
; can also be saved to EEPROM by sending above cmd(s) in terminal followed by M500 (send M503 after to check)
M92 E175.3
; bed PID tuning ***last done 8/5/2017***
; to get this send M303 E-1 S100 C8 when bed is at ambient temperature
; can also be saved to EEPROM by sending above cmd(s) in terminal followed by M500 (send M503 after to check)
M304 P89.99 I3.85 D525.22
; save the above settings to EEPROM (ensures settings always valid even after a factory reset)
M500
G28 W ; home all axes without mesh bed leveling
G1 Z100 ; move extruder up to to allow easy cleaning if required
M104 S170 ; preheat extruder temp to 160C to soften filament but prevent oozing
M140 S[first_layer_bed_temperature] ; set bed temp for 1st layer
M109 S170 ; wait for extruder temp
M190 S[first_layer_bed_temperature] ; wait for bed temp
; G4 P15000 ; wait 15 secs (15000ms) extra for nozzle cleaning if required
G28 W ; home all axes without mesh bed leveling
G1 X70 Z1 ; move extruder for pinda temperature calibration
G4 P120000 ; wait 120 secs (120000ms) for pinda to adjust to temperature
G80 ; run mesh bed leveling routine which will include pinda calibration if it鈥檚 activated in settings
G1 Y-3.0 F1000.0 ; move outside print area for priming
M104 S[first_layer_temperature] ; set extruder temp for 1st layer
M109 S[first_layer_temperature] ; wait for extruder temp
G1 X60.0 E9.0 F1000.0 ; thin prime line
G1 X100.0 E12.5 F1000.0 ; thicker prime line
You don't need that long starting script. It's over complicated and putting that in S3D causes the bed heat to turn off when ran through OctoPrint. I just removed && card.sdprinting == true from if (run == false && card.sdprinting == true && temp_cal_active == true && calibration_status() < CALIBRATION_STATUS_PINDA) { temp_compensation_start(); in Marlin_main.cpp. I'm not worried about some calibration taking longer as I only calibrate after a new firmware flash. This is the starting script I'm using with now good success.
M115 U3.0.10 ; tell the printer latest firmware varsion available
G28 W ; home all without mesh bed level
G0 Z150 ; move probe away from the heated bed
M104 S[extruder0_temperature] T0 ; this will take the layer 1 temperature for extruder 0
M140 S[bed1_temperature] ; this will take the layer 1 temperature for bed 0
M190 S[bed1_temperature] ; wait for bed temp
M109 S[extruder0_temperature] T0 ; wait for extruder temp
G80 ; mesh bed leveling
G1 Y-3.0 F1000.0 ; go outside printing area
G1 X60.0 E15 F1000.0 ; intro line
G1 X100.0 E12.5 F1000.0 ; intro line
My script works better for me... It also means I save calibrations between firmware resets etc. That and the fact it avoids oozing during calibration and pinda calibration. Each to their own ;)
This bug has been fixed in https://github.com/prusa3d/Prusa-Firmware/commit/fefa240cd7cdebd93659508aa576cf485edbf900
W ; home all axes without mesh bed leveling
G80 ; run mesh bed leveling routine which will include 2 min pinda calibration time if it鈥檚 activated in settings
When you say "if it's activated in settings", I looked through the settings and couldn't find this anywhere. Does the pinda calibration time automatically become set if the calibration procedure has been run, or does it need to be set somewhere in the settings in order to become active?
Thanks
Edit. Nevermind. Found it. Under Calibration - Temperature
Most helpful comment
You don't need that long starting script. It's over complicated and putting that in S3D causes the bed heat to turn off when ran through OctoPrint. I just removed
&& card.sdprinting == truefromif (run == false && card.sdprinting == true && temp_cal_active == true && calibration_status() < CALIBRATION_STATUS_PINDA) { temp_compensation_start();in Marlin_main.cpp. I'm not worried about some calibration taking longer as I only calibrate after a new firmware flash. This is the starting script I'm using with now good success.