diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | README.md | 11 | ||||
-rw-r--r-- | Translations/translation_IT.json | 14 | ||||
-rw-r--r-- | Translations/translation_RU.json | 16 | ||||
-rw-r--r-- | Translations/translation_ZH_CN.json | 86 | ||||
-rw-r--r-- | source/Core/BSP/MHP30/configuration.h | 4 | ||||
-rw-r--r-- | source/Core/BSP/Miniware/configuration.h | 11 | ||||
-rw-r--r-- | source/Core/BSP/Pinecil/configuration.h | 2 | ||||
-rw-r--r-- | source/Core/BSP/Pinecilv2/configuration.h | 2 | ||||
-rw-r--r-- | source/Core/BSP/Sequre/configuration.h | 8 | ||||
-rw-r--r-- | source/Core/Threads/PIDThread.cpp | 72 | ||||
-rw-r--r-- | source/Core/Threads/UI/logic/Soldering.cpp | 2 |
12 files changed, 130 insertions, 99 deletions
@@ -215,3 +215,4 @@ Logo GUI/TS100 Logo Editor/TS100 Logo Editor/bin/ # Tests/linters/sanitizers
source/check-style.log
+.ash_history @@ -64,13 +64,12 @@ For notes on installation for your device, please refer to the flashing guide fo ## Builds -The links in the table below allow to download available builds directly. +The links in the table below allow to download available builds directly: +- current _Stable Release_ is **`v2.22`**; +- _Development Build_ **dynamically** provides _**the latest successful build**_ from **`dev`** branch. -Current stable release is `v2.22`. -_Devel builds_ **dynamically** provide _**the latest successful build**_ from **`dev`** branch. - -| Device | Stable Release | Devel Build | -|:---------------------:|:--------------:|:-----------:| +| Device | Stable Release | Development Build | +|:---------------------:|:--------------:|:-----------------:| | Pinecil V1 | [Pinecil.zip](https://github.com/Ralim/IronOS/releases/download/v2.22/Pinecil.zip) | [Pinecil.zip](https://nightly.link/Ralim/IronOS/workflows/push/dev/Pinecil.zip) | | Pinecil V1/multilang | [Pinecil_multi-lang.zip](https://github.com/Ralim/IronOS/releases/download/v2.22/Pinecil_multi-lang.zip) | [Pinecil_multi-lang.zip](https://nightly.link/Ralim/IronOS/workflows/push/dev/Pinecil_multi-lang.zip) | | Pinecil V2 | [PinecilV2.zip](https://github.com/Ralim/IronOS/releases/download/v2.22/PinecilV2.zip) | [PinecilV2.zip](https://nightly.link/Ralim/IronOS/workflows/push/dev/Pinecilv2.zip) | diff --git a/Translations/translation_IT.json b/Translations/translation_IT.json index 29c08e6d..79906b83 100644 --- a/Translations/translation_IT.json +++ b/Translations/translation_IT.json @@ -116,13 +116,13 @@ "displayText": "Modalità\nsicura" }, "TipTypeAuto": { - "displayText": "Auto\nSense" + "displayText": "Rilevaz.\nauto" }, "TipTypeT12Long": { - "displayText": "TS100\nLong" + "displayText": "TS100\nlunga" }, "TipTypeT12Short": { - "displayText": "Pine\nShort" + "displayText": "Pine\ncorta" }, "TipTypeT12PTS": { "displayText": "PTS\n200" @@ -149,7 +149,7 @@ }, "PDNegTimeout": { "displayText": "Abilitazione\nUSB PD", - "description": "Regola il massimo tempo utile per la negoziazione del protocollo USB Power Delivery con alimentatori compatibili [0: disattiva; multipli di 100 ms]" + "description": "Imposta il tempo di negoziazione del protocollo USB Power Delivery con alimentatori compatibili [0: disattiva; multipli di 100 ms]" }, "USBPDMode": { "displayText": "PD\nMode", @@ -177,7 +177,7 @@ }, "ProfilePhases": { "displayText": "Fasi modalità\nprofilo", - "description": "Imposta il numero di fasi da attuare per un profilo di riscaldamento personalizzato" + "description": "Imposta il numero di fasi da implementare per un profilo di riscaldamento personalizzato" }, "ProfilePreheatTemp": { "displayText": "Temperatura\npreriscaldamento", @@ -340,8 +340,8 @@ "description": "" }, "SolderingTipType": { - "displayText": "Soldering\nTip Type", - "description": "Select the tip type fitted" + "displayText": "Tipo di\npunta", + "description": "Seleziona il modello della punta in uso" } } } diff --git a/Translations/translation_RU.json b/Translations/translation_RU.json index b1139951..81dac2ef 100644 --- a/Translations/translation_RU.json +++ b/Translations/translation_RU.json @@ -116,19 +116,19 @@ "displayText": "Вкл.без\nзапроса" }, "TipTypeAuto": { - "displayText": "Auto\nSense" + "displayText": "Авто\nопред-е" }, "TipTypeT12Long": { - "displayText": "TS100\nLong" + "displayText": "TS100\nстанд." }, "TipTypeT12Short": { - "displayText": "Pine\nShort" + "displayText": "Pine\nкоротк." }, "TipTypeT12PTS": { "displayText": "PTS\n200" }, "TipTypeTS80": { - "displayText": "TS80\n" + "displayText": "TS80(P)\n" }, "TipTypeJBCC210": { "displayText": "JBC\nC210" @@ -252,8 +252,8 @@ "description": "Чувствительность датчика Холла к магнитному полю (1=мин. | ... | 9=макс.)" }, "HallEffSleepTimeout": { - "displayText": "HallSensor\nSleepTime", - "description": "Интервал перед запуском \"спящего режима\", когда эффект Холла превышает пороговое значение" + "displayText": "Интервал\nдатчика Холла", + "description": "Время между превышением датчиком Холла порогового значения и режимом сна" }, "TemperatureUnit": { "displayText": "Единицы\nизмерения", @@ -340,8 +340,8 @@ "description": "" }, "SolderingTipType": { - "displayText": "Soldering\nTip Type", - "description": "Select the tip type fitted" + "displayText": "Тип\nжала", + "description": "Выбор типа установленного жала" } } } diff --git a/Translations/translation_ZH_CN.json b/Translations/translation_ZH_CN.json index 2b93b87e..68561281 100644 --- a/Translations/translation_ZH_CN.json +++ b/Translations/translation_ZH_CN.json @@ -46,10 +46,10 @@ "message": "电压过低" }, "UndervoltageString": { - "message": "Undervoltage" + "message": "欠压" }, "InputVoltageString": { - "message": "VIN: " + "message": "VIN: \n" }, "SleepingAdvancedString": { "message": "Zzzz..." @@ -58,16 +58,16 @@ "message": "<--- " }, "ProfilePreheatString": { - "message": "Preheat" + "message": "预热中" }, "ProfileCooldownString": { - "message": "Cooldown" + "message": "冷却" }, "DeviceFailedValidationWarning": { "message": "这支电烙铁很有可能是冒牌货!" }, "TooHotToStartProfileWarning": { - "message": "Too hot to start profile" + "message": "设备过热" } }, "characters": { @@ -107,16 +107,16 @@ }, "menuValues": { "USBPDModeDefault": { - "displayText": "Default\nMode" + "displayText": "默认模式" }, "USBPDModeNoDynamic": { "displayText": "No\nDynamic" }, "USBPDModeSafe": { - "displayText": "Safe\nMode" + "displayText": "安全模式" }, "TipTypeAuto": { - "displayText": "Auto\nSense" + "displayText": "自动检测" }, "TipTypeT12Long": { "displayText": "TS100\nLong" @@ -152,7 +152,7 @@ "description": "设定USB-PD协议交涉的超时时限;为兼容某些QC电源而设 <x100ms(亳秒)>" }, "USBPDMode": { - "displayText": "PD VPDO", + "displayText": "PD\nVPDO", "description": "启用PPS和EPR快充支持" }, "BoostTemperature": { @@ -176,60 +176,60 @@ "description": "焊接模式时,同时长按两个按键启用按键锁定 <增=只容许增热模式 | 全=完全锁定>" }, "ProfilePhases": { - "displayText": "Profile Phases", - "description": "Number of phases in profile mode" + "displayText": "配置阶数", + "description": "配置模式下的阶段数量" }, "ProfilePreheatTemp": { - "displayText": "Preheat Temp", - "description": "Preheat to this temperature at the start of profile mode" + "displayText": "预热温度", + "description": "配置开始时的目标温度" }, "ProfilePreheatSpeed": { - "displayText": "Preheat Speed", - "description": "Preheat at this rate (degrees per second)" + "displayText": "预热速度", + "description": "将以此速度进行预热 (度/秒)" }, "ProfilePhase1Temp": { - "displayText": "Phase 1 Temp", - "description": "Target temperature for the end of this phase" + "displayText": "阶段1温度", + "description": "此阶段结束时的目标温度" }, "ProfilePhase1Duration": { - "displayText": "Phase 1 Duration", - "description": "Target duration of this phase (seconds)" + "displayText": "阶段1时间", + "description": "此阶段的目标持续时间(秒)" }, "ProfilePhase2Temp": { - "displayText": "Phase 2 Temp", - "description": "" + "displayText": "阶段2温度", + "description": "此阶段结束时的目标温度" }, "ProfilePhase2Duration": { - "displayText": "Phase 2 Duration", - "description": "" + "displayText": "阶段2时间", + "description": "此阶段的目标持续时间(秒)" }, "ProfilePhase3Temp": { - "displayText": "Phase 3 Temp", - "description": "" + "displayText": "阶段3温度", + "description": "此阶段结束时的目标温度" }, "ProfilePhase3Duration": { - "displayText": "Phase 3 Duration", - "description": "" + "displayText": "阶段3时间", + "description": "此阶段的目标持续时间(秒)" }, "ProfilePhase4Temp": { - "displayText": "Phase 4 Temp", - "description": "" + "displayText": "阶段4温度", + "description": "此阶段结束时的目标温度" }, "ProfilePhase4Duration": { - "displayText": "Phase 4 Duration", - "description": "" + "displayText": "阶段4时间", + "description": "此阶段的目标持续时间(秒)" }, "ProfilePhase5Temp": { - "displayText": "Phase 5 Temp", - "description": "" + "displayText": "阶段5温度", + "description": "此阶段结束时的目标温度" }, "ProfilePhase5Duration": { - "displayText": "Phase 5 Duration", - "description": "" + "displayText": "阶段5时间", + "description": "此阶段的目标持续时间(秒)" }, "ProfileCooldownSpeed": { - "displayText": "Cooldown Speed", - "description": "Cooldown at this rate at the end of profile mode (degrees per second)" + "displayText": "冷却速度", + "description": "在配置模式结束时以此速度进行冷却(度/秒)" }, "MotionSensitivity": { "displayText": "动作灵敏度", @@ -252,8 +252,8 @@ "description": "霍尔效应传感器用作启动待机模式的灵敏度 <1=最低灵敏度 | ... | 9=最高灵敏度>" }, "HallEffSleepTimeout": { - "displayText": "HallSensor\nSleepTime", - "description": "Interval before \"sleep mode\" starts when hall effect is above threshold" + "displayText": "霍尔传感器休眠时间", + "description": "当霍尔传感器检测值高于阈值时,进入“睡眠模式”前的间隔时间" }, "TemperatureUnit": { "displayText": "温度单位", @@ -316,7 +316,7 @@ "description": "在下次重启时校正烙铁头热电偶冷接点补偿值(CJC)(温差小于5摄氏度时无需校正)" }, "VoltageCalibration": { - "displayText": "输入电压校正?", + "displayText": "输入电压校正", "description": "开始校正输入电压(VIN)<长按以退出>" }, "PowerPulsePower": { @@ -332,7 +332,7 @@ "description": "为保持电源处于唤醒状态,每次通电脉冲的时间长度 <x250ms(亳秒)>" }, "SettingsReset": { - "displayText": "全部重置?", + "displayText": "全部重置", "description": "将所有设定重置为默认值" }, "LanguageSwitch": { @@ -340,8 +340,8 @@ "description": "" }, "SolderingTipType": { - "displayText": "Soldering\nTip Type", - "description": "Select the tip type fitted" + "displayText": "焊接头类型", + "description": "选择安装合适的尖端类型" } } } diff --git a/source/Core/BSP/MHP30/configuration.h b/source/Core/BSP/MHP30/configuration.h index a2d5910b..8698a857 100644 --- a/source/Core/BSP/MHP30/configuration.h +++ b/source/Core/BSP/MHP30/configuration.h @@ -103,8 +103,8 @@ #define DETAILED_IDLE 0 // 0: Disable 1: Enable - Default 0 // Due to large thermal mass of the PCB being heated we need to pull this back a bit -#define THERMAL_RUNAWAY_TIME_SEC 45 -#define THERMAL_RUNAWAY_TEMP_C 3 +#define THERMAL_RUNAWAY_TIME_SEC 20 +#define THERMAL_RUNAWAY_TEMP_C 2 #define CUT_OUT_SETTING 0 // default to no cut-off voltage #define RECOM_VOL_CELL 33 // Minimum voltage per cell (Recommended 3.3V (33)) diff --git a/source/Core/BSP/Miniware/configuration.h b/source/Core/BSP/Miniware/configuration.h index 913883e1..44ef5d66 100644 --- a/source/Core/BSP/Miniware/configuration.h +++ b/source/Core/BSP/Miniware/configuration.h @@ -63,8 +63,13 @@ * OLED Brightness * */ -#define MIN_BRIGHTNESS 0 // Min OLED brightness selectable -#define MAX_BRIGHTNESS 100 // Max OLED brightness selectable +#if defined(MODEL_TS101) + #define MIN_BRIGHTNESS 1 // Min OLED brightness selectable + #define MAX_BRIGHTNESS 101 // Max OLED brightness selectable +#else + #define MIN_BRIGHTNESS 0 // Min OLED brightness selectable + #define MAX_BRIGHTNESS 100 // Max OLED brightness selectable +#endif #define BRIGHTNESS_STEP 25 // OLED brightness increment #define DEFAULT_BRIGHTNESS 25 // default OLED brightness @@ -104,7 +109,7 @@ #define DETAILED_IDLE 0 // 0: Disable 1: Enable - Default 0 #define THERMAL_RUNAWAY_TIME_SEC 20 -#define THERMAL_RUNAWAY_TEMP_C 10 +#define THERMAL_RUNAWAY_TEMP_C 3 #define CUT_OUT_SETTING 0 // default to no cut-off voltage #define RECOM_VOL_CELL 33 // Minimum voltage per cell (Recommended 3.3V (33)) diff --git a/source/Core/BSP/Pinecil/configuration.h b/source/Core/BSP/Pinecil/configuration.h index fe04595b..bef59a93 100644 --- a/source/Core/BSP/Pinecil/configuration.h +++ b/source/Core/BSP/Pinecil/configuration.h @@ -104,7 +104,7 @@ #define DETAILED_IDLE 0 // 0: Disable 1: Enable - Default 0 #define THERMAL_RUNAWAY_TIME_SEC 20 -#define THERMAL_RUNAWAY_TEMP_C 20 +#define THERMAL_RUNAWAY_TEMP_C 3 #define CUT_OUT_SETTING 0 // default to no cut-off voltage #define RECOM_VOL_CELL 33 // Minimum voltage per cell (Recommended 3.3V (33)) diff --git a/source/Core/BSP/Pinecilv2/configuration.h b/source/Core/BSP/Pinecilv2/configuration.h index 8ca4ff40..3f7aa52e 100644 --- a/source/Core/BSP/Pinecilv2/configuration.h +++ b/source/Core/BSP/Pinecilv2/configuration.h @@ -105,7 +105,7 @@ #define DETAILED_IDLE 0 // 0: Disable 1: Enable - Default 0 #define THERMAL_RUNAWAY_TIME_SEC 20 -#define THERMAL_RUNAWAY_TEMP_C 20 +#define THERMAL_RUNAWAY_TEMP_C 3 #define CUT_OUT_SETTING 0 // default to no cut-off voltage #define RECOM_VOL_CELL 33 // Minimum voltage per cell (Recommended 3.3V (33)) diff --git a/source/Core/BSP/Sequre/configuration.h b/source/Core/BSP/Sequre/configuration.h index be3c9f6b..df06f68e 100644 --- a/source/Core/BSP/Sequre/configuration.h +++ b/source/Core/BSP/Sequre/configuration.h @@ -133,7 +133,7 @@ #define TEMP_uV_LOOKUP_S60 #define USB_PD_VMAX 12 // Maximum voltage for PD to negotiate #define THERMAL_RUNAWAY_TIME_SEC 20 -#define THERMAL_RUNAWAY_TEMP_C 10 +#define THERMAL_RUNAWAY_TEMP_C 3 #define HARDWARE_MAX_WATTAGE_X10 600 @@ -167,7 +167,7 @@ #define TEMP_uV_LOOKUP_S60 #define USB_PD_VMAX 20 // Maximum voltage for PD to negotiate #define THERMAL_RUNAWAY_TIME_SEC 20 -#define THERMAL_RUNAWAY_TEMP_C 10 +#define THERMAL_RUNAWAY_TEMP_C 3 #define HARDWARE_MAX_WATTAGE_X10 600 @@ -218,8 +218,8 @@ #define TIP_THERMAL_MASS 30 // X10 watts to raise 1 deg C in 1 second #define TIP_THERMAL_INERTIA 10 // We use a large inertia value to smooth out the drive to the tip since its stupidly sensitive -#define THERMAL_RUNAWAY_TIME_SEC 60 -#define THERMAL_RUNAWAY_TEMP_C 3 +#define THERMAL_RUNAWAY_TIME_SEC 30 +#define THERMAL_RUNAWAY_TEMP_C 2 #define COPPER_HEATER_COIL 1 // Have a heater coil that changes resistance on us #define TIP_RESISTANCE 52 // PCB heater, measured at ~19C. Will shift by temp a decent amount diff --git a/source/Core/Threads/PIDThread.cpp b/source/Core/Threads/PIDThread.cpp index 83c53efd..c7b27118 100644 --- a/source/Core/Threads/PIDThread.cpp +++ b/source/Core/Threads/PIDThread.cpp @@ -30,7 +30,7 @@ int32_t powerSupplyWattageLimit = 0; bool heaterThermalRunaway = false;
static int32_t getPIDResultX10Watts(TemperatureType_t set_point, TemperatureType_t current_value);
-static void detectThermalRunaway(const TemperatureType_t currentTipTempInC, const TemperatureType_t tError);
+static void detectThermalRunaway(const TemperatureType_t currentTipTempInC, const uint32_t x10WattsOut);
static void setOutputx10WattsViaFilters(int32_t x10Watts);
static int32_t getX10WattageLimits();
@@ -92,8 +92,8 @@ void startPIDTask(void const *argument __unused) { PIDTempTarget = TipThermoModel::getTipMaxInC();
}
- detectThermalRunaway(currentTipTempInC, PIDTempTarget - currentTipTempInC);
x10WattsOut = getPIDResultX10Watts(PIDTempTarget, currentTipTempInC);
+ detectThermalRunaway(currentTipTempInC, x10WattsOut);
} else {
detectThermalRunaway(currentTipTempInC, 0);
}
@@ -228,31 +228,59 @@ int32_t getPIDResultX10Watts(TemperatureType_t set_point, TemperatureType_t curr #endif
}
-void detectThermalRunaway(const TemperatureType_t currentTipTempInC, const TemperatureType_t tError) {
- static TemperatureType_t tipTempCRunawayTemp = 0;
- static TickType_t runawaylastChangeTime = 0;
+/*
+ * Detection of thermal runaway
+ * The goal of this is to handle cases where something has gone wrong
+ * 1. The tip MOSFET is broken, so power is being constantly applied to the tip
+ * a. This can show as temp being stuck at max
+ * b. Or temp rising when the heater is off
+ * 2. Broken temperature sense
+ * a. Temp is stuck at a value
+ * These boil down to either a constantly rising temperature or a temperature that is stuck at a value
+ * These are both covered; but looking at the eye/delta between min and max temp seen
+ */
+void detectThermalRunaway(const TemperatureType_t currentTipTempInC, const uint32_t x10WattsOut) {
- // Check for thermal runaway, where it has been x seconds with negligible (y) temp rise
- // While trying to actively heat
+ static TemperatureType_t tiptempMin = 0xFFFF; // Min tip temp seen
+ static TemperatureType_t tipTempMax = 0; // Max tip temp seen while heater is on
+ bool thisCycleIsHeating = x10WattsOut > 0;
+ static TickType_t heatCycleStart = 0;
- // If we are more than 20C below the setpoint
- if ((tError > THERMAL_RUNAWAY_TEMP_C)) {
+ static bool haveSeenDelta = false;
- // If we have heated up by more than 20C since last sample point, snapshot time and tip temp
- TemperatureType_t delta = currentTipTempInC - tipTempCRunawayTemp;
- 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
+ // Check for readings being pegged at the top of the ADC while the heater is off
+ if (!thisCycleIsHeating && (getTipRawTemp(0) > (0x7FFF - 16))) {
+ heaterThermalRunaway = true;
+ }
+
+ if (haveSeenDelta) {
+ return;
+ }
+
+ if (currentTipTempInC < tiptempMin) {
+ tiptempMin = currentTipTempInC;
+ }
+ if (thisCycleIsHeating && currentTipTempInC > tipTempMax) {
+ tipTempMax = currentTipTempInC;
+ }
+ if (thisCycleIsHeating) {
+ if (heatCycleStart == 0) {
+ heatCycleStart = xTaskGetTickCount();
+ }
+ } else {
+ heatCycleStart = 0;
+ }
+
+ if ((xTaskGetTickCount() - heatCycleStart) > (THERMAL_RUNAWAY_TIME_SEC * TICKS_SECOND)) {
+ if (tipTempMax > tiptempMin) {
+ // Have been heating for min seconds, check if the delta is large enough
+ TemperatureType_t delta = tipTempMax - tiptempMin;
+ haveSeenDelta = true;
+
+ if (delta < THERMAL_RUNAWAY_TEMP_C) {
heaterThermalRunaway = true;
}
}
- } else {
- tipTempCRunawayTemp = currentTipTempInC;
- runawaylastChangeTime = xTaskGetTickCount();
}
}
@@ -308,4 +336,4 @@ void setOutputx10WattsViaFilters(int32_t x10WattsOut) { #endif
setTipX10Watts(x10WattsOut);
resetWatchdog();
-}
\ No newline at end of file +}
diff --git a/source/Core/Threads/UI/logic/Soldering.cpp b/source/Core/Threads/UI/logic/Soldering.cpp index 50508025..45483d15 100644 --- a/source/Core/Threads/UI/logic/Soldering.cpp +++ b/source/Core/Threads/UI/logic/Soldering.cpp @@ -138,9 +138,7 @@ OperatingMode gui_solderingMode(const ButtonState buttons, guiContext *cxt) { // Draw in the screen details if (getSettingValue(SettingsOptions::DetailedSoldering)) { - ui_draw_soldering_power_status(cxt->scratch_state.state2); - } else { ui_draw_soldering_basic_status(cxt->scratch_state.state2); } |