Pārlūkot izejas kodu

⚡️ Reduce calls to set fan PWM (#23149)

Tanguy Pruvot 2 gadus atpakaļ
vecāks
revīzija
1c31366bf3
Revīzijas autora e-pasta adrese nav piesaistīta nevienam kontam
1 mainītis faili ar 17 papildinājumiem un 4 dzēšanām
  1. 17
    4
      Marlin/src/module/planner.cpp

+ 17
- 4
Marlin/src/module/planner.cpp Parādīt failu

@@ -1311,7 +1311,8 @@ void Planner::check_axes_activity() {
1311 1311
   #endif
1312 1312
 
1313 1313
   #if HAS_TAIL_FAN_SPEED
1314
-    uint8_t tail_fan_speed[FAN_COUNT];
1314
+    static uint8_t tail_fan_speed[FAN_COUNT];
1315
+    bool fans_need_update = false;
1315 1316
   #endif
1316 1317
 
1317 1318
   #if ENABLED(BARICUDA)
@@ -1330,7 +1331,13 @@ void Planner::check_axes_activity() {
1330 1331
     #endif
1331 1332
 
1332 1333
     #if HAS_TAIL_FAN_SPEED
1333
-      FANS_LOOP(i) tail_fan_speed[i] = thermalManager.scaledFanSpeed(i, block->fan_speed[i]);
1334
+      FANS_LOOP(i) {
1335
+        const uint8_t spd = thermalManager.scaledFanSpeed(i, block->fan_speed[i]);
1336
+        if (tail_fan_speed[i] != spd) {
1337
+          fans_need_update = true;
1338
+          tail_fan_speed[i] = spd;
1339
+        }
1340
+      }
1334 1341
     #endif
1335 1342
 
1336 1343
     #if ENABLED(BARICUDA)
@@ -1358,7 +1365,13 @@ void Planner::check_axes_activity() {
1358 1365
     TERN_(HAS_CUTTER, cutter.refresh());
1359 1366
 
1360 1367
     #if HAS_TAIL_FAN_SPEED
1361
-      FANS_LOOP(i) tail_fan_speed[i] = thermalManager.scaledFanSpeed(i);
1368
+      FANS_LOOP(i) {
1369
+        const uint8_t spd = thermalManager.scaledFanSpeed(i);
1370
+        if (tail_fan_speed[i] != spd) {
1371
+          fans_need_update = true;
1372
+          tail_fan_speed[i] = spd;
1373
+        }
1374
+      }
1362 1375
     #endif
1363 1376
 
1364 1377
     #if ENABLED(BARICUDA)
@@ -1384,7 +1397,7 @@ void Planner::check_axes_activity() {
1384 1397
   // Update Fan speeds
1385 1398
   // Only if synchronous M106/M107 is disabled
1386 1399
   //
1387
-  TERN_(HAS_TAIL_FAN_SPEED, sync_fan_speeds(tail_fan_speed));
1400
+  TERN_(HAS_TAIL_FAN_SPEED, if (fans_need_update) sync_fan_speeds(tail_fan_speed));
1388 1401
 
1389 1402
   TERN_(AUTOTEMP, autotemp_task());
1390 1403
 

Notiek ielāde…
Atcelt
Saglabāt