mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-06 22:47:32 -06:00
Vfa calibs - Input Shaping & Junction Deviation (#9160)
@RF47 and I have been working on a **two-step input shaping calibration** to help fine-tune print quality and Junction Deviation Test for Marlin2 printers. This is based on [Klipper's Resonance Compensation](https://www.klipper3d.org/Resonance_Compensation.html#resonance-compensation), [Marlin’s M593 G-code](https://marlinfw.org/docs/gcode/M593.html), discussions from [SoftFever/OrcaSlicer#1820](https://github.com/SoftFever/OrcaSlicer/issues/1820), some elements from the [input_shaping branch](https://github.com/SoftFever/OrcaSlicer/tree/feature/input_shaping) and Junction Deviation [Marlin Documentation](https://marlinfw.org/docs/configuration/configuration.html#junction-deviation-) This is for Marlin only, but I'm working on a future Klipper-compatible version here: [VFA-Calibs+Klipper](https://github.com/ianalexis/OrcaSlicer/tree/VFA-Calibs%2BKlipper). However, we don't own a Klipper machine, so we're unsure how to improve it or verify if it works correctly. ### Calibration Steps 1. **Frequency Test** – Helps identify the optimal input shaping frequency. 2. **Damping Test** – Fine-tunes the damping ratio for smoother prints. ### Screenshots         ## Tests - Marlin tested on **Ender 3-class printers** (@RF47 and @ianalexis) - Klipper tested in Voron 2.4 and an FLSun T1 Pro @ShaneDelmore - Tested in Windows and MacOs.
This commit is contained in:
commit
32efc176d9
16 changed files with 925 additions and 35 deletions
|
@ -2975,6 +2975,43 @@ void MainFrame::init_menubar_as_editor()
|
|||
},
|
||||
"", nullptr,
|
||||
[this]() {return m_plater->is_view3D_shown();; }, this);
|
||||
|
||||
// Input Shaping calibrations
|
||||
auto input_shaping_menu = new wxMenu();
|
||||
|
||||
append_menu_item(
|
||||
input_shaping_menu, wxID_ANY, _L("Input Shaping Frequency"), _L("Input Shaping Frequency"),
|
||||
[this](wxCommandEvent&) {
|
||||
if (!m_IS_freq_calib_dlg)
|
||||
m_IS_freq_calib_dlg = new Input_Shaping_Freq_Test_Dlg((wxWindow*)this, wxID_ANY, m_plater);
|
||||
m_IS_freq_calib_dlg->ShowModal();
|
||||
},
|
||||
"", nullptr,
|
||||
[this]() {return m_plater->is_view3D_shown();; }, this);
|
||||
|
||||
append_menu_item(
|
||||
input_shaping_menu, wxID_ANY, _L("Input Shaping Damping/zeta factor"), _L("Input Shaping Damping/zeta factor"),
|
||||
[this](wxCommandEvent&) {
|
||||
if (!m_IS_damp_calib_dlg)
|
||||
m_IS_damp_calib_dlg = new Input_Shaping_Damp_Test_Dlg((wxWindow*)this, wxID_ANY, m_plater);
|
||||
m_IS_damp_calib_dlg->ShowModal();
|
||||
},
|
||||
"", nullptr,
|
||||
[this]() {return m_plater->is_view3D_shown();; }, this);
|
||||
|
||||
m_topbar->GetCalibMenu()->AppendSubMenu(input_shaping_menu, _L("Input Shaping"));
|
||||
|
||||
// Add Junction Deviation option to More menu
|
||||
append_menu_item(
|
||||
advance_menu, wxID_ANY, _L("Junction Deviation"), _L("Junction Deviation calibration"),
|
||||
[this](wxCommandEvent&) {
|
||||
if (!m_junction_deviation_calib_dlg)
|
||||
m_junction_deviation_calib_dlg = new Junction_Deviation_Test_Dlg((wxWindow*)this, wxID_ANY, m_plater);
|
||||
m_junction_deviation_calib_dlg->ShowModal();
|
||||
},
|
||||
"", nullptr,
|
||||
[this]() {return m_plater->is_view3D_shown();; }, this);
|
||||
|
||||
m_topbar->GetCalibMenu()->AppendSubMenu(advance_menu, _L("More..."));
|
||||
|
||||
// help
|
||||
|
@ -3073,6 +3110,41 @@ void MainFrame::init_menubar_as_editor()
|
|||
}, "", nullptr,
|
||||
[this]() {return m_plater->is_view3D_shown();; }, this);
|
||||
|
||||
// Add Junction Deviation option to More menu
|
||||
append_menu_item(
|
||||
advance_menu, wxID_ANY, _L("Junction Deviation"), _L("Junction Deviation calibration"),
|
||||
[this](wxCommandEvent&) {
|
||||
if (!m_junction_deviation_calib_dlg)
|
||||
m_junction_deviation_calib_dlg = new Junction_Deviation_Test_Dlg((wxWindow*)this, wxID_ANY, m_plater);
|
||||
m_junction_deviation_calib_dlg->ShowModal();
|
||||
}, "", nullptr,
|
||||
[this]() {return m_plater->is_view3D_shown();; }, this);
|
||||
|
||||
// Input Shaping calibrations
|
||||
auto input_shaping_menu = new wxMenu();
|
||||
|
||||
append_menu_item(
|
||||
input_shaping_menu, wxID_ANY, _L("Input Shaping Frequency"), _L("Input Shaping Frequency"),
|
||||
[this](wxCommandEvent&) {
|
||||
if (!m_IS_freq_calib_dlg)
|
||||
m_IS_freq_calib_dlg = new Input_Shaping_Freq_Test_Dlg((wxWindow*)this, wxID_ANY, m_plater);
|
||||
m_IS_freq_calib_dlg->ShowModal();
|
||||
},
|
||||
"", nullptr,
|
||||
[this]() {return m_plater->is_view3D_shown();; }, this);
|
||||
|
||||
append_menu_item(
|
||||
input_shaping_menu, wxID_ANY, _L("Input Shaping Damping/zeta factor"), _L("Input Shaping Damping/zeta factor"),
|
||||
[this](wxCommandEvent&) {
|
||||
if (!m_IS_damp_calib_dlg)
|
||||
m_IS_damp_calib_dlg = new Input_Shaping_Damp_Test_Dlg((wxWindow*)this, wxID_ANY, m_plater);
|
||||
m_IS_damp_calib_dlg->ShowModal();
|
||||
},
|
||||
"", nullptr,
|
||||
[this]() {return m_plater->is_view3D_shown();; }, this);
|
||||
|
||||
calib_menu->AppendSubMenu(input_shaping_menu, _L("Input Shaping"));
|
||||
|
||||
append_submenu(calib_menu, advance_menu, wxID_ANY, _L("More..."), _L("More calibrations"), "",
|
||||
[this]() {return m_plater->is_view3D_shown();; });
|
||||
// help
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue