diff --git a/Marlin/src/gcode/feature/filwidth/M404-M407.cpp b/Marlin/src/gcode/feature/filwidth/M404-M407.cpp index 4a811056eb15b479700f987a7878b7c1b3c9a078..e707e134a5b16c955ef3a198bd88b357c95286a6 100644 --- a/Marlin/src/gcode/feature/filwidth/M404-M407.cpp +++ b/Marlin/src/gcode/feature/filwidth/M404-M407.cpp @@ -36,6 +36,7 @@ void GcodeSuite::M404() { if (parser.seen('W')) { filament_width_nominal = parser.value_linear_units(); + planner.volumetric_area_nominal = CIRCLE_AREA(filament_width_nominal * 0.5); } else { SERIAL_PROTOCOLPGM("Filament dia (nominal mm):"); diff --git a/Marlin/src/lcd/ultralcd_impl_DOGM.h b/Marlin/src/lcd/ultralcd_impl_DOGM.h index 4a470349504a4e74fbb1acc5d092db6ddc4c9d0f..6ecb4b40358ad003cadd591461813a039ed2ea38 100644 --- a/Marlin/src/lcd/ultralcd_impl_DOGM.h +++ b/Marlin/src/lcd/ultralcd_impl_DOGM.h @@ -655,12 +655,9 @@ static void lcd_implementation_status_screen() { #if ENABLED(FILAMENT_LCD_DISPLAY) strcpy(wstring, ftostr12ns(filament_width_meas)); if (parser.volumetric_enabled) - strcpy(mstring, itostr3(100.0 * filament_width_meas / filament_width_nominal)); + strcpy(mstring, itostr3(100.0 * planner.volumetric_area_nominal / planner.volumetric_multiplier[FILAMENT_SENSOR_EXTRUDER_NUM])); else strcpy_P(mstring, PSTR("---")); - // Alternatively, show the ratio between cross-sectional areas: - //strcpy(mstring, itostr3(100.0 / CIRCLE_AREA(filament_width_nominal * 0.5) - // / planner.volumetric_multiplier[FILAMENT_SENSOR_EXTRUDER_NUM])); #endif } diff --git a/Marlin/src/lcd/ultralcd_impl_HD44780.h b/Marlin/src/lcd/ultralcd_impl_HD44780.h index b7fa512760af2078f7a6213e7343ed9d7e6bcc20..fb7dfa2d3182aaf96243d32285b263f93a8e5216 100644 --- a/Marlin/src/lcd/ultralcd_impl_HD44780.h +++ b/Marlin/src/lcd/ultralcd_impl_HD44780.h @@ -861,7 +861,7 @@ static void lcd_implementation_status_screen() { lcd.print(ftostr12ns(filament_width_meas)); lcd_printPGM(PSTR(" V")); if (parser.volumetric_enabled) { - lcd.print(itostr3(100.0 * filament_width_meas / filament_width_nominal)); + lcd.print(itostr3(100.0 * planner.volumetric_area_nominal / planner.volumetric_multiplier[FILAMENT_SENSOR_EXTRUDER_NUM])); lcd.write('%'); } else diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index 30c9315bf070c5a59c393626abf104ef2874c086..e88935e5eba3f5590c7002483380a26cd5c50d0d 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -108,6 +108,7 @@ int16_t Planner::flow_percentage[EXTRUDERS] = ARRAY_BY_EXTRUDERS1(100); // Extru // Initialized by settings.load() float Planner::e_factor[EXTRUDERS], // The flow percentage and volumetric multiplier combine to scale E movement Planner::filament_size[EXTRUDERS], // As a baseline for the multiplier, filament diameter + Planner::volumetric_area_nominal = CIRCLE_AREA((DEFAULT_NOMINAL_FILAMENT_DIA) * 0.5), // Nominal cross-sectional area Planner::volumetric_multiplier[EXTRUDERS]; // May be auto-adjusted by a filament width sensor uint32_t Planner::max_acceleration_steps_per_s2[XYZE_N], diff --git a/Marlin/src/module/planner.h b/Marlin/src/module/planner.h index 2a238ec3b924731b7b85aa779a2d6a1cd60f11c1..1e709212834fe4e4f200193146f7cd93a1ef3590 100644 --- a/Marlin/src/module/planner.h +++ b/Marlin/src/module/planner.h @@ -148,6 +148,7 @@ class Planner { static float e_factor[EXTRUDERS], // The flow percentage and volumetric multiplier combine to scale E movement filament_size[EXTRUDERS], // diameter of filament (in millimeters), typically around 1.75 or 2.85, 0 disables the volumetric calculations for the extruder + volumetric_area_nominal, // Nominal cross-sectional area volumetric_multiplier[EXTRUDERS]; // Reciprocal of cross-sectional area of filament (in mm^2). Pre-calculated to reduce computation in the planner // May be auto-adjusted by a filament width sensor