Browse Source

Simplified fan handling code

Scott Lahteine 5 years ago
parent
commit
4d5a1984e2

+ 3
- 3
Marlin/src/HAL/HAL_AVR/fastio_AVR.h View File

@@ -287,11 +287,11 @@ enum ClockSource2 : char {
287 287
 
288 288
 #if ANY_PIN(FAN, FAN1, FAN2)
289 289
   #if PIN_EXISTS(FAN2)
290
-    #define PWM_CHK_FAN_A(P) (P == FAN_PIN || P == FAN1_PIN || P == FAN2_PIN)
290
+    #define PWM_CHK_FAN_A(P) (P == FAN0_PIN || P == FAN1_PIN || P == FAN2_PIN)
291 291
   #elif PIN_EXISTS(FAN1)
292
-    #define PWM_CHK_FAN_A(P) (P == FAN_PIN || P == FAN1_PIN)
292
+    #define PWM_CHK_FAN_A(P) (P == FAN0_PIN || P == FAN1_PIN)
293 293
   #else
294
-    #define PWM_CHK_FAN_A(P) (P == FAN_PIN)
294
+    #define PWM_CHK_FAN_A(P) (P == FAN0_PIN)
295 295
   #endif
296 296
 #else
297 297
   #define PWM_CHK_FAN_A(P) false

+ 1
- 1
Marlin/src/gcode/control/M42.cpp View File

@@ -56,7 +56,7 @@ void GcodeSuite::M42() {
56 56
   #if FAN_COUNT > 0
57 57
     switch (pin) {
58 58
       #if HAS_FAN0
59
-        case FAN_PIN: thermalManager.fan_speed[0] = pin_status; break;
59
+        case FAN0_PIN: thermalManager.fan_speed[0] = pin_status; break;
60 60
       #endif
61 61
       #if HAS_FAN1
62 62
         case FAN1_PIN: thermalManager.fan_speed[1] = pin_status; break;

+ 2
- 10
Marlin/src/inc/Conditionals_post.h View File

@@ -1193,17 +1193,9 @@
1193 1193
   #define FAN_COUNT 0
1194 1194
 #endif
1195 1195
 
1196
-#if HAS_FAN0
1197
-  #define WRITE_FAN(v) WRITE(FAN_PIN, (v) ^ FAN_INVERTING)
1198
-  #define WRITE_FAN0(v) WRITE_FAN(v)
1196
+#if FAN_COUNT > 0
1197
+  #define WRITE_FAN(n, v) WRITE(FAN##n##_PIN, (v) ^ FAN_INVERTING)
1199 1198
 #endif
1200
-#if HAS_FAN1
1201
-  #define WRITE_FAN1(v) WRITE(FAN1_PIN, (v) ^ FAN_INVERTING)
1202
-#endif
1203
-#if HAS_FAN2
1204
-  #define WRITE_FAN2(v) WRITE(FAN2_PIN, (v) ^ FAN_INVERTING)
1205
-#endif
1206
-#define WRITE_FAN_N(n, v) WRITE_FAN##n(v)
1207 1199
 
1208 1200
 /**
1209 1201
  * Part Cooling fan multipliexer

+ 36
- 60
Marlin/src/module/planner.cpp View File

@@ -1169,8 +1169,11 @@ void Planner::recalculate() {
1169 1169
  * Maintain fans, paste extruder pressure,
1170 1170
  */
1171 1171
 void Planner::check_axes_activity() {
1172
-  uint8_t axis_active[NUM_AXIS] = { 0 },
1173
-          tail_fan_speed[FAN_COUNT];
1172
+  uint8_t axis_active[NUM_AXIS] = { 0 };
1173
+
1174
+  #if FAN_COUNT > 0
1175
+    uint8_t tail_fan_speed[FAN_COUNT];
1176
+  #endif
1174 1177
 
1175 1178
   #if ENABLED(BARICUDA)
1176 1179
     #if HAS_HEATER_1
@@ -1182,15 +1185,18 @@ void Planner::check_axes_activity() {
1182 1185
   #endif
1183 1186
 
1184 1187
   if (has_blocks_queued()) {
1188
+    block_t* block;
1189
+
1190
+    #if FAN_COUNT > 0 || ENABLED(BARICUDA)
1191
+      block = &block_buffer[block_buffer_tail];
1192
+    #endif
1193
+
1185 1194
     #if FAN_COUNT > 0
1186 1195
       FANS_LOOP(i)
1187
-        tail_fan_speed[i] = thermalManager.scaledFanSpeed(i, block_buffer[block_buffer_tail].fan_speed[i]);
1196
+        tail_fan_speed[i] = thermalManager.scaledFanSpeed(i, block->fan_speed[i]);
1188 1197
     #endif
1189 1198
 
1190
-    block_t* block;
1191
-
1192 1199
     #if ENABLED(BARICUDA)
1193
-      block = &block_buffer[block_buffer_tail];
1194 1200
       #if HAS_HEATER_1
1195 1201
         tail_valve_pressure = block->valve_pressure;
1196 1202
       #endif
@@ -1236,30 +1242,19 @@ void Planner::check_axes_activity() {
1236 1242
   #if FAN_COUNT > 0
1237 1243
 
1238 1244
     #if FAN_KICKSTART_TIME > 0
1239
-
1240 1245
       static millis_t fan_kick_end[FAN_COUNT] = { 0 };
1241
-
1242
-      #define KICKSTART_FAN(f) \
1243
-        if (tail_fan_speed[f]) { \
1244
-          millis_t ms = millis(); \
1245
-          if (fan_kick_end[f] == 0) { \
1246
+      #define KICKSTART_FAN(f)                         \
1247
+        if (tail_fan_speed[f]) {                       \
1248
+          millis_t ms = millis();                      \
1249
+          if (fan_kick_end[f] == 0) {                  \
1246 1250
             fan_kick_end[f] = ms + FAN_KICKSTART_TIME; \
1247
-            tail_fan_speed[f] = 255; \
1248
-          } else if (PENDING(ms, fan_kick_end[f])) \
1249
-            tail_fan_speed[f] = 255; \
1251
+            tail_fan_speed[f] = 255;                   \
1252
+          } else if (PENDING(ms, fan_kick_end[f]))     \
1253
+            tail_fan_speed[f] = 255;                   \
1250 1254
         } else fan_kick_end[f] = 0
1251
-
1252
-      #if HAS_FAN0
1253
-        KICKSTART_FAN(0);
1254
-      #endif
1255
-      #if HAS_FAN1
1256
-        KICKSTART_FAN(1);
1257
-      #endif
1258
-      #if HAS_FAN2
1259
-        KICKSTART_FAN(2);
1260
-      #endif
1261
-
1262
-    #endif // FAN_KICKSTART_TIME > 0
1255
+    #else
1256
+      #define KICKSTART_FAN(f) NOOP
1257
+    #endif
1263 1258
 
1264 1259
     #if FAN_MIN_PWM != 0 || FAN_MAX_PWM != 255
1265 1260
       #define CALC_FAN_SPEED(f) (tail_fan_speed[f] ? map(tail_fan_speed[f], 1, 255, FAN_MIN_PWM, FAN_MAX_PWM) : 0)
@@ -1268,43 +1263,24 @@ void Planner::check_axes_activity() {
1268 1263
     #endif
1269 1264
 
1270 1265
     #if ENABLED(FAN_SOFT_PWM)
1271
-
1272
-      #if HAS_FAN0
1273
-        thermalManager.soft_pwm_amount_fan[0] = CALC_FAN_SPEED(0);
1274
-      #endif
1275
-      #if HAS_FAN1
1276
-        thermalManager.soft_pwm_amount_fan[1] = CALC_FAN_SPEED(1);
1277
-      #endif
1278
-      #if HAS_FAN2
1279
-        thermalManager.soft_pwm_amount_fan[2] = CALC_FAN_SPEED(2);
1280
-      #endif
1281
-
1266
+      #define _FAN_SET(F) thermalManager.soft_pwm_amount_fan[F] = CALC_FAN_SPEED(F);
1282 1267
     #elif ENABLED(FAST_PWM_FAN)
1283
-
1284
-      #if HAS_FAN0
1285
-        set_pwm_duty(FAN_PIN, CALC_FAN_SPEED(0));
1286
-      #endif
1287
-      #if HAS_FAN1
1288
-        set_pwm_duty(FAN1_PIN, CALC_FAN_SPEED(1));
1289
-      #endif
1290
-      #if HAS_FAN2
1291
-        set_pwm_duty(FAN2_PIN, CALC_FAN_SPEED(2));
1292
-      #endif
1293
-
1268
+      #define _FAN_SET(F) set_pwm_duty(FAN##F##_PIN, CALC_FAN_SPEED(F));
1294 1269
     #else
1270
+      #define _FAN_SET(F) analogWrite(pin_t(FAN##F##_PIN), CALC_FAN_SPEED(F));
1271
+    #endif
1272
+    #define FAN_SET(F) do{ KICKSTART_FAN(F); _FAN_SET(F); }while(0)
1295 1273
 
1296
-      #if HAS_FAN0
1297
-        analogWrite(pin_t(FAN_PIN), CALC_FAN_SPEED(0));
1298
-      #endif
1299
-      #if HAS_FAN1
1300
-        analogWrite(pin_t(FAN1_PIN), CALC_FAN_SPEED(1));
1301
-      #endif
1302
-      #if HAS_FAN2
1303
-        analogWrite(pin_t(FAN2_PIN), CALC_FAN_SPEED(2));
1304
-      #endif
1274
+    #if HAS_FAN0
1275
+      FAN_SET(0);
1305 1276
     #endif
1306
-  #else
1307
-    UNUSED(tail_fan_speed);
1277
+    #if HAS_FAN1
1278
+      FAN_SET(1);
1279
+    #endif
1280
+    #if HAS_FAN2
1281
+      FAN_SET(2);
1282
+    #endif
1283
+
1308 1284
   #endif // FAN_COUNT > 0
1309 1285
 
1310 1286
   #if ENABLED(AUTOTEMP)

+ 15
- 14
Marlin/src/module/temperature.cpp View File

@@ -2392,8 +2392,9 @@ void Temperature::isr() {
2392 2392
 
2393 2393
       #if ENABLED(FAN_SOFT_PWM)
2394 2394
         #define _FAN_PWM(N) do{ \
2395
-          soft_pwm_count_fan[N] = (soft_pwm_count_fan[N] & pwm_mask) + (soft_pwm_amount_fan[N] >> 1); \
2396
-          WRITE_FAN_N(N, soft_pwm_count_fan[N] > pwm_mask ? HIGH : LOW); \
2395
+          uint8_t &spcf = soft_pwm_count_fan[N]; \
2396
+          spcf = (spcf & pwm_mask) + (soft_pwm_amount_fan[N] >> 1); \
2397
+          WRITE_FAN(N, spcf > pwm_mask ? HIGH : LOW); \
2397 2398
         }while(0)
2398 2399
         #if HAS_FAN0
2399 2400
           _FAN_PWM(0);
@@ -2438,13 +2439,13 @@ void Temperature::isr() {
2438 2439
 
2439 2440
       #if ENABLED(FAN_SOFT_PWM)
2440 2441
         #if HAS_FAN0
2441
-          if (soft_pwm_count_fan[0] <= pwm_count_tmp) WRITE_FAN(LOW);
2442
+          if (soft_pwm_count_fan[0] <= pwm_count_tmp) WRITE_FAN(0, LOW);
2442 2443
         #endif
2443 2444
         #if HAS_FAN1
2444
-          if (soft_pwm_count_fan[1] <= pwm_count_tmp) WRITE_FAN1(LOW);
2445
+          if (soft_pwm_count_fan[1] <= pwm_count_tmp) WRITE_FAN(1, LOW);
2445 2446
         #endif
2446 2447
         #if HAS_FAN2
2447
-          if (soft_pwm_count_fan[2] <= pwm_count_tmp) WRITE_FAN2(LOW);
2448
+          if (soft_pwm_count_fan[2] <= pwm_count_tmp) WRITE_FAN(2, LOW);
2448 2449
         #endif
2449 2450
       #endif
2450 2451
     }
@@ -2525,28 +2526,28 @@ void Temperature::isr() {
2525 2526
     #if ENABLED(FAN_SOFT_PWM)
2526 2527
       if (pwm_count_tmp >= 127) {
2527 2528
         pwm_count_tmp = 0;
2528
-        #define _PWM_FAN(N,I) do{                               \
2529
-          soft_pwm_count_fan[I] = soft_pwm_amount_fan[I] >> 1;  \
2530
-          WRITE_FAN##N(soft_pwm_count_fan[I] > 0 ? HIGH : LOW); \
2529
+        #define _PWM_FAN(N) do{                                 \
2530
+          soft_pwm_count_fan[N] = soft_pwm_amount_fan[N] >> 1;  \
2531
+          WRITE_FAN(N, soft_pwm_count_fan[N] > 0 ? HIGH : LOW); \
2531 2532
         }while(0)
2532 2533
         #if HAS_FAN0
2533
-          _PWM_FAN(,0);
2534
+          _PWM_FAN(0);
2534 2535
         #endif
2535 2536
         #if HAS_FAN1
2536
-          _PWM_FAN(1,1);
2537
+          _PWM_FAN(1);
2537 2538
         #endif
2538 2539
         #if HAS_FAN2
2539
-          _PWM_FAN(2,2);
2540
+          _PWM_FAN(2);
2540 2541
         #endif
2541 2542
       }
2542 2543
       #if HAS_FAN0
2543
-        if (soft_pwm_count_fan[0] <= pwm_count_tmp) WRITE_FAN(LOW);
2544
+        if (soft_pwm_count_fan[0] <= pwm_count_tmp) WRITE_FAN(0, LOW);
2544 2545
       #endif
2545 2546
       #if HAS_FAN1
2546
-        if (soft_pwm_count_fan[1] <= pwm_count_tmp) WRITE_FAN1(LOW);
2547
+        if (soft_pwm_count_fan[1] <= pwm_count_tmp) WRITE_FAN(1, LOW);
2547 2548
       #endif
2548 2549
       #if HAS_FAN2
2549
-        if (soft_pwm_count_fan[2] <= pwm_count_tmp) WRITE_FAN2(LOW);
2550
+        if (soft_pwm_count_fan[2] <= pwm_count_tmp) WRITE_FAN(2, LOW);
2550 2551
       #endif
2551 2552
     #endif // FAN_SOFT_PWM
2552 2553
 

+ 1
- 0
Marlin/src/pins/pins.h View File

@@ -660,6 +660,7 @@
660 660
 #ifndef FAN_PIN
661 661
   #define FAN_PIN -1
662 662
 #endif
663
+#define FAN0_PIN FAN_PIN
663 664
 #ifndef FAN1_PIN
664 665
   #define FAN1_PIN -1
665 666
 #endif

Loading…
Cancel
Save