NTC 热敏电阻怎么测温度?查表法 + 二分查找 + 线性插值
一句话: NTC 热敏电阻测温度最常用的方案——预存阻值-温度对照表ADC 采电压算出阻值二分查找定位区间线性插值算出最终温度。精度高、不占 Flash、跑得快。系列文章《嵌入式外设实战》 — NTC测温、SPI通信、I2C从机、定点数运算——外设驱动从入门到精通✅ 附完整代码 用文件柜抽屉讲透 用分和元讲透附代码 省引脚绝招 一张表讲清四种模式 多一根线差多远 电压不同的区别 用VTEC波动代替硬件信号 连续N次满足才算数 硬件脚悬空了也别慌 pid-feedforward-lookup when-to-drop-pid-d-term pid-deadzone-silence[TOC]适合谁读适合嵌入式开发者、单片机初学者及遇到类似问题的工程师信号链路一张图flowchart LR NTC[NTC热敏电阻] --|分压电路| ADC[ADC采样] ADC --|码值| R[算阻值] R --|二分查找| T[查表定位区间] T --|线性插值| OUT[输出温度]为什么不用公式直接算NTC 热敏电阻的阻值和温度是指数关系公式长这样R(T) R25 × e^(B × (1/T - 1/298.15))看着吓人。要在单片机上算这个公式需要浮点运算、指数函数慢且占 Flash。更关键的是——实际 NTC 不完全符合公式厂家给的阻值表才是准的。所以通用做法是厂家给什么表单片机就查什么表。电路怎么接最常见的分压电路VREF (基准电压, 比如 2.5V) │ ├── R_fixed (固定电阻, 比如 10KΩ 1%) │ ├──→ ADC 采样点 │ ├── NTC (热敏电阻) │ GNDADC 采到电压算 NTC 阻值/* * V_adc VREF × R_ntc / (R_fixed R_ntc) * * 反推: * R_ntc R_fixed × V_adc / (VREF - V_adc) * * 用 ADC 码值表示: * R_ntc R_fixed × adc_code / (adc_max - adc_code) */#define ADC_MAX 4095U /* 12-bit ADC */ #define R_FIXED 10000U /* 10KΩ 固定电阻 */ uint32_t ADC_to_Resistance(uint16_t u16AdcCode) { /* 防止除零 */ if (u16AdcCode ADC_MAX) { return 0xFFFFFFFFU; } if (u16AdcCode 0U) { return 0U; } /* R_ntc R_fixed × adc / (max - adc) */ return (uint32_t)R_FIXED * u16AdcCode / (ADC_MAX - u16AdcCode); }阻值-温度表厂家提供的典型数据以 MF55 103F3950 为例R2510KΩB3950/* 阻值-温度对照表 (部分) * 第一列: 阻值(Ω), 第二列: 温度(℃ × 10, 即 250 25.0°C) * 按阻值从大到小排列 (温度越低阻值越大) */ static const uint16_t s_au16NtcTable[][2] { { 33110, -200 }, /* 33110Ω → -20.0°C */ { 24900, -150 }, /* 24900Ω → -15.0°C */ { 18870, -100 }, /* 18870Ω → -10.0°C */ { 14380, -50 }, /* 14380Ω → -5.0°C */ { 11030, 0 }, /* 11030Ω → 0.0°C */ { 8510, 50 }, /* 8510Ω → 5.0°C */ { 6610, 100 }, /* 6610Ω → 10.0°C */ { 5170, 150 }, /* 5170Ω → 15.0°C */ { 4070, 200 }, /* 4070Ω → 20.0°C */ { 3220, 250 }, /* 3220Ω → 25.0°C */ { 2560, 300 }, /* 2560Ω → 30.0°C */ { 2050, 350 }, /* 2050Ω → 35.0°C */ { 1645, 400 }, /* 1645Ω → 40.0°C */ { 1330, 450 }, /* 1330Ω → 45.0°C */ { 1080, 500 }, /* 1080Ω → 50.0°C */ { 880, 550 }, /* 880Ω → 55.0°C */ }; #define NTC_TABLE_SIZE (sizeof(s_au16NtcTable) / sizeof(s_au16NtcTable[0]))实际使用时厂家数据手册里通常有 100-200 个点点越多精度越高。这里 16 个点只是示意。二分查找定位区间算出阻值后在表里找它落在哪两个点之间。因为表是按阻值从大到小排的用二分查找展开查看完整代码35行展开查看完整代码35行展开查看完整代码35行展开查看完整代码35行展开查看完整代码35行/* * 二分查找找到 R_ntc 在表中的位置 * 返回: 区间下标 iR_ntc 在 table[i] 和 table[i1] 之间 */ static uint8_t FindInterval(uint32_t u32Resistance) { uint8_t u8Low; uint8_t u8High; uint8_t u8Mid; /* 边界判断 */ if (u32Resistance s_au16NtcTable[0][0]) { return 0U; /* 比第一个还大 → 取第一个点 */ } u8Low 0U; u8High NTC_TABLE_SIZE - 1U; if (u32Resistance s_au16NtcTable[u8High][0]) { return u8High - 1U; /* 比最后一个还小 → 取最后一个区间 */ } /* 二分查找 */ while (u8Low u8High - 1U) { u8Mid (u8Low u8High) / 2U; if (u32Resistance s_au16NtcTable[u8Mid][0]) { u8High u8Mid; } else { u8Low u8Mid; } } return u8Low; /* R_ntc 在 table[low] 和 table[low1] 之间 */ }线性插值找到区间后在两点之间按比例算出温度展开查看完整代码38行展开查看完整代码38行展开查看完整代码38行展开查看完整代码38行展开查看完整代码38行/* * 线性插值: * temp T1 (R - R1) × (T2 - T1) / (R2 - R1) * * 所有值都放大 10 倍 (温度 ×10, 避免浮点) */ int16_t ADC_to_Temperature(uint16_t u16AdcCode) { uint32_t u32R; uint8_t u8Idx; int32_t i32Temp; uint32_t u32R1, u32R2; int32_t i32T1, i32T2; /* 1. ADC → 阻值 */ u32R ADC_to_Resistance(u16AdcCode); /* 2. 二分查找区间 */ u8Idx FindInterval(u32R); /* 3. 线性插值 */ u32R1 (uint32_t)s_au16NtcTable[u8Idx][0]; /* R1 (Ω) */ u32R2 (uint32_t)s_au16NtcTable[u8Idx 1U][0]; /* R2 (Ω) */ i32T1 (int32_t)(int16_t)s_au16NtcTable[u8Idx][1]; /* T1 (×10) */ i32T2 (int32_t)(int16_t)s_au16NtcTable[u8Idx 1U][1]; /* T2 (×10) */ /* * temp T1 (R - R1) × (T2 - T1) ÷ (R2 - R1) * * 注意: 阻值从大到小排R1 R2 * 所以 R - R1 ≤ 0, R2 - R1 0 * 先算分子再除分母避免丢失精度 */ i32Temp i32T1 (int32_t)(u32R - u32R1) * (i32T2 - i32T1) / (int32_t)(u32R2 - u32R1); return (int16_t)i32Temp; /* 返回值 ×10, 即 256 25.6°C */ }精度分析因素影响NTC 本身精度±1% 是常规水平固定电阻精度用 1% 的别用 5% 的表点数100-200 点基本够温度变化陡的区域可以多取几个点ADC 精度12-bit ADC, 4095 级, 精度约 0.1-0.2°C对大多数嵌入式应用来说查表法 ±0.5°C 以内的精度完全够用。完整调用/* 主循环每 100ms 调一次 */ void Monitor_Temperature(void) { uint16_t u16Adc; int16_t i16Temp; /* 读 ADC */ u16Adc ADC_Read(ADC_CH_NTC); /* ADC → 温度 (×10) */ i16Temp ADC_to_Temperature(u16Adc); /* 存到全局变量, 供其他地方用 */ g_i16Temperature i16Temp; /* 256 25.6°C */ }总结步骤做什么1. 电路VREF → 固定电阻 → ADC 采样点 → NTC → GND2. 算阻值ADC 码值 → 分压公式算出 R_ntc3. 查表二分查找阻值落在哪两个点之间4. 插值在两点间线性插值算出温度5. 防抖主循环周期调用不需要额外滤波三个知识点串成一条链路NTC 分压电路 → 二分查找 → 线性插值。搞懂这个温度采集就通了。实测对比浮点方案: 24次运算 ≈ 720条指令 | 定点查表方案: 24次运算 ≈ 48条指令CPU占用降低 93%有用的话点个收藏下次调试直接用。有问题欢迎评论区交流看到了都会回。下一篇用文件柜抽屉讲透——NTC测温、SPI通信、I2C从机、定点数运算——外设驱动从入门到精通

相关新闻

Amortized Control of Continuous State Space Model ICLR2025有关动力系统的paper

Amortized Control of Continuous State Space Model ICLR2025有关动力系统的paper

在这篇文章中,作者通过多个实验验证了ACSSM(Amortized Control of Continuous State Space Model)在处理不规则时间序列数据时的有效性和效率。以下是文章中提到的几个关键算例: 1. Human Activity Classification(人…

2026/7/11 12:09:28 阅读更多 →
C++与OpenCV人脸检测实战:从环境搭建到实时检测

C++与OpenCV人脸检测实战:从环境搭建到实时检测

1. 项目概述:从零构建一个C与OpenCV的人脸检测器 如果你正在学习C,或者对计算机视觉感兴趣,想亲手实现一个能“看见”人脸的程序,那么这个项目再合适不过了。它不是一个停留在理论层面的概念,而是一个从环境搭建、代码…

2026/7/11 12:09:28 阅读更多 →
TS2007FC与PIC18F86J11构建高效嵌入式音频系统

TS2007FC与PIC18F86J11构建高效嵌入式音频系统

1. 音频放大系统核心组件解析 在嵌入式音频系统设计中,TS2007FC与PIC18F86J11的组合堪称黄金搭档。这套方案完美融合了高性能D类放大器的效率优势与8位微控制器的灵活控制能力,为开发者提供了从原型设计到量产的完整解决方案。 1.1 TS2007FC音频放大器…

2026/7/11 12:07:27 阅读更多 →

最新新闻

三分钟带你读懂:旋转函数

三分钟带你读懂:旋转函数

我们先来看题目描述:给定一个长度为 n 的整数数组 nums 。假设 arrk 是数组 nums 顺时针旋转 k 个位置后的数组,我们定义 nums 的 旋转函数 F 为:F(k) 0 * arrk[0] 1 * arrk[1] ... (n - 1) * arrk[n - 1]返回 F(0), F(1), ..., F(n-1) 中…

2026/7/11 13:14:42 阅读更多 →
终极免费音乐聚合神器:LX Music Desktop一站式解决方案

终极免费音乐聚合神器:LX Music Desktop一站式解决方案

终极免费音乐聚合神器:LX Music Desktop一站式解决方案 【免费下载链接】lx-music-desktop 一个基于 Electron 的音乐软件 项目地址: https://gitcode.com/GitHub_Trending/lx/lx-music-desktop 你是否厌倦了在多个音乐平台间反复切换?是否被各大…

2026/7/11 13:12:33 阅读更多 →
手机版 MT5 如何添加技术指标?

手机版 MT5 如何添加技术指标?

在手机版 MT5 中,Android 和 iOS 系统都支持为图表添加技术指标。常见指标如均线、MACD、RSI、布林带等,都可以直接在图表页面中添加,用于辅助行情分析。 对于 Android 版 MT5(mt5-zc.com),用户可以先进入某…

2026/7/11 13:08:32 阅读更多 →
3个必知技巧:用Wayback Machine浏览器扩展保存网页历史 [特殊字符]

3个必知技巧:用Wayback Machine浏览器扩展保存网页历史 [特殊字符]

3个必知技巧:用Wayback Machine浏览器扩展保存网页历史 📚 【免费下载链接】wayback-machine-webextension A web browser extension for Chrome, Firefox, Edge, and Safari 14. 项目地址: https://gitcode.com/gh_mirrors/wa/wayback-machine-webext…

2026/7/11 13:06:31 阅读更多 →
3分钟搞定中文乱码:GBK转UTF-8终极转换指南

3分钟搞定中文乱码:GBK转UTF-8终极转换指南

3分钟搞定中文乱码:GBK转UTF-8终极转换指南 【免费下载链接】GBKtoUTF-8 To transcode text files from GBK to UTF-8 项目地址: https://gitcode.com/gh_mirrors/gb/GBKtoUTF-8 在日常工作中,你是否遇到过打开文档时满屏乱码的尴尬?特…

2026/7/11 13:04:30 阅读更多 →
CANN/cann-launch-camp: FastGelu算子实现

CANN/cann-launch-camp: FastGelu算子实现

FastGelu 算子实现 【免费下载链接】cann-launch-camp 用户可借助此项目规范管理 CANN 开源社区启航营高校活动的课程作业、课设、毕设等实践作品,其核心功能是统一标准化目录层级与提交规范,保障作品提交规整、可追溯、可评审。 项目地址: https://gi…

2026/7/11 13:02:30 阅读更多 →

日新闻

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南 【免费下载链接】comfyui_controlnet_aux ComfyUIs ControlNet Auxiliary Preprocessors 项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux 想要让AI图像生成真正听从你的指挥吗&…

2026/7/11 0:02:12 阅读更多 →
PIC18F45K42驱动EPT-14A4005P压电蜂鸣器方案详解

PIC18F45K42驱动EPT-14A4005P压电蜂鸣器方案详解

1. 项目背景与核心需求 在工业控制、安防系统和智能家居等领域,可靠的声音警报系统是不可或缺的基础组件。传统蜂鸣器存在音量不足、音质模糊等问题,而基于压电陶瓷技术的EPT-14A4005P蜂鸣器配合PIC18F45K42微控制器,能够构建一套适应性强、音…

2026/7/11 0:04:12 阅读更多 →
大模型推理中的算子融合优化:LayerNorm + Attention 的 CUDA Kernel 手写与验证

大模型推理中的算子融合优化:LayerNorm + Attention 的 CUDA Kernel 手写与验证

大模型推理中的算子融合优化:LayerNorm Attention 的 CUDA Kernel 手写与验证 一、GPU 利用率 30%:分开的算子吃掉所有带宽 推理服务的 GPU 利用率监测显示一个反直觉的现象:计算核心(SM)利用率不到 30%,但…

2026/7/11 0:04:12 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/10 19:03:29 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/9 13:46:46 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/9 21:41:05 阅读更多 →

月新闻