* Added M303 thermal runaway protection
Currently, thermal runaway protection is not available during M303.
Therefore, if someone plugs the thermistors in incorrectly and goes to
autotune their printer, the printer temperature could runaway and damage
could occur.
* Replace removed line, clarifying its logic
* Fixed M303 thermal protection
The temperature sanity checking logic was not being applied during M303
(pid autotuning) because instead of setting a target temperature, it
directly manipulated the pwm values. When PIDTEMP/PIDTEMPBED is
enabled, PWM values rather than the target temperature determine whether
the heater is on. I changed this to look directly at the PWM amount
when pid is enabled.
* Turn off heaters on M303 error
Currently, PID autotuning stops if it overshoots the temperature by 20C
or if if the temperature does not change for 20 minutes and it times
out. I added calls to disable the heaters in these scenarios.
* Removed unnecessary if statement.
Added changes suggested by GMagician.
* Update temperature.cpp
* Update temperature.cpp
* Update temperature.cpp
* Unify M600 and M125 pause features
* Cleanup per thinkyhead's comments
* Rename filament_change_menu_response to advanced_pause_menu_response
* Include HAS_BED_PROBE in QUIET_PROBING
* Update gMax example file
* is_idle() is out of scope without the braces
* Convert FT-i3-2020 to Advance Pause names...
* Allow pause even if not printing
- rename to PROBING_HEATERS_OFF
- move heater pausing functionality into thermalManager
- add variables, pause(), ispaused(), other functions
- add fan pausing functionality -> PROBING_FANS_OFF
- add probing_pause() wrapper
- move pausing into do_homing_move() and do_probe_move() to minimize quiet time and so other probe types can benefit
- example configs
After wraparound, pwm_count <= pwm_mask holds, thus soft_pwm_X <= pwm_count
guarantees soft_pwm_X < pwm_mask is true, and the heater will be switched
off in the first branch.
Do not evaluate the pwm conditions a second time, this reduces the
instruction count (4 instructions per PWM) and text size (6 byte).
Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
The compiler is not able to reuse the value of pwm_count, but reloads it
on every evaluation, if is stored in a static variable, as it cannot prove
it will be unchanged. A variable with local scope may not be modified from
the outside, so its value can be reused.
Doing so reduces text size and instruction count.
Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
If dithering is enabled, the remainder of the soft_pwm_X duty value at
turnoff time is added to the next cycle. If e.g. the duty is set to 9 and
SCALE is set to 2, the PWM will be active for 8 counts for 3 cycles and
12 counts on each fourth cycle, i.e. the average is 9 cycles.
This compensates the resolution loss at higher scales and allows running
fans with SOFT_PWM with significantly reduced noise.
Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>
A 128 step PWM has 127 intervals (0/127 ... 127/127 duty). Currently, a
PWM setting of 1/127 is active for 2/128, i.e. double the expected time,
or, in general n+1/128 instead of n/127.
Fixes issue#6003.
Signed-off-by: Stefan Brüns <stefan.bruens@rwth-aachen.de>