Fixes and improvements for PWM pins (#13383)
This commit is contained in:
@ -886,7 +886,7 @@ void Endstops::update() {
|
||||
ES_REPORT_CHANGE(Z3_MAX);
|
||||
#endif
|
||||
SERIAL_ECHOLNPGM("\n");
|
||||
analogWrite(LED_PIN, local_LED_status);
|
||||
ANALOG_WRITE(LED_PIN, local_LED_status);
|
||||
local_LED_status ^= 255;
|
||||
old_live_state_local = live_state_local;
|
||||
}
|
||||
|
@ -1290,13 +1290,13 @@ void Planner::check_axes_activity() {
|
||||
#else
|
||||
|
||||
#if HAS_FAN0
|
||||
analogWrite(FAN_PIN, CALC_FAN_SPEED(0));
|
||||
ANALOG_WRITE(FAN_PIN, CALC_FAN_SPEED(0));
|
||||
#endif
|
||||
#if HAS_FAN1
|
||||
analogWrite(FAN1_PIN, CALC_FAN_SPEED(1));
|
||||
ANALOG_WRITE(FAN1_PIN, CALC_FAN_SPEED(1));
|
||||
#endif
|
||||
#if HAS_FAN2
|
||||
analogWrite(FAN2_PIN, CALC_FAN_SPEED(2));
|
||||
ANALOG_WRITE(FAN2_PIN, CALC_FAN_SPEED(2));
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@ -1308,10 +1308,10 @@ void Planner::check_axes_activity() {
|
||||
|
||||
#if ENABLED(BARICUDA)
|
||||
#if HAS_HEATER_1
|
||||
analogWrite(HEATER_1_PIN, tail_valve_pressure);
|
||||
ANALOG_WRITE(HEATER_1_PIN, tail_valve_pressure);
|
||||
#endif
|
||||
#if HAS_HEATER_2
|
||||
analogWrite(HEATER_2_PIN, tail_e_to_p_pressure);
|
||||
ANALOG_WRITE(HEATER_2_PIN, tail_e_to_p_pressure);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
@ -2510,7 +2510,7 @@ void Stepper::report_positions() {
|
||||
if (WITHIN(driver, 0, COUNT(motor_current_setting) - 1))
|
||||
motor_current_setting[driver] = current; // update motor_current_setting
|
||||
|
||||
#define _WRITE_CURRENT_PWM(P) analogWrite(MOTOR_CURRENT_PWM_## P ##_PIN, 255L * current / (MOTOR_CURRENT_PWM_RANGE))
|
||||
#define _WRITE_CURRENT_PWM(P) ANALOG_WRITE(MOTOR_CURRENT_PWM_## P ##_PIN, 255L * current / (MOTOR_CURRENT_PWM_RANGE))
|
||||
switch (driver) {
|
||||
case 0:
|
||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_X)
|
||||
@ -2560,25 +2560,25 @@ void Stepper::report_positions() {
|
||||
#elif HAS_MOTOR_CURRENT_PWM
|
||||
|
||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_X)
|
||||
SET_OUTPUT(MOTOR_CURRENT_PWM_X_PIN);
|
||||
SET_PWM(MOTOR_CURRENT_PWM_X_PIN);
|
||||
#endif
|
||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_Y)
|
||||
SET_OUTPUT(MOTOR_CURRENT_PWM_Y_PIN);
|
||||
SET_PWM(MOTOR_CURRENT_PWM_Y_PIN);
|
||||
#endif
|
||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_XY)
|
||||
SET_OUTPUT(MOTOR_CURRENT_PWM_XY_PIN);
|
||||
SET_PWM(MOTOR_CURRENT_PWM_XY_PIN);
|
||||
#endif
|
||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_Z)
|
||||
SET_OUTPUT(MOTOR_CURRENT_PWM_Z_PIN);
|
||||
SET_PWM(MOTOR_CURRENT_PWM_Z_PIN);
|
||||
#endif
|
||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_E)
|
||||
SET_OUTPUT(MOTOR_CURRENT_PWM_E_PIN);
|
||||
SET_PWM(MOTOR_CURRENT_PWM_E_PIN);
|
||||
#endif
|
||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_E0)
|
||||
SET_OUTPUT(MOTOR_CURRENT_PWM_E0_PIN);
|
||||
SET_PWM(MOTOR_CURRENT_PWM_E0_PIN);
|
||||
#endif
|
||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_E1)
|
||||
SET_OUTPUT(MOTOR_CURRENT_PWM_E1_PIN);
|
||||
SET_PWM(MOTOR_CURRENT_PWM_E1_PIN);
|
||||
#endif
|
||||
|
||||
refresh_motor_power();
|
||||
|
@ -610,6 +610,28 @@ int Temperature::getHeaterPower(const int heater) {
|
||||
|
||||
#if HAS_AUTO_FAN
|
||||
|
||||
#define AUTO_1_IS_0 (E1_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
|
||||
#define AUTO_2_IS_0 (E2_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
|
||||
#define AUTO_2_IS_1 (E2_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
|
||||
#define AUTO_3_IS_0 (E3_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
|
||||
#define AUTO_3_IS_1 (E3_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
|
||||
#define AUTO_3_IS_2 (E3_AUTO_FAN_PIN == E2_AUTO_FAN_PIN)
|
||||
#define AUTO_4_IS_0 (E4_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
|
||||
#define AUTO_4_IS_1 (E4_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
|
||||
#define AUTO_4_IS_2 (E4_AUTO_FAN_PIN == E2_AUTO_FAN_PIN)
|
||||
#define AUTO_4_IS_3 (E4_AUTO_FAN_PIN == E3_AUTO_FAN_PIN)
|
||||
#define AUTO_5_IS_0 (E5_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
|
||||
#define AUTO_5_IS_1 (E5_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
|
||||
#define AUTO_5_IS_2 (E5_AUTO_FAN_PIN == E2_AUTO_FAN_PIN)
|
||||
#define AUTO_5_IS_3 (E5_AUTO_FAN_PIN == E3_AUTO_FAN_PIN)
|
||||
#define AUTO_5_IS_4 (E5_AUTO_FAN_PIN == E4_AUTO_FAN_PIN)
|
||||
#define AUTO_CHAMBER_IS_0 (CHAMBER_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
|
||||
#define AUTO_CHAMBER_IS_1 (CHAMBER_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
|
||||
#define AUTO_CHAMBER_IS_2 (CHAMBER_AUTO_FAN_PIN == E2_AUTO_FAN_PIN)
|
||||
#define AUTO_CHAMBER_IS_3 (CHAMBER_AUTO_FAN_PIN == E3_AUTO_FAN_PIN)
|
||||
#define AUTO_CHAMBER_IS_4 (CHAMBER_AUTO_FAN_PIN == E4_AUTO_FAN_PIN)
|
||||
#define AUTO_CHAMBER_IS_5 (CHAMBER_AUTO_FAN_PIN == E5_AUTO_FAN_PIN)
|
||||
|
||||
void Temperature::checkExtruderAutoFans() {
|
||||
static const uint8_t fanBit[] PROGMEM = {
|
||||
0,
|
||||
@ -633,11 +655,11 @@ int Temperature::getHeaterPower(const int heater) {
|
||||
SBI(fanState, pgm_read_byte(&fanBit[6]));
|
||||
#endif
|
||||
|
||||
#define _UPDATE_AUTO_FAN(P,D,A) do{ \
|
||||
if (USEABLE_HARDWARE_PWM(P##_AUTO_FAN_PIN)) \
|
||||
analogWrite(P##_AUTO_FAN_PIN, A); \
|
||||
else \
|
||||
WRITE(P##_AUTO_FAN_PIN, D); \
|
||||
#define _UPDATE_AUTO_FAN(P,D,A) do{ \
|
||||
if (PWM_PIN(P##_AUTO_FAN_PIN) && EXTRUDER_AUTO_FAN_SPEED < 255) \
|
||||
ANALOG_WRITE(P##_AUTO_FAN_PIN, A); \
|
||||
else \
|
||||
WRITE(P##_AUTO_FAN_PIN, D); \
|
||||
}while(0)
|
||||
|
||||
uint8_t fanDone = 0;
|
||||
@ -1280,6 +1302,25 @@ void Temperature::updateTemperaturesFromRawValues() {
|
||||
SPIclass<MAX6675_DO_PIN, MOSI_PIN, MAX6675_SCK_PIN> max6675_spi;
|
||||
#endif
|
||||
|
||||
// Init fans according to whether they're native PWM or Software PWM
|
||||
#define _INIT_SOFT_FAN(P) OUT_WRITE(P, FAN_INVERTING ? LOW : HIGH)
|
||||
#if ENABLED(FAN_SOFT_PWM)
|
||||
#define _INIT_FAN_PIN(P) _INIT_SOFT_FAN(P)
|
||||
#else
|
||||
#define _INIT_FAN_PIN(P) do{ if (PWM_PIN(P)) SET_PWM(P); else _INIT_SOFT_FAN(P); }while(0)
|
||||
#endif
|
||||
#if ENABLED(FAST_PWM_FAN)
|
||||
#define SET_FAST_PWM_FREQ(P) set_pwm_frequency(P, FAST_PWM_FAN_FREQUENCY)
|
||||
#else
|
||||
#define SET_FAST_PWM_FREQ(P) NOOP
|
||||
#endif
|
||||
#define INIT_FAN_PIN(P) do{ _INIT_FAN_PIN(P); SET_FAST_PWM_FREQ(P); }while(0)
|
||||
#if EXTRUDER_AUTO_FAN_SPEED != 255
|
||||
#define INIT_AUTO_FAN_PIN(P) do{ if (P == FAN1_PIN || P == FAN2_PIN) { SET_PWM(P); SET_FAST_PWM_FREQ(FAST_PWM_FAN_FREQUENCY); } else SET_OUTPUT(P); }while(0)
|
||||
#else
|
||||
#define INIT_AUTO_FAN_PIN(P) SET_OUTPUT(P)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Initialize the temperature manager
|
||||
* The manager is implemented by periodic calls to manage_heater()
|
||||
@ -1329,32 +1370,18 @@ void Temperature::init() {
|
||||
#if HAS_HEATED_CHAMBER
|
||||
OUT_WRITE(HEATER_CHAMBER_PIN, HEATER_CHAMBER_INVERTING);
|
||||
#endif
|
||||
|
||||
#if HAS_FAN0
|
||||
SET_OUTPUT(FAN_PIN);
|
||||
#if ENABLED(FAST_PWM_FAN)
|
||||
set_pwm_frequency(FAN_PIN, FAST_PWM_FAN_FREQUENCY);
|
||||
#endif
|
||||
INIT_FAN_PIN(FAN_PIN);
|
||||
#endif
|
||||
|
||||
#if HAS_FAN1
|
||||
SET_OUTPUT(FAN1_PIN);
|
||||
#if ENABLED(FAST_PWM_FAN)
|
||||
set_pwm_frequency(FAN1_PIN, FAST_PWM_FAN_FREQUENCY);
|
||||
#endif
|
||||
INIT_FAN_PIN(FAN1_PIN);
|
||||
#endif
|
||||
|
||||
#if HAS_FAN2
|
||||
SET_OUTPUT(FAN2_PIN);
|
||||
#if ENABLED(FAST_PWM_FAN)
|
||||
set_pwm_frequency(FAN2_PIN, FAST_PWM_FAN_FREQUENCY);
|
||||
#endif
|
||||
INIT_FAN_PIN(FAN2_PIN);
|
||||
#endif
|
||||
|
||||
#if ENABLED(USE_CONTROLLER_FAN)
|
||||
SET_OUTPUT(CONTROLLER_FAN_PIN);
|
||||
#if ENABLED(FAST_PWM_FAN)
|
||||
set_pwm_frequency(CONTROLLER_FAN_PIN, FAST_PWM_FAN_FREQUENCY);
|
||||
#endif
|
||||
INIT_FAN_PIN(CONTROLLER_FAN_PIN);
|
||||
#endif
|
||||
|
||||
#if MAX6675_SEPARATE_SPI
|
||||
@ -1408,74 +1435,25 @@ void Temperature::init() {
|
||||
ENABLE_TEMPERATURE_INTERRUPT();
|
||||
|
||||
#if HAS_AUTO_FAN_0
|
||||
#if E0_AUTO_FAN_PIN == FAN1_PIN
|
||||
SET_OUTPUT(E0_AUTO_FAN_PIN);
|
||||
#if ENABLED(FAST_PWM_FAN)
|
||||
set_pwm_frequency(E0_AUTO_FAN_PIN, FAST_PWM_FAN_FREQUENCY);
|
||||
#endif
|
||||
#else
|
||||
SET_OUTPUT(E0_AUTO_FAN_PIN);
|
||||
#endif
|
||||
INIT_AUTO_FAN_PIN(E0_AUTO_FAN_PIN);
|
||||
#endif
|
||||
#if HAS_AUTO_FAN_1 && !AUTO_1_IS_0
|
||||
#if E1_AUTO_FAN_PIN == FAN1_PIN
|
||||
SET_OUTPUT(E1_AUTO_FAN_PIN);
|
||||
#if ENABLED(FAST_PWM_FAN)
|
||||
set_pwm_frequency(E1_AUTO_FAN_PIN, FAST_PWM_FAN_FREQUENCY);
|
||||
#endif
|
||||
#else
|
||||
SET_OUTPUT(E1_AUTO_FAN_PIN);
|
||||
#endif
|
||||
INIT_AUTO_FAN_PIN(E1_AUTO_FAN_PIN);
|
||||
#endif
|
||||
#if HAS_AUTO_FAN_2 && !(AUTO_2_IS_0 || AUTO_2_IS_1)
|
||||
#if E2_AUTO_FAN_PIN == FAN1_PIN
|
||||
SET_OUTPUT(E2_AUTO_FAN_PIN);
|
||||
#if ENABLED(FAST_PWM_FAN)
|
||||
set_pwm_frequency(E2_AUTO_FAN_PIN, FAST_PWM_FAN_FREQUENCY);
|
||||
#endif
|
||||
#else
|
||||
SET_OUTPUT(E2_AUTO_FAN_PIN);
|
||||
#endif
|
||||
INIT_AUTO_FAN_PIN(E2_AUTO_FAN_PIN);
|
||||
#endif
|
||||
#if HAS_AUTO_FAN_3 && !(AUTO_3_IS_0 || AUTO_3_IS_1 || AUTO_3_IS_2)
|
||||
#if E3_AUTO_FAN_PIN == FAN1_PIN
|
||||
SET_OUTPUT(E3_AUTO_FAN_PIN);
|
||||
#if ENABLED(FAST_PWM_FAN)
|
||||
set_pwm_frequency(E3_AUTO_FAN_PIN, FAST_PWM_FAN_FREQUENCY);
|
||||
#endif
|
||||
#else
|
||||
SET_OUTPUT(E3_AUTO_FAN_PIN);
|
||||
#endif
|
||||
INIT_AUTO_FAN_PIN(E3_AUTO_FAN_PIN);
|
||||
#endif
|
||||
#if HAS_AUTO_FAN_4 && !(AUTO_4_IS_0 || AUTO_4_IS_1 || AUTO_4_IS_2 || AUTO_4_IS_3)
|
||||
#if E4_AUTO_FAN_PIN == FAN1_PIN
|
||||
SET_OUTPUT(E4_AUTO_FAN_PIN);
|
||||
#if ENABLED(FAST_PWM_FAN)
|
||||
set_pwm_frequency(E4_AUTO_FAN_PIN, FAST_PWM_FAN_FREQUENCY);
|
||||
#endif
|
||||
#else
|
||||
SET_OUTPUT(E4_AUTO_FAN_PIN);
|
||||
#endif
|
||||
INIT_AUTO_FAN_PIN(E4_AUTO_FAN_PIN);
|
||||
#endif
|
||||
#if HAS_AUTO_FAN_5 && !(AUTO_5_IS_0 || AUTO_5_IS_1 || AUTO_5_IS_2 || AUTO_5_IS_3 || AUTO_5_IS_4)
|
||||
#if E5_AUTO_FAN_PIN == FAN1_PIN
|
||||
SET_OUTPUT(E5_AUTO_FAN_PIN);
|
||||
#if ENABLED(FAST_PWM_FAN)
|
||||
set_pwm_frequency(E5_AUTO_FAN_PIN, FAST_PWM_FAN_FREQUENCY);
|
||||
#endif
|
||||
#else
|
||||
SET_OUTPUT(E5_AUTO_FAN_PIN);
|
||||
#endif
|
||||
INIT_AUTO_FAN_PIN(E5_AUTO_FAN_PIN);
|
||||
#endif
|
||||
#if HAS_AUTO_CHAMBER_FAN && !(AUTO_CHAMBER_IS_0 || AUTO_CHAMBER_IS_1 || AUTO_CHAMBER_IS_2 || AUTO_CHAMBER_IS_3 || AUTO_CHAMBER_IS_4 || AUTO_CHAMBER_IS_5)
|
||||
#if CHAMBER_AUTO_FAN_PIN == FAN1_PIN
|
||||
SET_OUTPUT(CHAMBER_AUTO_FAN_PIN);
|
||||
#if ENABLED(FAST_PWM_FAN)
|
||||
set_pwm_frequency(CHAMBER_AUTO_FAN_PIN, FAST_PWM_FAN_FREQUENCY);
|
||||
#endif
|
||||
#else
|
||||
SET_OUTPUT(CHAMBER_AUTO_FAN_PIN);
|
||||
#endif
|
||||
INIT_AUTO_FAN_PIN(CHAMBER_AUTO_FAN_PIN);
|
||||
#endif
|
||||
|
||||
// Wait for temperature measurement to settle
|
||||
|
Reference in New Issue
Block a user