diff options
author | David Crocker <dcrocker@eschertech.com> | 2019-12-12 22:00:33 +0300 |
---|---|---|
committer | David Crocker <dcrocker@eschertech.com> | 2019-12-12 22:00:33 +0300 |
commit | ebeaf0703a867f05d862ceede912987e368ffe44 (patch) | |
tree | 0e64d448a08e847e7f31da7dd5d4b1b44e55a907 /src/Fans | |
parent | 576607487423909f49f41dd8de6849e8f61ee6b3 (diff) |
3.0RC1 provisional
Implemented extruder stall detection for G1 H1 E moves
Fixed M119 crash when an axis had no endstop
Duet 3 build now loads IAP into RAM
Diffstat (limited to 'src/Fans')
-rw-r--r-- | src/Fans/Fan.cpp | 6 | ||||
-rw-r--r-- | src/Fans/LocalFan.cpp | 55 |
2 files changed, 30 insertions, 31 deletions
diff --git a/src/Fans/Fan.cpp b/src/Fans/Fan.cpp index 47fd5e9b..cec04f8b 100644 --- a/src/Fans/Fan.cpp +++ b/src/Fans/Fan.cpp @@ -79,7 +79,7 @@ bool Fan::Configure(unsigned int mcode, size_t fanNum, GCodeBuffer& gb, const St if (gb.Seen('H')) // Set thermostatically-controlled sensors { seen = true; - int32_t sensors[MaxSensorsInSystem]; // signed because we use H-1 to disable thermostatic mode + int32_t sensors[MaxSensors]; // signed because we use H-1 to disable thermostatic mode size_t numH = ARRAY_SIZE(sensors); gb.GetIntArray(sensors, numH, false); @@ -90,7 +90,7 @@ bool Fan::Configure(unsigned int mcode, size_t fanNum, GCodeBuffer& gb, const St const int hnum = sensors[h]; if (hnum >= 0) { - if (hnum < (int)MaxSensorsInSystem) + if (hnum < (int)MaxSensors) { SetBit(sensorsMonitored, (unsigned int)hnum); } @@ -144,7 +144,7 @@ bool Fan::Configure(unsigned int mcode, size_t fanNum, GCodeBuffer& gb, const St if (sensorsMonitored != 0) { reply.catf(", temperature: %.1f:%.1fC, sensors:", (double)triggerTemperatures[0], (double)triggerTemperatures[1]); - for (unsigned int i = 0; i < MaxSensorsInSystem; ++i) + for (unsigned int i = 0; i < MaxSensors; ++i) { if (IsBitSet(sensorsMonitored, i)) { diff --git a/src/Fans/LocalFan.cpp b/src/Fans/LocalFan.cpp index 77fb05e9..dab83bd9 100644 --- a/src/Fans/LocalFan.cpp +++ b/src/Fans/LocalFan.cpp @@ -81,39 +81,38 @@ void LocalFan::InternalRefresh() { reqVal = 0.0; const bool bangBangMode = (triggerTemperatures[1] <= triggerTemperatures[0]); - for (size_t sensorNum = 0; sensorNum < MaxSensorsInSystem; ++sensorNum) + SensorsBitmap copySensorsMonitored = sensorsMonitored; + while (copySensorsMonitored != 0) { - // Check if this sensor is both monitored by this fan and in use - if (IsBitSet(sensorsMonitored, sensorNum)) + unsigned int sensorNum = LowestSetBit(copySensorsMonitored); + ClearBit(copySensorsMonitored, sensorNum); + const auto sensor = reprap.GetHeat().FindSensor(sensorNum); + if (sensor.IsNotNull()) { - const auto sensor = reprap.GetHeat().FindSensor(sensorNum); - if (sensor.IsNotNull()) + //TODO we used to turn the fan on if the associated heater was being tuned + float ht; + const TemperatureError err = sensor->GetLatestTemperature(ht); + if (err != TemperatureError::success || ht < BadLowTemperature || ht >= triggerTemperatures[1]) { - //TODO we used to turn the fan on if the associated heater was being tuned - float ht; - const TemperatureError err = sensor->GetLatestTemperature(ht); - if (err != TemperatureError::success || ht < BadLowTemperature || ht >= triggerTemperatures[1]) - { - reqVal = max<float>(reqVal, (bangBangMode) ? max<float>(0.5, val) : 1.0); - } - else if (!bangBangMode && ht > triggerTemperatures[0]) - { - // We already know that ht < triggerTemperatures[1], therefore unless we have NaNs it is safe to divide by (triggerTemperatures[1] - triggerTemperatures[0]) - reqVal = max<float>(reqVal, (ht - triggerTemperatures[0])/(triggerTemperatures[1] - triggerTemperatures[0])); - } - else if (lastVal != 0.0 && ht + ThermostatHysteresis > triggerTemperatures[0]) // if the fan is on, add a hysteresis before turning it off - { - const float minFanSpeed = (bangBangMode) ? max<float>(0.5, val) : minVal; - reqVal = constrain<float>(reqVal, minFanSpeed, maxVal); - } + reqVal = max<float>(reqVal, (bangBangMode) ? max<float>(0.5, val) : 1.0); + } + else if (!bangBangMode && ht > triggerTemperatures[0]) + { + // We already know that ht < triggerTemperatures[1], therefore unless we have NaNs it is safe to divide by (triggerTemperatures[1] - triggerTemperatures[0]) + reqVal = max<float>(reqVal, (ht - triggerTemperatures[0])/(triggerTemperatures[1] - triggerTemperatures[0])); + } + else if (lastVal != 0.0 && ht + ThermostatHysteresis > triggerTemperatures[0]) // if the fan is on, add a hysteresis before turning it off + { + const float minFanSpeed = (bangBangMode) ? max<float>(0.5, val) : minVal; + reqVal = constrain<float>(reqVal, minFanSpeed, maxVal); + } #if HAS_SMART_DRIVERS - const int channel = sensor->GetSmartDriversChannel(); - if (channel >= 0) - { - driverChannelsMonitored |= 1 << (unsigned int)channel; - } -#endif + const int channel = sensor->GetSmartDriversChannel(); + if (channel >= 0) + { + driverChannelsMonitored |= 1 << (unsigned int)channel; } +#endif } } } |