- ntc.{h,c}(宿主机可测):分压端 mV → Ω → NCP18XH103F03RB 的 R-T 表插值;
开路 / 短路 / 表外一律「读不到」(t_thermal 因此满速)
- thermal_esp.{h,c}(仅 IDF):ADC1 oneshot + 曲线校准读两路 NTC;两个 PCNT 单元数 TACH 边沿
- app_main:task_thermal 任务体、t_thermal_init 放在上电恢复之前、status 带热管理快照
- test_ntc.c 4 例;全工程 429 例全绿;版本 0.1.0-a16
- 板 B:两路 NTC 38.2 / 34.0 °C;风扇两路 rpm 0 报停转(拉满电流不涨,疑未插风扇,待确认)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
50 行
2.4 KiB
C
50 行
2.4 KiB
C
/* 两路板载 NTC 的换算:ADC 读回的毫伏 → 毫摄氏度(A16,需求 §10.3 `t_thermal`)。
|
||
|
||
---- 电路(已按 `.claude/r2/_base_pcb_nets.json` 逐脚核实)----------------
|
||
|
||
+3V3 ── R660 10k ──┬── NTC1(IO4, ADC1_CH3) ── C736 ── GND
|
||
└── RT601 ── GND
|
||
(NTC2 同形:R661 / RT602 / C739 → IO5, ADC1_CH4)
|
||
|
||
**NTC 在下臂**:越热电阻越小、电压越低。写反成上臂的现象是「越热读数越低」——
|
||
风扇闭环照样算、照样有数,只是方向反了,要等机器满载才暴露。
|
||
|
||
RT601/RT602 = Murata **NCP18XH103F03RB**(10 kΩ @25 °C,B25/50 = 3380,立创 C13564;
|
||
设计文档 BOM 那一行)。换算走厂家 R-T 表(5 °C 一格、格内线性插值),
|
||
不用 B 值公式:B 公式在 25/50 °C 以外偏差 1~2 °C,而且要浮点和 log。
|
||
|
||
---- 这一层不做的事 ------------------------------------------------------
|
||
· 不读 ADC(那是 `thermal_esp.c`,只进 IDF)。本文件是纯整数换算,宿主机可测;
|
||
· 不做滤波:C736/C739 是硬件 RC,t_thermal 1 s 才读一次,再滤就是加延迟。 */
|
||
#ifndef NTC_H
|
||
#define NTC_H
|
||
|
||
#include <stdbool.h>
|
||
#include <stdint.h>
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
#define NTC_PULLUP_OHM 10000 /* R660 / R661 */
|
||
|
||
/* 分压端离两条轨多近就判「读不到」(mV)。
|
||
开路(NTC 没焊 / 断线)⇒ 电压贴 +3V3;短路 ⇒ 贴地。两者都不是温度。
|
||
⚠️ 这不是精度门限,是「这还是不是一颗 NTC」的门限:
|
||
表的两端(−40 °C / +125 °C)分别对应约 3.13 V / 0.16 V,离两条轨都还远。 */
|
||
#define NTC_RAIL_MARGIN_MV 30
|
||
|
||
/* ADC 读回的分压端电压 + 当时的上臂电源电压 → 毫摄氏度。
|
||
`vref_mv` 传 +3V3 的实际值(不知道就传 3300);比例式测量,电源偏 1 % 在 25 °C 附近带来 ~0.6 °C(分压中点处电阻误差是电源误差的 2 倍,NTC 每度约 4 %)。
|
||
返回 false = 开路 / 短路 / 超出表的范围(−40~125 °C),`*milli_c` 不动。 */
|
||
bool ntc_mc_from_mv(int32_t mv, int32_t vref_mv, int32_t *milli_c);
|
||
|
||
/* 电阻 → 毫摄氏度(查表 + 插值)。超出表的范围返回 false。给测试用,也给标定用。 */
|
||
bool ntc_mc_from_ohm(uint32_t ohm, int32_t *milli_c);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif /* NTC_H */
|