BigTreeTech GTR V1.0 / Support 8 extruders, heaters, temp sensors, fans (#16595)

This commit is contained in:
yangwenxiong
2020-01-25 16:13:39 +08:00
committed by Scott Lahteine
parent 0d166f9c7d
commit 248b7dfa59
66 changed files with 2086 additions and 217 deletions

View File

@ -303,9 +303,11 @@ volatile bool Temperature::temp_meas_ready = false;
sensor_heater_2 { HEATER_2_RAW_LO_TEMP, HEATER_2_RAW_HI_TEMP, 0, 16383 },
sensor_heater_3 { HEATER_3_RAW_LO_TEMP, HEATER_3_RAW_HI_TEMP, 0, 16383 },
sensor_heater_4 { HEATER_4_RAW_LO_TEMP, HEATER_4_RAW_HI_TEMP, 0, 16383 },
sensor_heater_5 { HEATER_5_RAW_LO_TEMP, HEATER_5_RAW_HI_TEMP, 0, 16383 };
sensor_heater_5 { HEATER_5_RAW_LO_TEMP, HEATER_5_RAW_HI_TEMP, 0, 16383 },
sensor_heater_6 { HEATER_6_RAW_LO_TEMP, HEATER_6_RAW_HI_TEMP, 0, 16383 },
sensor_heater_7 { HEATER_7_RAW_LO_TEMP, HEATER_7_RAW_HI_TEMP, 0, 16383 };
temp_range_t Temperature::temp_range[HOTENDS] = ARRAY_BY_HOTENDS(sensor_heater_0, sensor_heater_1, sensor_heater_2, sensor_heater_3, sensor_heater_4, sensor_heater_5);
temp_range_t Temperature::temp_range[HOTENDS] = ARRAY_BY_HOTENDS(sensor_heater_0, sensor_heater_1, sensor_heater_2, sensor_heater_3, sensor_heater_4, sensor_heater_5, sensor_heater_6, sensor_heater_7);
#endif
#ifdef MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED
@ -686,6 +688,12 @@ int16_t Temperature::getHeaterPower(const heater_ind_t heater_id) {
, REPEAT2(4,_EFAN,4) 4
#if HOTENDS > 5
, REPEAT2(5,_EFAN,5) 5
#if HOTENDS > 6
, REPEAT2(6,_EFAN,6) 6
#if HOTENDS > 7
, REPEAT2(7,_EFAN,7) 7
#endif
#endif
#endif
#endif
#endif
@ -751,6 +759,12 @@ int16_t Temperature::getHeaterPower(const heater_ind_t heater_id) {
#if HAS_AUTO_FAN_5
case 5: _UPDATE_AUTO_FAN(E5, fan_on, EXTRUDER_AUTO_FAN_SPEED); break;
#endif
#if HAS_AUTO_FAN_6
case 6: _UPDATE_AUTO_FAN(E6, fan_on, EXTRUDER_AUTO_FAN_SPEED); break;
#endif
#if HAS_AUTO_FAN_7
case 7: _UPDATE_AUTO_FAN(E7, fan_on, EXTRUDER_AUTO_FAN_SPEED); break;
#endif
#if HAS_AUTO_CHAMBER_FAN && !AUTO_CHAMBER_IS_E
case CHAMBER_FAN_INDEX: _UPDATE_AUTO_FAN(CHAMBER, fan_on, CHAMBER_AUTO_FAN_SPEED); break;
#endif
@ -893,7 +907,6 @@ void Temperature::min_temp_error(const heater_ind_t heater) {
pid_output += work_pid[ee].Kc;
}
#endif // PID_EXTRUSION_SCALING
#if ENABLED(PID_FAN_SCALING)
if (thermalManager.fan_speed[active_extruder] > PID_FAN_SCALING_MIN_SPEED) {
work_pid[ee].Kf = PID_PARAM(Kf, ee) + (PID_FAN_SCALING_LIN_FACTOR) * thermalManager.fan_speed[active_extruder];
@ -902,7 +915,6 @@ void Temperature::min_temp_error(const heater_ind_t heater) {
//pid_output -= work_pid[ee].Ki;
//pid_output += work_pid[ee].Ki * work_pid[ee].Kf
#endif // PID_FAN_SCALING
LIMIT(pid_output, 0, PID_MAX);
}
temp_dState[ee] = temp_hotend[ee].celsius;
@ -1286,6 +1298,12 @@ void Temperature::manage_heater() {
#if ENABLED(HEATER_5_USER_THERMISTOR)
{ true, 0, 0, HOTEND5_PULLUP_RESISTOR_OHMS, HOTEND5_RESISTANCE_25C_OHMS, 0, 0, HOTEND5_BETA, 0 },
#endif
#if ENABLED(HEATER_6_USER_THERMISTOR)
{ true, 0, 0, HOTEND6_PULLUP_RESISTOR_OHMS, HOTEND6_RESISTANCE_25C_OHMS, 0, 0, HOTEND6_BETA, 0 },
#endif
#if ENABLED(HEATER_7_USER_THERMISTOR)
{ true, 0, 0, HOTEND7_PULLUP_RESISTOR_OHMS, HOTEND7_RESISTANCE_25C_OHMS, 0, 0, HOTEND7_BETA, 0 },
#endif
#if ENABLED(HEATER_BED_USER_THERMISTOR)
{ true, 0, 0, BED_PULLUP_RESISTOR_OHMS, BED_RESISTANCE_25C_OHMS, 0, 0, BED_BETA, 0 },
#endif
@ -1331,6 +1349,12 @@ void Temperature::manage_heater() {
#if ENABLED(HEATER_5_USER_THERMISTOR)
t_index == CTI_HOTEND_5 ? PSTR("HOTEND 5") :
#endif
#if ENABLED(HEATER_6_USER_THERMISTOR)
t_index == CTI_HOTEND_6 ? PSTR("HOTEND 6") :
#endif
#if ENABLED(HEATER_7_USER_THERMISTOR)
t_index == CTI_HOTEND_7 ? PSTR("HOTEND 7") :
#endif
#if ENABLED(HEATER_BED_USER_THERMISTOR)
t_index == CTI_BED ? PSTR("BED") :
#endif
@ -1476,6 +1500,26 @@ void Temperature::manage_heater() {
#else
break;
#endif
case 6:
#if ENABLED(HEATER_6_USER_THERMISTOR)
return user_thermistor_to_deg_c(CTI_HOTEND_6, raw);
#elif ENABLED(HEATER_6_USES_AD595)
return TEMP_AD595(raw);
#elif ENABLED(HEATER_6_USES_AD8495)
return TEMP_AD8495(raw);
#else
break;
#endif
case 7:
#if ENABLED(HEATER_7_USER_THERMISTOR)
return user_thermistor_to_deg_c(CTI_HOTEND_7, raw);
#elif ENABLED(HEATER_7_USES_AD595)
return TEMP_AD595(raw);
#elif ENABLED(HEATER_7_USES_AD8495)
return TEMP_AD8495(raw);
#else
break;
#endif
default: break;
}
@ -1633,8 +1677,9 @@ void Temperature::init() {
#endif
#if MB(RUMBA)
#define _AD(N) (ANY(HEATER_##N##_USES_AD595, HEATER_##N##_USES_AD8495))
#if _AD(0) || _AD(1) || _AD(2) || _AD(3) || _AD(4) || _AD(5) || _AD(BED) || _AD(CHAMBER)
#define _AD(N) ANY(HEATER_##N##_USES_AD595, HEATER_##N##_USES_AD8495)
#if _AD(0) || _AD(1) || _AD(2) /* RUMBA has 3 E plugs // || _AD(3) || _AD(4) || _AD(5) || _AD(6) || _AD(7) */ \
|| _AD(BED) || _AD(CHAMBER)
// Disable RUMBA JTAG in case the thermocouple extension is plugged on top of JTAG connector
MCUCR = _BV(JTD);
MCUCR = _BV(JTD);
@ -1668,6 +1713,12 @@ void Temperature::init() {
#if HAS_HEATER_5
OUT_WRITE(HEATER_5_PIN, HEATER_5_INVERTING);
#endif
#if HAS_HEATER_6
OUT_WRITE(HEATER_6_PIN, HEATER_6_INVERTING);
#endif
#if HAS_HEATER_7
OUT_WRITE(HEATER_7_PIN, HEATER_7_INVERTING);
#endif
#if HAS_HEATED_BED
#ifdef ALFAWISE_UX0
@ -1690,6 +1741,21 @@ void Temperature::init() {
#if HAS_FAN2
INIT_FAN_PIN(FAN2_PIN);
#endif
#if HAS_FAN3
INIT_FAN_PIN(FAN3_PIN);
#endif
#if HAS_FAN4
INIT_FAN_PIN(FAN4_PIN);
#endif
#if HAS_FAN5
INIT_FAN_PIN(FAN5_PIN);
#endif
#if HAS_FAN6
INIT_FAN_PIN(FAN6_PIN);
#endif
#if HAS_FAN7
INIT_FAN_PIN(FAN7_PIN);
#endif
#if ENABLED(USE_CONTROLLER_FAN)
INIT_FAN_PIN(CONTROLLER_FAN_PIN);
#endif
@ -1731,6 +1797,12 @@ void Temperature::init() {
#if HAS_TEMP_ADC_5
HAL_ANALOG_SELECT(TEMP_5_PIN);
#endif
#if HAS_TEMP_ADC_6
HAL_ANALOG_SELECT(TEMP_6_PIN);
#endif
#if HAS_TEMP_ADC_7
HAL_ANALOG_SELECT(TEMP_7_PIN);
#endif
#if HAS_JOY_ADC_X
HAL_ANALOG_SELECT(JOY_X_PIN);
#endif
@ -1780,6 +1852,12 @@ void Temperature::init() {
#if HAS_AUTO_FAN_5 && !(_EFANOVERLAP(5,0) || _EFANOVERLAP(5,1) || _EFANOVERLAP(5,2) || _EFANOVERLAP(5,3) || _EFANOVERLAP(5,4))
INIT_E_AUTO_FAN_PIN(E5_AUTO_FAN_PIN);
#endif
#if HAS_AUTO_FAN_6 && !(_EFANOVERLAP(6,0) || _EFANOVERLAP(6,1) || _EFANOVERLAP(6,2) || _EFANOVERLAP(6,3) || _EFANOVERLAP(6,4) || _EFANOVERLAP(6,5))
INIT_E_AUTO_FAN_PIN(E6_AUTO_FAN_PIN);
#endif
#if HAS_AUTO_FAN_7 && !(_EFANOVERLAP(7,0) || _EFANOVERLAP(7,1) || _EFANOVERLAP(7,2) || _EFANOVERLAP(7,3) || _EFANOVERLAP(7,4) || _EFANOVERLAP(7,5) || _EFANOVERLAP(7,6))
INIT_E_AUTO_FAN_PIN(E7_AUTO_FAN_PIN);
#endif
#if HAS_AUTO_CHAMBER_FAN && !AUTO_CHAMBER_IS_E
INIT_CHAMBER_AUTO_FAN_PIN(CHAMBER_AUTO_FAN_PIN);
#endif
@ -1841,6 +1919,22 @@ void Temperature::init() {
#ifdef HEATER_5_MAXTEMP
_TEMP_MAX_E(5);
#endif
#if HOTENDS > 6
#ifdef HEATER_6_MINTEMP
_TEMP_MIN_E(6);
#endif
#ifdef HEATER_6_MAXTEMP
_TEMP_MAX_E(6);
#endif
#if HOTENDS > 7
#ifdef HEATER_7_MINTEMP
_TEMP_MIN_E(7);
#endif
#ifdef HEATER_7_MAXTEMP
_TEMP_MAX_E(7);
#endif
#endif // HOTENDS > 7
#endif // HOTENDS > 6
#endif // HOTENDS > 5
#endif // HOTENDS > 4
#endif // HOTENDS > 3
@ -2232,6 +2326,12 @@ void Temperature::set_current_temp_raw() {
temp_hotend[4].update();
#if HAS_TEMP_ADC_5
temp_hotend[5].update();
#if HAS_TEMP_ADC_6
temp_hotend[6].update();
#if HAS_TEMP_ADC_7
temp_hotend[7].update();
#endif // HAS_TEMP_ADC_7
#endif // HAS_TEMP_ADC_6
#endif // HAS_TEMP_ADC_5
#endif // HAS_TEMP_ADC_4
#endif // HAS_TEMP_ADC_3
@ -2508,6 +2608,21 @@ void Temperature::tick() {
#if HAS_FAN2
_FAN_PWM(2);
#endif
#if HAS_FAN3
_FAN_PWM(3);
#endif
#if HAS_FAN4
_FAN_PWM(4);
#endif
#if HAS_FAN5
_FAN_PWM(5);
#endif
#if HAS_FAN6
_FAN_PWM(6);
#endif
#if HAS_FAN7
_FAN_PWM(7);
#endif
#endif
}
else {
@ -2535,6 +2650,21 @@ void Temperature::tick() {
#if HAS_FAN2
if (soft_pwm_count_fan[2] <= pwm_count_tmp) WRITE_FAN(2, LOW);
#endif
#if HAS_FAN3
if (soft_pwm_count_fan[3] <= pwm_count_tmp) WRITE_FAN(3, LOW);
#endif
#if HAS_FAN4
if (soft_pwm_count_fan[4] <= pwm_count_tmp) WRITE_FAN(4, LOW);
#endif
#if HAS_FAN5
if (soft_pwm_count_fan[5] <= pwm_count_tmp) WRITE_FAN(5, LOW);
#endif
#if HAS_FAN6
if (soft_pwm_count_fan[6] <= pwm_count_tmp) WRITE_FAN(6, LOW);
#endif
#if HAS_FAN7
if (soft_pwm_count_fan[7] <= pwm_count_tmp) WRITE_FAN(7, LOW);
#endif
#endif
}
@ -2599,6 +2729,21 @@ void Temperature::tick() {
#if HAS_FAN2
_PWM_FAN(2);
#endif
#if HAS_FAN3
_FAN_PWM(3);
#endif
#if HAS_FAN4
_FAN_PWM(4);
#endif
#if HAS_FAN5
_FAN_PWM(5);
#endif
#if HAS_FAN6
_FAN_PWM(6);
#endif
#if HAS_FAN7
_FAN_PWM(7);
#endif
}
#if HAS_FAN0
if (soft_pwm_count_fan[0] <= pwm_count_tmp) WRITE_FAN(0, LOW);
@ -2609,6 +2754,21 @@ void Temperature::tick() {
#if HAS_FAN2
if (soft_pwm_count_fan[2] <= pwm_count_tmp) WRITE_FAN(2, LOW);
#endif
#if HAS_FAN3
if (soft_pwm_count_fan[3] <= pwm_count_tmp) WRITE_FAN(3, LOW);
#endif
#if HAS_FAN4
if (soft_pwm_count_fan[4] <= pwm_count_tmp) WRITE_FAN(4, LOW);
#endif
#if HAS_FAN5
if (soft_pwm_count_fan[5] <= pwm_count_tmp) WRITE_FAN(5, LOW);
#endif
#if HAS_FAN6
if (soft_pwm_count_fan[6] <= pwm_count_tmp) WRITE_FAN(6, LOW);
#endif
#if HAS_FAN7
if (soft_pwm_count_fan[7] <= pwm_count_tmp) WRITE_FAN(7, LOW);
#endif
#endif // FAN_SOFT_PWM
// SOFT_PWM_SCALE to frequency:
@ -2730,6 +2890,16 @@ void Temperature::tick() {
case MeasureTemp_5: ACCUMULATE_ADC(temp_hotend[5]); break;
#endif
#if HAS_TEMP_ADC_6
case PrepareTemp_6: HAL_START_ADC(TEMP_6_PIN); break;
case MeasureTemp_6: ACCUMULATE_ADC(temp_hotend[6]); break;
#endif
#if HAS_TEMP_ADC_7
case PrepareTemp_7: HAL_START_ADC(TEMP_7_PIN); break;
case MeasureTemp_7: ACCUMULATE_ADC(temp_hotend[7]); break;
#endif
#if ENABLED(FILAMENT_WIDTH_SENSOR)
case Prepare_FILWIDTH: HAL_START_ADC(FILWIDTH_PIN); break;
case Measure_FILWIDTH: