Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/MarlinFirmware/Configurations.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Lahteine <thinkyhead@users.noreply.github.com>2022-07-17 06:43:20 +0300
committerScott Lahteine <thinkyhead@users.noreply.github.com>2022-07-17 06:57:46 +0300
commit715c44f43367b1e47d49cca64d7371e4a07d0907 (patch)
tree3e3ded464dae206fddbc4c70f65812f083463248
parent57cd85a875d0720c17e308110fe430ed69b409f8 (diff)
✨ Inline laser
MarlinFirmware/Marlin#22690
-rw-r--r--config/default/Configuration_adv.h104
-rw-r--r--config/examples/3DFabXYZ/Migbot/Configuration_adv.h104
-rw-r--r--config/examples/ADIMLab/Gantry v1/Configuration_adv.h104
-rw-r--r--config/examples/ADIMLab/Gantry v2/Configuration_adv.h104
-rw-r--r--config/examples/Alfawise/U20-bltouch/Configuration_adv.h104
-rw-r--r--config/examples/Alfawise/U20/Configuration_adv.h104
-rw-r--r--config/examples/AliExpress/UM2pExt/Configuration_adv.h104
-rw-r--r--config/examples/Anet/A2/Configuration_adv.h104
-rw-r--r--config/examples/Anet/A2plus/Configuration_adv.h104
-rw-r--r--config/examples/Anet/A6/Configuration_adv.h104
-rw-r--r--config/examples/Anet/A8/Configuration_adv.h104
-rw-r--r--config/examples/Anet/A8plus/Configuration_adv.h104
-rw-r--r--config/examples/Anet/A9/Configuration_adv.h104
-rw-r--r--config/examples/Anet/E10/Configuration_adv.h104
-rw-r--r--config/examples/Anet/E16/BTT SKR 1.3/Configuration_adv.h104
-rw-r--r--config/examples/Anet/E16/Stock/Configuration_adv.h104
-rw-r--r--config/examples/Anet/ET4+/Configuration_adv.h104
-rw-r--r--config/examples/Anet/ET4-Pro/Configuration_adv.h104
-rw-r--r--config/examples/Anet/ET4/Configuration_adv.h104
-rw-r--r--config/examples/Anet/ET4X/Configuration_adv.h104
-rw-r--r--config/examples/Anet/ET5-Pro/Configuration_adv.h104
-rw-r--r--config/examples/Anet/ET5/Configuration_adv.h104
-rw-r--r--config/examples/Anet/ET5X/Configuration_adv.h104
-rw-r--r--config/examples/AnyCubic/Chiron/Configuration_adv.h104
-rw-r--r--config/examples/AnyCubic/Mega Zero 2.0/Anycubic V1/Configuration_adv.h104
-rw-r--r--config/examples/AnyCubic/Mega Zero/Anycubic V1/Configuration_adv.h104
-rw-r--r--config/examples/AnyCubic/Mega Zero/BigTreeTech SKR Mini MZ V1.0/Configuration_adv.h104
-rw-r--r--config/examples/AnyCubic/i3 Mega/Configuration_adv.h104
-rw-r--r--config/examples/AnyCubic/i3/Configuration_adv.h104
-rw-r--r--config/examples/ArmEd/Configuration_adv.h104
-rw-r--r--config/examples/Artillery/Genius Pro/Configuration_adv.h104
-rw-r--r--config/examples/Artillery/Genius/BLTouch/Configuration_adv.h104
-rw-r--r--config/examples/Artillery/Genius/V1/Configuration_adv.h104
-rw-r--r--config/examples/Artillery/Hornet/Configuration_adv.h104
-rw-r--r--config/examples/Artillery/Sidewinder X1/0.9 BMG - E3D V6/Configuration_adv.h104
-rw-r--r--config/examples/Artillery/Sidewinder X1/V1/Configuration_adv.h104
-rw-r--r--config/examples/Artillery/Sidewinder X2/Configuration_adv.h104
-rw-r--r--config/examples/BIBO/TouchX/cyclops/Configuration_adv.h104
-rw-r--r--config/examples/BIBO/TouchX/default/Configuration_adv.h104
-rw-r--r--config/examples/BIQU/B1 - SKR 1.4/Configuration_adv.h104
-rw-r--r--config/examples/BIQU/B1 - SKR 2/Configuration_adv.h104
-rw-r--r--config/examples/BIQU/B1 SE Plus/Configuration_adv.h104
-rw-r--r--config/examples/BIQU/BX/Configuration_adv.h104
-rw-r--r--config/examples/BIQU/Thunder Standard/Configuration_adv.h104
-rw-r--r--config/examples/BQ/Hephestos/Configuration_adv.h104
-rw-r--r--config/examples/BQ/Hephestos_2/Configuration_adv.h104
-rw-r--r--config/examples/BQ/WITBOX/Configuration_adv.h104
-rw-r--r--config/examples/CTC/A13/Configuration_adv.h104
-rw-r--r--config/examples/CTC/Bizer/Configuration_adv.h104
-rw-r--r--config/examples/Cartesio/Configuration_adv.h104
-rw-r--r--config/examples/Creality/CR-10 Mini/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h104
-rw-r--r--config/examples/Creality/CR-10 Mini/CrealityV1/Configuration_adv.h104
-rw-r--r--config/examples/Creality/CR-10 Mini/MEEB-3DP/Configuration_adv.h104
-rw-r--r--config/examples/Creality/CR-10 S4/CrealityV1/Configuration_adv.h104
-rw-r--r--config/examples/Creality/CR-10 S5/BigTreeTech SKR Mini E3 1.2 with TFT35 E3 V3.0/Configuration_adv.h104
-rw-r--r--config/examples/Creality/CR-10 S5/CrealityV1/Configuration_adv.h104
-rw-r--r--config/examples/Creality/CR-10 S5/CrealityV2.2-BLTouch/Configuration_adv.h104
-rw-r--r--config/examples/Creality/CR-10 V2/Configuration_adv.h104
-rw-r--r--config/examples/Creality/CR-10 V3/Configuration_adv.h104
-rw-r--r--config/examples/Creality/CR-10/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h104
-rw-r--r--config/examples/Creality/CR-10/CrealityV1/Configuration_adv.h104
-rw-r--r--config/examples/Creality/CR-10S/BigTreeTech SKR 1.4 Turbo TMC2209/Configuration_adv.h104
-rw-r--r--config/examples/Creality/CR-10S/BigTreeTech SKR 2.0 TMC2209/Configuration_adv.h104
-rw-r--r--config/examples/Creality/CR-10S/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h104
-rw-r--r--config/examples/Creality/CR-10S/BigTreeTech SKR Pro v1.2/Configuration_adv.h104
-rw-r--r--config/examples/Creality/CR-10S/CrealityV1/Configuration_adv.h104
-rw-r--r--config/examples/Creality/CR-20 Pro/Configuration_adv.h104
-rw-r--r--config/examples/Creality/CR-20/Configuration_adv.h104
-rw-r--r--config/examples/Creality/CR-30 PrintMill/Configuration_adv.h104
-rw-r--r--config/examples/Creality/CR-8/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-2 Pro/CrealityV423/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-2/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3 Max/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3 Pro/BigTreeTech SKR 1.4 Turbo/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 1.0/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3 Pro/CrealityV1/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3 Pro/CrealityV422/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3 Pro/CrealityV427/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3 S1/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3 V2/BigTreeTech SKR E3 Turbo/CrealityUI/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3 V2/BigTreeTech SKR E3 Turbo/MarlinUI/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3 V2/BigTreeTech SKR Mini E3 v3/CrealityUI/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3 V2/BigTreeTech SKR Mini E3 v3/MarlinUI/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3 V2/CrealityV422/CrealityUI/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3 V2/CrealityV422/MarlinUI/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3/BigTreeTech E3 RRF/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3/BigTreeTech SKR 1.4/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/2-into-1 Hotend/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/Dual Z/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/Single Extruder/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3/BigTreeTech SKR E3-DIP V1.1/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 1.0/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3/CrealityV1/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3/CrealityV422/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3/CrealityV427/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3/FYSETC Cheetah 1.2/BLTouch/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3/FYSETC Cheetah 1.2/base/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3/FYSETC Cheetah 2.0/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3/FYSETC Cheetah/BLTouch/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3/FYSETC Cheetah/base/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3/MEEB-3DP/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3/MKS Robin E3/V1.0/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3/MKS Robin E3/V1.1/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3/MKS Robin E3P/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-3/TH3D EZBoard Lite V2/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-4/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-5 Plus/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-5 Pro/BigTreeTech SKR E3 Turbo/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-5 Pro/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-5 Pro/BigTreeTech SKR Mini E3 2.0 with BLTouch/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-5 Pro/CrealityV1/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-5 Pro/CrealityV422/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-5 Pro/CrealityV427/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-5/BigTreeTech SKR E3 Turbo with BLTouch/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-5/BigTreeTech SKR E3 Turbo/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-5/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-5/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-5/CrealityV1/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-5/CrealityV427/Configuration_adv.h104
-rw-r--r--config/examples/Creality/Ender-6/Configuration_adv.h104
-rw-r--r--config/examples/Dagoma/Disco Ultimate/Configuration_adv.h104
-rw-r--r--config/examples/Daycom/3DP-100/Configuration_adv.h104
-rw-r--r--config/examples/EXP3D/Imprimante multifonction/Configuration_adv.h104
-rw-r--r--config/examples/EasyThreeD/ET4000PLUS/Configuration_adv.h104
-rw-r--r--config/examples/Einstart-S/Configuration_adv.h104
-rw-r--r--config/examples/Elegoo/Neptune 2/Configuration_adv.h104
-rw-r--r--config/examples/Eryone/Thinker SE/Configuration_adv.h104
-rw-r--r--config/examples/Eryone/Thinker V2/Configuration_adv.h104
-rw-r--r--config/examples/FYSETC/AIO_II/Configuration_adv.h104
-rw-r--r--config/examples/FYSETC/F6_13/Configuration_adv.h104
-rw-r--r--config/examples/FYSETC/S6/Configuration_adv.h104
-rw-r--r--config/examples/Felix/DUAL/Configuration_adv.h104
-rw-r--r--config/examples/Felix/Single/Configuration_adv.h104
-rw-r--r--config/examples/FlashForge/Creator 2X/Configuration_adv.h104
-rw-r--r--config/examples/FlashForge/CreatorPro/Configuration_adv.h104
-rw-r--r--config/examples/FlyingBear/P902/Configuration_adv.h104
-rw-r--r--config/examples/FlyingBear/P905H/Configuration_adv.h104
-rw-r--r--config/examples/FolgerTech/i3-2020/Configuration_adv.h104
-rw-r--r--config/examples/Formbot/Raptor/Configuration_adv.h104
-rw-r--r--config/examples/Formbot/T_Rex_2+/Configuration_adv.h104
-rw-r--r--config/examples/Formbot/T_Rex_3/Configuration_adv.h104
-rw-r--r--config/examples/Geeetech/A10/Configuration_adv.h104
-rw-r--r--config/examples/Geeetech/A10D/Configuration_adv.h104
-rw-r--r--config/examples/Geeetech/A10M/Stock LCD/Configuration_adv.h104
-rw-r--r--config/examples/Geeetech/A10M/YHCB2004_V4.1/Configuration_adv.h104
-rw-r--r--config/examples/Geeetech/A10PRO/Configuration_adv.h104
-rw-r--r--config/examples/Geeetech/A10T/Stock LCD/Configuration_adv.h104
-rw-r--r--config/examples/Geeetech/A10T/YHCB2004_V4.1/Configuration_adv.h104
-rw-r--r--config/examples/Geeetech/A20/Configuration_adv.h104
-rw-r--r--config/examples/Geeetech/A20M/Configuration_adv.h104
-rw-r--r--config/examples/Geeetech/A20T/Configuration_adv.h104
-rw-r--r--config/examples/Geeetech/A30/Configuration_adv.h104
-rw-r--r--config/examples/Geeetech/A30M/Configuration_adv.h104
-rw-r--r--config/examples/Geeetech/A30T/Configuration_adv.h104
-rw-r--r--config/examples/Geeetech/D200/Configuration_adv.h104
-rw-r--r--config/examples/Geeetech/Duplicator5/Configuration_adv.h104
-rw-r--r--config/examples/Geeetech/E180/Configuration_adv.h104
-rw-r--r--config/examples/Geeetech/M201/Configuration_adv.h104
-rw-r--r--config/examples/Geeetech/MeCreator2/Configuration_adv.h104
-rw-r--r--config/examples/Geeetech/Me_creator/Configuration_adv.h104
-rw-r--r--config/examples/Geeetech/Me_ducer/Configuration_adv.h104
-rw-r--r--config/examples/Geeetech/PI3A PRO/Configuration_adv.h104
-rw-r--r--config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h104
-rw-r--r--config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h104
-rw-r--r--config/examples/HMS434/Configuration_adv.h104
-rw-r--r--config/examples/Infitary/i3-M508/Configuration_adv.h104
-rw-r--r--config/examples/Intamsys/FunmatHT 4988/Configuration_adv.h104
-rw-r--r--config/examples/JGAurora/A1/Configuration_adv.h104
-rw-r--r--config/examples/JGAurora/A5/Configuration_adv.h104
-rw-r--r--config/examples/JGAurora/A5S/Configuration_adv.h104
-rw-r--r--config/examples/JGAurora/Magic/Configuration_adv.h104
-rw-r--r--config/examples/Kingroon/KP3/Configuration_adv.h104
-rw-r--r--config/examples/Labists/ET4/Configuration_adv.h104
-rw-r--r--config/examples/LulzBot/TAZ4/Configuration_adv.h104
-rw-r--r--config/examples/MBot/Cube/Configuration_adv.h104
-rw-r--r--config/examples/MakerFarm/Pegasus 12/Configuration_adv.h104
-rw-r--r--config/examples/MakerParts/Configuration_adv.h104
-rw-r--r--config/examples/Malyan/M150/Configuration_adv.h104
-rw-r--r--config/examples/Malyan/M200/Configuration_adv.h104
-rw-r--r--config/examples/Micromake/C1/enhanced/Configuration_adv.h104
-rw-r--r--config/examples/Mks/Sbase/Configuration_adv.h104
-rw-r--r--config/examples/Modix/Big60/Configuration_adv.h104
-rw-r--r--config/examples/Nextion/Configuration_adv.h104
-rw-r--r--config/examples/Opulo/Lumen_REV3/Configuration_adv.h104
-rw-r--r--config/examples/Ortur 4/Configuration_adv.h104
-rw-r--r--config/examples/Polargraph/Configuration_adv.h104
-rw-r--r--config/examples/Prusa/MK3/Configuration_adv.h104
-rw-r--r--config/examples/Prusa/MK3S-BigTreeTech-BTT002/Configuration_adv.h104
-rw-r--r--config/examples/Qidi/Qidi 1/Configuration_adv.h104
-rw-r--r--config/examples/Raiscube/A8r/Configuration_adv.h104
-rw-r--r--config/examples/RapideLite/RL200/Configuration_adv.h104
-rw-r--r--config/examples/Renkforce/RF100/Configuration_adv.h104
-rw-r--r--config/examples/Renkforce/RF100XL/Configuration_adv.h104
-rw-r--r--config/examples/Renkforce/RF100v2/Configuration_adv.h104
-rw-r--r--config/examples/RigidBot/Configuration_adv.h104
-rw-r--r--config/examples/SCARA/MP_SCARA/Configuration_adv.h104
-rw-r--r--config/examples/SCARA/Morgan/Configuration_adv.h104
-rw-r--r--config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h104
-rw-r--r--config/examples/Sanguinololu/Configuration_adv.h104
-rw-r--r--config/examples/Simulator/Configuration_adv.h104
-rw-r--r--config/examples/Sovol/SV-01/BigTreeTech SKR E3 Turbo/Configuration_adv.h104
-rw-r--r--config/examples/Sovol/SV-01/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h104
-rw-r--r--config/examples/Sovol/SV-01/CrealityV22/Configuration_adv.h104
-rw-r--r--config/examples/Sovol/SV-01/CrealityV221/Configuration_adv.h104
-rw-r--r--config/examples/Sunlu/S8/Configuration_adv.h104
-rw-r--r--config/examples/TPARA/AXEL_TPARA/Configuration_adv.h104
-rw-r--r--config/examples/Tevo/Michelangelo/Configuration_adv.h104
-rw-r--r--config/examples/Tevo/Nereus/Configuration_adv.h104
-rw-r--r--config/examples/Tevo/Tarantula Pro/Configuration_adv.h104
-rw-r--r--config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h104
-rw-r--r--config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h104
-rw-r--r--config/examples/TheBorg/Configuration_adv.h104
-rw-r--r--config/examples/TinyBoy2/Configuration_adv.h104
-rw-r--r--config/examples/Tronxy/X3A/Configuration_adv.h104
-rw-r--r--config/examples/Tronxy/X5S-2E/Configuration_adv.h104
-rw-r--r--config/examples/Tronxy/X5SA-2E/Configuration_adv.h104
-rw-r--r--config/examples/Tronxy/X5SA/Configuration_adv.h104
-rw-r--r--config/examples/Two Trees/BlueR Plus/Configuration_adv.h104
-rw-r--r--config/examples/Two Trees/BlueR/BlueR V1/Configuration_adv.h104
-rw-r--r--config/examples/Two Trees/BlueR/BlueR V2/Configuration_adv.h104
-rw-r--r--config/examples/Two Trees/BlueR/BlueR V3/Configuration_adv.h104
-rw-r--r--config/examples/Two Trees/Sapphire Plus/Sapphire Plus V2/Configuration_adv.h104
-rw-r--r--config/examples/Two Trees/Sapphire Pro/Configuration_adv.h104
-rw-r--r--config/examples/UltiMachine/Archim1/Configuration_adv.h104
-rw-r--r--config/examples/UltiMachine/Archim2/Configuration_adv.h104
-rw-r--r--config/examples/Ultimaker/Ultimaker 2/Configuration_adv.h104
-rw-r--r--config/examples/Ultimaker/Ultimaker Original (1.5.7)/Configuration_adv.h104
-rw-r--r--config/examples/Ultimaker/Ultimaker Original Plus (2.1.1)/Configuration_adv.h104
-rw-r--r--config/examples/VORONDesign/Configuration_adv.h104
-rw-r--r--config/examples/Velleman/K8200 Upgraded/Configuration_adv.h104
-rw-r--r--config/examples/Velleman/K8200/Configuration_adv.h104
-rw-r--r--config/examples/Velleman/K8400/Dual-head/Configuration_adv.h104
-rw-r--r--config/examples/Velleman/K8400/Single-head/Configuration_adv.h104
-rw-r--r--config/examples/WASP/PowerWASP/Configuration_adv.h104
-rw-r--r--config/examples/Wanhao/Duplicator 4S/Configuration_adv.h104
-rw-r--r--config/examples/Wanhao/Duplicator 6/Configuration_adv.h104
-rw-r--r--config/examples/Wanhao/Duplicator i3 2.1/Configuration_adv.h104
-rw-r--r--config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h104
-rw-r--r--config/examples/Weedo/Tina2/V2/Configuration_adv.h104
-rw-r--r--config/examples/Weedo/Tina2/V3/Configuration_adv.h104
-rw-r--r--config/examples/Weistek/wt150/Configuration_adv.h104
-rw-r--r--config/examples/Zonestar/P802M/Configuration_adv.h104
-rw-r--r--config/examples/Zonestar/P802QR2/BigTreeTech SKR 1.4 Turbo (A4988)/Configuration_adv.h104
-rwxr-xr-xconfig/examples/Zonestar/P802QR2/BigTreeTech SKR 1.4 Turbo (TMC2209)/Configuration_adv.h104
-rw-r--r--config/examples/delta/Anycubic/Kossel Linear Plus/Configuration_adv.h104
-rw-r--r--config/examples/delta/Anycubic/Kossel/Configuration_adv.h104
-rw-r--r--config/examples/delta/Anycubic/Predator/Configuration_adv.h104
-rw-r--r--config/examples/delta/Dreammaker/Overlord/Configuration_adv.h104
-rw-r--r--config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h104
-rw-r--r--config/examples/delta/FLSUN/Q5-nano_v1/Configuration_adv.h104
-rw-r--r--config/examples/delta/FLSUN/QQ-S/Configuration_adv.h104
-rw-r--r--config/examples/delta/FLSUN/QQS-Pro/Configuration_adv.h104
-rw-r--r--config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h104
-rw-r--r--config/examples/delta/FLSUN/kossel/Configuration_adv.h104
-rw-r--r--config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h104
-rw-r--r--config/examples/delta/Geeetech/G2/Configuration_adv.h104
-rw-r--r--config/examples/delta/Geeetech/G2Pro/Configuration_adv.h104
-rw-r--r--config/examples/delta/Geeetech/G2S/Configuration_adv.h104
-rw-r--r--config/examples/delta/Geeetech/G2SPro/Configuration_adv.h104
-rw-r--r--config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h104
-rw-r--r--config/examples/delta/Hatchbox_Alpha/Configuration_adv.h104
-rw-r--r--config/examples/delta/MKS/SBASE/Configuration_adv.h104
-rw-r--r--config/examples/delta/Malyan M300/Configuration_adv.h104
-rw-r--r--config/examples/delta/Tevo Little Monster/Configuration_adv.h104
-rw-r--r--config/examples/delta/generic/Configuration_adv.h104
-rw-r--r--config/examples/delta/kossel_clear/Configuration_adv.h104
-rw-r--r--config/examples/delta/kossel_xl/Configuration_adv.h104
-rw-r--r--config/examples/gCreate/gMax1.5+/Configuration_adv.h104
-rw-r--r--config/examples/linear_axes/RAMPS 5 LINEAR_AXES/Configuration_adv.h104
-rw-r--r--config/examples/makibox/Configuration_adv.h104
-rw-r--r--config/examples/tvrrug/Round2/Configuration_adv.h104
277 files changed, 9141 insertions, 19667 deletions
diff --git a/config/default/Configuration_adv.h b/config/default/Configuration_adv.h
index d25355d8a6..fcc976dd52 100644
--- a/config/default/Configuration_adv.h
+++ b/config/default/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/3DFabXYZ/Migbot/Configuration_adv.h b/config/examples/3DFabXYZ/Migbot/Configuration_adv.h
index 49752f51b1..b45561f790 100644
--- a/config/examples/3DFabXYZ/Migbot/Configuration_adv.h
+++ b/config/examples/3DFabXYZ/Migbot/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/ADIMLab/Gantry v1/Configuration_adv.h b/config/examples/ADIMLab/Gantry v1/Configuration_adv.h
index 0d318a70be..c664659bd2 100644
--- a/config/examples/ADIMLab/Gantry v1/Configuration_adv.h
+++ b/config/examples/ADIMLab/Gantry v1/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/ADIMLab/Gantry v2/Configuration_adv.h b/config/examples/ADIMLab/Gantry v2/Configuration_adv.h
index 6b5730d901..9528845f9e 100644
--- a/config/examples/ADIMLab/Gantry v2/Configuration_adv.h
+++ b/config/examples/ADIMLab/Gantry v2/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Alfawise/U20-bltouch/Configuration_adv.h b/config/examples/Alfawise/U20-bltouch/Configuration_adv.h
index e2544af707..7ab922abb6 100644
--- a/config/examples/Alfawise/U20-bltouch/Configuration_adv.h
+++ b/config/examples/Alfawise/U20-bltouch/Configuration_adv.h
@@ -3555,8 +3555,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3569,79 +3572,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Alfawise/U20/Configuration_adv.h b/config/examples/Alfawise/U20/Configuration_adv.h
index 30365a5f97..056626b7e6 100644
--- a/config/examples/Alfawise/U20/Configuration_adv.h
+++ b/config/examples/Alfawise/U20/Configuration_adv.h
@@ -3546,8 +3546,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3560,79 +3563,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/AliExpress/UM2pExt/Configuration_adv.h b/config/examples/AliExpress/UM2pExt/Configuration_adv.h
index 907ae912fd..422d4eb3ba 100644
--- a/config/examples/AliExpress/UM2pExt/Configuration_adv.h
+++ b/config/examples/AliExpress/UM2pExt/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Anet/A2/Configuration_adv.h b/config/examples/Anet/A2/Configuration_adv.h
index 7e101e8dd4..873d58d6c2 100644
--- a/config/examples/Anet/A2/Configuration_adv.h
+++ b/config/examples/Anet/A2/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Anet/A2plus/Configuration_adv.h b/config/examples/Anet/A2plus/Configuration_adv.h
index 7e101e8dd4..873d58d6c2 100644
--- a/config/examples/Anet/A2plus/Configuration_adv.h
+++ b/config/examples/Anet/A2plus/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Anet/A6/Configuration_adv.h b/config/examples/Anet/A6/Configuration_adv.h
index 08829540f5..3e2f73e51d 100644
--- a/config/examples/Anet/A6/Configuration_adv.h
+++ b/config/examples/Anet/A6/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Anet/A8/Configuration_adv.h b/config/examples/Anet/A8/Configuration_adv.h
index 7ca82e61bd..9da3bf051e 100644
--- a/config/examples/Anet/A8/Configuration_adv.h
+++ b/config/examples/Anet/A8/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Anet/A8plus/Configuration_adv.h b/config/examples/Anet/A8plus/Configuration_adv.h
index 4509dec953..783f5ec57f 100644
--- a/config/examples/Anet/A8plus/Configuration_adv.h
+++ b/config/examples/Anet/A8plus/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Anet/A9/Configuration_adv.h b/config/examples/Anet/A9/Configuration_adv.h
index 73314c19e8..7d141a2f34 100644
--- a/config/examples/Anet/A9/Configuration_adv.h
+++ b/config/examples/Anet/A9/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Anet/E10/Configuration_adv.h b/config/examples/Anet/E10/Configuration_adv.h
index 36dda87ea7..416cab1a39 100644
--- a/config/examples/Anet/E10/Configuration_adv.h
+++ b/config/examples/Anet/E10/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Anet/E16/BTT SKR 1.3/Configuration_adv.h b/config/examples/Anet/E16/BTT SKR 1.3/Configuration_adv.h
index db5c865be5..7f1861cb50 100644
--- a/config/examples/Anet/E16/BTT SKR 1.3/Configuration_adv.h
+++ b/config/examples/Anet/E16/BTT SKR 1.3/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Anet/E16/Stock/Configuration_adv.h b/config/examples/Anet/E16/Stock/Configuration_adv.h
index ce7ca6600f..4974b29faf 100644
--- a/config/examples/Anet/E16/Stock/Configuration_adv.h
+++ b/config/examples/Anet/E16/Stock/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Anet/ET4+/Configuration_adv.h b/config/examples/Anet/ET4+/Configuration_adv.h
index 03eb4238ba..dae6021fe8 100644
--- a/config/examples/Anet/ET4+/Configuration_adv.h
+++ b/config/examples/Anet/ET4+/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Anet/ET4-Pro/Configuration_adv.h b/config/examples/Anet/ET4-Pro/Configuration_adv.h
index 03eb4238ba..dae6021fe8 100644
--- a/config/examples/Anet/ET4-Pro/Configuration_adv.h
+++ b/config/examples/Anet/ET4-Pro/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Anet/ET4/Configuration_adv.h b/config/examples/Anet/ET4/Configuration_adv.h
index b30a26c1e3..0aedb0fb13 100644
--- a/config/examples/Anet/ET4/Configuration_adv.h
+++ b/config/examples/Anet/ET4/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Anet/ET4X/Configuration_adv.h b/config/examples/Anet/ET4X/Configuration_adv.h
index b30a26c1e3..0aedb0fb13 100644
--- a/config/examples/Anet/ET4X/Configuration_adv.h
+++ b/config/examples/Anet/ET4X/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Anet/ET5-Pro/Configuration_adv.h b/config/examples/Anet/ET5-Pro/Configuration_adv.h
index 2b8ee6c88a..b87ec25d8f 100644
--- a/config/examples/Anet/ET5-Pro/Configuration_adv.h
+++ b/config/examples/Anet/ET5-Pro/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Anet/ET5/Configuration_adv.h b/config/examples/Anet/ET5/Configuration_adv.h
index 2b8ee6c88a..b87ec25d8f 100644
--- a/config/examples/Anet/ET5/Configuration_adv.h
+++ b/config/examples/Anet/ET5/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Anet/ET5X/Configuration_adv.h b/config/examples/Anet/ET5X/Configuration_adv.h
index 2b8ee6c88a..b87ec25d8f 100644
--- a/config/examples/Anet/ET5X/Configuration_adv.h
+++ b/config/examples/Anet/ET5X/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/AnyCubic/Chiron/Configuration_adv.h b/config/examples/AnyCubic/Chiron/Configuration_adv.h
index 21eea4c970..5166c8c21e 100644
--- a/config/examples/AnyCubic/Chiron/Configuration_adv.h
+++ b/config/examples/AnyCubic/Chiron/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/AnyCubic/Mega Zero 2.0/Anycubic V1/Configuration_adv.h b/config/examples/AnyCubic/Mega Zero 2.0/Anycubic V1/Configuration_adv.h
index f220465174..9e3883985a 100644
--- a/config/examples/AnyCubic/Mega Zero 2.0/Anycubic V1/Configuration_adv.h
+++ b/config/examples/AnyCubic/Mega Zero 2.0/Anycubic V1/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/AnyCubic/Mega Zero/Anycubic V1/Configuration_adv.h b/config/examples/AnyCubic/Mega Zero/Anycubic V1/Configuration_adv.h
index 807a2065b6..4f2ee1da4a 100644
--- a/config/examples/AnyCubic/Mega Zero/Anycubic V1/Configuration_adv.h
+++ b/config/examples/AnyCubic/Mega Zero/Anycubic V1/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/AnyCubic/Mega Zero/BigTreeTech SKR Mini MZ V1.0/Configuration_adv.h b/config/examples/AnyCubic/Mega Zero/BigTreeTech SKR Mini MZ V1.0/Configuration_adv.h
index 104e733abb..55d070b255 100644
--- a/config/examples/AnyCubic/Mega Zero/BigTreeTech SKR Mini MZ V1.0/Configuration_adv.h
+++ b/config/examples/AnyCubic/Mega Zero/BigTreeTech SKR Mini MZ V1.0/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/AnyCubic/i3 Mega/Configuration_adv.h b/config/examples/AnyCubic/i3 Mega/Configuration_adv.h
index 46b2b68bb4..5da82d0faa 100644
--- a/config/examples/AnyCubic/i3 Mega/Configuration_adv.h
+++ b/config/examples/AnyCubic/i3 Mega/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/AnyCubic/i3/Configuration_adv.h b/config/examples/AnyCubic/i3/Configuration_adv.h
index 0287bd329e..a8ee6033fe 100644
--- a/config/examples/AnyCubic/i3/Configuration_adv.h
+++ b/config/examples/AnyCubic/i3/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/ArmEd/Configuration_adv.h b/config/examples/ArmEd/Configuration_adv.h
index 8b388801c8..a2cefa00c1 100644
--- a/config/examples/ArmEd/Configuration_adv.h
+++ b/config/examples/ArmEd/Configuration_adv.h
@@ -3550,8 +3550,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3564,79 +3567,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Artillery/Genius Pro/Configuration_adv.h b/config/examples/Artillery/Genius Pro/Configuration_adv.h
index fb5cdd4389..2ddd6ed23a 100644
--- a/config/examples/Artillery/Genius Pro/Configuration_adv.h
+++ b/config/examples/Artillery/Genius Pro/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Artillery/Genius/BLTouch/Configuration_adv.h b/config/examples/Artillery/Genius/BLTouch/Configuration_adv.h
index 2d708091ef..da24468c9b 100644
--- a/config/examples/Artillery/Genius/BLTouch/Configuration_adv.h
+++ b/config/examples/Artillery/Genius/BLTouch/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Artillery/Genius/V1/Configuration_adv.h b/config/examples/Artillery/Genius/V1/Configuration_adv.h
index 94a184ba41..c131c83853 100644
--- a/config/examples/Artillery/Genius/V1/Configuration_adv.h
+++ b/config/examples/Artillery/Genius/V1/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Artillery/Hornet/Configuration_adv.h b/config/examples/Artillery/Hornet/Configuration_adv.h
index e3ccd20773..845809dec9 100644
--- a/config/examples/Artillery/Hornet/Configuration_adv.h
+++ b/config/examples/Artillery/Hornet/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Artillery/Sidewinder X1/0.9 BMG - E3D V6/Configuration_adv.h b/config/examples/Artillery/Sidewinder X1/0.9 BMG - E3D V6/Configuration_adv.h
index 4e68bb4829..cac6eba5d2 100644
--- a/config/examples/Artillery/Sidewinder X1/0.9 BMG - E3D V6/Configuration_adv.h
+++ b/config/examples/Artillery/Sidewinder X1/0.9 BMG - E3D V6/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Artillery/Sidewinder X1/V1/Configuration_adv.h b/config/examples/Artillery/Sidewinder X1/V1/Configuration_adv.h
index 94a184ba41..c131c83853 100644
--- a/config/examples/Artillery/Sidewinder X1/V1/Configuration_adv.h
+++ b/config/examples/Artillery/Sidewinder X1/V1/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Artillery/Sidewinder X2/Configuration_adv.h b/config/examples/Artillery/Sidewinder X2/Configuration_adv.h
index e66df99e22..2d159246dc 100644
--- a/config/examples/Artillery/Sidewinder X2/Configuration_adv.h
+++ b/config/examples/Artillery/Sidewinder X2/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h b/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h
index 3a7f948745..c3bdc2d4ac 100644
--- a/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h
+++ b/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/BIBO/TouchX/default/Configuration_adv.h b/config/examples/BIBO/TouchX/default/Configuration_adv.h
index 5d020d52d1..071beafa6b 100644
--- a/config/examples/BIBO/TouchX/default/Configuration_adv.h
+++ b/config/examples/BIBO/TouchX/default/Configuration_adv.h
@@ -3538,8 +3538,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3552,79 +3555,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/BIQU/B1 - SKR 1.4/Configuration_adv.h b/config/examples/BIQU/B1 - SKR 1.4/Configuration_adv.h
index 95d4b602d0..1f1667aacc 100644
--- a/config/examples/BIQU/B1 - SKR 1.4/Configuration_adv.h
+++ b/config/examples/BIQU/B1 - SKR 1.4/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/BIQU/B1 - SKR 2/Configuration_adv.h b/config/examples/BIQU/B1 - SKR 2/Configuration_adv.h
index 01d5c2e9a8..0ac6426228 100644
--- a/config/examples/BIQU/B1 - SKR 2/Configuration_adv.h
+++ b/config/examples/BIQU/B1 - SKR 2/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/BIQU/B1 SE Plus/Configuration_adv.h b/config/examples/BIQU/B1 SE Plus/Configuration_adv.h
index c0ebf61dab..8d88af8630 100644
--- a/config/examples/BIQU/B1 SE Plus/Configuration_adv.h
+++ b/config/examples/BIQU/B1 SE Plus/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/BIQU/BX/Configuration_adv.h b/config/examples/BIQU/BX/Configuration_adv.h
index f29b91bb88..378a991f1f 100644
--- a/config/examples/BIQU/BX/Configuration_adv.h
+++ b/config/examples/BIQU/BX/Configuration_adv.h
@@ -3546,8 +3546,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3560,79 +3563,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/BIQU/Thunder Standard/Configuration_adv.h b/config/examples/BIQU/Thunder Standard/Configuration_adv.h
index e559998973..d3a783b257 100644
--- a/config/examples/BIQU/Thunder Standard/Configuration_adv.h
+++ b/config/examples/BIQU/Thunder Standard/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/BQ/Hephestos/Configuration_adv.h b/config/examples/BQ/Hephestos/Configuration_adv.h
index 0eeb9a1b80..5b321652bd 100644
--- a/config/examples/BQ/Hephestos/Configuration_adv.h
+++ b/config/examples/BQ/Hephestos/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/BQ/Hephestos_2/Configuration_adv.h b/config/examples/BQ/Hephestos_2/Configuration_adv.h
index f5a63facd1..c2b7dab649 100644
--- a/config/examples/BQ/Hephestos_2/Configuration_adv.h
+++ b/config/examples/BQ/Hephestos_2/Configuration_adv.h
@@ -3553,8 +3553,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3567,79 +3570,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/BQ/WITBOX/Configuration_adv.h b/config/examples/BQ/WITBOX/Configuration_adv.h
index 0eeb9a1b80..5b321652bd 100644
--- a/config/examples/BQ/WITBOX/Configuration_adv.h
+++ b/config/examples/BQ/WITBOX/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/CTC/A13/Configuration_adv.h b/config/examples/CTC/A13/Configuration_adv.h
index 30d9a4fdac..e45de02de1 100644
--- a/config/examples/CTC/A13/Configuration_adv.h
+++ b/config/examples/CTC/A13/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/CTC/Bizer/Configuration_adv.h b/config/examples/CTC/Bizer/Configuration_adv.h
index 887d2c99a7..5ec614972f 100644
--- a/config/examples/CTC/Bizer/Configuration_adv.h
+++ b/config/examples/CTC/Bizer/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Cartesio/Configuration_adv.h b/config/examples/Cartesio/Configuration_adv.h
index 4639b1f883..ee527f4b68 100644
--- a/config/examples/Cartesio/Configuration_adv.h
+++ b/config/examples/Cartesio/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/CR-10 Mini/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h b/config/examples/Creality/CR-10 Mini/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h
index 0cb3292398..c46504afbc 100644
--- a/config/examples/Creality/CR-10 Mini/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h
+++ b/config/examples/Creality/CR-10 Mini/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- #define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/CR-10 Mini/CrealityV1/Configuration_adv.h b/config/examples/Creality/CR-10 Mini/CrealityV1/Configuration_adv.h
index 682c5afcdd..dcf6ca1fc4 100644
--- a/config/examples/Creality/CR-10 Mini/CrealityV1/Configuration_adv.h
+++ b/config/examples/Creality/CR-10 Mini/CrealityV1/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/CR-10 Mini/MEEB-3DP/Configuration_adv.h b/config/examples/Creality/CR-10 Mini/MEEB-3DP/Configuration_adv.h
index 264fe66995..2b7bc8e13c 100644
--- a/config/examples/Creality/CR-10 Mini/MEEB-3DP/Configuration_adv.h
+++ b/config/examples/Creality/CR-10 Mini/MEEB-3DP/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/CR-10 S4/CrealityV1/Configuration_adv.h b/config/examples/Creality/CR-10 S4/CrealityV1/Configuration_adv.h
index b5f4046db2..dc9f972610 100644
--- a/config/examples/Creality/CR-10 S4/CrealityV1/Configuration_adv.h
+++ b/config/examples/Creality/CR-10 S4/CrealityV1/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/CR-10 S5/BigTreeTech SKR Mini E3 1.2 with TFT35 E3 V3.0/Configuration_adv.h b/config/examples/Creality/CR-10 S5/BigTreeTech SKR Mini E3 1.2 with TFT35 E3 V3.0/Configuration_adv.h
index bf761e0149..2d737f48b5 100644
--- a/config/examples/Creality/CR-10 S5/BigTreeTech SKR Mini E3 1.2 with TFT35 E3 V3.0/Configuration_adv.h
+++ b/config/examples/Creality/CR-10 S5/BigTreeTech SKR Mini E3 1.2 with TFT35 E3 V3.0/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/CR-10 S5/CrealityV1/Configuration_adv.h b/config/examples/Creality/CR-10 S5/CrealityV1/Configuration_adv.h
index b5f4046db2..dc9f972610 100644
--- a/config/examples/Creality/CR-10 S5/CrealityV1/Configuration_adv.h
+++ b/config/examples/Creality/CR-10 S5/CrealityV1/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/CR-10 S5/CrealityV2.2-BLTouch/Configuration_adv.h b/config/examples/Creality/CR-10 S5/CrealityV2.2-BLTouch/Configuration_adv.h
index 584a292ba6..f2044bda34 100644
--- a/config/examples/Creality/CR-10 S5/CrealityV2.2-BLTouch/Configuration_adv.h
+++ b/config/examples/Creality/CR-10 S5/CrealityV2.2-BLTouch/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/CR-10 V2/Configuration_adv.h b/config/examples/Creality/CR-10 V2/Configuration_adv.h
index 09baf37f3b..3f01fc403c 100644
--- a/config/examples/Creality/CR-10 V2/Configuration_adv.h
+++ b/config/examples/Creality/CR-10 V2/Configuration_adv.h
@@ -3551,8 +3551,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3565,79 +3568,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/CR-10 V3/Configuration_adv.h b/config/examples/Creality/CR-10 V3/Configuration_adv.h
index 658a95ae67..b228a0a3e9 100644
--- a/config/examples/Creality/CR-10 V3/Configuration_adv.h
+++ b/config/examples/Creality/CR-10 V3/Configuration_adv.h
@@ -3553,8 +3553,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3567,79 +3570,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/CR-10/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h b/config/examples/Creality/CR-10/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h
index 2f57109cf9..579d2f8c2a 100644
--- a/config/examples/Creality/CR-10/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h
+++ b/config/examples/Creality/CR-10/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/CR-10/CrealityV1/Configuration_adv.h b/config/examples/Creality/CR-10/CrealityV1/Configuration_adv.h
index ca3c117582..ecb4db9755 100644
--- a/config/examples/Creality/CR-10/CrealityV1/Configuration_adv.h
+++ b/config/examples/Creality/CR-10/CrealityV1/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/CR-10S/BigTreeTech SKR 1.4 Turbo TMC2209/Configuration_adv.h b/config/examples/Creality/CR-10S/BigTreeTech SKR 1.4 Turbo TMC2209/Configuration_adv.h
index abcf540a2e..ea8d41fe2a 100644
--- a/config/examples/Creality/CR-10S/BigTreeTech SKR 1.4 Turbo TMC2209/Configuration_adv.h
+++ b/config/examples/Creality/CR-10S/BigTreeTech SKR 1.4 Turbo TMC2209/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/CR-10S/BigTreeTech SKR 2.0 TMC2209/Configuration_adv.h b/config/examples/Creality/CR-10S/BigTreeTech SKR 2.0 TMC2209/Configuration_adv.h
index eaf0529b5f..961c07ed66 100644
--- a/config/examples/Creality/CR-10S/BigTreeTech SKR 2.0 TMC2209/Configuration_adv.h
+++ b/config/examples/Creality/CR-10S/BigTreeTech SKR 2.0 TMC2209/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/CR-10S/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h b/config/examples/Creality/CR-10S/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h
index 1bc5c4fcae..a7ba14bafb 100644
--- a/config/examples/Creality/CR-10S/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h
+++ b/config/examples/Creality/CR-10S/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/CR-10S/BigTreeTech SKR Pro v1.2/Configuration_adv.h b/config/examples/Creality/CR-10S/BigTreeTech SKR Pro v1.2/Configuration_adv.h
index f3514bff52..4e0d970d42 100644
--- a/config/examples/Creality/CR-10S/BigTreeTech SKR Pro v1.2/Configuration_adv.h
+++ b/config/examples/Creality/CR-10S/BigTreeTech SKR Pro v1.2/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/CR-10S/CrealityV1/Configuration_adv.h b/config/examples/Creality/CR-10S/CrealityV1/Configuration_adv.h
index c29e1cd208..4b37e524da 100644
--- a/config/examples/Creality/CR-10S/CrealityV1/Configuration_adv.h
+++ b/config/examples/Creality/CR-10S/CrealityV1/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/CR-20 Pro/Configuration_adv.h b/config/examples/Creality/CR-20 Pro/Configuration_adv.h
index 6f49f5bb80..2fb94441dc 100644
--- a/config/examples/Creality/CR-20 Pro/Configuration_adv.h
+++ b/config/examples/Creality/CR-20 Pro/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/CR-20/Configuration_adv.h b/config/examples/Creality/CR-20/Configuration_adv.h
index 0ce30ae5c0..d6fd665289 100644
--- a/config/examples/Creality/CR-20/Configuration_adv.h
+++ b/config/examples/Creality/CR-20/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/CR-30 PrintMill/Configuration_adv.h b/config/examples/Creality/CR-30 PrintMill/Configuration_adv.h
index 68c5d00cf0..66e46f9246 100644
--- a/config/examples/Creality/CR-30 PrintMill/Configuration_adv.h
+++ b/config/examples/Creality/CR-30 PrintMill/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/CR-8/Configuration_adv.h b/config/examples/Creality/CR-8/Configuration_adv.h
index 425b599f7f..40c9aff27e 100644
--- a/config/examples/Creality/CR-8/Configuration_adv.h
+++ b/config/examples/Creality/CR-8/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-2 Pro/CrealityV423/Configuration_adv.h b/config/examples/Creality/Ender-2 Pro/CrealityV423/Configuration_adv.h
index cdb4ea13cb..b9a23b90e1 100644
--- a/config/examples/Creality/Ender-2 Pro/CrealityV423/Configuration_adv.h
+++ b/config/examples/Creality/Ender-2 Pro/CrealityV423/Configuration_adv.h
@@ -3546,8 +3546,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3560,79 +3563,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-2/Configuration_adv.h b/config/examples/Creality/Ender-2/Configuration_adv.h
index 20a189f465..59ea4b26fe 100644
--- a/config/examples/Creality/Ender-2/Configuration_adv.h
+++ b/config/examples/Creality/Ender-2/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3 Max/Configuration_adv.h b/config/examples/Creality/Ender-3 Max/Configuration_adv.h
index fb3fba0c6e..fa34ac4d0b 100644
--- a/config/examples/Creality/Ender-3 Max/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3 Max/Configuration_adv.h
@@ -3546,8 +3546,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3560,79 +3563,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR 1.4 Turbo/Configuration_adv.h b/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR 1.4 Turbo/Configuration_adv.h
index e077cb289a..47e94751d6 100644
--- a/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR 1.4 Turbo/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR 1.4 Turbo/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 1.0/Configuration_adv.h b/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 1.0/Configuration_adv.h
index e81570c1d7..6863dc3de2 100644
--- a/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 1.0/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 1.0/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h b/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h
index e15b713c59..f55d3e4ded 100644
--- a/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h b/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h
index a42c3f9b18..a6f2316be1 100644
--- a/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h b/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h
index c8b901f969..89bd41270a 100644
--- a/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3 Pro/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3 Pro/CrealityV1/Configuration_adv.h b/config/examples/Creality/Ender-3 Pro/CrealityV1/Configuration_adv.h
index 45a1a30f80..e5c79c6f43 100644
--- a/config/examples/Creality/Ender-3 Pro/CrealityV1/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3 Pro/CrealityV1/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3 Pro/CrealityV422/Configuration_adv.h b/config/examples/Creality/Ender-3 Pro/CrealityV422/Configuration_adv.h
index f30e557d12..b9430f0650 100644
--- a/config/examples/Creality/Ender-3 Pro/CrealityV422/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3 Pro/CrealityV422/Configuration_adv.h
@@ -3546,8 +3546,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3560,79 +3563,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3 Pro/CrealityV427/Configuration_adv.h b/config/examples/Creality/Ender-3 Pro/CrealityV427/Configuration_adv.h
index aba9939895..103b516e07 100644
--- a/config/examples/Creality/Ender-3 Pro/CrealityV427/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3 Pro/CrealityV427/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3 S1/Configuration_adv.h b/config/examples/Creality/Ender-3 S1/Configuration_adv.h
index 4e7d120fca..9c1d94f8b2 100644
--- a/config/examples/Creality/Ender-3 S1/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3 S1/Configuration_adv.h
@@ -3541,8 +3541,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3555,79 +3558,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3 V2/BigTreeTech SKR E3 Turbo/CrealityUI/Configuration_adv.h b/config/examples/Creality/Ender-3 V2/BigTreeTech SKR E3 Turbo/CrealityUI/Configuration_adv.h
index a19b42ddb2..eb03515312 100644
--- a/config/examples/Creality/Ender-3 V2/BigTreeTech SKR E3 Turbo/CrealityUI/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3 V2/BigTreeTech SKR E3 Turbo/CrealityUI/Configuration_adv.h
@@ -3546,8 +3546,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3560,79 +3563,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3 V2/BigTreeTech SKR E3 Turbo/MarlinUI/Configuration_adv.h b/config/examples/Creality/Ender-3 V2/BigTreeTech SKR E3 Turbo/MarlinUI/Configuration_adv.h
index d2437e486b..5f91f4d42b 100644
--- a/config/examples/Creality/Ender-3 V2/BigTreeTech SKR E3 Turbo/MarlinUI/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3 V2/BigTreeTech SKR E3 Turbo/MarlinUI/Configuration_adv.h
@@ -3546,8 +3546,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3560,79 +3563,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3 V2/BigTreeTech SKR Mini E3 v3/CrealityUI/Configuration_adv.h b/config/examples/Creality/Ender-3 V2/BigTreeTech SKR Mini E3 v3/CrealityUI/Configuration_adv.h
index 71f668fe74..3865def6d3 100644
--- a/config/examples/Creality/Ender-3 V2/BigTreeTech SKR Mini E3 v3/CrealityUI/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3 V2/BigTreeTech SKR Mini E3 v3/CrealityUI/Configuration_adv.h
@@ -3546,8 +3546,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3560,79 +3563,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3 V2/BigTreeTech SKR Mini E3 v3/MarlinUI/Configuration_adv.h b/config/examples/Creality/Ender-3 V2/BigTreeTech SKR Mini E3 v3/MarlinUI/Configuration_adv.h
index 743f3a2f23..6057b11a63 100644
--- a/config/examples/Creality/Ender-3 V2/BigTreeTech SKR Mini E3 v3/MarlinUI/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3 V2/BigTreeTech SKR Mini E3 v3/MarlinUI/Configuration_adv.h
@@ -3546,8 +3546,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3560,79 +3563,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3 V2/CrealityV422/CrealityUI/Configuration_adv.h b/config/examples/Creality/Ender-3 V2/CrealityV422/CrealityUI/Configuration_adv.h
index 302fef12e3..60d2a2dc63 100644
--- a/config/examples/Creality/Ender-3 V2/CrealityV422/CrealityUI/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3 V2/CrealityV422/CrealityUI/Configuration_adv.h
@@ -3546,8 +3546,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3560,79 +3563,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3 V2/CrealityV422/MarlinUI/Configuration_adv.h b/config/examples/Creality/Ender-3 V2/CrealityV422/MarlinUI/Configuration_adv.h
index bbc2291ac8..5d8ef554c0 100644
--- a/config/examples/Creality/Ender-3 V2/CrealityV422/MarlinUI/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3 V2/CrealityV422/MarlinUI/Configuration_adv.h
@@ -3546,8 +3546,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3560,79 +3563,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3/BigTreeTech E3 RRF/Configuration_adv.h b/config/examples/Creality/Ender-3/BigTreeTech E3 RRF/Configuration_adv.h
index f77f0fbd33..e3c7befd84 100644
--- a/config/examples/Creality/Ender-3/BigTreeTech E3 RRF/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3/BigTreeTech E3 RRF/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3/BigTreeTech SKR 1.4/Configuration_adv.h b/config/examples/Creality/Ender-3/BigTreeTech SKR 1.4/Configuration_adv.h
index b2cd6eb40d..9ae8f99ac6 100644
--- a/config/examples/Creality/Ender-3/BigTreeTech SKR 1.4/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3/BigTreeTech SKR 1.4/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- #define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/2-into-1 Hotend/Configuration_adv.h b/config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/2-into-1 Hotend/Configuration_adv.h
index 97bb20fd80..431ad2bc6e 100644
--- a/config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/2-into-1 Hotend/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/2-into-1 Hotend/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/Dual Z/Configuration_adv.h b/config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/Dual Z/Configuration_adv.h
index 56836d1743..7128e64e10 100644
--- a/config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/Dual Z/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/Dual Z/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/Single Extruder/Configuration_adv.h b/config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/Single Extruder/Configuration_adv.h
index 97bb20fd80..431ad2bc6e 100644
--- a/config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/Single Extruder/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3/BigTreeTech SKR E3 Turbo/Single Extruder/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3/BigTreeTech SKR E3-DIP V1.1/Configuration_adv.h b/config/examples/Creality/Ender-3/BigTreeTech SKR E3-DIP V1.1/Configuration_adv.h
index 1c99d886aa..2b3d31b9b5 100644
--- a/config/examples/Creality/Ender-3/BigTreeTech SKR E3-DIP V1.1/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3/BigTreeTech SKR E3-DIP V1.1/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 1.0/Configuration_adv.h b/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 1.0/Configuration_adv.h
index 01cabe6351..2be7fa20c1 100644
--- a/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 1.0/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 1.0/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h b/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h
index 82fd09e08e..adceeb5a54 100644
--- a/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h b/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h
index 0d44645789..878ad0a37f 100644
--- a/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h b/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h
index 6bfd77d7d8..0ef0af6e30 100644
--- a/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3/BigTreeTech SKR Mini E3 3.0/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3/CrealityV1/Configuration_adv.h b/config/examples/Creality/Ender-3/CrealityV1/Configuration_adv.h
index 544710c9e6..4b3ec6e56b 100644
--- a/config/examples/Creality/Ender-3/CrealityV1/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3/CrealityV1/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3/CrealityV422/Configuration_adv.h b/config/examples/Creality/Ender-3/CrealityV422/Configuration_adv.h
index 3f43cf5ca5..3eac180014 100644
--- a/config/examples/Creality/Ender-3/CrealityV422/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3/CrealityV422/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3/CrealityV427/Configuration_adv.h b/config/examples/Creality/Ender-3/CrealityV427/Configuration_adv.h
index 0321293332..6beb58a7fe 100644
--- a/config/examples/Creality/Ender-3/CrealityV427/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3/CrealityV427/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3/FYSETC Cheetah 1.2/BLTouch/Configuration_adv.h b/config/examples/Creality/Ender-3/FYSETC Cheetah 1.2/BLTouch/Configuration_adv.h
index ce0d454e2f..3dadb419ee 100644
--- a/config/examples/Creality/Ender-3/FYSETC Cheetah 1.2/BLTouch/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3/FYSETC Cheetah 1.2/BLTouch/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3/FYSETC Cheetah 1.2/base/Configuration_adv.h b/config/examples/Creality/Ender-3/FYSETC Cheetah 1.2/base/Configuration_adv.h
index ce0d454e2f..3dadb419ee 100644
--- a/config/examples/Creality/Ender-3/FYSETC Cheetah 1.2/base/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3/FYSETC Cheetah 1.2/base/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3/FYSETC Cheetah 2.0/Configuration_adv.h b/config/examples/Creality/Ender-3/FYSETC Cheetah 2.0/Configuration_adv.h
index 493b406abd..ba59c8c698 100644
--- a/config/examples/Creality/Ender-3/FYSETC Cheetah 2.0/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3/FYSETC Cheetah 2.0/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3/FYSETC Cheetah/BLTouch/Configuration_adv.h b/config/examples/Creality/Ender-3/FYSETC Cheetah/BLTouch/Configuration_adv.h
index ce0d454e2f..3dadb419ee 100644
--- a/config/examples/Creality/Ender-3/FYSETC Cheetah/BLTouch/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3/FYSETC Cheetah/BLTouch/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3/FYSETC Cheetah/base/Configuration_adv.h b/config/examples/Creality/Ender-3/FYSETC Cheetah/base/Configuration_adv.h
index ce0d454e2f..3dadb419ee 100644
--- a/config/examples/Creality/Ender-3/FYSETC Cheetah/base/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3/FYSETC Cheetah/base/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3/MEEB-3DP/Configuration_adv.h b/config/examples/Creality/Ender-3/MEEB-3DP/Configuration_adv.h
index 7db917977a..c7579022f0 100644
--- a/config/examples/Creality/Ender-3/MEEB-3DP/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3/MEEB-3DP/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3/MKS Robin E3/V1.0/Configuration_adv.h b/config/examples/Creality/Ender-3/MKS Robin E3/V1.0/Configuration_adv.h
index 3e675cd63f..c8b2b7f867 100644
--- a/config/examples/Creality/Ender-3/MKS Robin E3/V1.0/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3/MKS Robin E3/V1.0/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3/MKS Robin E3/V1.1/Configuration_adv.h b/config/examples/Creality/Ender-3/MKS Robin E3/V1.1/Configuration_adv.h
index 35504fb862..7d677245c3 100644
--- a/config/examples/Creality/Ender-3/MKS Robin E3/V1.1/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3/MKS Robin E3/V1.1/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3/MKS Robin E3P/Configuration_adv.h b/config/examples/Creality/Ender-3/MKS Robin E3P/Configuration_adv.h
index 595d7e8362..6446f7098f 100644
--- a/config/examples/Creality/Ender-3/MKS Robin E3P/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3/MKS Robin E3P/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-3/TH3D EZBoard Lite V2/Configuration_adv.h b/config/examples/Creality/Ender-3/TH3D EZBoard Lite V2/Configuration_adv.h
index 3c47f4ccb3..e209bb2091 100644
--- a/config/examples/Creality/Ender-3/TH3D EZBoard Lite V2/Configuration_adv.h
+++ b/config/examples/Creality/Ender-3/TH3D EZBoard Lite V2/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-4/Configuration_adv.h b/config/examples/Creality/Ender-4/Configuration_adv.h
index cae23f2b87..efeb49b57c 100644
--- a/config/examples/Creality/Ender-4/Configuration_adv.h
+++ b/config/examples/Creality/Ender-4/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-5 Plus/Configuration_adv.h b/config/examples/Creality/Ender-5 Plus/Configuration_adv.h
index de24801273..4cd388c6fc 100644
--- a/config/examples/Creality/Ender-5 Plus/Configuration_adv.h
+++ b/config/examples/Creality/Ender-5 Plus/Configuration_adv.h
@@ -3546,8 +3546,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3560,79 +3563,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR E3 Turbo/Configuration_adv.h b/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR E3 Turbo/Configuration_adv.h
index 76fa54e76a..b5bee4676f 100644
--- a/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR E3 Turbo/Configuration_adv.h
+++ b/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR E3 Turbo/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h b/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h
index e838ff67be..67d671d79a 100644
--- a/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h
+++ b/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- #define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR Mini E3 2.0 with BLTouch/Configuration_adv.h b/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR Mini E3 2.0 with BLTouch/Configuration_adv.h
index 400e4fa47b..e268e91eec 100644
--- a/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR Mini E3 2.0 with BLTouch/Configuration_adv.h
+++ b/config/examples/Creality/Ender-5 Pro/BigTreeTech SKR Mini E3 2.0 with BLTouch/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-5 Pro/CrealityV1/Configuration_adv.h b/config/examples/Creality/Ender-5 Pro/CrealityV1/Configuration_adv.h
index 3cd507def8..f36ee732c4 100644
--- a/config/examples/Creality/Ender-5 Pro/CrealityV1/Configuration_adv.h
+++ b/config/examples/Creality/Ender-5 Pro/CrealityV1/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-5 Pro/CrealityV422/Configuration_adv.h b/config/examples/Creality/Ender-5 Pro/CrealityV422/Configuration_adv.h
index b4d3c09ffa..015f224c55 100644
--- a/config/examples/Creality/Ender-5 Pro/CrealityV422/Configuration_adv.h
+++ b/config/examples/Creality/Ender-5 Pro/CrealityV422/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- #define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-5 Pro/CrealityV427/Configuration_adv.h b/config/examples/Creality/Ender-5 Pro/CrealityV427/Configuration_adv.h
index b1ec076247..015f224c55 100644
--- a/config/examples/Creality/Ender-5 Pro/CrealityV427/Configuration_adv.h
+++ b/config/examples/Creality/Ender-5 Pro/CrealityV427/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-5/BigTreeTech SKR E3 Turbo with BLTouch/Configuration_adv.h b/config/examples/Creality/Ender-5/BigTreeTech SKR E3 Turbo with BLTouch/Configuration_adv.h
index 76fa54e76a..b5bee4676f 100644
--- a/config/examples/Creality/Ender-5/BigTreeTech SKR E3 Turbo with BLTouch/Configuration_adv.h
+++ b/config/examples/Creality/Ender-5/BigTreeTech SKR E3 Turbo with BLTouch/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-5/BigTreeTech SKR E3 Turbo/Configuration_adv.h b/config/examples/Creality/Ender-5/BigTreeTech SKR E3 Turbo/Configuration_adv.h
index 31599e774a..03d7cfe245 100644
--- a/config/examples/Creality/Ender-5/BigTreeTech SKR E3 Turbo/Configuration_adv.h
+++ b/config/examples/Creality/Ender-5/BigTreeTech SKR E3 Turbo/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-5/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h b/config/examples/Creality/Ender-5/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h
index 82fd09e08e..adceeb5a54 100644
--- a/config/examples/Creality/Ender-5/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h
+++ b/config/examples/Creality/Ender-5/BigTreeTech SKR Mini E3 1.2/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-5/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h b/config/examples/Creality/Ender-5/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h
index d62ba8f8f8..223e562cb1 100644
--- a/config/examples/Creality/Ender-5/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h
+++ b/config/examples/Creality/Ender-5/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-5/CrealityV1/Configuration_adv.h b/config/examples/Creality/Ender-5/CrealityV1/Configuration_adv.h
index 4e8896d0c6..5a51f54530 100644
--- a/config/examples/Creality/Ender-5/CrealityV1/Configuration_adv.h
+++ b/config/examples/Creality/Ender-5/CrealityV1/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-5/CrealityV427/Configuration_adv.h b/config/examples/Creality/Ender-5/CrealityV427/Configuration_adv.h
index 97ba675460..30b772c037 100644
--- a/config/examples/Creality/Ender-5/CrealityV427/Configuration_adv.h
+++ b/config/examples/Creality/Ender-5/CrealityV427/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Creality/Ender-6/Configuration_adv.h b/config/examples/Creality/Ender-6/Configuration_adv.h
index e932714505..1382a633f1 100644
--- a/config/examples/Creality/Ender-6/Configuration_adv.h
+++ b/config/examples/Creality/Ender-6/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h b/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h
index 2067bcb411..f04bea03ba 100644
--- a/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h
+++ b/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Daycom/3DP-100/Configuration_adv.h b/config/examples/Daycom/3DP-100/Configuration_adv.h
index d0945dc3c2..7141d854af 100644
--- a/config/examples/Daycom/3DP-100/Configuration_adv.h
+++ b/config/examples/Daycom/3DP-100/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/EXP3D/Imprimante multifonction/Configuration_adv.h b/config/examples/EXP3D/Imprimante multifonction/Configuration_adv.h
index 3bc1131982..a016642a1b 100644
--- a/config/examples/EXP3D/Imprimante multifonction/Configuration_adv.h
+++ b/config/examples/EXP3D/Imprimante multifonction/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/EasyThreeD/ET4000PLUS/Configuration_adv.h b/config/examples/EasyThreeD/ET4000PLUS/Configuration_adv.h
index 34e5a5b5a9..dd5b5cc40e 100644
--- a/config/examples/EasyThreeD/ET4000PLUS/Configuration_adv.h
+++ b/config/examples/EasyThreeD/ET4000PLUS/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Einstart-S/Configuration_adv.h b/config/examples/Einstart-S/Configuration_adv.h
index b359dcee84..fdb9634ed2 100644
--- a/config/examples/Einstart-S/Configuration_adv.h
+++ b/config/examples/Einstart-S/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Elegoo/Neptune 2/Configuration_adv.h b/config/examples/Elegoo/Neptune 2/Configuration_adv.h
index 1e2cfc050e..2ed5d8b54e 100644
--- a/config/examples/Elegoo/Neptune 2/Configuration_adv.h
+++ b/config/examples/Elegoo/Neptune 2/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Eryone/Thinker SE/Configuration_adv.h b/config/examples/Eryone/Thinker SE/Configuration_adv.h
index 6b242918fb..98c1262543 100644
--- a/config/examples/Eryone/Thinker SE/Configuration_adv.h
+++ b/config/examples/Eryone/Thinker SE/Configuration_adv.h
@@ -3551,8 +3551,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3565,79 +3568,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Eryone/Thinker V2/Configuration_adv.h b/config/examples/Eryone/Thinker V2/Configuration_adv.h
index 8de34ee1fb..aca759122f 100644
--- a/config/examples/Eryone/Thinker V2/Configuration_adv.h
+++ b/config/examples/Eryone/Thinker V2/Configuration_adv.h
@@ -3551,8 +3551,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3565,79 +3568,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/FYSETC/AIO_II/Configuration_adv.h b/config/examples/FYSETC/AIO_II/Configuration_adv.h
index 4cb9000653..472865f0a8 100644
--- a/config/examples/FYSETC/AIO_II/Configuration_adv.h
+++ b/config/examples/FYSETC/AIO_II/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/FYSETC/F6_13/Configuration_adv.h b/config/examples/FYSETC/F6_13/Configuration_adv.h
index 09f1ad852c..2af6dd97a0 100644
--- a/config/examples/FYSETC/F6_13/Configuration_adv.h
+++ b/config/examples/FYSETC/F6_13/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/FYSETC/S6/Configuration_adv.h b/config/examples/FYSETC/S6/Configuration_adv.h
index 56e67c4628..17b696192f 100644
--- a/config/examples/FYSETC/S6/Configuration_adv.h
+++ b/config/examples/FYSETC/S6/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Felix/DUAL/Configuration_adv.h b/config/examples/Felix/DUAL/Configuration_adv.h
index da128ec18d..6a30b0f4dd 100644
--- a/config/examples/Felix/DUAL/Configuration_adv.h
+++ b/config/examples/Felix/DUAL/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Felix/Single/Configuration_adv.h b/config/examples/Felix/Single/Configuration_adv.h
index da128ec18d..6a30b0f4dd 100644
--- a/config/examples/Felix/Single/Configuration_adv.h
+++ b/config/examples/Felix/Single/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/FlashForge/Creator 2X/Configuration_adv.h b/config/examples/FlashForge/Creator 2X/Configuration_adv.h
index f889198564..a2bd53feb0 100644
--- a/config/examples/FlashForge/Creator 2X/Configuration_adv.h
+++ b/config/examples/FlashForge/Creator 2X/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/FlashForge/CreatorPro/Configuration_adv.h b/config/examples/FlashForge/CreatorPro/Configuration_adv.h
index 5d00a862e2..540cd915fe 100644
--- a/config/examples/FlashForge/CreatorPro/Configuration_adv.h
+++ b/config/examples/FlashForge/CreatorPro/Configuration_adv.h
@@ -3544,8 +3544,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3558,79 +3561,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/FlyingBear/P902/Configuration_adv.h b/config/examples/FlyingBear/P902/Configuration_adv.h
index a4678acb77..5ec3168842 100644
--- a/config/examples/FlyingBear/P902/Configuration_adv.h
+++ b/config/examples/FlyingBear/P902/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/FlyingBear/P905H/Configuration_adv.h b/config/examples/FlyingBear/P905H/Configuration_adv.h
index 84f1496a19..e2550d70d6 100644
--- a/config/examples/FlyingBear/P905H/Configuration_adv.h
+++ b/config/examples/FlyingBear/P905H/Configuration_adv.h
@@ -3548,8 +3548,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3562,79 +3565,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/FolgerTech/i3-2020/Configuration_adv.h b/config/examples/FolgerTech/i3-2020/Configuration_adv.h
index 1d81f22eb6..e4da21d777 100644
--- a/config/examples/FolgerTech/i3-2020/Configuration_adv.h
+++ b/config/examples/FolgerTech/i3-2020/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Formbot/Raptor/Configuration_adv.h b/config/examples/Formbot/Raptor/Configuration_adv.h
index 9df5520dda..95861e1be4 100644
--- a/config/examples/Formbot/Raptor/Configuration_adv.h
+++ b/config/examples/Formbot/Raptor/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Formbot/T_Rex_2+/Configuration_adv.h b/config/examples/Formbot/T_Rex_2+/Configuration_adv.h
index ec3ed60869..2c91342467 100644
--- a/config/examples/Formbot/T_Rex_2+/Configuration_adv.h
+++ b/config/examples/Formbot/T_Rex_2+/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Formbot/T_Rex_3/Configuration_adv.h b/config/examples/Formbot/T_Rex_3/Configuration_adv.h
index c5fa2aa180..1c17905e37 100644
--- a/config/examples/Formbot/T_Rex_3/Configuration_adv.h
+++ b/config/examples/Formbot/T_Rex_3/Configuration_adv.h
@@ -3549,8 +3549,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3563,79 +3566,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Geeetech/A10/Configuration_adv.h b/config/examples/Geeetech/A10/Configuration_adv.h
index 9e79fc196f..6ac43f75b9 100644
--- a/config/examples/Geeetech/A10/Configuration_adv.h
+++ b/config/examples/Geeetech/A10/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Geeetech/A10D/Configuration_adv.h b/config/examples/Geeetech/A10D/Configuration_adv.h
index 08d488fdd1..f0e6100785 100644
--- a/config/examples/Geeetech/A10D/Configuration_adv.h
+++ b/config/examples/Geeetech/A10D/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Geeetech/A10M/Stock LCD/Configuration_adv.h b/config/examples/Geeetech/A10M/Stock LCD/Configuration_adv.h
index c3492ba4f5..c18c0238e3 100644
--- a/config/examples/Geeetech/A10M/Stock LCD/Configuration_adv.h
+++ b/config/examples/Geeetech/A10M/Stock LCD/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Geeetech/A10M/YHCB2004_V4.1/Configuration_adv.h b/config/examples/Geeetech/A10M/YHCB2004_V4.1/Configuration_adv.h
index c3492ba4f5..c18c0238e3 100644
--- a/config/examples/Geeetech/A10M/YHCB2004_V4.1/Configuration_adv.h
+++ b/config/examples/Geeetech/A10M/YHCB2004_V4.1/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Geeetech/A10PRO/Configuration_adv.h b/config/examples/Geeetech/A10PRO/Configuration_adv.h
index 9e79fc196f..6ac43f75b9 100644
--- a/config/examples/Geeetech/A10PRO/Configuration_adv.h
+++ b/config/examples/Geeetech/A10PRO/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Geeetech/A10T/Stock LCD/Configuration_adv.h b/config/examples/Geeetech/A10T/Stock LCD/Configuration_adv.h
index c3492ba4f5..c18c0238e3 100644
--- a/config/examples/Geeetech/A10T/Stock LCD/Configuration_adv.h
+++ b/config/examples/Geeetech/A10T/Stock LCD/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Geeetech/A10T/YHCB2004_V4.1/Configuration_adv.h b/config/examples/Geeetech/A10T/YHCB2004_V4.1/Configuration_adv.h
index c3492ba4f5..c18c0238e3 100644
--- a/config/examples/Geeetech/A10T/YHCB2004_V4.1/Configuration_adv.h
+++ b/config/examples/Geeetech/A10T/YHCB2004_V4.1/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Geeetech/A20/Configuration_adv.h b/config/examples/Geeetech/A20/Configuration_adv.h
index 27deee5669..9c60e5004e 100644
--- a/config/examples/Geeetech/A20/Configuration_adv.h
+++ b/config/examples/Geeetech/A20/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Geeetech/A20M/Configuration_adv.h b/config/examples/Geeetech/A20M/Configuration_adv.h
index 27deee5669..9c60e5004e 100644
--- a/config/examples/Geeetech/A20M/Configuration_adv.h
+++ b/config/examples/Geeetech/A20M/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Geeetech/A20T/Configuration_adv.h b/config/examples/Geeetech/A20T/Configuration_adv.h
index 27deee5669..9c60e5004e 100644
--- a/config/examples/Geeetech/A20T/Configuration_adv.h
+++ b/config/examples/Geeetech/A20T/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Geeetech/A30/Configuration_adv.h b/config/examples/Geeetech/A30/Configuration_adv.h
index 83f5709b55..7b4efe23ed 100644
--- a/config/examples/Geeetech/A30/Configuration_adv.h
+++ b/config/examples/Geeetech/A30/Configuration_adv.h
@@ -3544,8 +3544,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3558,79 +3561,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Geeetech/A30M/Configuration_adv.h b/config/examples/Geeetech/A30M/Configuration_adv.h
index 83f5709b55..7b4efe23ed 100644
--- a/config/examples/Geeetech/A30M/Configuration_adv.h
+++ b/config/examples/Geeetech/A30M/Configuration_adv.h
@@ -3544,8 +3544,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3558,79 +3561,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Geeetech/A30T/Configuration_adv.h b/config/examples/Geeetech/A30T/Configuration_adv.h
index 83f5709b55..7b4efe23ed 100644
--- a/config/examples/Geeetech/A30T/Configuration_adv.h
+++ b/config/examples/Geeetech/A30T/Configuration_adv.h
@@ -3544,8 +3544,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3558,79 +3561,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Geeetech/D200/Configuration_adv.h b/config/examples/Geeetech/D200/Configuration_adv.h
index f05b77baa5..fc4e45f83f 100644
--- a/config/examples/Geeetech/D200/Configuration_adv.h
+++ b/config/examples/Geeetech/D200/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Geeetech/Duplicator5/Configuration_adv.h b/config/examples/Geeetech/Duplicator5/Configuration_adv.h
index 56e67c4628..17b696192f 100644
--- a/config/examples/Geeetech/Duplicator5/Configuration_adv.h
+++ b/config/examples/Geeetech/Duplicator5/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Geeetech/E180/Configuration_adv.h b/config/examples/Geeetech/E180/Configuration_adv.h
index 83f5709b55..7b4efe23ed 100644
--- a/config/examples/Geeetech/E180/Configuration_adv.h
+++ b/config/examples/Geeetech/E180/Configuration_adv.h
@@ -3544,8 +3544,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3558,79 +3561,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Geeetech/M201/Configuration_adv.h b/config/examples/Geeetech/M201/Configuration_adv.h
index f05b77baa5..fc4e45f83f 100644
--- a/config/examples/Geeetech/M201/Configuration_adv.h
+++ b/config/examples/Geeetech/M201/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Geeetech/MeCreator2/Configuration_adv.h b/config/examples/Geeetech/MeCreator2/Configuration_adv.h
index 568ca988e6..bd9ea81e82 100644
--- a/config/examples/Geeetech/MeCreator2/Configuration_adv.h
+++ b/config/examples/Geeetech/MeCreator2/Configuration_adv.h
@@ -3544,8 +3544,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3558,79 +3561,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Geeetech/Me_creator/Configuration_adv.h b/config/examples/Geeetech/Me_creator/Configuration_adv.h
index 56e67c4628..17b696192f 100644
--- a/config/examples/Geeetech/Me_creator/Configuration_adv.h
+++ b/config/examples/Geeetech/Me_creator/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Geeetech/Me_ducer/Configuration_adv.h b/config/examples/Geeetech/Me_ducer/Configuration_adv.h
index 48cbb6948a..e4a44c57a4 100644
--- a/config/examples/Geeetech/Me_ducer/Configuration_adv.h
+++ b/config/examples/Geeetech/Me_ducer/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Geeetech/PI3A PRO/Configuration_adv.h b/config/examples/Geeetech/PI3A PRO/Configuration_adv.h
index fc6b4baa37..35c884fc9d 100644
--- a/config/examples/Geeetech/PI3A PRO/Configuration_adv.h
+++ b/config/examples/Geeetech/PI3A PRO/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h
index 9e79fc196f..6ac43f75b9 100644
--- a/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h
+++ b/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h
index 9e79fc196f..6ac43f75b9 100644
--- a/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h
+++ b/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/HMS434/Configuration_adv.h b/config/examples/HMS434/Configuration_adv.h
index b3f1b74dab..e6abfab795 100644
--- a/config/examples/HMS434/Configuration_adv.h
+++ b/config/examples/HMS434/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Infitary/i3-M508/Configuration_adv.h b/config/examples/Infitary/i3-M508/Configuration_adv.h
index d2b05d3000..7263ab17b1 100644
--- a/config/examples/Infitary/i3-M508/Configuration_adv.h
+++ b/config/examples/Infitary/i3-M508/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Intamsys/FunmatHT 4988/Configuration_adv.h b/config/examples/Intamsys/FunmatHT 4988/Configuration_adv.h
index 56df141454..9ab972a14a 100644
--- a/config/examples/Intamsys/FunmatHT 4988/Configuration_adv.h
+++ b/config/examples/Intamsys/FunmatHT 4988/Configuration_adv.h
@@ -3544,8 +3544,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3558,79 +3561,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/JGAurora/A1/Configuration_adv.h b/config/examples/JGAurora/A1/Configuration_adv.h
index ef2a58677b..86d27b5fe8 100644
--- a/config/examples/JGAurora/A1/Configuration_adv.h
+++ b/config/examples/JGAurora/A1/Configuration_adv.h
@@ -3551,8 +3551,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3565,79 +3568,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/JGAurora/A5/Configuration_adv.h b/config/examples/JGAurora/A5/Configuration_adv.h
index 8c164ef004..e915a5644c 100644
--- a/config/examples/JGAurora/A5/Configuration_adv.h
+++ b/config/examples/JGAurora/A5/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/JGAurora/A5S/Configuration_adv.h b/config/examples/JGAurora/A5S/Configuration_adv.h
index 50796c0b28..17b331c17f 100644
--- a/config/examples/JGAurora/A5S/Configuration_adv.h
+++ b/config/examples/JGAurora/A5S/Configuration_adv.h
@@ -3551,8 +3551,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3565,79 +3568,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/JGAurora/Magic/Configuration_adv.h b/config/examples/JGAurora/Magic/Configuration_adv.h
index aaa6b18051..91b6503733 100644
--- a/config/examples/JGAurora/Magic/Configuration_adv.h
+++ b/config/examples/JGAurora/Magic/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Kingroon/KP3/Configuration_adv.h b/config/examples/Kingroon/KP3/Configuration_adv.h
index 5fbea0fc48..b36f0bf385 100644
--- a/config/examples/Kingroon/KP3/Configuration_adv.h
+++ b/config/examples/Kingroon/KP3/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Labists/ET4/Configuration_adv.h b/config/examples/Labists/ET4/Configuration_adv.h
index 03eb4238ba..dae6021fe8 100644
--- a/config/examples/Labists/ET4/Configuration_adv.h
+++ b/config/examples/Labists/ET4/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/LulzBot/TAZ4/Configuration_adv.h b/config/examples/LulzBot/TAZ4/Configuration_adv.h
index 9f402a05ff..5d50b33ce6 100644
--- a/config/examples/LulzBot/TAZ4/Configuration_adv.h
+++ b/config/examples/LulzBot/TAZ4/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/MBot/Cube/Configuration_adv.h b/config/examples/MBot/Cube/Configuration_adv.h
index 54d474b8d7..fa0ab84e5b 100644
--- a/config/examples/MBot/Cube/Configuration_adv.h
+++ b/config/examples/MBot/Cube/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/MakerFarm/Pegasus 12/Configuration_adv.h b/config/examples/MakerFarm/Pegasus 12/Configuration_adv.h
index 10cde5d415..6204fb5446 100644
--- a/config/examples/MakerFarm/Pegasus 12/Configuration_adv.h
+++ b/config/examples/MakerFarm/Pegasus 12/Configuration_adv.h
@@ -3539,8 +3539,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3553,79 +3556,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/MakerParts/Configuration_adv.h b/config/examples/MakerParts/Configuration_adv.h
index a44245544a..55158d3364 100644
--- a/config/examples/MakerParts/Configuration_adv.h
+++ b/config/examples/MakerParts/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Malyan/M150/Configuration_adv.h b/config/examples/Malyan/M150/Configuration_adv.h
index b558f45c8a..0363742732 100644
--- a/config/examples/Malyan/M150/Configuration_adv.h
+++ b/config/examples/Malyan/M150/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Malyan/M200/Configuration_adv.h b/config/examples/Malyan/M200/Configuration_adv.h
index 417f88e65a..03e31b6f9d 100644
--- a/config/examples/Malyan/M200/Configuration_adv.h
+++ b/config/examples/Malyan/M200/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Micromake/C1/enhanced/Configuration_adv.h b/config/examples/Micromake/C1/enhanced/Configuration_adv.h
index e9b12361af..70f233836c 100644
--- a/config/examples/Micromake/C1/enhanced/Configuration_adv.h
+++ b/config/examples/Micromake/C1/enhanced/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Mks/Sbase/Configuration_adv.h b/config/examples/Mks/Sbase/Configuration_adv.h
index 47f24072b3..3946641d52 100644
--- a/config/examples/Mks/Sbase/Configuration_adv.h
+++ b/config/examples/Mks/Sbase/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Modix/Big60/Configuration_adv.h b/config/examples/Modix/Big60/Configuration_adv.h
index 5fca6aa587..11e3872fb9 100644
--- a/config/examples/Modix/Big60/Configuration_adv.h
+++ b/config/examples/Modix/Big60/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Nextion/Configuration_adv.h b/config/examples/Nextion/Configuration_adv.h
index 56e199eb91..ead4894d52 100644
--- a/config/examples/Nextion/Configuration_adv.h
+++ b/config/examples/Nextion/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Opulo/Lumen_REV3/Configuration_adv.h b/config/examples/Opulo/Lumen_REV3/Configuration_adv.h
index eca805e66c..889ef0ee24 100644
--- a/config/examples/Opulo/Lumen_REV3/Configuration_adv.h
+++ b/config/examples/Opulo/Lumen_REV3/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Ortur 4/Configuration_adv.h b/config/examples/Ortur 4/Configuration_adv.h
index 42565a2adf..58fa019016 100644
--- a/config/examples/Ortur 4/Configuration_adv.h
+++ b/config/examples/Ortur 4/Configuration_adv.h
@@ -3546,8 +3546,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3560,79 +3563,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Polargraph/Configuration_adv.h b/config/examples/Polargraph/Configuration_adv.h
index 693528771f..c007b702b8 100644
--- a/config/examples/Polargraph/Configuration_adv.h
+++ b/config/examples/Polargraph/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Prusa/MK3/Configuration_adv.h b/config/examples/Prusa/MK3/Configuration_adv.h
index 7da51ad647..7595a3ac20 100644
--- a/config/examples/Prusa/MK3/Configuration_adv.h
+++ b/config/examples/Prusa/MK3/Configuration_adv.h
@@ -3551,8 +3551,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3565,79 +3568,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Prusa/MK3S-BigTreeTech-BTT002/Configuration_adv.h b/config/examples/Prusa/MK3S-BigTreeTech-BTT002/Configuration_adv.h
index 1aaf8c8200..6fd9f386a8 100644
--- a/config/examples/Prusa/MK3S-BigTreeTech-BTT002/Configuration_adv.h
+++ b/config/examples/Prusa/MK3S-BigTreeTech-BTT002/Configuration_adv.h
@@ -3548,8 +3548,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3562,79 +3565,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Qidi/Qidi 1/Configuration_adv.h b/config/examples/Qidi/Qidi 1/Configuration_adv.h
index d7c7c2c11a..77345c8294 100644
--- a/config/examples/Qidi/Qidi 1/Configuration_adv.h
+++ b/config/examples/Qidi/Qidi 1/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Raiscube/A8r/Configuration_adv.h b/config/examples/Raiscube/A8r/Configuration_adv.h
index 08829540f5..3e2f73e51d 100644
--- a/config/examples/Raiscube/A8r/Configuration_adv.h
+++ b/config/examples/Raiscube/A8r/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/RapideLite/RL200/Configuration_adv.h b/config/examples/RapideLite/RL200/Configuration_adv.h
index 56e67c4628..17b696192f 100644
--- a/config/examples/RapideLite/RL200/Configuration_adv.h
+++ b/config/examples/RapideLite/RL200/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Renkforce/RF100/Configuration_adv.h b/config/examples/Renkforce/RF100/Configuration_adv.h
index 220c4209b3..513a477356 100644
--- a/config/examples/Renkforce/RF100/Configuration_adv.h
+++ b/config/examples/Renkforce/RF100/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Renkforce/RF100XL/Configuration_adv.h b/config/examples/Renkforce/RF100XL/Configuration_adv.h
index 220c4209b3..513a477356 100644
--- a/config/examples/Renkforce/RF100XL/Configuration_adv.h
+++ b/config/examples/Renkforce/RF100XL/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Renkforce/RF100v2/Configuration_adv.h b/config/examples/Renkforce/RF100v2/Configuration_adv.h
index 220c4209b3..513a477356 100644
--- a/config/examples/Renkforce/RF100v2/Configuration_adv.h
+++ b/config/examples/Renkforce/RF100v2/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/RigidBot/Configuration_adv.h b/config/examples/RigidBot/Configuration_adv.h
index 1d20c0d134..d0cbdd0f5c 100644
--- a/config/examples/RigidBot/Configuration_adv.h
+++ b/config/examples/RigidBot/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/SCARA/MP_SCARA/Configuration_adv.h b/config/examples/SCARA/MP_SCARA/Configuration_adv.h
index b8205c6261..1b19f0c626 100644
--- a/config/examples/SCARA/MP_SCARA/Configuration_adv.h
+++ b/config/examples/SCARA/MP_SCARA/Configuration_adv.h
@@ -3542,8 +3542,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3556,79 +3559,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/SCARA/Morgan/Configuration_adv.h b/config/examples/SCARA/Morgan/Configuration_adv.h
index 0e0a7ffe67..a975841acb 100644
--- a/config/examples/SCARA/Morgan/Configuration_adv.h
+++ b/config/examples/SCARA/Morgan/Configuration_adv.h
@@ -3542,8 +3542,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3556,79 +3559,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h b/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h
index 7b57081288..daf8bab2c0 100644
--- a/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h
+++ b/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Sanguinololu/Configuration_adv.h b/config/examples/Sanguinololu/Configuration_adv.h
index adf639266d..b8fd85c429 100644
--- a/config/examples/Sanguinololu/Configuration_adv.h
+++ b/config/examples/Sanguinololu/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Simulator/Configuration_adv.h b/config/examples/Simulator/Configuration_adv.h
index 494893b2d6..753f3dea0b 100644
--- a/config/examples/Simulator/Configuration_adv.h
+++ b/config/examples/Simulator/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Sovol/SV-01/BigTreeTech SKR E3 Turbo/Configuration_adv.h b/config/examples/Sovol/SV-01/BigTreeTech SKR E3 Turbo/Configuration_adv.h
index af75329fae..186883dfe3 100644
--- a/config/examples/Sovol/SV-01/BigTreeTech SKR E3 Turbo/Configuration_adv.h
+++ b/config/examples/Sovol/SV-01/BigTreeTech SKR E3 Turbo/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Sovol/SV-01/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h b/config/examples/Sovol/SV-01/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h
index b06d38d8bc..b402e2c563 100644
--- a/config/examples/Sovol/SV-01/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h
+++ b/config/examples/Sovol/SV-01/BigTreeTech SKR Mini E3 2.0/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Sovol/SV-01/CrealityV22/Configuration_adv.h b/config/examples/Sovol/SV-01/CrealityV22/Configuration_adv.h
index a89b8c67d2..585d254255 100644
--- a/config/examples/Sovol/SV-01/CrealityV22/Configuration_adv.h
+++ b/config/examples/Sovol/SV-01/CrealityV22/Configuration_adv.h
@@ -3542,8 +3542,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3556,79 +3559,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Sovol/SV-01/CrealityV221/Configuration_adv.h b/config/examples/Sovol/SV-01/CrealityV221/Configuration_adv.h
index 7a448e1283..fc125c4cec 100644
--- a/config/examples/Sovol/SV-01/CrealityV221/Configuration_adv.h
+++ b/config/examples/Sovol/SV-01/CrealityV221/Configuration_adv.h
@@ -3542,8 +3542,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3556,79 +3559,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Sunlu/S8/Configuration_adv.h b/config/examples/Sunlu/S8/Configuration_adv.h
index 5bf6c531d7..6791a6da23 100644
--- a/config/examples/Sunlu/S8/Configuration_adv.h
+++ b/config/examples/Sunlu/S8/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/TPARA/AXEL_TPARA/Configuration_adv.h b/config/examples/TPARA/AXEL_TPARA/Configuration_adv.h
index ccd30504b1..6e98d6fd6f 100644
--- a/config/examples/TPARA/AXEL_TPARA/Configuration_adv.h
+++ b/config/examples/TPARA/AXEL_TPARA/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Tevo/Michelangelo/Configuration_adv.h b/config/examples/Tevo/Michelangelo/Configuration_adv.h
index a79bd8be2d..0652d293de 100644
--- a/config/examples/Tevo/Michelangelo/Configuration_adv.h
+++ b/config/examples/Tevo/Michelangelo/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Tevo/Nereus/Configuration_adv.h b/config/examples/Tevo/Nereus/Configuration_adv.h
index fb9d4d0150..fa0239ba84 100644
--- a/config/examples/Tevo/Nereus/Configuration_adv.h
+++ b/config/examples/Tevo/Nereus/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Tevo/Tarantula Pro/Configuration_adv.h b/config/examples/Tevo/Tarantula Pro/Configuration_adv.h
index 82d7877287..8c271b7519 100644
--- a/config/examples/Tevo/Tarantula Pro/Configuration_adv.h
+++ b/config/examples/Tevo/Tarantula Pro/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h
index e43959e3ea..4c09d8ea5f 100644
--- a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h
+++ b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h
index e43959e3ea..4c09d8ea5f 100644
--- a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h
+++ b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/TheBorg/Configuration_adv.h b/config/examples/TheBorg/Configuration_adv.h
index 1be15dbe78..639addfa31 100644
--- a/config/examples/TheBorg/Configuration_adv.h
+++ b/config/examples/TheBorg/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/TinyBoy2/Configuration_adv.h b/config/examples/TinyBoy2/Configuration_adv.h
index ace9f4c0a5..e34951c1a0 100644
--- a/config/examples/TinyBoy2/Configuration_adv.h
+++ b/config/examples/TinyBoy2/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Tronxy/X3A/Configuration_adv.h b/config/examples/Tronxy/X3A/Configuration_adv.h
index 4fbec06892..1a941444e2 100644
--- a/config/examples/Tronxy/X3A/Configuration_adv.h
+++ b/config/examples/Tronxy/X3A/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Tronxy/X5S-2E/Configuration_adv.h b/config/examples/Tronxy/X5S-2E/Configuration_adv.h
index 2ef748c183..a8d009f571 100644
--- a/config/examples/Tronxy/X5S-2E/Configuration_adv.h
+++ b/config/examples/Tronxy/X5S-2E/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Tronxy/X5SA-2E/Configuration_adv.h b/config/examples/Tronxy/X5SA-2E/Configuration_adv.h
index 2ece7bd15f..429da3cf3d 100644
--- a/config/examples/Tronxy/X5SA-2E/Configuration_adv.h
+++ b/config/examples/Tronxy/X5SA-2E/Configuration_adv.h
@@ -3549,8 +3549,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3563,79 +3566,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Tronxy/X5SA/Configuration_adv.h b/config/examples/Tronxy/X5SA/Configuration_adv.h
index c7a8dfb90d..6d0583ad50 100644
--- a/config/examples/Tronxy/X5SA/Configuration_adv.h
+++ b/config/examples/Tronxy/X5SA/Configuration_adv.h
@@ -3549,8 +3549,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3563,79 +3566,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Two Trees/BlueR Plus/Configuration_adv.h b/config/examples/Two Trees/BlueR Plus/Configuration_adv.h
index 2316e3311d..97c523b374 100644
--- a/config/examples/Two Trees/BlueR Plus/Configuration_adv.h
+++ b/config/examples/Two Trees/BlueR Plus/Configuration_adv.h
@@ -3546,8 +3546,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3560,79 +3563,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Two Trees/BlueR/BlueR V1/Configuration_adv.h b/config/examples/Two Trees/BlueR/BlueR V1/Configuration_adv.h
index fe89c84faa..35e63386d8 100644
--- a/config/examples/Two Trees/BlueR/BlueR V1/Configuration_adv.h
+++ b/config/examples/Two Trees/BlueR/BlueR V1/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Two Trees/BlueR/BlueR V2/Configuration_adv.h b/config/examples/Two Trees/BlueR/BlueR V2/Configuration_adv.h
index fe89c84faa..35e63386d8 100644
--- a/config/examples/Two Trees/BlueR/BlueR V2/Configuration_adv.h
+++ b/config/examples/Two Trees/BlueR/BlueR V2/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Two Trees/BlueR/BlueR V3/Configuration_adv.h b/config/examples/Two Trees/BlueR/BlueR V3/Configuration_adv.h
index fe89c84faa..35e63386d8 100644
--- a/config/examples/Two Trees/BlueR/BlueR V3/Configuration_adv.h
+++ b/config/examples/Two Trees/BlueR/BlueR V3/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Two Trees/Sapphire Plus/Sapphire Plus V2/Configuration_adv.h b/config/examples/Two Trees/Sapphire Plus/Sapphire Plus V2/Configuration_adv.h
index ac1604c6e6..129e8d8b7d 100644
--- a/config/examples/Two Trees/Sapphire Plus/Sapphire Plus V2/Configuration_adv.h
+++ b/config/examples/Two Trees/Sapphire Plus/Sapphire Plus V2/Configuration_adv.h
@@ -3552,8 +3552,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3566,79 +3569,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Two Trees/Sapphire Pro/Configuration_adv.h b/config/examples/Two Trees/Sapphire Pro/Configuration_adv.h
index e96c3db2fd..02371ccef5 100644
--- a/config/examples/Two Trees/Sapphire Pro/Configuration_adv.h
+++ b/config/examples/Two Trees/Sapphire Pro/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/UltiMachine/Archim1/Configuration_adv.h b/config/examples/UltiMachine/Archim1/Configuration_adv.h
index c385c7c4a3..5d5b23c67d 100644
--- a/config/examples/UltiMachine/Archim1/Configuration_adv.h
+++ b/config/examples/UltiMachine/Archim1/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/UltiMachine/Archim2/Configuration_adv.h b/config/examples/UltiMachine/Archim2/Configuration_adv.h
index bcff40e81a..4005fb4466 100644
--- a/config/examples/UltiMachine/Archim2/Configuration_adv.h
+++ b/config/examples/UltiMachine/Archim2/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Ultimaker/Ultimaker 2/Configuration_adv.h b/config/examples/Ultimaker/Ultimaker 2/Configuration_adv.h
index fb88a80b46..9ad64ea3df 100644
--- a/config/examples/Ultimaker/Ultimaker 2/Configuration_adv.h
+++ b/config/examples/Ultimaker/Ultimaker 2/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Ultimaker/Ultimaker Original (1.5.7)/Configuration_adv.h b/config/examples/Ultimaker/Ultimaker Original (1.5.7)/Configuration_adv.h
index e7d3e8d28c..b03407f217 100644
--- a/config/examples/Ultimaker/Ultimaker Original (1.5.7)/Configuration_adv.h
+++ b/config/examples/Ultimaker/Ultimaker Original (1.5.7)/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Ultimaker/Ultimaker Original Plus (2.1.1)/Configuration_adv.h b/config/examples/Ultimaker/Ultimaker Original Plus (2.1.1)/Configuration_adv.h
index e716bd8f11..7af634dbfc 100644
--- a/config/examples/Ultimaker/Ultimaker Original Plus (2.1.1)/Configuration_adv.h
+++ b/config/examples/Ultimaker/Ultimaker Original Plus (2.1.1)/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/VORONDesign/Configuration_adv.h b/config/examples/VORONDesign/Configuration_adv.h
index 1d8b5fc247..2c8cd3f997 100644
--- a/config/examples/VORONDesign/Configuration_adv.h
+++ b/config/examples/VORONDesign/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Velleman/K8200 Upgraded/Configuration_adv.h b/config/examples/Velleman/K8200 Upgraded/Configuration_adv.h
index 3d9974d7da..82e9c36985 100644
--- a/config/examples/Velleman/K8200 Upgraded/Configuration_adv.h
+++ b/config/examples/Velleman/K8200 Upgraded/Configuration_adv.h
@@ -3558,8 +3558,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3572,79 +3575,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Velleman/K8200/Configuration_adv.h b/config/examples/Velleman/K8200/Configuration_adv.h
index 79d26a9d97..d99d43603f 100644
--- a/config/examples/Velleman/K8200/Configuration_adv.h
+++ b/config/examples/Velleman/K8200/Configuration_adv.h
@@ -3558,8 +3558,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3572,79 +3575,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Velleman/K8400/Dual-head/Configuration_adv.h b/config/examples/Velleman/K8400/Dual-head/Configuration_adv.h
index ce66a9187f..3cece8783c 100644
--- a/config/examples/Velleman/K8400/Dual-head/Configuration_adv.h
+++ b/config/examples/Velleman/K8400/Dual-head/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Velleman/K8400/Single-head/Configuration_adv.h b/config/examples/Velleman/K8400/Single-head/Configuration_adv.h
index ce66a9187f..3cece8783c 100644
--- a/config/examples/Velleman/K8400/Single-head/Configuration_adv.h
+++ b/config/examples/Velleman/K8400/Single-head/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/WASP/PowerWASP/Configuration_adv.h b/config/examples/WASP/PowerWASP/Configuration_adv.h
index 095117b96b..3b5126cd05 100644
--- a/config/examples/WASP/PowerWASP/Configuration_adv.h
+++ b/config/examples/WASP/PowerWASP/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Wanhao/Duplicator 4S/Configuration_adv.h b/config/examples/Wanhao/Duplicator 4S/Configuration_adv.h
index 0e6465443a..094192e06d 100644
--- a/config/examples/Wanhao/Duplicator 4S/Configuration_adv.h
+++ b/config/examples/Wanhao/Duplicator 4S/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Wanhao/Duplicator 6/Configuration_adv.h b/config/examples/Wanhao/Duplicator 6/Configuration_adv.h
index 879e6e6e9a..394c0b1f68 100644
--- a/config/examples/Wanhao/Duplicator 6/Configuration_adv.h
+++ b/config/examples/Wanhao/Duplicator 6/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Wanhao/Duplicator i3 2.1/Configuration_adv.h b/config/examples/Wanhao/Duplicator i3 2.1/Configuration_adv.h
index c9acb7e19a..79a2cc7f25 100644
--- a/config/examples/Wanhao/Duplicator i3 2.1/Configuration_adv.h
+++ b/config/examples/Wanhao/Duplicator i3 2.1/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h b/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h
index b16144b4e6..66ac1da91d 100644
--- a/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h
+++ b/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Weedo/Tina2/V2/Configuration_adv.h b/config/examples/Weedo/Tina2/V2/Configuration_adv.h
index 51c23cbd72..724caec64d 100644
--- a/config/examples/Weedo/Tina2/V2/Configuration_adv.h
+++ b/config/examples/Weedo/Tina2/V2/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Weedo/Tina2/V3/Configuration_adv.h b/config/examples/Weedo/Tina2/V3/Configuration_adv.h
index 51c23cbd72..724caec64d 100644
--- a/config/examples/Weedo/Tina2/V3/Configuration_adv.h
+++ b/config/examples/Weedo/Tina2/V3/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Weistek/wt150/Configuration_adv.h b/config/examples/Weistek/wt150/Configuration_adv.h
index 70d6041cc3..6901fd9d41 100644
--- a/config/examples/Weistek/wt150/Configuration_adv.h
+++ b/config/examples/Weistek/wt150/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Zonestar/P802M/Configuration_adv.h b/config/examples/Zonestar/P802M/Configuration_adv.h
index 67da79b167..5e893b334f 100644
--- a/config/examples/Zonestar/P802M/Configuration_adv.h
+++ b/config/examples/Zonestar/P802M/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Zonestar/P802QR2/BigTreeTech SKR 1.4 Turbo (A4988)/Configuration_adv.h b/config/examples/Zonestar/P802QR2/BigTreeTech SKR 1.4 Turbo (A4988)/Configuration_adv.h
index 6d9a4392a1..27dac321dc 100644
--- a/config/examples/Zonestar/P802QR2/BigTreeTech SKR 1.4 Turbo (A4988)/Configuration_adv.h
+++ b/config/examples/Zonestar/P802QR2/BigTreeTech SKR 1.4 Turbo (A4988)/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/Zonestar/P802QR2/BigTreeTech SKR 1.4 Turbo (TMC2209)/Configuration_adv.h b/config/examples/Zonestar/P802QR2/BigTreeTech SKR 1.4 Turbo (TMC2209)/Configuration_adv.h
index 3222f0167c..b015f3097c 100755
--- a/config/examples/Zonestar/P802QR2/BigTreeTech SKR 1.4 Turbo (TMC2209)/Configuration_adv.h
+++ b/config/examples/Zonestar/P802QR2/BigTreeTech SKR 1.4 Turbo (TMC2209)/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/delta/Anycubic/Kossel Linear Plus/Configuration_adv.h b/config/examples/delta/Anycubic/Kossel Linear Plus/Configuration_adv.h
index 08386b0f34..86f0a0546a 100644
--- a/config/examples/delta/Anycubic/Kossel Linear Plus/Configuration_adv.h
+++ b/config/examples/delta/Anycubic/Kossel Linear Plus/Configuration_adv.h
@@ -3548,8 +3548,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3562,79 +3565,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/delta/Anycubic/Kossel/Configuration_adv.h b/config/examples/delta/Anycubic/Kossel/Configuration_adv.h
index dfb85a12bd..df56db36c6 100644
--- a/config/examples/delta/Anycubic/Kossel/Configuration_adv.h
+++ b/config/examples/delta/Anycubic/Kossel/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/delta/Anycubic/Predator/Configuration_adv.h b/config/examples/delta/Anycubic/Predator/Configuration_adv.h
index 99a67edba0..949ef4c308 100644
--- a/config/examples/delta/Anycubic/Predator/Configuration_adv.h
+++ b/config/examples/delta/Anycubic/Predator/Configuration_adv.h
@@ -3548,8 +3548,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3562,79 +3565,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h b/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h
index 4a52eb15c3..2fd7114d76 100644
--- a/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h
+++ b/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h
index 4a52eb15c3..2fd7114d76 100644
--- a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h
+++ b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/delta/FLSUN/Q5-nano_v1/Configuration_adv.h b/config/examples/delta/FLSUN/Q5-nano_v1/Configuration_adv.h
index 5af5ae273d..e697bf508c 100644
--- a/config/examples/delta/FLSUN/Q5-nano_v1/Configuration_adv.h
+++ b/config/examples/delta/FLSUN/Q5-nano_v1/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/delta/FLSUN/QQ-S/Configuration_adv.h b/config/examples/delta/FLSUN/QQ-S/Configuration_adv.h
index 2c288abff8..bbc2cf7e26 100644
--- a/config/examples/delta/FLSUN/QQ-S/Configuration_adv.h
+++ b/config/examples/delta/FLSUN/QQ-S/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/delta/FLSUN/QQS-Pro/Configuration_adv.h b/config/examples/delta/FLSUN/QQS-Pro/Configuration_adv.h
index 697d00db00..7e1c06712e 100644
--- a/config/examples/delta/FLSUN/QQS-Pro/Configuration_adv.h
+++ b/config/examples/delta/FLSUN/QQS-Pro/Configuration_adv.h
@@ -3548,8 +3548,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3562,79 +3565,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h b/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h
index 75515c6516..1ea59ce1c1 100644
--- a/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h
+++ b/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/delta/FLSUN/kossel/Configuration_adv.h b/config/examples/delta/FLSUN/kossel/Configuration_adv.h
index 75515c6516..1ea59ce1c1 100644
--- a/config/examples/delta/FLSUN/kossel/Configuration_adv.h
+++ b/config/examples/delta/FLSUN/kossel/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h b/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h
index cc13a9d75d..dca7e26a7b 100644
--- a/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h
+++ b/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/delta/Geeetech/G2/Configuration_adv.h b/config/examples/delta/Geeetech/G2/Configuration_adv.h
index 0054f33a7d..2250fb623c 100644
--- a/config/examples/delta/Geeetech/G2/Configuration_adv.h
+++ b/config/examples/delta/Geeetech/G2/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/delta/Geeetech/G2Pro/Configuration_adv.h b/config/examples/delta/Geeetech/G2Pro/Configuration_adv.h
index 0054f33a7d..2250fb623c 100644
--- a/config/examples/delta/Geeetech/G2Pro/Configuration_adv.h
+++ b/config/examples/delta/Geeetech/G2Pro/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/delta/Geeetech/G2S/Configuration_adv.h b/config/examples/delta/Geeetech/G2S/Configuration_adv.h
index 0054f33a7d..2250fb623c 100644
--- a/config/examples/delta/Geeetech/G2S/Configuration_adv.h
+++ b/config/examples/delta/Geeetech/G2S/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/delta/Geeetech/G2SPro/Configuration_adv.h b/config/examples/delta/Geeetech/G2SPro/Configuration_adv.h
index 0054f33a7d..2250fb623c 100644
--- a/config/examples/delta/Geeetech/G2SPro/Configuration_adv.h
+++ b/config/examples/delta/Geeetech/G2SPro/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h b/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h
index dfa332a5c8..69bad64101 100644
--- a/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h
+++ b/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/delta/Hatchbox_Alpha/Configuration_adv.h b/config/examples/delta/Hatchbox_Alpha/Configuration_adv.h
index 2cbce1c8e4..3af73fd2e3 100644
--- a/config/examples/delta/Hatchbox_Alpha/Configuration_adv.h
+++ b/config/examples/delta/Hatchbox_Alpha/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/delta/MKS/SBASE/Configuration_adv.h b/config/examples/delta/MKS/SBASE/Configuration_adv.h
index 572653c6fd..520551474f 100644
--- a/config/examples/delta/MKS/SBASE/Configuration_adv.h
+++ b/config/examples/delta/MKS/SBASE/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/delta/Malyan M300/Configuration_adv.h b/config/examples/delta/Malyan M300/Configuration_adv.h
index cf4a88a9a5..069489af61 100644
--- a/config/examples/delta/Malyan M300/Configuration_adv.h
+++ b/config/examples/delta/Malyan M300/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/delta/Tevo Little Monster/Configuration_adv.h b/config/examples/delta/Tevo Little Monster/Configuration_adv.h
index 06f92b64d7..7800436f3d 100644
--- a/config/examples/delta/Tevo Little Monster/Configuration_adv.h
+++ b/config/examples/delta/Tevo Little Monster/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/delta/generic/Configuration_adv.h b/config/examples/delta/generic/Configuration_adv.h
index cc13a9d75d..dca7e26a7b 100644
--- a/config/examples/delta/generic/Configuration_adv.h
+++ b/config/examples/delta/generic/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/delta/kossel_clear/Configuration_adv.h b/config/examples/delta/kossel_clear/Configuration_adv.h
index 07b450d1fd..3a34da8267 100644
--- a/config/examples/delta/kossel_clear/Configuration_adv.h
+++ b/config/examples/delta/kossel_clear/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/delta/kossel_xl/Configuration_adv.h b/config/examples/delta/kossel_xl/Configuration_adv.h
index 9085556bb3..915c414d31 100644
--- a/config/examples/delta/kossel_xl/Configuration_adv.h
+++ b/config/examples/delta/kossel_xl/Configuration_adv.h
@@ -3547,8 +3547,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3561,79 +3564,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/gCreate/gMax1.5+/Configuration_adv.h b/config/examples/gCreate/gMax1.5+/Configuration_adv.h
index 1d619ff462..b160c66ffe 100644
--- a/config/examples/gCreate/gMax1.5+/Configuration_adv.h
+++ b/config/examples/gCreate/gMax1.5+/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/linear_axes/RAMPS 5 LINEAR_AXES/Configuration_adv.h b/config/examples/linear_axes/RAMPS 5 LINEAR_AXES/Configuration_adv.h
index d985153432..ed7179448b 100644
--- a/config/examples/linear_axes/RAMPS 5 LINEAR_AXES/Configuration_adv.h
+++ b/config/examples/linear_axes/RAMPS 5 LINEAR_AXES/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/makibox/Configuration_adv.h b/config/examples/makibox/Configuration_adv.h
index 09a27873c4..cde8c6d3cf 100644
--- a/config/examples/makibox/Configuration_adv.h
+++ b/config/examples/makibox/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)
diff --git a/config/examples/tvrrug/Round2/Configuration_adv.h b/config/examples/tvrrug/Round2/Configuration_adv.h
index f464003cdf..8fc6484770 100644
--- a/config/examples/tvrrug/Round2/Configuration_adv.h
+++ b/config/examples/tvrrug/Round2/Configuration_adv.h
@@ -3545,8 +3545,11 @@
#endif
// Define the minimum and maximum test pulse time values for a laser test fire function
- #define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
- #define LASER_TEST_PULSE_MAX 999 // Caution: Menu may not show more than 3 characters
+ #define LASER_TEST_PULSE_MIN 1 // (ms) Used with Laser Control Menu
+ #define LASER_TEST_PULSE_MAX 999 // (ms) Caution: Menu may not show more than 3 characters
+
+ #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
+ #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
/**
* Laser Safety Timeout
@@ -3559,79 +3562,38 @@
#define LASER_SAFETY_TIMEOUT_MS 1000 // (ms)
/**
- * Enable inline laser power to be handled in the planner / stepper routines.
- * Inline power is specified by the I (inline) flag in an M3 command (e.g., M3 S20 I)
- * or by the 'S' parameter in G0/G1/G2/G3 moves (see LASER_MOVE_POWER).
+ * Any M3 or G1/2/3/5 command with the 'I' parameter enables continuous inline power mode.
+ *
+ * e.g., 'M3 I' enables continuous inline power which is processed by the planner.
+ * Power is stored in move blocks and applied when blocks are processed by the Stepper ISR.
+ *
+ * 'M4 I' sets dynamic mode which uses the current feedrate to calculate a laser power OCR value.
*
- * This allows the laser to keep in perfect sync with the planner and removes
- * the powerup/down delay since lasers require negligible time.
+ * Any move in dynamic mode will use the current feedrate to calculate the laser power.
+ * Feed rates are set by the F parameter of a move command e.g. G1 X0 Y10 F6000
+ * Laser power would be calculated by bit shifting off 8 LSB's. In binary this is div 256.
+ * The calculation gives us ocr values from 0 to 255, values over F65535 will be set as 255 .
+ * More refined power control such as compesation for accell/decell will be addressed in future releases.
+ *
+ * M5 I clears inline mode and set power to 0, M5 sets the power output to 0 but leaves inline mode on.
*/
- //#define LASER_POWER_INLINE
-
- #if ENABLED(LASER_POWER_INLINE)
- /**
- * Scale the laser's power in proportion to the movement rate.
- *
- * - Sets the entry power proportional to the entry speed over the nominal speed.
- * - Ramps the power up every N steps to approximate the speed trapezoid.
- * - Due to the limited power resolution this is only approximate.
- */
- #define LASER_POWER_INLINE_TRAPEZOID
-
- /**
- * Continuously calculate the current power (nominal_power * current_rate / nominal_rate).
- * Required for accurate power with non-trapezoidal acceleration (e.g., S_CURVE_ACCELERATION).
- * This is a costly calculation so this option is discouraged on 8-bit AVR boards.
- *
- * LASER_POWER_INLINE_TRAPEZOID_CONT_PER defines how many step cycles there are between power updates. If your
- * board isn't able to generate steps fast enough (and you are using LASER_POWER_INLINE_TRAPEZOID_CONT), increase this.
- * Note that when this is zero it means it occurs every cycle; 1 means a delay wait one cycle then run, etc.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT
-
- /**
- * Stepper iterations between power updates. Increase this value if the board
- * can't keep up with the processing demands of LASER_POWER_INLINE_TRAPEZOID_CONT.
- * Disable (or set to 0) to recalculate power on every stepper iteration.
- */
- //#define LASER_POWER_INLINE_TRAPEZOID_CONT_PER 10
-
- /**
- * Include laser power in G0/G1/G2/G3/G5 commands with the 'S' parameter
- */
- //#define LASER_MOVE_POWER
-
- #if ENABLED(LASER_MOVE_POWER)
- // Turn off the laser on G0 moves with no power parameter.
- // If a power parameter is provided, use that instead.
- //#define LASER_MOVE_G0_OFF
- // Turn off the laser on G28 homing.
- //#define LASER_MOVE_G28_OFF
- #endif
-
- /**
- * Inline flag inverted
- *
- * WARNING: M5 will NOT turn off the laser unless another move
- * is done (so G-code files must end with 'M5 I').
- */
- //#define LASER_POWER_INLINE_INVERT
-
- /**
- * Continuously apply inline power. ('M3 S3' == 'G1 S3' == 'M3 S3 I')
- *
- * The laser might do some weird things, so only enable this
- * feature if you understand the implications.
- */
- //#define LASER_POWER_INLINE_CONTINUOUS
-
- #else
-
- #define SPINDLE_LASER_POWERUP_DELAY 50 // (ms) Delay to allow the spindle/laser to come up to speed/power
- #define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
+ /**
+ * Enable M3 commands for laser mode inline power planner syncing.
+ * This feature enables any M3 S-value to be injected into the block buffers while in
+ * CUTTER_MODE_CONTINUOUS. The option allows M3 laser power to be commited without waiting
+ * for a planner syncronization
+ */
+ //#define LASER_POWER_SYNC
- #endif
+ /**
+ * Scale the laser's power in proportion to the movement rate.
+ *
+ * - Sets the entry power proportional to the entry speed over the nominal speed.
+ * - Ramps the power up every N steps to approximate the speed trapezoid.
+ * - Due to the limited power resolution this is only approximate.
+ */
+ //#define LASER_POWER_TRAP
//
// Laser I2C Ammeter (High precision INA226 low/high side module)