Selaa lähdekoodia

Fix angles for disabled EDITABLE_SERVO_ANGLES (#12559)

Scott Lahteine 6 vuotta sitten
vanhempi
commit
aaf862aef2
No account linked to committer's email address

+ 2
- 2
Marlin/src/gcode/config/M281.cpp Näytä tiedosto

@@ -21,7 +21,7 @@
21 21
  */
22 22
 #include "../../inc/MarlinConfig.h"
23 23
 
24
-#if HAS_SERVOS && ENABLED(EDITABLE_SERVO_ANGLES)
24
+#if ENABLED(EDITABLE_SERVO_ANGLES)
25 25
 
26 26
 #include "../gcode.h"
27 27
 #include "../../module/servo.h"
@@ -53,4 +53,4 @@ void GcodeSuite::M281() {
53 53
   }
54 54
 }
55 55
 
56
-#endif // HAS_SERVOS && EDITABLE_SERVO_ANGLES
56
+#endif // EDITABLE_SERVO_ANGLES

+ 6
- 0
Marlin/src/inc/Conditionals_post.h Näytä tiedosto

@@ -974,6 +974,12 @@
974 974
   #define Z_PROBE_SERVO_NR -1
975 975
 #endif
976 976
 
977
+#define HAS_SERVO_ANGLES (ENABLED(SWITCHING_EXTRUDER) || ENABLED(SWITCHING_NOZZLE) || (HAS_Z_SERVO_PROBE && defined(Z_PROBE_SERVO_NR)))
978
+
979
+#if !HAS_SERVO_ANGLES
980
+  #undef EDITABLE_SERVO_ANGLES
981
+#endif
982
+
977 983
 // Sensors
978 984
 #define HAS_FILAMENT_WIDTH_SENSOR (PIN_EXISTS(FILWIDTH))
979 985
 

+ 83
- 73
Marlin/src/module/configuration_store.cpp Näytä tiedosto

@@ -76,9 +76,9 @@
76 76
 
77 77
 #if HAS_SERVOS
78 78
   #include "servo.h"
79
+  #define EEPROM_NUM_SERVOS NUM_SERVOS
79 80
 #else
80
-  #undef NUM_SERVOS
81
-  #define NUM_SERVOS NUM_SERVO_PLUGS
81
+  #define EEPROM_NUM_SERVOS NUM_SERVO_PLUGS
82 82
 #endif
83 83
 
84 84
 #if HAS_BED_PROBE
@@ -187,7 +187,7 @@ typedef struct SettingsDataStruct {
187 187
   //
188 188
   // SERVO_ANGLES
189 189
   //
190
-  uint16_t servo_angles[NUM_SERVOS][2];                 // M281 P L U
190
+  uint16_t servo_angles[EEPROM_NUM_SERVOS][2];          // M281 P L U
191 191
 
192 192
   //
193 193
   // DELTA / [XYZ]_DUAL_ENDSTOPS
@@ -632,36 +632,11 @@ void MarlinSettings::postprocess() {
632 632
     // Servo Angles
633 633
     //
634 634
     {
635
-      #if !(HAS_SERVOS && ENABLED(EDITABLE_SERVO_ANGLES))
636
-
637
-        uint16_t servo_angles[NUM_SERVOS][2] = { { 0, 0 } };
638
-
639
-        #if ENABLED(SWITCHING_EXTRUDER)
640
-
641
-          constexpr uint16_t sesa[][2] = SWITCHING_EXTRUDER_SERVO_ANGLES;
642
-          servo_angles[SWITCHING_EXTRUDER_SERVO_NR][0] = sesa[0][0];
643
-          servo_angles[SWITCHING_EXTRUDER_SERVO_NR][1] = sesa[0][1];
644
-          #if EXTRUDERS > 3
645
-            servo_angles[SWITCHING_EXTRUDER_E23_SERVO_NR][0] = sesa[1][0];
646
-            servo_angles[SWITCHING_EXTRUDER_E23_SERVO_NR][1] = sesa[1][1];
647
-          #endif
648
-
649
-        #elif ENABLED(SWITCHING_NOZZLE)
650
-
651
-          constexpr uint16_t snsa[] = SWITCHING_NOZZLE_SERVO_ANGLES;
652
-          servo_angles[SWITCHING_NOZZLE_SERVO_NR][0] = snsa[0];
653
-          servo_angles[SWITCHING_NOZZLE_SERVO_NR][1] = snsa[1];
654
-
655
-        #elif defined(Z_SERVO_ANGLES) && defined(Z_PROBE_SERVO_NR)
656
-
657
-          constexpr uint16_t zsa[] = Z_SERVO_ANGLES;
658
-          servo_angles[Z_PROBE_SERVO_NR][0] = zsa[0];
659
-          servo_angles[Z_PROBE_SERVO_NR][1] = zsa[1];
660
-
661
-        #endif
662
-
663
-      #endif // !HAS_SERVOS || !EDITABLE_SERVO_ANGLES
635
+      _FIELD_TEST(servo_angles);
664 636
 
637
+      #if !HAS_SERVOS
638
+        uint16_t servo_angles[NUM_SERVO_PLUGS][2] = { { 0, 0 } };
639
+      #endif
665 640
       EEPROM_WRITE(servo_angles);
666 641
     }
667 642
 
@@ -1311,10 +1286,14 @@ void MarlinSettings::postprocess() {
1311 1286
       // SERVO_ANGLES
1312 1287
       //
1313 1288
       {
1314
-        #if !(HAS_SERVOS && ENABLED(EDITABLE_SERVO_ANGLES))
1315
-          uint16_t servo_angles[NUM_SERVOS][2];
1289
+        _FIELD_TEST(servo_angles);
1290
+
1291
+        #if ENABLED(EDITABLE_SERVO_ANGLES)
1292
+          uint16_t (&servo_angles_arr)[EEPROM_NUM_SERVOS][2] = servo_angles;
1293
+        #else
1294
+          uint16_t servo_angles_arr[EEPROM_NUM_SERVOS][2];
1316 1295
         #endif
1317
-        EEPROM_READ(servo_angles);
1296
+        EEPROM_READ(servo_angles_arr);
1318 1297
       }
1319 1298
 
1320 1299
       //
@@ -1992,39 +1971,13 @@ void MarlinSettings::reset(PORTARG_SOLO) {
1992 1971
   // Servo Angles
1993 1972
   //
1994 1973
 
1995
-  #if HAS_SERVOS && ENABLED(EDITABLE_SERVO_ANGLES)
1996
-
1997
-    #if ENABLED(SWITCHING_EXTRUDER)
1998
-
1999
-      #if EXTRUDERS > 3
2000
-        #define REQ_ANGLES 4
2001
-      #else
2002
-        #define REQ_ANGLES 2
2003
-      #endif
2004
-      constexpr uint16_t sesa[] = SWITCHING_EXTRUDER_SERVO_ANGLES;
2005
-      static_assert(COUNT(sesa) == REQ_ANGLES, "SWITCHING_EXTRUDER_SERVO_ANGLES needs " STRINGIFY(REQ_ANGLES) " angles.");
2006
-      servo_angles[SWITCHING_EXTRUDER_SERVO_NR][0] = sesa[0];
2007
-      servo_angles[SWITCHING_EXTRUDER_SERVO_NR][1] = sesa[1];
2008
-      #if EXTRUDERS > 3
2009
-        servo_angles[SWITCHING_EXTRUDER_E23_SERVO_NR][0] = sesa[2];
2010
-        servo_angles[SWITCHING_EXTRUDER_E23_SERVO_NR][1] = sesa[3];
2011
-      #endif
2012
-
2013
-    #elif ENABLED(SWITCHING_NOZZLE)
2014
-
2015
-      constexpr uint16_t snsa[2] = SWITCHING_NOZZLE_SERVO_ANGLES;
2016
-      servo_angles[SWITCHING_NOZZLE_SERVO_NR][0] = snsa[0];
2017
-      servo_angles[SWITCHING_NOZZLE_SERVO_NR][1] = snsa[1];
2018
-
2019
-    #elif defined(Z_SERVO_ANGLES) && defined(Z_PROBE_SERVO_NR)
2020
-
2021
-      constexpr uint16_t zsa[2] = Z_SERVO_ANGLES;
2022
-      servo_angles[Z_PROBE_SERVO_NR][0] = zsa[0];
2023
-      servo_angles[Z_PROBE_SERVO_NR][1] = zsa[1];
2024
-
2025
-    #endif
1974
+  #if ENABLED(EDITABLE_SERVO_ANGLES)
1975
+    COPY(servo_angles, base_servo_angles);
1976
+  #endif
2026 1977
 
2027
-  #endif // HAS_SERVOS && EDITABLE_SERVO_ANGLES
1978
+  //
1979
+  // Endstop Adjustments
1980
+  //
2028 1981
 
2029 1982
   #if ENABLED(DELTA)
2030 1983
     const float adj[ABC] = DELTA_ENDSTOP_ADJ, dta[ABC] = DELTA_TOWER_ANGLE_TRIM;
@@ -2083,6 +2036,10 @@ void MarlinSettings::reset(PORTARG_SOLO) {
2083 2036
 
2084 2037
   #endif
2085 2038
 
2039
+  //
2040
+  // Preheat parameters
2041
+  //
2042
+
2086 2043
   #if HAS_LCD_MENU
2087 2044
     ui.preheat_hotend_temp[0] = PREHEAT_1_TEMP_HOTEND;
2088 2045
     ui.preheat_hotend_temp[1] = PREHEAT_2_TEMP_HOTEND;
@@ -2092,6 +2049,10 @@ void MarlinSettings::reset(PORTARG_SOLO) {
2092 2049
     ui.preheat_fan_speed[1] = PREHEAT_2_FAN_SPEED;
2093 2050
   #endif
2094 2051
 
2052
+  //
2053
+  // Hotend PID
2054
+  //
2055
+
2095 2056
   #if ENABLED(PIDTEMP)
2096 2057
     HOTEND_LOOP() {
2097 2058
       PID_PARAM(Kp, e) = float(DEFAULT_Kp);
@@ -2101,10 +2062,19 @@ void MarlinSettings::reset(PORTARG_SOLO) {
2101 2062
         PID_PARAM(Kc, e) = DEFAULT_Kc;
2102 2063
       #endif
2103 2064
     }
2104
-    #if ENABLED(PID_EXTRUSION_SCALING)
2105
-      thermalManager.lpq_len = 20; // default last-position-queue size
2106
-    #endif
2107
-  #endif // PIDTEMP
2065
+  #endif
2066
+
2067
+  //
2068
+  // PID Extrusion Scaling
2069
+  //
2070
+
2071
+  #if ENABLED(PID_EXTRUSION_SCALING)
2072
+    thermalManager.lpq_len = 20;  // Default last-position-queue size
2073
+  #endif
2074
+
2075
+  //
2076
+  // Heated Bed PID
2077
+  //
2108 2078
 
2109 2079
   #if ENABLED(PIDTEMPBED)
2110 2080
     thermalManager.bed_pid.Kp = DEFAULT_bedKp;
@@ -2112,18 +2082,34 @@ void MarlinSettings::reset(PORTARG_SOLO) {
2112 2082
     thermalManager.bed_pid.Kd = scalePID_d(DEFAULT_bedKd);
2113 2083
   #endif
2114 2084
 
2085
+  //
2086
+  // LCD Contrast
2087
+  //
2088
+
2115 2089
   #if HAS_LCD_CONTRAST
2116 2090
     ui.set_contrast(DEFAULT_LCD_CONTRAST);
2117 2091
   #endif
2118 2092
 
2093
+  //
2094
+  // Power-Loss Recovery
2095
+  //
2096
+
2119 2097
   #if ENABLED(POWER_LOSS_RECOVERY)
2120 2098
     recovery.enable(true);
2121 2099
   #endif
2122 2100
 
2101
+  //
2102
+  // Firmware Retraction
2103
+  //
2104
+
2123 2105
   #if ENABLED(FWRETRACT)
2124 2106
     fwretract.reset();
2125 2107
   #endif
2126 2108
 
2109
+  //
2110
+  // Volumetric & Filament Size
2111
+  //
2112
+
2127 2113
   #if DISABLED(NO_VOLUMETRICS)
2128 2114
 
2129 2115
     parser.volumetric_enabled =
@@ -2148,16 +2134,36 @@ void MarlinSettings::reset(PORTARG_SOLO) {
2148 2134
 
2149 2135
   reset_stepper_drivers();
2150 2136
 
2137
+  //
2138
+  // Linear Advance
2139
+  //
2140
+
2151 2141
   #if ENABLED(LIN_ADVANCE)
2152 2142
     LOOP_L_N(i, EXTRUDERS) planner.extruder_advance_K[i] = LIN_ADVANCE_K;
2153 2143
   #endif
2154 2144
 
2145
+  //
2146
+  // Motor Current PWM
2147
+  //
2148
+
2155 2149
   #if HAS_MOTOR_CURRENT_PWM
2156 2150
     uint32_t tmp_motor_current_setting[3] = PWM_MOTOR_CURRENT;
2157 2151
     for (uint8_t q = 3; q--;)
2158 2152
       stepper.digipot_current(q, (stepper.motor_current_setting[q] = tmp_motor_current_setting[q]));
2159 2153
   #endif
2160 2154
 
2155
+  //
2156
+  // CNC Coordinate System
2157
+  //
2158
+
2159
+  #if ENABLED(CNC_COORDINATE_SYSTEMS)
2160
+    (void)gcode.select_coordinate_system(-1); // Go back to machine space
2161
+  #endif
2162
+
2163
+  //
2164
+  // Skew Correction
2165
+  //
2166
+
2161 2167
   #if ENABLED(SKEW_CORRECTION_GCODE)
2162 2168
     planner.skew_factor.xy = XY_SKEW_FACTOR;
2163 2169
     #if ENABLED(SKEW_CORRECTION_FOR_Z)
@@ -2166,6 +2172,10 @@ void MarlinSettings::reset(PORTARG_SOLO) {
2166 2172
     #endif
2167 2173
   #endif
2168 2174
 
2175
+  //
2176
+  // Advanced Pause filament load & unload lengths
2177
+  //
2178
+
2169 2179
   #if ENABLED(ADVANCED_PAUSE_FEATURE)
2170 2180
     for (uint8_t e = 0; e < EXTRUDERS; e++) {
2171 2181
       fc_settings[e].unload_length = FILAMENT_CHANGE_UNLOAD_LENGTH;
@@ -2491,7 +2501,7 @@ void MarlinSettings::reset(PORTARG_SOLO) {
2491 2501
 
2492 2502
     #endif // HAS_LEVELING
2493 2503
 
2494
-    #if HAS_SERVOS && ENABLED(EDITABLE_SERVO_ANGLES)
2504
+    #if ENABLED(EDITABLE_SERVO_ANGLES)
2495 2505
 
2496 2506
       CONFIG_ECHO_HEADING("Servo Angles:");
2497 2507
       for (uint8_t i = 0; i < NUM_SERVOS; i++) {
@@ -2515,7 +2525,7 @@ void MarlinSettings::reset(PORTARG_SOLO) {
2515 2525
         }
2516 2526
       }
2517 2527
 
2518
-    #endif // HAS_SERVOS && EDITABLE_SERVO_ANGLES
2528
+    #endif // EDITABLE_SERVO_ANGLES
2519 2529
 
2520 2530
     #if HAS_SCARA_OFFSET
2521 2531
 

+ 4
- 1
Marlin/src/module/servo.cpp Näytä tiedosto

@@ -31,7 +31,10 @@
31 31
 #include "servo.h"
32 32
 
33 33
 HAL_SERVO_LIB servo[NUM_SERVOS];
34
-uint16_t servo_angles[NUM_SERVOS][2];
34
+
35
+#if ENABLED(EDITABLE_SERVO_ANGLES)
36
+  uint16_t servo_angles[NUM_SERVOS][2];
37
+#endif
35 38
 
36 39
 void servo_init() {
37 40
   #if NUM_SERVOS >= 1 && HAS_SERVO_0

+ 54
- 7
Marlin/src/module/servo.h Näytä tiedosto

@@ -28,13 +28,60 @@
28 28
 #include "../inc/MarlinConfig.h"
29 29
 #include "../HAL/shared/servo.h"
30 30
 
31
-extern HAL_SERVO_LIB servo[NUM_SERVOS];
32
-extern uint16_t servo_angles[NUM_SERVOS][2];
33
-extern void servo_init();
31
+#if HAS_SERVO_ANGLES
32
+
33
+  #if ENABLED(SWITCHING_EXTRUDER)
34
+    #ifndef SWITCHING_EXTRUDER_E23_SERVO_NR
35
+      #define SWITCHING_EXTRUDER_E23_SERVO_NR -1
36
+    #endif
37
+    #if EXTRUDERS > 3
38
+      #define REQ_ANGLES 4
39
+    #else
40
+      #define REQ_ANGLES 2
41
+    #endif
42
+    #define SADATA    SWITCHING_EXTRUDER_SERVO_ANGLES
43
+    #define ASRC(N,E) (SWITCHING_EXTRUDER_SERVO_NR == N ? asrc[E] : SWITCHING_EXTRUDER_E23_SERVO_NR == N ? asrc[E+2] : 0)
44
+  #elif ENABLED(SWITCHING_NOZZLE)
45
+    #define SADATA    SWITCHING_NOZZLE_SERVO_ANGLES
46
+    #define ASRC(N,E) (SWITCHING_NOZZLE_SERVO_NR == N ? asrc[E] : 0)
47
+  #elif defined(Z_SERVO_ANGLES) && defined(Z_PROBE_SERVO_NR)
48
+    #define SADATA    Z_SERVO_ANGLES
49
+    #define ASRC(N,E) (Z_PROBE_SERVO_NR == N ? asrc[E] : 0)
50
+  #endif
51
+
52
+  #if ENABLED(EDITABLE_SERVO_ANGLES)
53
+    extern uint16_t servo_angles[NUM_SERVOS][2];
54
+    #define BASE_SERVO_ANGLES base_servo_angles
55
+  #else
56
+    #define BASE_SERVO_ANGLES servo_angles
57
+  #endif
58
+
59
+  constexpr uint16_t asrc[] = SADATA;
60
+  #if REQ_ANGLES
61
+    static_assert(COUNT(asrc) == REQ_ANGLES, "SWITCHING_EXTRUDER_SERVO_ANGLES needs " STRINGIFY(REQ_ANGLES) " angles.");
62
+  #endif
63
+
64
+  constexpr uint16_t BASE_SERVO_ANGLES [NUM_SERVOS][2] = {
65
+      { ASRC(0,0), ASRC(0,1) }
66
+    #if NUM_SERVOS > 1
67
+      , { ASRC(1,0), ASRC(1,1) }
68
+      #if NUM_SERVOS > 2
69
+        , { ASRC(2,0), ASRC(2,1) }
70
+        #if NUM_SERVOS > 3
71
+          , { ASRC(3,0), ASRC(3,1) }
72
+        #endif
73
+      #endif
74
+    #endif
75
+  };
76
+
77
+  #if HAS_Z_SERVO_PROBE
78
+    #define DEPLOY_Z_SERVO() MOVE_SERVO(Z_PROBE_SERVO_NR, servo_angles[Z_PROBE_SERVO_NR][0])
79
+    #define STOW_Z_SERVO() MOVE_SERVO(Z_PROBE_SERVO_NR, servo_angles[Z_PROBE_SERVO_NR][1])
80
+  #endif
81
+
82
+#endif // HAS_SERVO_ANGLES
34 83
 
35 84
 #define MOVE_SERVO(I, P) servo[I].move(P)
36 85
 
37
-#if HAS_Z_SERVO_PROBE
38
-  #define DEPLOY_Z_SERVO() MOVE_SERVO(Z_PROBE_SERVO_NR, servo_angles[Z_PROBE_SERVO_NR][0])
39
-  #define STOW_Z_SERVO() MOVE_SERVO(Z_PROBE_SERVO_NR, servo_angles[Z_PROBE_SERVO_NR][1])
40
-#endif
86
+extern HAL_SERVO_LIB servo[NUM_SERVOS];
87
+extern void servo_init();

Loading…
Peruuta
Tallenna