generated from hulk/gd32f4xx_template_cmake_vscode
NTC: add open/short detection (V near rails) instead of bogus temp
This commit is contained in:
@@ -57,11 +57,15 @@ float ntc_read_temperature(void) {
|
||||
/* 分压点电压:上拉 R_PULL 在 VREF 侧,NTC 接 GND 侧 */
|
||||
float voltage = adc_val * NTC_VREF / NTC_ADC_MAX;
|
||||
|
||||
/* 反解 NTC 阻值:V = VREF * R / (R_PULL + R) => R = R_PULL * V / (VREF - V) */
|
||||
if (voltage <= 0.0f || voltage >= NTC_VREF) {
|
||||
/* 开路/短路等异常,返回 -273.15 表示无效 */
|
||||
return -273.15f;
|
||||
/* 开路/短路判定:电压贴近电源轨说明 NTC 支路没有形成分压通路 */
|
||||
if (voltage >= 0.97f * NTC_VREF) {
|
||||
return -273.15f; /* 开路(PC5 被上拉拉满,NTC 未连通) */
|
||||
}
|
||||
if (voltage <= 0.03f * NTC_VREF) {
|
||||
return -274.15f; /* 短路(PC5 被拉到 GND) */
|
||||
}
|
||||
|
||||
/* 反解 NTC 阻值:V = VREF * R / (R_PULL + R) => R = R_PULL * V / (VREF - V) */
|
||||
float r_ntc = NTC_R_PULL * voltage / (NTC_VREF - voltage);
|
||||
|
||||
/* B 值公式:1/T = 1/T25 + ln(R/R25)/B */
|
||||
|
||||
Reference in New Issue
Block a user