Hi folks,
I had the idea of a method for automatic e-step calibration. As it is not easy to get the e-step calibration right - in sense of how good the MFM is doing the measurement. So i thought, why not use the MFM in first place?
There are some requirements in order for the method to work, but these requirements are also positive for the MFM itself.
- The MFM must be tightly connected to the extruder (stiff and short)
- The initial calibration of the mm/rev of the MFM must be done by hand or math
That's it.
You only need around 500mm of Filament and you are good to go.
I use the following method
- set the L parameter of the MFM to your needs, I measured 8mm diameter of the sense wheel, so the circumference is about 25.13mm - I rounded it to 25.3
- set the min and max allowance values very tight, I use 98% and 102%
- set the reporting distance very small, I use 0.2mm
- now start printing a calibration file, where the file is basicly only extruding short chunks of 1mm filament with only 30 mm/min at your desired temperature, in the example 235° for petg carbon filled
- if the MFM is reporting tooLittleMovement, increase the e-steps
- if the MFM is reporting tooMuchMovement, decrease the e-steps
- store the latest reported e-steps in your filament config.
thats it - works like a charm, and the sporadic false tooLittleMovement error is gone
My g-code files for reference only, as they use other macros of our printers.
0:/gcodes/filament_monitor_calibration.gcode
if exists(global.mfmcalibration)
set global.mfmcalibration = true
else
global mfmcalibration = true
G10 P0 S235 ; sets the temperature
M140 P0 S100 ; set bed temp
M107 ; fan off
M144 P0 S1 ; activate bed 1 heater
T0 ; select tool 0
M98 P"0:/sys/meltingplot/home_if_necessary" ; check homing
G29 S1 ; load stored hight map
M83 ; use relative distances for extrusion
G90 ; use absolute coordinates
G21 ; set units to millimeters
M116 ; wait for all heaters
G11 ; unretract
G1 Z300 ; raise z=20mm
G53 G1 X50 Y50 F14400 ; move printhead to center
G92 E0 ; reset e-steps
M572 D0 S0.0 ; disable pressure advance
M591 D0 P3 C"e1stop" S1 R98:102 E0.2 L25.3 ; enable MFM
G4 S5 ; wait for restart of MFM
G91 ; relative moves
; 500mm
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G1 X1 E1 F30
G10 ; retract
G10 P0 R0 S0 ; disable hotend
M140 S0 R0 ; set bed heater to 0°
M140 P0 S-273.1 ; disable bed heater
T-1 ; unselect tool
set global.mfmcalibration = false
0:/sys/filament-error.g
; Parameter P description
; 2 = noDataReceived
; 3 = noFilament
; 4 = tooLittleMovement
; 5 = tooMuchMovement
; 6 = SensorError
; 7 = Magnet to weak
; 8 = Magnet to strong
if param.P == 2 || param.P == 6
echo "Filament Sensor Error: " ^ param.P ^ " sensor : " ^ param.D ^ " - continue printing"
M99
if param.P == 4
if !exists(global.mfmcalibration) || global.mfmcalibration == false
echo "Filament Sensor " ^ param.D ^ ": Too little Filament movement - Possible Reasons: Filament empty, grinding or clogged nozzle."
M291 P{"Filament Sensor " ^ param.D ^ ": Too little Filament movement - Possible Reasons: Filament empty, grinding or clogged nozzle."} S1 T0
M25 ; pause print
else
M92 E{move.extruders[0].stepsPerMm+0.1}
echo "E-Steps: " ^ {move.extruders[0].stepsPerMm} ^ ""
M99 ; leave macro
if param.P == 5
if !exists(global.mfmcalibration) || global.mfmcalibration == false
echo "Filament Sensor " ^ param.D ^ ": Too much Filament movement - Possible Reasons: Spool skipped or Filament pushed into PTFE tube."
M291 P{"Filament Sensor " ^ param.D ^ ": Too much Filament movement - Possible Reasons: Spool skipped or Filament pushed into PTFE tube."} S1 T0
M25 ; pause print
else
M92 E{move.extruders[0].stepsPerMm-0.1}
echo "E-Steps: " ^ {move.extruders[0].stepsPerMm} ^ ""
M99 ; leave macro
echo "Filament error: " ^ param.P ^ " on sensor " ^ param.D ^ " - paused"
M291 P{"Filament Sensor " ^ param.D ^ ": " ^ param.S ^ " - Paused"} S1 T0
M25 ; pause