aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--README.md11
-rw-r--r--Translations/translation_IT.json14
-rw-r--r--Translations/translation_RU.json16
-rw-r--r--Translations/translation_ZH_CN.json86
-rw-r--r--source/Core/BSP/MHP30/configuration.h4
-rw-r--r--source/Core/BSP/Miniware/configuration.h11
-rw-r--r--source/Core/BSP/Pinecil/configuration.h2
-rw-r--r--source/Core/BSP/Pinecilv2/configuration.h2
-rw-r--r--source/Core/BSP/Sequre/configuration.h8
-rw-r--r--source/Core/Threads/PIDThread.cpp72
-rw-r--r--source/Core/Threads/UI/logic/Soldering.cpp2
12 files changed, 130 insertions, 99 deletions
diff --git a/.gitignore b/.gitignore
index c8e8df7f..dac85f24 100644
--- a/.gitignore
+++ b/.gitignore
@@ -215,3 +215,4 @@ Logo GUI/TS100 Logo Editor/TS100 Logo Editor/bin/
# Tests/linters/sanitizers
source/check-style.log
+.ash_history
diff --git a/README.md b/README.md
index 9c88875c..6d4fee8d 100644
--- a/README.md
+++ b/README.md
@@ -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);
}