From 49167fdc5a8f9af0dcf554381a4ee0ac51391fb8 Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Sun, 6 Jun 2021 08:12:58 +1000 Subject: [PATCH 1/2] Translations, add warning message --- Translations/translation_BG.json | 3 ++- Translations/translation_CS.json | 3 ++- Translations/translation_DA.json | 3 ++- Translations/translation_DE.json | 3 ++- Translations/translation_EN.json | 3 ++- Translations/translation_ES.json | 3 ++- Translations/translation_FI.json | 3 ++- Translations/translation_FR.json | 3 ++- Translations/translation_HR.json | 3 ++- Translations/translation_HU.json | 3 ++- Translations/translation_IT.json | 3 ++- Translations/translation_JA_JP.json | 3 ++- Translations/translation_LT.json | 3 ++- Translations/translation_NL.json | 3 ++- Translations/translation_NL_BE.json | 3 ++- Translations/translation_NO.json | 3 ++- Translations/translation_PL.json | 3 ++- Translations/translation_PT.json | 3 ++- Translations/translation_RU.json | 3 ++- Translations/translation_SK.json | 3 ++- Translations/translation_SL.json | 3 ++- Translations/translation_SR_CYRL.json | 3 ++- Translations/translation_SR_LATN.json | 3 ++- Translations/translation_SV.json | 3 ++- Translations/translation_TR.json | 3 ++- Translations/translation_UK.json | 3 ++- Translations/translation_YUE_HK.json | 3 ++- Translations/translation_ZH_CN.json | 3 ++- Translations/translation_ZH_TW.json | 4 +++- Translations/translations_def.js | 3 +++ 30 files changed, 62 insertions(+), 29 deletions(-) diff --git a/Translations/translation_BG.json b/Translations/translation_BG.json index 337ea374..bbb28606 100644 --- a/Translations/translation_BG.json +++ b/Translations/translation_BG.json @@ -42,7 +42,8 @@ ], "LockingKeysString": " LOCKED", "UnlockingKeysString": "UNLOCKED", - "WarningKeysLockedString": "!LOCKED!" + "WarningKeysLockedString": "!LOCKED!", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "R", diff --git a/Translations/translation_CS.json b/Translations/translation_CS.json index 9964c606..8088bbff 100644 --- a/Translations/translation_CS.json +++ b/Translations/translation_CS.json @@ -42,7 +42,8 @@ ], "LockingKeysString": " LOCKED", "UnlockingKeysString": "UNLOCKED", - "WarningKeysLockedString": "!LOCKED!" + "WarningKeysLockedString": "!LOCKED!", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "P", diff --git a/Translations/translation_DA.json b/Translations/translation_DA.json index 63560530..38e2f38e 100644 --- a/Translations/translation_DA.json +++ b/Translations/translation_DA.json @@ -42,7 +42,8 @@ ], "LockingKeysString": " LOCKED", "UnlockingKeysString": "UNLOCKED", - "WarningKeysLockedString": "!LOCKED!" + "WarningKeysLockedString": "!LOCKED!", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "H", diff --git a/Translations/translation_DE.json b/Translations/translation_DE.json index 9fa6d1c2..29a8cd3b 100644 --- a/Translations/translation_DE.json +++ b/Translations/translation_DE.json @@ -43,7 +43,8 @@ ], "LockingKeysString": "GESPERRT", "UnlockingKeysString": "ENTSPERRT", - "WarningKeysLockedString": "!GESPERRT!" + "WarningKeysLockedString": "!GESPERRT!", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "R", diff --git a/Translations/translation_EN.json b/Translations/translation_EN.json index 8e22848f..a4b024f1 100644 --- a/Translations/translation_EN.json +++ b/Translations/translation_EN.json @@ -42,7 +42,8 @@ ], "LockingKeysString": "LOCKED", "UnlockingKeysString": "UNLOCKED", - "WarningKeysLockedString": "!LOCKED!" + "WarningKeysLockedString": "!LOCKED!", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "R", diff --git a/Translations/translation_ES.json b/Translations/translation_ES.json index 801164a9..09bf4d47 100644 --- a/Translations/translation_ES.json +++ b/Translations/translation_ES.json @@ -43,7 +43,8 @@ ], "LockingKeysString": " BLOQUEADO", "UnlockingKeysString": "DESBLOQUEADO", - "WarningKeysLockedString": "¡BLOQUEADO!" + "WarningKeysLockedString": "¡BLOQUEADO!", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "D", diff --git a/Translations/translation_FI.json b/Translations/translation_FI.json index 86cbd721..399b050d 100644 --- a/Translations/translation_FI.json +++ b/Translations/translation_FI.json @@ -41,7 +41,8 @@ ], "LockingKeysString": " LUKITTU", "UnlockingKeysString": "AUKI", - "WarningKeysLockedString": "!LUKKO!" + "WarningKeysLockedString": "!LUKKO!", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "O", diff --git a/Translations/translation_FR.json b/Translations/translation_FR.json index bc49e8e1..a5b430f5 100644 --- a/Translations/translation_FR.json +++ b/Translations/translation_FR.json @@ -42,7 +42,8 @@ ], "LockingKeysString": "VERROUIL", "UnlockingKeysString": "DEVERROU", - "WarningKeysLockedString": "! VERR. !" + "WarningKeysLockedString": "! VERR. !", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "D", diff --git a/Translations/translation_HR.json b/Translations/translation_HR.json index 8d57938d..350c3789 100644 --- a/Translations/translation_HR.json +++ b/Translations/translation_HR.json @@ -42,7 +42,8 @@ ], "LockingKeysString": " LOCKED", "UnlockingKeysString": "UNLOCKED", - "WarningKeysLockedString": "!LOCKED!" + "WarningKeysLockedString": "!LOCKED!", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "D", diff --git a/Translations/translation_HU.json b/Translations/translation_HU.json index 2ee4fa77..5873fe34 100644 --- a/Translations/translation_HU.json +++ b/Translations/translation_HU.json @@ -45,7 +45,8 @@ ], "LockingKeysString": "LEZÁRVA", "UnlockingKeysString": "FELOLDVA", - "WarningKeysLockedString": "!LEZÁRVA!" + "WarningKeysLockedString": "!LEZÁRVA!", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "J", diff --git a/Translations/translation_IT.json b/Translations/translation_IT.json index ee13efe1..5862de1f 100644 --- a/Translations/translation_IT.json +++ b/Translations/translation_IT.json @@ -42,7 +42,8 @@ ], "LockingKeysString": "Blocc.", "UnlockingKeysString": "Sblocc.", - "WarningKeysLockedString": "BLOCCATO" + "WarningKeysLockedString": "BLOCCATO", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "D", diff --git a/Translations/translation_JA_JP.json b/Translations/translation_JA_JP.json index 9a34b60e..374d8fd0 100644 --- a/Translations/translation_JA_JP.json +++ b/Translations/translation_JA_JP.json @@ -40,7 +40,8 @@ ], "LockingKeysString": "ボタンロック", "UnlockingKeysString": "ロックを解除", - "WarningKeysLockedString": "!入力ロック中!" + "WarningKeysLockedString": "!入力ロック中!", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "右", diff --git a/Translations/translation_LT.json b/Translations/translation_LT.json index ee8f9346..dc4b9e87 100644 --- a/Translations/translation_LT.json +++ b/Translations/translation_LT.json @@ -42,7 +42,8 @@ ], "LockingKeysString": " UŽRAKIN", "UnlockingKeysString": "ATRAKIN", - "WarningKeysLockedString": "!UŽRAK!" + "WarningKeysLockedString": "!UŽRAK!", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "D", diff --git a/Translations/translation_NL.json b/Translations/translation_NL.json index 8bdd20fe..abb4f5f9 100644 --- a/Translations/translation_NL.json +++ b/Translations/translation_NL.json @@ -42,7 +42,8 @@ ], "LockingKeysString": " GEBLOKKEERD", "UnlockingKeysString": "GEDEBLOKKEERD", - "WarningKeysLockedString": "!GEBLOKKEERD!" + "WarningKeysLockedString": "!GEBLOKKEERD!", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "R", diff --git a/Translations/translation_NL_BE.json b/Translations/translation_NL_BE.json index 20e46163..0ea0a525 100644 --- a/Translations/translation_NL_BE.json +++ b/Translations/translation_NL_BE.json @@ -42,7 +42,8 @@ ], "LockingKeysString": " LOCKED", "UnlockingKeysString": "UNLOCKED", - "WarningKeysLockedString": "!LOCKED!" + "WarningKeysLockedString": "!LOCKED!", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "R", diff --git a/Translations/translation_NO.json b/Translations/translation_NO.json index 43c390f1..68a3edfc 100644 --- a/Translations/translation_NO.json +++ b/Translations/translation_NO.json @@ -42,7 +42,8 @@ ], "LockingKeysString": " LOCKED", "UnlockingKeysString": "UNLOCKED", - "WarningKeysLockedString": "!LOCKED!" + "WarningKeysLockedString": "!LOCKED!", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "H", diff --git a/Translations/translation_PL.json b/Translations/translation_PL.json index f5fc3bb8..5eed150e 100644 --- a/Translations/translation_PL.json +++ b/Translations/translation_PL.json @@ -43,7 +43,8 @@ ], "LockingKeysString": " ZABLOK.", "UnlockingKeysString": "ODBLOK.", - "WarningKeysLockedString": "!ZABLOK!" + "WarningKeysLockedString": "!ZABLOK!", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "P", diff --git a/Translations/translation_PT.json b/Translations/translation_PT.json index 65729ca6..1a8a8136 100644 --- a/Translations/translation_PT.json +++ b/Translations/translation_PT.json @@ -42,7 +42,8 @@ ], "LockingKeysString": "LOCKED", "UnlockingKeysString": "UNLOCKED", - "WarningKeysLockedString": "!LOCKED!" + "WarningKeysLockedString": "!LOCKED!", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "D", diff --git a/Translations/translation_RU.json b/Translations/translation_RU.json index 55a84446..1b03e5c5 100644 --- a/Translations/translation_RU.json +++ b/Translations/translation_RU.json @@ -43,7 +43,8 @@ ], "LockingKeysString": "LOCKED", "UnlockingKeysString": "UNLOCKED", - "WarningKeysLockedString": "!LOCKED!" + "WarningKeysLockedString": "!LOCKED!", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "П", diff --git a/Translations/translation_SK.json b/Translations/translation_SK.json index 6e943d2b..c9e82813 100644 --- a/Translations/translation_SK.json +++ b/Translations/translation_SK.json @@ -42,7 +42,8 @@ ], "LockingKeysString": "ZABLOK.", "UnlockingKeysString": "ODBLOK.", - "WarningKeysLockedString": "!ZABLOK!" + "WarningKeysLockedString": "!ZABLOK!", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "P", diff --git a/Translations/translation_SL.json b/Translations/translation_SL.json index beb803bd..02c64e45 100644 --- a/Translations/translation_SL.json +++ b/Translations/translation_SL.json @@ -42,7 +42,8 @@ ], "LockingKeysString": "ZAKLENJ.", "UnlockingKeysString": "ODKLENJ.", - "WarningKeysLockedString": "ZAKLENJ." + "WarningKeysLockedString": "ZAKLENJ.", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "D", diff --git a/Translations/translation_SR_CYRL.json b/Translations/translation_SR_CYRL.json index 64d76e15..fd55b588 100644 --- a/Translations/translation_SR_CYRL.json +++ b/Translations/translation_SR_CYRL.json @@ -42,7 +42,8 @@ ], "LockingKeysString": "LOCKED", "UnlockingKeysString": "UNLOCKED", - "WarningKeysLockedString": "!LOCKED!" + "WarningKeysLockedString": "!LOCKED!", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "Д", diff --git a/Translations/translation_SR_LATN.json b/Translations/translation_SR_LATN.json index 97e9a7c3..df5599fd 100644 --- a/Translations/translation_SR_LATN.json +++ b/Translations/translation_SR_LATN.json @@ -42,7 +42,8 @@ ], "LockingKeysString": "LOCKED", "UnlockingKeysString": "UNLOCKED", - "WarningKeysLockedString": "!LOCKED!" + "WarningKeysLockedString": "!LOCKED!", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "D", diff --git a/Translations/translation_SV.json b/Translations/translation_SV.json index 65afc2cb..358bf379 100644 --- a/Translations/translation_SV.json +++ b/Translations/translation_SV.json @@ -36,7 +36,8 @@ ], "LockingKeysString": "LÅST", "UnlockingKeysString": "UPPLÅST", - "WarningKeysLockedString": "!LÅST!" + "WarningKeysLockedString": "!LÅST!", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "H", diff --git a/Translations/translation_TR.json b/Translations/translation_TR.json index bd194f5a..cfec4a11 100644 --- a/Translations/translation_TR.json +++ b/Translations/translation_TR.json @@ -45,7 +45,8 @@ ], "LockingKeysString": "LOCKED", "UnlockingKeysString": "UNLOCKED", - "WarningKeysLockedString": "!LOCKED!" + "WarningKeysLockedString": "!LOCKED!", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "R", diff --git a/Translations/translation_UK.json b/Translations/translation_UK.json index 5c76f57b..ea20a150 100644 --- a/Translations/translation_UK.json +++ b/Translations/translation_UK.json @@ -43,7 +43,8 @@ ], "LockingKeysString": "ЗАБЛОК.", "UnlockingKeysString": "РОЗБЛОК.", - "WarningKeysLockedString": "!ЗАБЛОК!" + "WarningKeysLockedString": "!ЗАБЛОК!", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "П", diff --git a/Translations/translation_YUE_HK.json b/Translations/translation_YUE_HK.json index b6c6454c..c595a25d 100644 --- a/Translations/translation_YUE_HK.json +++ b/Translations/translation_YUE_HK.json @@ -40,7 +40,8 @@ ], "LockingKeysString": "已鎖定", "UnlockingKeysString": "已解除鎖定", - "WarningKeysLockedString": "!撳掣鎖定!" + "WarningKeysLockedString": "!撳掣鎖定!", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "右", diff --git a/Translations/translation_ZH_CN.json b/Translations/translation_ZH_CN.json index ca2370fd..78a21520 100644 --- a/Translations/translation_ZH_CN.json +++ b/Translations/translation_ZH_CN.json @@ -40,7 +40,8 @@ ], "LockingKeysString": "已锁定", "UnlockingKeysString": "已解除锁定", - "WarningKeysLockedString": "!按键锁定!" + "WarningKeysLockedString": "!按键锁定!", + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "右", diff --git a/Translations/translation_ZH_TW.json b/Translations/translation_ZH_TW.json index 46082a59..7f8d6936 100644 --- a/Translations/translation_ZH_TW.json +++ b/Translations/translation_ZH_TW.json @@ -40,7 +40,9 @@ ], "LockingKeysString": "已鎖定", "UnlockingKeysString": "已解除鎖定", - "WarningKeysLockedString": "!按鍵鎖定!" + "WarningKeysLockedString": "!按鍵鎖定!", + "WarningThermalRunaway":["Thermal","Runaway"], + "WarningThermalRunaway":["Thermal","Runaway"] }, "characters": { "SettingRightChar": "右", diff --git a/Translations/translations_def.js b/Translations/translations_def.js index 6d0f206e..d2ecd5f6 100644 --- a/Translations/translations_def.js +++ b/Translations/translations_def.js @@ -83,6 +83,9 @@ var def = }, { "id": "WarningKeysLockedString" + }, + { + "id": "WarningThermalRunaway" } ], "characters": [ From 966f4d732d015c63006663dc164187225fc1001a Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Sun, 6 Jun 2021 08:14:40 +1000 Subject: [PATCH 2/2] Approx thermal runaway config --- source/Core/Inc/Translation.h | 1 + source/Core/Inc/configuration.h | 3 +++ source/Core/Threads/GUIThread.cpp | 13 +++++++++-- source/Core/Threads/PIDThread.cpp | 37 +++++++++++++++++++++++++++++-- 4 files changed, 50 insertions(+), 4 deletions(-) diff --git a/source/Core/Inc/Translation.h b/source/Core/Inc/Translation.h index 84e88844..1e9c7635 100644 --- a/source/Core/Inc/Translation.h +++ b/source/Core/Inc/Translation.h @@ -84,6 +84,7 @@ struct TranslationIndexTable { uint16_t LockingKeysString; uint16_t UnlockingKeysString; uint16_t WarningKeysLockedString; + uint16_t WarningThermalRunaway; uint16_t SettingRightChar; uint16_t SettingLeftChar; diff --git a/source/Core/Inc/configuration.h b/source/Core/Inc/configuration.h index 66f3f828..bbe5ffec 100644 --- a/source/Core/Inc/configuration.h +++ b/source/Core/Inc/configuration.h @@ -94,6 +94,9 @@ #define DETAILED_SOLDERING 0 // 0: Disable 1: Enable - Default 0 #define DETAILED_IDLE 0 // 0: Disable 1: Enable - Default 0 +#define THERMAL_RUNAWAY_TIME_SEC 20 +#define THERMAL_RUNAWAY_TEMP_C 20 + #define CUT_OUT_SETTING 0 // default to no cut-off voltage #define RECOM_VOL_CELL 33 // Minimum voltage per cell (Recommended 3.3V (33)) #define TEMPERATURE_INF 0 // default to 0 diff --git a/source/Core/Threads/GUIThread.cpp b/source/Core/Threads/GUIThread.cpp index df032b26..ad12452d 100644 --- a/source/Core/Threads/GUIThread.cpp +++ b/source/Core/Threads/GUIThread.cpp @@ -28,6 +28,7 @@ extern "C" { // File local variables extern uint32_t currentTempTargetDegC; extern TickType_t lastMovementTime; +extern bool heaterThermalRunaway; extern osThreadId GUITaskHandle; extern osThreadId MOVTaskHandle; extern osThreadId PIDTaskHandle; @@ -62,7 +63,7 @@ void GUIDelay() { // This limits the re-draw rate to the LCD and also lets the DMA run // As the gui task can very easily fill this bus with transactions, which will // prevent the movement detection from running - osDelay(50); + vTaskDelay(5 * TICKS_10MS); } void gui_drawTipTemp(bool symbol, const FontStyle font) { // Draw tip temp handling unit conversion & tolerance near setpoint @@ -608,7 +609,6 @@ static void gui_solderingMode(uint8_t jumpToSleep) { } } OLED::refresh(); - // Update the setpoints for the temperature if (boostModeOn) { if (systemSettings.temperatureInF) @@ -645,6 +645,15 @@ static void gui_solderingMode(uint8_t jumpToSleep) { } else { setStatusLED(LED_HEATING); } + // If we have tripped thermal runaway, turn off header and show warning + if (heaterThermalRunaway) { + currentTempTargetDegC = 0; // heaater control off + // TODO WARNING + + warnUser(translatedString(Tr->WarningThermalRunaway), 10 * TICKS_SECOND); + heaterThermalRunaway = false; + return; + } // slow down ui update rate GUIDelay(); } diff --git a/source/Core/Threads/PIDThread.cpp b/source/Core/Threads/PIDThread.cpp index e8a69073..ff90c76a 100644 --- a/source/Core/Threads/PIDThread.cpp +++ b/source/Core/Threads/PIDThread.cpp @@ -19,6 +19,7 @@ static TickType_t powerPulseDurationUnit = (5 * TICKS_100MS) / 2; // 250 ms TaskHandle_t pidTaskNotification = NULL; uint32_t currentTempTargetDegC = 0; // Current temperature target in C int32_t powerSupplyWattageLimit = 0; +bool heaterThermalRunaway = false; /* StartPIDTask function */ void startPIDTask(void const *argument __unused) { /* @@ -32,8 +33,10 @@ void startPIDTask(void const *argument __unused) { history tempError = {{0}, 0, 0}; currentTempTargetDegC = 0; // Force start with no output (off). If in sleep / soldering this will // be over-ridden rapidly - pidTaskNotification = xTaskGetCurrentTaskHandle(); - uint32_t PIDTempTarget = 0; + pidTaskNotification = xTaskGetCurrentTaskHandle(); + uint32_t PIDTempTarget = 0; + uint16_t tipTempCRunawayTemp = 0; + TickType_t runawaylastChangeTime = 0; #ifdef SLEW_LIMIT int32_t x10WattsOutLast = 0; #endif @@ -91,6 +94,33 @@ void startPIDTask(void const *argument __unused) { // and counters extra power if the iron is no longer losing temp. // basically: temp - lastTemp // Unfortunately, our temp signal is too noisy to really help. + + // Check for thermal runaway, where it has been x seconds with negligible (y) temp rise + // While trying to actively heat + if ((tError > THERMAL_RUNAWAY_TEMP_C)) { + // Temp error is high + int16_t delta = (int16_t)currentTipTempInC - (int16_t)tipTempCRunawayTemp; + if (delta < 0) { + delta = -delta; + } + if (delta > THERMAL_RUNAWAY_TEMP_C) { + // We have heated up more than the threshold, reset the timer + tipTempCRunawayTemp = currentTipTempInC; + runawaylastChangeTime = xTaskGetTickCount(); + } else { + if ((xTaskGetTickCount() - runawaylastChangeTime) > (THERMAL_RUNAWAY_TIME_SEC * TICKS_SECOND)) { + // It has taken too long to rise + heaterThermalRunaway = true; + } + } + } else { + tipTempCRunawayTemp = currentTipTempInC; + runawaylastChangeTime = xTaskGetTickCount(); + } + + } else { + tipTempCRunawayTemp = currentTipTempInC; + runawaylastChangeTime = xTaskGetTickCount(); } // If the user turns on the option of using an occasional pulse to keep the power bank on if (systemSettings.KeepAwakePulse) { @@ -111,6 +141,9 @@ void startPIDTask(void const *argument __unused) { if (getTipRawTemp(0) > (0x7FFF - 32)) { x10WattsOut = 0; } + if (heaterThermalRunaway) { + x10WattsOut = 0; + } if (systemSettings.powerLimit && x10WattsOut > (systemSettings.powerLimit * 10)) { x10WattsOut = systemSettings.powerLimit * 10; }