Merge branch 'master' of https://github.com/Ralim/ts100
This commit is contained in:
@@ -803,7 +803,8 @@ void startGUITask(void const *argument __unused) {
|
|||||||
#ifdef MODEL_TS80
|
#ifdef MODEL_TS80
|
||||||
//Here we re-check for tip presence
|
//Here we re-check for tip presence
|
||||||
if (idealQCVoltage < 90)
|
if (idealQCVoltage < 90)
|
||||||
idealQCVoltage = calculateMaxVoltage(systemSettings.cutoutSetting);
|
idealQCVoltage = calculateMaxVoltage(
|
||||||
|
systemSettings.cutoutSetting);
|
||||||
seekQC(idealQCVoltage, systemSettings.voltageDiv);
|
seekQC(idealQCVoltage, systemSettings.voltageDiv);
|
||||||
#endif
|
#endif
|
||||||
gui_solderingMode(0); // enter soldering mode
|
gui_solderingMode(0); // enter soldering mode
|
||||||
@@ -943,7 +944,8 @@ void startPIDTask(void const *argument __unused) {
|
|||||||
// to be unstable. Use a rolling average to dampen it.
|
// to be unstable. Use a rolling average to dampen it.
|
||||||
// We overshoot by roughly 1/2 of 1 degree Fahrenheit.
|
// We overshoot by roughly 1/2 of 1 degree Fahrenheit.
|
||||||
// This helps stabilize the display.
|
// This helps stabilize the display.
|
||||||
int32_t tError = currentlyActiveTemperatureTarget - rawTemp + rawC/4;
|
int32_t tError = currentlyActiveTemperatureTarget - rawTemp
|
||||||
|
+ rawC / 4;
|
||||||
tError = tError > INT16_MAX ? INT16_MAX : tError;
|
tError = tError > INT16_MAX ? INT16_MAX : tError;
|
||||||
tError = tError < INT16_MIN ? INT16_MIN : tError;
|
tError = tError < INT16_MIN ? INT16_MIN : tError;
|
||||||
tempError.update(tError);
|
tempError.update(tError);
|
||||||
@@ -954,17 +956,21 @@ void startPIDTask(void const *argument __unused) {
|
|||||||
// P term - total power needed to hit target temp next cycle.
|
// P term - total power needed to hit target temp next cycle.
|
||||||
// thermal mass = 1690 milliJ/*C for my tip.
|
// thermal mass = 1690 milliJ/*C for my tip.
|
||||||
// = Watts*Seconds to raise Temp from room temp to +100*C, divided by 100*C.
|
// = Watts*Seconds to raise Temp from room temp to +100*C, divided by 100*C.
|
||||||
// divided by 20 to let I term dominate near set point.
|
// we divide milliWattsNeeded by 20 to let the I term dominate near the set point.
|
||||||
// I should retune this, but don't want to do it until
|
// This is necessary because of the temp noise and thermal lag in the system.
|
||||||
// the feed-forward temp adjustment is in place.
|
// Once we have feed-forward temp estimation we should be able to better tune this.
|
||||||
|
|
||||||
#ifdef MODEL_TS100
|
#ifdef MODEL_TS100
|
||||||
const uint16_t mass = 1690 / 20;
|
const uint16_t mass = 1690 / 20; // divide here so division is compile-time.
|
||||||
#endif
|
#endif
|
||||||
#ifdef MODEL_TS80
|
#ifdef MODEL_TS80
|
||||||
const uint16_t mass = 1690 / 50;
|
const uint16_t mass = 1690 / 50;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int32_t milliWattsNeeded = tempToMilliWatts(tempError.average(), mass, rawC);
|
int32_t milliWattsNeeded = tempToMilliWatts(tempError.average(),
|
||||||
|
mass, rawC);
|
||||||
|
// note that milliWattsNeeded is sometimes negative, this counters overshoot
|
||||||
|
// from I term's inertia.
|
||||||
milliWattsOut += milliWattsNeeded;
|
milliWattsOut += milliWattsNeeded;
|
||||||
|
|
||||||
// I term - energy needed to compensate for heat loss.
|
// I term - energy needed to compensate for heat loss.
|
||||||
|
|||||||
@@ -17,6 +17,8 @@ history<uint16_t, oscillationPeriod> milliWattHistory = {{0}, 0, 0};
|
|||||||
|
|
||||||
int32_t tempToMilliWatts(int32_t rawTemp, uint16_t mass, uint8_t rawC) {
|
int32_t tempToMilliWatts(int32_t rawTemp, uint16_t mass, uint8_t rawC) {
|
||||||
// mass is in milliJ/*C, rawC is raw per degree C
|
// mass is in milliJ/*C, rawC is raw per degree C
|
||||||
|
// returns milliWatts needed to raise/lower a mass by rawTemp
|
||||||
|
// degrees in one cycle.
|
||||||
int32_t milliJoules = mass * rawTemp / rawC;
|
int32_t milliJoules = mass * rawTemp / rawC;
|
||||||
return milliJoules * hz;
|
return milliJoules * hz;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user