Better limiter in the PID
This commit is contained in:
@@ -22,6 +22,7 @@
|
|||||||
const uint8_t wattHistoryFilter = 24; // I term look back weighting
|
const uint8_t wattHistoryFilter = 24; // I term look back weighting
|
||||||
extern expMovingAverage<uint32_t, wattHistoryFilter> x10WattHistory;
|
extern expMovingAverage<uint32_t, wattHistoryFilter> x10WattHistory;
|
||||||
|
|
||||||
|
uint32_t availableW10(uint8_t sample);
|
||||||
int32_t tempToX10Watts(int32_t rawTemp);
|
int32_t tempToX10Watts(int32_t rawTemp);
|
||||||
void setTipX10Watts(int32_t mw);
|
void setTipX10Watts(int32_t mw);
|
||||||
uint8_t X10WattsToPWM(int32_t milliWatts, uint8_t sample = 0);
|
uint8_t X10WattsToPWM(int32_t milliWatts, uint8_t sample = 0);
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ void setTipX10Watts(int32_t mw) {
|
|||||||
x10WattHistory.update(actualMilliWatts);
|
x10WattHistory.update(actualMilliWatts);
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t availableW10(uint8_t sample) {
|
uint32_t availableW10(uint8_t sample) {
|
||||||
// P = V^2 / R, v*v = v^2 * 100
|
// P = V^2 / R, v*v = v^2 * 100
|
||||||
// R = R*10
|
// R = R*10
|
||||||
// P therefore is in V^2*100/R*10 = W*10.
|
// P therefore is in V^2*100/R*10 = W*10.
|
||||||
|
|||||||
@@ -171,10 +171,7 @@ void detectThermalRunaway(const int16_t currentTipTempInC, const int tError) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int32_t getX10WattageLimits() {
|
int32_t getX10WattageLimits() {
|
||||||
const auto vin = getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), 0);
|
int32_t limit = availableW10(0);
|
||||||
int32_t limit = ((vin * vin) * tipResistance);
|
|
||||||
limit *= 12; // Default to 20% over
|
|
||||||
limit /= 100;
|
|
||||||
|
|
||||||
if (getSettingValue(SettingsOptions::PowerLimit) && limit > (getSettingValue(SettingsOptions::PowerLimit) * 10)) {
|
if (getSettingValue(SettingsOptions::PowerLimit) && limit > (getSettingValue(SettingsOptions::PowerLimit) * 10)) {
|
||||||
limit = getSettingValue(SettingsOptions::PowerLimit) * 10;
|
limit = getSettingValue(SettingsOptions::PowerLimit) * 10;
|
||||||
|
|||||||
Reference in New Issue
Block a user