🐛 Fix, improve PWM on AVR (#23463)
This commit is contained in:
committed by
Scott Lahteine
parent
0204547c09
commit
39e4310c7b
@ -3257,33 +3257,33 @@ void Stepper::report_positions() {
|
||||
|
||||
#elif HAS_MOTOR_CURRENT_PWM
|
||||
|
||||
#define _WRITE_CURRENT_PWM(P) set_pwm_duty(pin_t(MOTOR_CURRENT_PWM_## P ##_PIN), 255L * current / (MOTOR_CURRENT_PWM_RANGE))
|
||||
#define _WRITE_CURRENT_PWM_DUTY(P) set_pwm_duty(pin_t(MOTOR_CURRENT_PWM_## P ##_PIN), 255L * current / (MOTOR_CURRENT_PWM_RANGE))
|
||||
switch (driver) {
|
||||
case 0:
|
||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_X)
|
||||
_WRITE_CURRENT_PWM(X);
|
||||
_WRITE_CURRENT_PWM_DUTY(X);
|
||||
#endif
|
||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_Y)
|
||||
_WRITE_CURRENT_PWM(Y);
|
||||
_WRITE_CURRENT_PWM_DUTY(Y);
|
||||
#endif
|
||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_XY)
|
||||
_WRITE_CURRENT_PWM(XY);
|
||||
_WRITE_CURRENT_PWM_DUTY(XY);
|
||||
#endif
|
||||
break;
|
||||
case 1:
|
||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_Z)
|
||||
_WRITE_CURRENT_PWM(Z);
|
||||
_WRITE_CURRENT_PWM_DUTY(Z);
|
||||
#endif
|
||||
break;
|
||||
case 2:
|
||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_E)
|
||||
_WRITE_CURRENT_PWM(E);
|
||||
_WRITE_CURRENT_PWM_DUTY(E);
|
||||
#endif
|
||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_E0)
|
||||
_WRITE_CURRENT_PWM(E0);
|
||||
_WRITE_CURRENT_PWM_DUTY(E0);
|
||||
#endif
|
||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_E1)
|
||||
_WRITE_CURRENT_PWM(E1);
|
||||
_WRITE_CURRENT_PWM_DUTY(E1);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
@ -3302,34 +3302,37 @@ void Stepper::report_positions() {
|
||||
|
||||
#elif HAS_MOTOR_CURRENT_PWM
|
||||
|
||||
#ifdef __SAM3X8E__
|
||||
#define _RESET_CURRENT_PWM_FREQ(P) NOOP
|
||||
#else
|
||||
#define _RESET_CURRENT_PWM_FREQ(P) set_pwm_frequency(pin_t(P), MOTOR_CURRENT_PWM_FREQUENCY)
|
||||
#endif
|
||||
#define INIT_CURRENT_PWM(P) do{ SET_PWM(MOTOR_CURRENT_PWM_## P ##_PIN); _RESET_CURRENT_PWM_FREQ(MOTOR_CURRENT_PWM_## P ##_PIN); }while(0)
|
||||
|
||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_X)
|
||||
SET_PWM(MOTOR_CURRENT_PWM_X_PIN);
|
||||
INIT_CURRENT_PWM(X);
|
||||
#endif
|
||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_Y)
|
||||
SET_PWM(MOTOR_CURRENT_PWM_Y_PIN);
|
||||
INIT_CURRENT_PWM(Y);
|
||||
#endif
|
||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_XY)
|
||||
SET_PWM(MOTOR_CURRENT_PWM_XY_PIN);
|
||||
INIT_CURRENT_PWM(XY);
|
||||
#endif
|
||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_Z)
|
||||
SET_PWM(MOTOR_CURRENT_PWM_Z_PIN);
|
||||
INIT_CURRENT_PWM(Z);
|
||||
#endif
|
||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_E)
|
||||
SET_PWM(MOTOR_CURRENT_PWM_E_PIN);
|
||||
INIT_CURRENT_PWM(E);
|
||||
#endif
|
||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_E0)
|
||||
SET_PWM(MOTOR_CURRENT_PWM_E0_PIN);
|
||||
INIT_CURRENT_PWM(E0);
|
||||
#endif
|
||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_E1)
|
||||
SET_PWM(MOTOR_CURRENT_PWM_E1_PIN);
|
||||
INIT_CURRENT_PWM(E1);
|
||||
#endif
|
||||
|
||||
refresh_motor_power();
|
||||
|
||||
// Set Timer5 to 31khz so the PWM of the motor power is as constant as possible. (removes a buzzing noise)
|
||||
#ifdef __AVR__
|
||||
SET_CS5(PRESCALER_1);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -317,6 +317,10 @@ class Stepper {
|
||||
#ifndef PWM_MOTOR_CURRENT
|
||||
#define PWM_MOTOR_CURRENT DEFAULT_PWM_MOTOR_CURRENT
|
||||
#endif
|
||||
#ifndef MOTOR_CURRENT_PWM_FREQUENCY
|
||||
#define MOTOR_CURRENT_PWM_FREQUENCY 31400
|
||||
#endif
|
||||
|
||||
#define MOTOR_CURRENT_COUNT LINEAR_AXES
|
||||
#elif HAS_MOTOR_CURRENT_SPI
|
||||
static constexpr uint32_t digipot_count[] = DIGIPOT_MOTOR_CURRENT;
|
||||
|
Reference in New Issue
Block a user