Skip to content

Commit 59423da

Browse files
committed
πŸ§‘β€πŸ’» HAS_MOTOR_CURRENT_PWM_Z
1 parent 99b790c commit 59423da

File tree

6 files changed

+88
-48
lines changed

6 files changed

+88
-48
lines changed

β€ŽMarlin/src/HAL/DUE/fastio/G2_PWM.cpp

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,12 @@
5656
#else
5757
#define G2_PWM_Y 0
5858
#endif
59-
#if PIN_EXISTS(MOTOR_CURRENT_PWM_Z)
59+
#if HAS_MOTOR_CURRENT_PWM_Z
6060
#define G2_PWM_Z 1
6161
#else
6262
#define G2_PWM_Z 0
6363
#endif
64-
#if HAS_MOTOR_CURRENT_PWM_E
65-
#define G2_PWM_E 1
66-
#else
67-
#define G2_PWM_E 0
68-
#endif
64+
#define G2_PWM_E HAS_MOTOR_CURRENT_PWM_E
6965
#define G2_MASK_X(V) (G2_PWM_X * (V))
7066
#define G2_MASK_Y(V) (G2_PWM_Y * (V))
7167
#define G2_MASK_Z(V) (G2_PWM_Z * (V))
@@ -80,17 +76,22 @@ PWM_map ISR_table[NUM_PWMS] = PWM_MAP_INIT;
8076

8177
void Stepper::digipot_init() {
8278

83-
#if PIN_EXISTS(MOTOR_CURRENT_PWM_X)
84-
OUT_WRITE(MOTOR_CURRENT_PWM_X_PIN, 0); // init pins
79+
#if G2_PWM_X
80+
OUT_WRITE(MOTOR_CURRENT_PWM_X_PIN, LOW); // init pins
8581
#endif
86-
#if PIN_EXISTS(MOTOR_CURRENT_PWM_Y)
87-
OUT_WRITE(MOTOR_CURRENT_PWM_Y_PIN, 0);
82+
#if G2_PWM_Y
83+
OUT_WRITE(MOTOR_CURRENT_PWM_Y_PIN, LOW);
8884
#endif
8985
#if G2_PWM_Z
90-
OUT_WRITE(MOTOR_CURRENT_PWM_Z_PIN, 0);
86+
OUT_WRITE(MOTOR_CURRENT_PWM_Z_PIN, LOW);
9187
#endif
9288
#if G2_PWM_E
93-
OUT_WRITE(MOTOR_CURRENT_PWM_E_PIN, 0);
89+
#if PIN_EXISTS(MOTOR_CURRENT_PWM_E)
90+
OUT_WRITE(MOTOR_CURRENT_PWM_E_PIN, LOW);
91+
#endif
92+
#if PIN_EXISTS(MOTOR_CURRENT_PWM_E0)
93+
OUT_WRITE(MOTOR_CURRENT_PWM_E0_PIN, LOW);
94+
#endif
9495
#endif
9596

9697
#define WPKEY (0x50574D << 8) // β€œPWM” in ASCII

β€ŽMarlin/src/gcode/feature/digipot/M907-M910.cpp

Lines changed: 66 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
* Set percentage of max current for all axes (Requires HAS_DIGIPOT_DAC)
4747
*/
4848
void GcodeSuite::M907() {
49+
4950
#if HAS_MOTOR_CURRENT_SPI
5051

5152
if (!parser.seen("BS" STR_AXES_LOGICAL))
@@ -56,8 +57,9 @@ void GcodeSuite::M907() {
5657
for (uint8_t i = 0; i < MOTOR_CURRENT_COUNT; ++i)
5758
stepper.set_digipot_current(i, parser.value_int());
5859

59-
// X Y Z (I J K U V W) E (map to drivers according to DIGIPOT_CHANNELS.
60-
// Default with NUM_AXES 3: map X Y Z E to X Y Z E0)
60+
// X Y Z I J K U V W E
61+
// Map to drivers according to pots addresses.
62+
// Default with NUM_AXES 3: map X Y Z E to X Y Z E0.
6163
LOOP_LOGICAL_AXES(i)
6264
if (parser.seenval(IAXIS_CHAR(i)))
6365
stepper.set_digipot_current(i, parser.value_int());
@@ -83,56 +85,88 @@ void GcodeSuite::M907() {
8385
#define HAS_X_Y_XY_I_J_K_U_V_W 1
8486
#endif
8587

86-
#if HAS_X_Y_XY_I_J_K_U_V_W || HAS_MOTOR_CURRENT_PWM_E || PIN_EXISTS(MOTOR_CURRENT_PWM_Z)
88+
#if ANY(HAS_X_Y_XY_I_J_K_U_V_W, HAS_MOTOR_CURRENT_PWM_E, HAS_MOTOR_CURRENT_PWM_Z)
8789

8890
if (!parser.seen("S"
8991
#if HAS_X_Y_XY_I_J_K_U_V_W
9092
NUM_AXIS_GANG("X", "Y",, "I", "J", "K", "U", "V", "W")
9193
#endif
92-
#if PIN_EXISTS(MOTOR_CURRENT_PWM_Z)
93-
"Z"
94-
#endif
94+
TERN_(HAS_MOTOR_CURRENT_PWM_Z, "Z")
9595
TERN_(HAS_MOTOR_CURRENT_PWM_E, "E")
9696
)) return M907_report();
9797

98-
if (parser.seenval('S')) for (uint8_t a = 0; a < MOTOR_CURRENT_COUNT; ++a) stepper.set_digipot_current(a, parser.value_int());
98+
// S<current> - Set all stepper current to the same value
99+
if (parser.seenval('S')) {
100+
const int16_t v = parser.value_int();
101+
for (uint8_t a = 0; a < MOTOR_CURRENT_COUNT; ++a)
102+
stepper.set_digipot_current(a, v);
103+
}
99104

100-
#if HAS_X_Y_XY_I_J_K_U_V_W
101-
if (NUM_AXIS_GANG(
102-
parser.seenval('X'), || parser.seenval('Y'), || false,
103-
|| parser.seenval('I'), || parser.seenval('J'), || parser.seenval('K'),
104-
|| parser.seenval('U'), || parser.seenval('V'), || parser.seenval('W')
105-
)) stepper.set_digipot_current(0, parser.value_int());
106-
#endif
107-
#if PIN_EXISTS(MOTOR_CURRENT_PWM_Z)
108-
if (parser.seenval('Z')) stepper.set_digipot_current(1, parser.value_int());
109-
#endif
110-
#if HAS_MOTOR_CURRENT_PWM_E
111-
if (parser.seenval('E')) stepper.set_digipot_current(2, parser.value_int());
112-
#endif
105+
// X Y I J K U V W - All aliases to set the current for "most axes."
106+
// Only the value of the last given parameter is used.
107+
if (ENABLED(HAS_X_Y_XY_I_J_K_U_V_W) && NUM_AXIS_GANG(
108+
parser.seenval('X'), || parser.seenval('Y'), || false,
109+
|| parser.seenval('I'), || parser.seenval('J'), || parser.seenval('K'),
110+
|| parser.seenval('U'), || parser.seenval('V'), || parser.seenval('W')
111+
))
112+
stepper.set_digipot_current(0, parser.value_int());
113+
114+
// Z<current> - Set the current just for the Z axis
115+
if (TERN0(HAS_MOTOR_CURRENT_PWM_Z, parser.seenval('Z')))
116+
stepper.set_digipot_current(1, parser.value_int());
117+
118+
// Z<current> - Set the current just for the Extruder
119+
if (TERN0(HAS_MOTOR_CURRENT_PWM_E, parser.seenval('E')))
120+
stepper.set_digipot_current(2, parser.value_int());
113121

114122
#endif
115123

116124
#endif // HAS_MOTOR_CURRENT_PWM
117125

118126
#if HAS_MOTOR_CURRENT_I2C
119-
// this one uses actual amps in floating point
120-
if (parser.seenval('S')) for (uint8_t q = 0; q < DIGIPOT_I2C_NUM_CHANNELS; ++q) digipot_i2c.set_current(q, parser.value_float());
121-
LOOP_LOGICAL_AXES(i) if (parser.seenval(IAXIS_CHAR(i))) digipot_i2c.set_current(i, parser.value_float()); // X Y Z (I J K U V W) E (map to drivers according to pots adresses. Default with NUM_AXES 3 X Y Z E: map to X Y Z E0)
127+
// This current driver takes actual Amps in floating point
128+
// rather than milli-amps or some scalar unit.
129+
130+
// S<current> - Set the same current in Amps on all channels
131+
if (parser.seenval('S')) {
132+
const float v = parser.value_float();
133+
for (uint8_t q = 0; q < DIGIPOT_I2C_NUM_CHANNELS; ++q)
134+
digipot_i2c.set_current(q, v);
135+
}
136+
137+
// X Y Z I J K U V W E
138+
// Map to drivers according to pots addresses.
139+
// Default with NUM_AXES 3: map X Y Z E to X Y Z E0.
140+
LOOP_LOGICAL_AXES(i)
141+
if (parser.seenval(IAXIS_CHAR(i)))
142+
digipot_i2c.set_current(i, parser.value_float());
143+
122144
// Additional extruders use B,C,D.
123-
// TODO: Change these parameters because 'E' is used and because 'D' should be reserved for debugging. B<index>?
145+
// TODO: Make parameters work like other axis-specific / stepper-specific. See above.
124146
#if E_STEPPERS >= 2
125147
for (uint8_t i = E_AXIS + 1; i < _MAX(DIGIPOT_I2C_NUM_CHANNELS, (NUM_AXES + 3)); i++)
126-
if (parser.seenval('B' + i - (E_AXIS + 1))) digipot_i2c.set_current(i, parser.value_float());
148+
if (parser.seenval('B' + i - (E_AXIS + 1)))
149+
digipot_i2c.set_current(i, parser.value_float());
127150
#endif
128-
#endif
151+
152+
#endif // HAS_MOTOR_CURRENT_I2C
129153

130154
#if HAS_MOTOR_CURRENT_DAC
155+
156+
// S<current> - Set the same current percentage on all axes
131157
if (parser.seenval('S')) {
132158
const float dac_percent = parser.value_float();
133-
LOOP_LOGICAL_AXES(i) stepper_dac.set_current_percent(i, dac_percent);
159+
LOOP_LOGICAL_AXES(i)
160+
stepper_dac.set_current_percent(i, dac_percent);
134161
}
135-
LOOP_LOGICAL_AXES(i) if (parser.seenval(IAXIS_CHAR(i))) stepper_dac.set_current_percent(i, parser.value_float()); // X Y Z (I J K U V W) E (map to drivers according to DAC_STEPPER_ORDER. Default with NUM_AXES 3: X Y Z E map to X Y Z E0)
162+
163+
// X Y Z I J K U V W E
164+
// Map to drivers according to pots addresses.
165+
// Default with NUM_AXES 3: map X Y Z E to X Y Z E0.
166+
LOOP_LOGICAL_AXES(i)
167+
if (parser.seenval(IAXIS_CHAR(i)))
168+
stepper_dac.set_current_percent(i, parser.value_float());
169+
136170
#endif
137171
}
138172

@@ -144,8 +178,10 @@ void GcodeSuite::M907() {
144178
report_heading_etc(forReplay, F(STR_STEPPER_MOTOR_CURRENTS));
145179
#if HAS_MOTOR_CURRENT_PWM
146180
SERIAL_ECHOLNPGM_P( // PWM-based has 3 values:
147-
PSTR(" M907 X"), stepper.motor_current_setting[0] // X, Y, (I, J, K, U, V, W)
148-
, SP_Z_STR, stepper.motor_current_setting[1] // Z
181+
PSTR(" M907 X"), stepper.motor_current_setting[0] // X, Y, (I, J, K, U, V, W)
182+
#if HAS_MOTOR_CURRENT_PWM_Z
183+
, SP_Z_STR, stepper.motor_current_setting[1] // Z
184+
#endif
149185
#if HAS_MOTOR_CURRENT_PWM_E
150186
, SP_E_STR, stepper.motor_current_setting[2] // E
151187
#endif

β€ŽMarlin/src/inc/Conditionals-5-post.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2993,7 +2993,10 @@
29932993
#if ANY_PIN(MOTOR_CURRENT_PWM_E, MOTOR_CURRENT_PWM_E0, MOTOR_CURRENT_PWM_E1)
29942994
#define HAS_MOTOR_CURRENT_PWM_E 1
29952995
#endif
2996-
#if HAS_MOTOR_CURRENT_PWM_E || ANY_PIN(MOTOR_CURRENT_PWM_X, MOTOR_CURRENT_PWM_Y, MOTOR_CURRENT_PWM_XY, MOTOR_CURRENT_PWM_Z, MOTOR_CURRENT_PWM_I, MOTOR_CURRENT_PWM_J, MOTOR_CURRENT_PWM_K, MOTOR_CURRENT_PWM_U, MOTOR_CURRENT_PWM_V, MOTOR_CURRENT_PWM_W)
2996+
#if PIN_EXISTS(MOTOR_CURRENT_PWM_Z)
2997+
#define HAS_MOTOR_CURRENT_PWM_Z 1
2998+
#endif
2999+
#if HAS_MOTOR_CURRENT_PWM_Z || HAS_MOTOR_CURRENT_PWM_E || ANY_PIN(MOTOR_CURRENT_PWM_X, MOTOR_CURRENT_PWM_Y, MOTOR_CURRENT_PWM_XY, MOTOR_CURRENT_PWM_I, MOTOR_CURRENT_PWM_J, MOTOR_CURRENT_PWM_K, MOTOR_CURRENT_PWM_U, MOTOR_CURRENT_PWM_V, MOTOR_CURRENT_PWM_W)
29973000
#define HAS_MOTOR_CURRENT_PWM 1
29983001
#endif
29993002

β€ŽMarlin/src/lcd/menu/menu_advanced.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ void menu_backlash();
8888
#if ANY_PIN(MOTOR_CURRENT_PWM_XY, MOTOR_CURRENT_PWM_X, MOTOR_CURRENT_PWM_Y)
8989
EDIT_CURRENT_PWM(STR_A STR_B, 0);
9090
#endif
91-
#if PIN_EXISTS(MOTOR_CURRENT_PWM_Z)
91+
#if HAS_MOTOR_CURRENT_PWM_Z
9292
EDIT_CURRENT_PWM(STR_C, 1);
9393
#endif
9494
#if HAS_MOTOR_CURRENT_PWM_E

β€ŽMarlin/src/module/stepper.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3654,7 +3654,7 @@ void Stepper::report_positions() {
36543654
#if ANY_PIN(MOTOR_CURRENT_PWM_XY, MOTOR_CURRENT_PWM_X, MOTOR_CURRENT_PWM_Y, MOTOR_CURRENT_PWM_I, MOTOR_CURRENT_PWM_J, MOTOR_CURRENT_PWM_K, MOTOR_CURRENT_PWM_U, MOTOR_CURRENT_PWM_V, MOTOR_CURRENT_PWM_W)
36553655
case 0:
36563656
#endif
3657-
#if PIN_EXISTS(MOTOR_CURRENT_PWM_Z)
3657+
#if HAS_MOTOR_CURRENT_PWM_Z
36583658
case 1:
36593659
#endif
36603660
#if HAS_MOTOR_CURRENT_PWM_E
@@ -3719,7 +3719,7 @@ void Stepper::report_positions() {
37193719
#endif
37203720
break;
37213721
case 1:
3722-
#if PIN_EXISTS(MOTOR_CURRENT_PWM_Z)
3722+
#if HAS_MOTOR_CURRENT_PWM_Z
37233723
_WRITE_CURRENT_PWM(Z);
37243724
#endif
37253725
break;
@@ -3784,7 +3784,7 @@ void Stepper::report_positions() {
37843784
#if PIN_EXISTS(MOTOR_CURRENT_PWM_W)
37853785
INIT_CURRENT_PWM(W);
37863786
#endif
3787-
#if PIN_EXISTS(MOTOR_CURRENT_PWM_Z)
3787+
#if HAS_MOTOR_CURRENT_PWM_Z
37883788
INIT_CURRENT_PWM(Z);
37893789
#endif
37903790
#if PIN_EXISTS(MOTOR_CURRENT_PWM_E)

β€ŽMarlin/src/pins/pinsDebug_list.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1119,7 +1119,7 @@
11191119
#if PIN_EXISTS(MOTOR_CURRENT_PWM_XY)
11201120
REPORT_NAME_DIGITAL(__LINE__, MOTOR_CURRENT_PWM_XY_PIN)
11211121
#endif
1122-
#if PIN_EXISTS(MOTOR_CURRENT_PWM_Z)
1122+
#if HAS_MOTOR_CURRENT_PWM_Z
11231123
REPORT_NAME_DIGITAL(__LINE__, MOTOR_CURRENT_PWM_Z_PIN)
11241124
#endif
11251125
#if PIN_EXISTS(MOTOR_CURRENT_PWM_I)

0 commit comments

Comments
Β (0)