Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Duet3D/RepRapFirmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src/Fans
diff options
context:
space:
mode:
authorDavid Crocker <dcrocker@eschertech.com>2019-12-12 22:00:33 +0300
committerDavid Crocker <dcrocker@eschertech.com>2019-12-12 22:00:33 +0300
commitebeaf0703a867f05d862ceede912987e368ffe44 (patch)
tree0e64d448a08e847e7f31da7dd5d4b1b44e55a907 /src/Fans
parent576607487423909f49f41dd8de6849e8f61ee6b3 (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.cpp6
-rw-r--r--src/Fans/LocalFan.cpp55
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
}
}
}