Browse Source

Simplified fan handling code

Scott Lahteine 6 years ago
parent
commit
4d5a1984e2

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

287
 
287
 
288
 #if ANY_PIN(FAN, FAN1, FAN2)
288
 #if ANY_PIN(FAN, FAN1, FAN2)
289
   #if PIN_EXISTS(FAN2)
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
   #elif PIN_EXISTS(FAN1)
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
   #else
293
   #else
294
-    #define PWM_CHK_FAN_A(P) (P == FAN_PIN)
294
+    #define PWM_CHK_FAN_A(P) (P == FAN0_PIN)
295
   #endif
295
   #endif
296
 #else
296
 #else
297
   #define PWM_CHK_FAN_A(P) false
297
   #define PWM_CHK_FAN_A(P) false

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

56
   #if FAN_COUNT > 0
56
   #if FAN_COUNT > 0
57
     switch (pin) {
57
     switch (pin) {
58
       #if HAS_FAN0
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
       #endif
60
       #endif
61
       #if HAS_FAN1
61
       #if HAS_FAN1
62
         case FAN1_PIN: thermalManager.fan_speed[1] = pin_status; break;
62
         case FAN1_PIN: thermalManager.fan_speed[1] = pin_status; break;

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

1193
   #define FAN_COUNT 0
1193
   #define FAN_COUNT 0
1194
 #endif
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
 #endif
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
  * Part Cooling fan multipliexer
1201
  * Part Cooling fan multipliexer

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

1169
  * Maintain fans, paste extruder pressure,
1169
  * Maintain fans, paste extruder pressure,
1170
  */
1170
  */
1171
 void Planner::check_axes_activity() {
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
   #if ENABLED(BARICUDA)
1178
   #if ENABLED(BARICUDA)
1176
     #if HAS_HEATER_1
1179
     #if HAS_HEATER_1
1182
   #endif
1185
   #endif
1183
 
1186
 
1184
   if (has_blocks_queued()) {
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
     #if FAN_COUNT > 0
1194
     #if FAN_COUNT > 0
1186
       FANS_LOOP(i)
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
     #endif
1197
     #endif
1189
 
1198
 
1190
-    block_t* block;
1191
-
1192
     #if ENABLED(BARICUDA)
1199
     #if ENABLED(BARICUDA)
1193
-      block = &block_buffer[block_buffer_tail];
1194
       #if HAS_HEATER_1
1200
       #if HAS_HEATER_1
1195
         tail_valve_pressure = block->valve_pressure;
1201
         tail_valve_pressure = block->valve_pressure;
1196
       #endif
1202
       #endif
1236
   #if FAN_COUNT > 0
1242
   #if FAN_COUNT > 0
1237
 
1243
 
1238
     #if FAN_KICKSTART_TIME > 0
1244
     #if FAN_KICKSTART_TIME > 0
1239
-
1240
       static millis_t fan_kick_end[FAN_COUNT] = { 0 };
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
             fan_kick_end[f] = ms + FAN_KICKSTART_TIME; \
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
         } else fan_kick_end[f] = 0
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
     #if FAN_MIN_PWM != 0 || FAN_MAX_PWM != 255
1259
     #if FAN_MIN_PWM != 0 || FAN_MAX_PWM != 255
1265
       #define CALC_FAN_SPEED(f) (tail_fan_speed[f] ? map(tail_fan_speed[f], 1, 255, FAN_MIN_PWM, FAN_MAX_PWM) : 0)
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
     #endif
1263
     #endif
1269
 
1264
 
1270
     #if ENABLED(FAN_SOFT_PWM)
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
     #elif ENABLED(FAST_PWM_FAN)
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
     #else
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
     #endif
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
   #endif // FAN_COUNT > 0
1284
   #endif // FAN_COUNT > 0
1309
 
1285
 
1310
   #if ENABLED(AUTOTEMP)
1286
   #if ENABLED(AUTOTEMP)

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

2392
 
2392
 
2393
       #if ENABLED(FAN_SOFT_PWM)
2393
       #if ENABLED(FAN_SOFT_PWM)
2394
         #define _FAN_PWM(N) do{ \
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
         }while(0)
2398
         }while(0)
2398
         #if HAS_FAN0
2399
         #if HAS_FAN0
2399
           _FAN_PWM(0);
2400
           _FAN_PWM(0);
2438
 
2439
 
2439
       #if ENABLED(FAN_SOFT_PWM)
2440
       #if ENABLED(FAN_SOFT_PWM)
2440
         #if HAS_FAN0
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
         #endif
2443
         #endif
2443
         #if HAS_FAN1
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
         #endif
2446
         #endif
2446
         #if HAS_FAN2
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
         #endif
2449
         #endif
2449
       #endif
2450
       #endif
2450
     }
2451
     }
2525
     #if ENABLED(FAN_SOFT_PWM)
2526
     #if ENABLED(FAN_SOFT_PWM)
2526
       if (pwm_count_tmp >= 127) {
2527
       if (pwm_count_tmp >= 127) {
2527
         pwm_count_tmp = 0;
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
         }while(0)
2532
         }while(0)
2532
         #if HAS_FAN0
2533
         #if HAS_FAN0
2533
-          _PWM_FAN(,0);
2534
+          _PWM_FAN(0);
2534
         #endif
2535
         #endif
2535
         #if HAS_FAN1
2536
         #if HAS_FAN1
2536
-          _PWM_FAN(1,1);
2537
+          _PWM_FAN(1);
2537
         #endif
2538
         #endif
2538
         #if HAS_FAN2
2539
         #if HAS_FAN2
2539
-          _PWM_FAN(2,2);
2540
+          _PWM_FAN(2);
2540
         #endif
2541
         #endif
2541
       }
2542
       }
2542
       #if HAS_FAN0
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
       #endif
2545
       #endif
2545
       #if HAS_FAN1
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
       #endif
2548
       #endif
2548
       #if HAS_FAN2
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
       #endif
2551
       #endif
2551
     #endif // FAN_SOFT_PWM
2552
     #endif // FAN_SOFT_PWM
2552
 
2553
 

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

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

Loading…
Cancel
Save