Merge pull request #4933 from thinkyhead/rc_drop_pid_func_range

Squashed - Removal of PID functional range
This commit is contained in:
Scott Lahteine
2016-10-07 15:07:55 -05:00
committed by GitHub
24 changed files with 40 additions and 96 deletions

View File

@ -137,7 +137,6 @@ volatile bool Temperature::temp_meas_ready = false;
#endif
float Temperature::pid_error[HOTENDS];
bool Temperature::pid_reset[HOTENDS];
#endif
#if ENABLED(PIDTEMPBED)
@ -195,7 +194,6 @@ uint8_t Temperature::soft_pwm[HOTENDS];
#endif
#if HAS_PID_HEATING
void Temperature::PID_autotune(float temp, int hotend, int ncycles, bool set_result/*=false*/) {
float input = 0.0;
int cycles = 0;
@ -236,13 +234,13 @@ uint8_t Temperature::soft_pwm[HOTENDS];
#if HAS_PID_FOR_BOTH
if (hotend < 0)
soft_pwm_bed = bias = d = (MAX_BED_POWER) / 2;
soft_pwm_bed = bias = d = (MAX_BED_POWER) >> 1;
else
soft_pwm[hotend] = bias = d = (PID_MAX) / 2;
soft_pwm[hotend] = bias = d = (PID_MAX) >> 1;
#elif ENABLED(PIDTEMP)
soft_pwm[hotend] = bias = d = (PID_MAX) / 2;
soft_pwm[hotend] = bias = d = (PID_MAX) >> 1;
#else
soft_pwm_bed = bias = d = (MAX_BED_POWER) / 2;
soft_pwm_bed = bias = d = (MAX_BED_POWER) >> 1;
#endif
wait_for_heatup = true;
@ -452,7 +450,6 @@ int Temperature::getHeaterPower(int heater) {
}
#if HAS_AUTO_FAN
void Temperature::checkExtruderAutoFans() {
const int8_t fanPin[] = { EXTRUDER_0_AUTO_FAN_PIN, EXTRUDER_1_AUTO_FAN_PIN, EXTRUDER_2_AUTO_FAN_PIN, EXTRUDER_3_AUTO_FAN_PIN };
const int fanBit[] = {
@ -535,23 +532,17 @@ float Temperature::get_pid_output(int e) {
#endif
float pid_output;
#if ENABLED(PIDTEMP)
#if DISABLED(PID_OPENLOOP)
#if ENABLED(PID_OPENLOOP)
pid_output = constrain(target_temperature[HOTEND_INDEX], 0, PID_MAX);
#else
pid_error[HOTEND_INDEX] = target_temperature[HOTEND_INDEX] - current_temperature[HOTEND_INDEX];
dTerm[HOTEND_INDEX] = K2 * PID_PARAM(Kd, HOTEND_INDEX) * (current_temperature[HOTEND_INDEX] - temp_dState[HOTEND_INDEX]) + K1 * dTerm[HOTEND_INDEX];
temp_dState[HOTEND_INDEX] = current_temperature[HOTEND_INDEX];
if (pid_error[HOTEND_INDEX] > PID_FUNCTIONAL_RANGE) {
pid_output = BANG_MAX;
pid_reset[HOTEND_INDEX] = true;
}
else if (pid_error[HOTEND_INDEX] < -(PID_FUNCTIONAL_RANGE) || target_temperature[HOTEND_INDEX] == 0) {
if (target_temperature[HOTEND_INDEX] == 0) {
pid_output = 0;
pid_reset[HOTEND_INDEX] = true;
temp_iState[HOTEND_INDEX] = 0.0;
}
else {
if (pid_reset[HOTEND_INDEX]) {
temp_iState[HOTEND_INDEX] = 0.0;
pid_reset[HOTEND_INDEX] = false;
}
pTerm[HOTEND_INDEX] = PID_PARAM(Kp, HOTEND_INDEX) * pid_error[HOTEND_INDEX];
temp_iState[HOTEND_INDEX] += pid_error[HOTEND_INDEX];
iTerm[HOTEND_INDEX] = PID_PARAM(Ki, HOTEND_INDEX) * temp_iState[HOTEND_INDEX];
@ -584,8 +575,6 @@ float Temperature::get_pid_output(int e) {
pid_output = 0;
}
}
#else
pid_output = constrain(target_temperature[HOTEND_INDEX], 0, PID_MAX);
#endif //PID_OPENLOOP
#if ENABLED(PID_DEBUG)
@ -975,7 +964,7 @@ void Temperature::init() {
setPwmFrequency(FAN_PIN, 1); // No prescaling. Pwm frequency = F_CPU/256/8
#endif
#if ENABLED(FAN_SOFT_PWM)
soft_pwm_fan[0] = fanSpeedSoftPwm[0] / 2;
soft_pwm_fan[0] = fanSpeedSoftPwm[0] >> 1;
#endif
#endif
@ -985,7 +974,7 @@ void Temperature::init() {
setPwmFrequency(FAN1_PIN, 1); // No prescaling. Pwm frequency = F_CPU/256/8
#endif
#if ENABLED(FAN_SOFT_PWM)
soft_pwm_fan[1] = fanSpeedSoftPwm[1] / 2;
soft_pwm_fan[1] = fanSpeedSoftPwm[1] >> 1;
#endif
#endif
@ -995,7 +984,7 @@ void Temperature::init() {
setPwmFrequency(FAN2_PIN, 1); // No prescaling. Pwm frequency = F_CPU/256/8
#endif
#if ENABLED(FAN_SOFT_PWM)
soft_pwm_fan[2] = fanSpeedSoftPwm[2] / 2;
soft_pwm_fan[2] = fanSpeedSoftPwm[2] >> 1;
#endif
#endif
@ -1455,15 +1444,15 @@ void Temperature::isr() {
#if ENABLED(FAN_SOFT_PWM)
#if HAS_FAN0
soft_pwm_fan[0] = fanSpeedSoftPwm[0] / 2;
soft_pwm_fan[0] = fanSpeedSoftPwm[0] >> 1;
WRITE_FAN(soft_pwm_fan[0] > 0 ? 1 : 0);
#endif
#if HAS_FAN1
soft_pwm_fan[1] = fanSpeedSoftPwm[1] / 2;
soft_pwm_fan[1] = fanSpeedSoftPwm[1] >> 1;
WRITE_FAN1(soft_pwm_fan[1] > 0 ? 1 : 0);
#endif
#if HAS_FAN2
soft_pwm_fan[2] = fanSpeedSoftPwm[2] / 2;
soft_pwm_fan[2] = fanSpeedSoftPwm[2] >> 1;
WRITE_FAN2(soft_pwm_fan[2] > 0 ? 1 : 0);
#endif
#endif
@ -1574,15 +1563,15 @@ void Temperature::isr() {
#if ENABLED(FAN_SOFT_PWM)
if (pwm_count == 0) {
#if HAS_FAN0
soft_pwm_fan[0] = fanSpeedSoftPwm[0] / 2;
soft_pwm_fan[0] = fanSpeedSoftPwm[0] >> 1;
WRITE_FAN(soft_pwm_fan[0] > 0 ? 1 : 0);
#endif
#if HAS_FAN1
soft_pwm_fan[1] = fanSpeedSoftPwm[1] / 2;
soft_pwm_fan[1] = fanSpeedSoftPwm[1] >> 1;
WRITE_FAN1(soft_pwm_fan[1] > 0 ? 1 : 0);
#endif
#if HAS_FAN2
soft_pwm_fan[2] = fanSpeedSoftPwm[2] / 2;
soft_pwm_fan[2] = fanSpeedSoftPwm[2] >> 1;
WRITE_FAN2(soft_pwm_fan[2] > 0 ? 1 : 0);
#endif
}