[2.0.x] Fix_Autotune_THERMAL_PROTECTION_BED_off (#10166)
- Fix Autotune Thermal Protection - Make 2 constants in autotune configurable
This commit is contained in:
		
							parent
							
								
									785dbfc72d
								
							
						
					
					
						commit
						837ac2fdbd
					
				| @ -409,7 +409,9 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS], | |||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|       // Did the temperature overshoot very far?
 |       // Did the temperature overshoot very far?
 | ||||||
|       #define MAX_OVERSHOOT_PID_AUTOTUNE 20 |       #ifndef MAX_OVERSHOOT_PID_AUTOTUNE | ||||||
|  |         #define MAX_OVERSHOOT_PID_AUTOTUNE 20 | ||||||
|  |       #endif | ||||||
|       if (current > target + MAX_OVERSHOOT_PID_AUTOTUNE) { |       if (current > target + MAX_OVERSHOOT_PID_AUTOTUNE) { | ||||||
|         SERIAL_PROTOCOLLNPGM(MSG_PID_TEMP_TOO_HIGH); |         SERIAL_PROTOCOLLNPGM(MSG_PID_TEMP_TOO_HIGH); | ||||||
|         break; |         break; | ||||||
| @ -425,24 +427,37 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS], | |||||||
| 
 | 
 | ||||||
|         // Make sure heating is actually working
 |         // Make sure heating is actually working
 | ||||||
|         #if WATCH_THE_BED || WATCH_HOTENDS |         #if WATCH_THE_BED || WATCH_HOTENDS | ||||||
|           if (!heated) {                                          // If not yet reached target...
 |           if ( | ||||||
|             if (current > next_watch_temp) {                      // Over the watch temp?
 |             #if WATCH_THE_BED && WATCH_HOTENDS | ||||||
|               next_watch_temp = current + watch_temp_increase;    // - set the next temp to watch for
 |               true | ||||||
|               temp_change_ms = ms + watch_temp_period * 1000UL;   // - move the expiration timer up
 |             #elif WATCH_THE_BED | ||||||
|               if (current > watch_temp_target) heated = true;     // - Flag if target temperature reached
 |               hotend < 0 | ||||||
|  |             #else | ||||||
|  |               hotend >= 0 | ||||||
|  |             #endif | ||||||
|  |           ) { | ||||||
|  |             if (!heated) {                                          // If not yet reached target...
 | ||||||
|  |               if (current > next_watch_temp) {                      // Over the watch temp?
 | ||||||
|  |                 next_watch_temp = current + watch_temp_increase;    // - set the next temp to watch for
 | ||||||
|  |                 temp_change_ms = ms + watch_temp_period * 1000UL;   // - move the expiration timer up
 | ||||||
|  |                 if (current > watch_temp_target) heated = true;     // - Flag if target temperature reached
 | ||||||
|  |               } | ||||||
|  |               else if (ELAPSED(ms, temp_change_ms))                 // Watch timer expired
 | ||||||
|  |                 _temp_error(hotend, PSTR(MSG_T_HEATING_FAILED), PSTR(MSG_HEATING_FAILED_LCD)); | ||||||
|             } |             } | ||||||
|             else if (ELAPSED(ms, temp_change_ms))                 // Watch timer expired
 |             else if (current < target - (MAX_OVERSHOOT_PID_AUTOTUNE)) // Heated, then temperature fell too far?
 | ||||||
|               _temp_error(hotend, PSTR(MSG_T_HEATING_FAILED), PSTR(MSG_HEATING_FAILED_LCD)); |               _temp_error(hotend, PSTR(MSG_T_THERMAL_RUNAWAY), | ||||||
|  |                 hotend >= 0 ? PSTR(MSG_THERMAL_RUNAWAY) : PSTR(MSG_THERMAL_RUNAWAY_BED) | ||||||
|  |               ); | ||||||
|           } |           } | ||||||
|           else if (current < target - (MAX_OVERSHOOT_PID_AUTOTUNE)) // Heated, then temperature fell too far?
 |  | ||||||
|             _temp_error(hotend, PSTR(MSG_T_THERMAL_RUNAWAY), |  | ||||||
|               hotend >= 0 ? PSTR(MSG_THERMAL_RUNAWAY) : PSTR(MSG_THERMAL_RUNAWAY_BED) |  | ||||||
|             ); |  | ||||||
|         #endif |         #endif | ||||||
|       } // every 2 seconds
 |       } // every 2 seconds
 | ||||||
| 
 | 
 | ||||||
|       // Timeout after 20 minutes since the last undershoot/overshoot cycle
 |       // Timeout after MAX_CYCLE_TIME_PID_AUTOTUNE minutes since the last undershoot/overshoot cycle
 | ||||||
|       if (((ms - t1) + (ms - t2)) > (20L * 60L * 1000L)) { |       #ifndef MAX_CYCLE_TIME_PID_AUTOTUNE | ||||||
|  |         #define MAX_CYCLE_TIME_PID_AUTOTUNE 20L | ||||||
|  |       #endif | ||||||
|  |       if (((ms - t1) + (ms - t2)) > (MAX_CYCLE_TIME_PID_AUTOTUNE * 60L * 1000L)) { | ||||||
|         SERIAL_PROTOCOLLNPGM(MSG_PID_TIMEOUT); |         SERIAL_PROTOCOLLNPGM(MSG_PID_TIMEOUT); | ||||||
|         break; |         break; | ||||||
|       } |       } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user