ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于STM32F042的NTC热敏电阻测温方案:硬件设计到标定实践

基于STM32F042的NTC热敏电阻测温方案:硬件设计到标定实践 硬件测温这件事看起来简单真正做稳了还是有不少门道。最近用STM32F042做了一块小控制板其中一个功能就是用NTC热敏电阻采集温度目标场景是给汽车冷却液温度做监测的预研方案。整套流程走下来从分压电路设计、ADC采样、软件滤波到温度标定踩了几个坑也沉淀了一些经验。把完整过程整理出来如果你正准备用单片机加NTC做测温这篇内容应该能帮你少走一段弯路。1. 整体方案设计与器件选型的底层逻辑1.1 为什么选STM32F042做NTC采集STM32F042是意法半导体F0系列里一颗很有特点的芯片Cortex-M0内核主频48MHzFlash有16KB到32KB可选RAM 6KB。单看性能参数并不出彩但这颗芯片在工业控制和汽车电子预研里出现频率很高原因有几个方面。第一封装选择多从TSSOP20到LQFP48都有PCB布局非常灵活适合做小尺寸板卡。第二内置12位ADC采样通道数够用配合DMA可以做到多通道连续采集。第三芯片自带USB Device控制器如果后续要把采集到的温度数据上传到上位机直接通过USB虚拟串口就能搞定省掉一颗外部USB转串口芯片。第四F042的工作温度范围是-40到85度用在车载环境的前期验证阶段完全够格。对于NTC测温这个需求来说STM32F042的性能是绰绰有余的。12位ADC的理论分辨率是4096份以3.3V参考电压计算单LSB对应大约0.8mV配合10K NTC在常温段大概能实现0.1度级别的分辨率这对绝大多数温度采集场景都已经够用。1.2 NTC热敏电阻的核心参数与选型要点NTC是负温度系数热敏电阻的缩写核心特征就是阻值随温度升高而降低。选型时主要看三组参数。第一组是标称阻值通常表示为25度时的电阻值常见的有10K、100K、5K等。第二组是B值这是反映材料温度特性的关键参数常见规格有3435、3950、3380等B值越大相同温度变化下阻值变化越剧烈灵敏度越高。第三组是精度等级常见的有1%、2%、5%。这三组参数的关系可以用B值方程来描述Rt R25 × exp(B × (1/T - 1/T25))其中T是绝对温度单位开尔文T25是298.15KR25是25度时的标称阻值。从这个公式可以看出只要知道B值和标称阻值就能算出任意温度下的理论电阻值。实际项目中我选的是10K B3435的NTC这算是应用最广泛的一种规格货源充足、价格便宜常温下阻值10K与单片机ADC电路的阻抗匹配也比较容易做。需要特意提醒的是B值在不同温度区间并不是严格恒定的我在实测中发现用B值公式在0到70度范围内计算误差一般在正负1度以内但如果要覆盖-40到150度的宽范围建议用Steinhart-Hart方程做拟合或者直接用查表法精度会更可控。1.3 设计思路一个简洁可靠的测温链路整套测温链路从信号流的角度看非常清晰NTC阻值变化转换为电压变化ADC采集电压单片机通过公式或查表还原温度。关键在第一个环节也就是把电阻变化可靠地变成电压变化。这个转换用的是分压电路。基本原理是NTC与一个固定电阻串联中间节点接ADC输入根据分压公式Vadc Vcc × Rntc / (Rntc Rfixed)当NTC阻值随温度变化时节点电压随之变化。这个电路简单到什么程度一颗电阻加一个电容就能完成硬件部分。但电路简单不代表设计可以随便来。分压电阻的取值直接决定测量范围和灵敏度分布。固定电阻取值等于NTC在测量范围中点的阻值时分压曲线在该点附近的线性度最好灵敏度也最高。以10K NTC为例如果要重点监测20到50度区间分压电阻取10K就是合理选择。软件处理链路方面ADC采样后先做滤波再做阻值还原最后查表或计算得到温度。每一个环节都有细节可以打磨下面慢慢展开。2. NTC测温电路与硬件搭建2.1 分压电路设计与电阻选型分压电路最简单的形式就是两个电阻串联接在电源和地之间。这里有一个方向问题需要明确NTC是放在上面接VCC还是放在下面接地。两种接法都可以工作但行为特性不同。NTC接VCC、固定电阻接地时温度升高导致NTC阻值下降分压点电压也随之降低ADC读数与温度负相关。反过来NTC接地、固定电阻接VCC时温度升高导致分压点电压升高ADC读数与温度正相关。实际代码里两种接法对应的计算公式不同初始化时就要固定好不要中途换。我习惯用NTC接VCC的方式也就是分压点电压随温度升高而降低。这种接法有一个实用优势当NTC开路时分压点电压会被拉到接近0VADC读数为0程序可以轻易判断出传感器断线如果NTC短路分压点电压接近VCCADC读数接近满量程也能判为故障。两种失效模式都容易识别这一点对车载这类对可靠性要求高的场景很重要。分压电阻的选择需要考虑三个方面。尽量选择低温漂的精密电阻比如25ppm或更低这样温度变化时固定电阻本身的漂移不会给测量引入额外误差。功率方面常规0603或0805封装的电阻完全够用因为流过NTC的电流通常只有几十到几百微安功耗在微瓦级别。机械上还要注意布局分压电阻和NTC尽量靠近MCU的ADC引脚中间不要走高频信号线避免数字噪声耦合进模拟通道。有条件的画一个完整的地平面更好。2.2 滤波电容与基准电压处理分压点与ADC引脚之间加一颗电容容量在0.1uF104到1uF之间都可以。这颗电容有两个作用一是滤除高频干扰二是为ADC内部的采样电容提供电荷源。STM32F042的ADC是逐次逼近型SAR采样时需要从外部抽取电流给内部采样电容充电如果外部阻抗太高充电时间不够采样值就会偏小带来测量误差。NTC在低温时阻值可能高达几十千欧加上分压电阻源阻抗确实不低。因此一颗电容在ADC引脚本地储能是必要的。更稳妥的做法是在分压点和ADC引脚之间串一颗几百欧的电阻与电容组成RC低通滤波。这种结构可以进一步降低源阻抗变化对ADC采样的影响同时滤除高频噪声。RC时间常数不要太大否则会让温度响应变慢毕竟NTC本身就存在热时间常数通常在几秒到十几秒级别RC再拖慢系统反而不好。我实际用的参数是100欧加0.1uF时间常数为10微秒级别对采样速度完全没有影响。基准电压方面STM32F042的ADC参考电压默认就是VDDA也就是模拟电源通常与数字电源共用3.3V。如果VDDA纹波较大ADC读数会跟着波动。处理办法有三条路一是用LDO单独给模拟部分供电二是在VDDA引脚处加强滤波串联磁珠再加电容三是启用芯片内部的VREFINT通道在软件里做实时校准。第三条路成本最低后面会用具体代码演示。2.3 从冰点到沸点NTC测温电路性能实测硬件焊接好之后我先用可调电阻箱模拟NTC的阻值变化做了几组关键温度点验证。模拟25度时电阻箱输出10KADC读数应该在1.65V附近。实测读数为1.648V偏差2mV折算到温度上不到0.03度。这个结果说明分压电阻精度和ADC参考电压都比较靠谱。模拟0度时10K B3435 NTC的理论阻值约为29.1K分压点电压约0.82V。模拟100度时阻值约0.68K分压点电压约2.83V。实测读数偏差都在10mV以内整体线性度符合预期。随后把NTC探头浸入冰水混合物中读数为0.6度误差来源于热敏电阻本身的精度和冰水混合物的实际温度严格来说是0度但探头接触位置可能略高。用体温计做对照读数为36.8度误差在0.5度以内不需要额外校准就能满足大多数监控场景。如果严格要求正负0.1度的精度那就需要做两点或三点标定了。3. STM32F042 ADC驱动与NTC温度计算3.1 ADC初始化与采样参数配置STM32F042的ADC虽然是12位但配置好之后代码层面并不复杂。使用标准外设库初始化代码可以这样写void ADC_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; ADC_InitTypeDef ADC_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); GPIO_InitStructure.GPIO_Pin GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AN; GPIO_InitStructure.GPIO_PuPd GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, GPIO_InitStructure); ADC_DeInit(ADC1); ADC_InitStructure.ADC_Resolution ADC_Resolution_12b; ADC_InitStructure.ADC_ContinuousConvMode DISABLE; ADC_InitStructure.ADC_ExternalTrigConvEdge ADC_ExternalTrigConvEdge_None; ADC_InitStructure.ADC_DataAlign ADC_DataAlign_Right; ADC_InitStructure.ADC_ScanDirection ADC_ScanDirection_Upward; ADC_Init(ADC1, ADC_InitStructure); ADC_ChannelConfig(ADC1, ADC_Channel_0, ADC_SampleTime_239_5Cycles); ADC_GetCalibrationFactor(ADC1); ADC_Cmd(ADC1, ENABLE); while(ADC_GetFlagStatus(ADC1, ADC_FLAG_ADRDY) RESET); }有两个细节值得重点说明。采样时间配置我用了239.5个周期这是F042 ADC最长的采样时间。原因在前面提到过NTC分压网络的源阻抗较高需要给内部采样电容足够长的充电时间。经过实验用短的采样时间比如1.5个周期读到的ADC值会明显偏小误差折算成温度可能达到好几度属于那种不对比就发现不了的隐性坑。校准时机ADC_GetCalibrationFactor必须在ADC使能之前调用而且只能调用一次。校准因子是芯片出厂时记录在内部存储区的在ADC使能之后这个校准因子会被转换过程破坏掉如果再次调用恢复的就不是原始值了。我最初调试时在初始化末尾多调了一次校准结果ADC输出一直不对排查了很久才发现是这个原因。3.2 ADC读取与数字滤波策略ADC读取有轮询、中断、DMA三种方式。对于单通道温度采集最简单的就是轮询代码短、逻辑清晰。为了让读数稳定我采样16次取平均在每次触发转换之间加短延时这样等效于在时间上分散采样能有效抑制随机噪声。滤波策略方面单纯的平均滤波在出现偶发尖峰时效果不好比如电机启停瞬间在电源上产生的毛刺可能让某一次采样值偏差很大。更稳妥的做法是限幅滤波加移动平均的组合。限幅滤波的思路是当前采样值与上一次有效值之差超过设定的最大变化量时判定这次采样无效并丢弃。对温度这类缓变信号这个办法非常有效。#define NTC_ADC_FILTER_SIZE 16 #define NTC_ADC_MAX_DELTA 80 uint16_t NTC_GetFilteredADC(void) { uint16_t adc_raw 0; uint16_t adc_max 0; uint16_t adc_min 0; uint32_t adc_sum 0; static uint16_t last_valid 0; uint8_t index 0; adc_max 0; adc_min 4095; adc_sum 0; for(index 0; index NTC_ADC_FILTER_SIZE; index) { ADC_StartOfConversion(ADC1); while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) RESET); adc_raw ADC_GetConversionValue(ADC1); adc_sum adc_raw; if(adc_raw adc_max) adc_max adc_raw; if(adc_raw adc_min) adc_min adc_raw; } adc_sum - adc_max; adc_sum - adc_min; adc_raw (uint16_t)(adc_sum / (NTC_ADC_FILTER_SIZE - 2)); if(last_valid ! 0) { if((adc_raw last_valid NTC_ADC_MAX_DELTA) || (adc_raw NTC_ADC_MAX_DELTA last_valid)) { return last_valid; } } last_valid adc_raw; return adc_raw; }这段代码做的是去掉最大值和最小值后的14次平均相当于剔除离群值再叠加限幅保护。实际效果是在正常室温下ADC读数波动不超过正负2个LSB对应温度波动不到0.1度比单纯平均稳定得多。3.3 从ADC值到温度公式计算法分压电路接法是NTC接VCC、固定电阻接地则ADC电压与NTC阻值的关系是Vadc Vref × Rfixed / (Rntc Rfixed)在12位ADC下Vadc / Vref ADC_Value / 4095于是可以反推出NTC的当前阻值Rntc Rfixed × (4095 - ADC_Value) / ADC_Value得到Rntc之后用B值公式计算温度T (1 / (1/T25 ln(Rntc/R25) / B)) - 273.15用C语言实现时需要注意STM32F042的Cortex-M0内核没有硬件浮点单元软件浮点运算会让CPU占用增加。为了让代码在实际工程中可用建议用浮点运算加缓存策略并保持计算频率不要太快。float NTC_CalcTemperature(uint16_t adc_value) { const float R_fixed 10000.0f; const float R25 10000.0f; const float B 3435.0f; const float T25 298.15f; const float K0 273.15f; float rntc 0.0f; float temp_k 0.0f; float temp_c 0.0f; if(adc_value 0) return -999.0f; if(adc_value 4095) return 999.0f; rntc R_fixed * (4095.0f - (float)adc_value) / (float)adc_value; temp_k 1.0f / ((1.0f / T25) (logf(rntc / R25) / B)); temp_c temp_k - K0; return temp_c; }这段代码首先要处理ADC_value等于0或等于4095的边界情况分别代表NTC开路和短路用特殊值返回比较方便上层做故障判断。3.4 从ADC值到温度查表法公式计算方便灵活但logf函数在Cortex-M0上运行较慢。查表法则是用空间换时间适合存储空间充裕的项目。查表法的思路是预先算出一张温度与ADC值对应的表程序中将实际ADC值与表中数据比对找到最近的两个点后做线性插值。生成这张表可以在PC上用脚本完成也可以用STM32在上电时自动计算。我更推荐前者原因很简单节省RAM还能在PC上直观看到温度分辨率的分布。关键问题是表怎么设计。一张好的查找表ADC值应该是均匀的而不是温度均匀。因为ADC值与温度是非线性关系等ADC间隔意味着在低温段温度跨度小、分辨率高在高温段温度跨度大、分辨率低。实际使用时按ADC值直接索引效率高且符合硬件特性。生成表的逻辑大致如下#define ADC_TABLE_SIZE 33 const uint16_t adc_threshold[ADC_TABLE_SIZE] { 125, 154, 188, 228, 274, 327, 386, 452, 525, 605, 692, 786, 887, 994, 1107, 1225, 1348, 1474, 1603, 1733, 1863, 1992, 2118, 2240, 2357, 2468, 2573, 2671, 2763, 2848, 2927, 3000, 3067 }; const int8_t temp_table[ADC_TABLE_SIZE] { -40, -35, -30, -25, -20, -15, -10, -5, 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120 };查找时把实际ADC值与表中数据一一对比找到所在区间再做线性插值。以表间隔5度来看插值后的分辨率远好于1度精度受限于表本身的计算精度和NTC的一致性。如果不想自己算表也可以借助在线计算工具生成然后直接把数组拷贝到代码中。可以把这个表看作是公式法的“离线固话”版本两者本质是同一件事。3.5 查表法与公式法的精度对比在实际项目中我同时实现了两种方式做了对比测试。使用同一组ADC采样值两种方法输出的温度差异在正负0.2度以内。这说明只要用的数学模型一致无论查表还是公式结果都会收敛到同一个值。两者真正的差异在计算速度和代码体积上。公式法大约占3KB的Flash空间因为引入了logf数学函数每帧计算耗时约16毫秒48MHz主频纯软件浮点查表法只需约0.5KB的Flash每帧计算耗时不到1毫秒。如果你的单片机还要干其他活比如OLED显示、按键扫描、通信协议处理每200毫秒做一次温度计算公式法占用的十几毫秒问题不大。但如果需要以10Hz以上频率输出温度查表法的优势就非常明显了。这是个典型的算力与灵活性的取舍。4. 完整代码实现与模块化设计4.1 硬件层驱动封装为了让代码易于维护和复用我把NTC采集相关功能封装成了一个独立模块对外只暴露三个接口初始化、读取ADC、获取温度。上层应用不需要关心底层是公式法还是查表法只要调用接口就能拿到温度值。头文件定义如下#ifndef __NTC_H #define __NTC_H #include stm32f0xx.h #define NTC_OPEN_FAULT (-999.0f) #define NTC_SHORT_FAULT (999.0f) void NTC_Init(void); uint16_t NTC_ReadRawADC(void); float NTC_GetTemperature(void); #endifNTC_Init里完成GPIO和ADC的初始化NTC_ReadRawADC返回滤波后的ADC值NTC_GetTemperature内部完成ADC读取、滤波、温度计算全流程。这段代码同时维护了故障码用-999和999表示传感器开路和短路上层根据返回值判断当前是正常测量还是故障状态这在车载监测中特别重要。4.2 主循环中的调用方式主循环逻辑非常简洁示例代码如下int main(void) { SystemInit(); Delay_Init(); UART_Config(); NTC_Init(); while(1) { float temperature NTC_GetTemperature(); if(temperature 50.0f) { // 启动风扇或报警 } else if(temperature -20.0f) { // 低温保护逻辑 } Delay_Ms(200); } }200毫秒的采样周期比较合理既不会让CPU空转也不会让温度响应显得迟钝。NTC本身的热时间常数在空气中大约是5到15秒浸入液体中会快一些200毫秒已经远远够用。4.3 采集周期与功耗之间的平衡如果你的系统是电池供电采集周期和MCU休眠策略就需要一起考虑。STM32F042的Stop模式功耗可以做到微安级别实际设计中可以是这样的功耗管理节奏普通监控模式下每1秒唤醒一次启动ADC采集换算温度如果温度变化不大就直接返回休眠。如果温度超过阈值切到快速采集模式每100毫秒采一次便于及时响应。这样设计的最大好处是运行电流可以控制在很低范围ADC和NTC分压电路可以单独控制电源在休眠时彻底断电只有一个定时器保持唤醒。5. 工程调参、标定与故障排查5.1 精度影响因素的量化分析套件焊完之后如果发现温度读数整体偏大或偏小先不要急着怀疑代码先排查三个因素。第一个是NTC本身的精度。消费级NTC的25度阻值误差是正负1%B值误差通常为正负1%两项叠加起来造成的温度误差在正负0.5到1度没有校准的情况下这个误差是正常的。第二个是分压电阻的精度。5%精度的10K电阻作为分压臂引入的误差可能和NTC自身误差相当。用1%或0.1%精度的电阻可以有效改善整体精度。第三个是ADC参考电压的精度。STM32F042的VDDA直接接到3.3V LDO上时如果LDO输出不是精确的3.3V而是3.28VADC满量程对应的实际电压就变了那么按照3.3V计算出来的温度就有偏差。解决方法是把VREFINT通道打开用内部参考电压反推真实的VDDA值再代入计算。这个技巧在LDO精度不够或者电池供电场景下非常有用。VREFINT校准的实现方式核心如下float NTC_GetVDDA(void) { uint16_t vrefint_adc 0; const float vrefint_typical_mv 1230.0f; ADC_ChannelConfig(ADC1, ADC_Channel_Vrefint, ADC_SampleTime_239_5Cycles); ADC_StartOfConversion(ADC1); while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) RESET); vrefint_adc ADC_GetConversionValue(ADC1); return (vrefint_typical_mv * 4095.0f) / (float)vrefint_adc / 1000.0f; }把返回值代入公式中的Vref用实际VDDA替代理论3.3V即可消除参考电压不准引入的误差。5.2 标定流程两点标定与三点标定的实操如果项目的温度精度要求较高比如医疗设备或精密仪器软件层面的标定是躲不掉的环节。两点标定是常用的方法。用恒温槽或精密温度计先把探头放入0度冰水混合物中记录ADC值再把探头放入50度或60度的恒温水中记录ADC值。然后修改B值方程中的B参数或者直接在查表时加入一个偏移量。实际上更简单的做法是记录两个温度点的偏差做一次线性纠偏。比如0度时读数为1.2度60度时读数为59.5度那么增益误差是(60-0)/(59.5-1.2)再把这个比例系数和偏移量存到Flash里每次上报温度前做一次线性修改。这种方法实现简单能在整个量程内把误差压缩到正负0.3度以内。三点标定则在低、中、高三个温度点分别记录原理类似只是用分段线性插值替代单一比例纠正对宽量程项目效果更好。5.3 车载冷却液温度测量的特殊设计考量回到前面提到的汽车冷却液温度测量场景这个应用和普通的室温测量有很大区别。冷却液温度的变化范围通常是-40度到150度低温启动和高温过热都需要准确感知。NTC的阻值在这个范围内变化可达三个数量级从几十千欧到几百欧ADC的采样时间需要覆盖整个量程。响应时间很关键。冷却液温度变化不会特别快但发动机工况突变时也可能出现较快的温升。NTC探头的热时间常数在液体中一般为2到8秒比空气中快很多采样周期可以设到100毫秒甚至更短以便及时捕捉温度变化。可靠性要求是重中之重。传感器开路、短路、线束接触不良、进水等情况在车载环境下都有可能发生。程序必须能在这些异常下安全降级处理比如进入跛行模式或记录故障码。EMC性能同样不可忽视。发动机舱内的电磁干扰很严重分压电路和信号线需要做好滤波和屏蔽。我见过一个案例探头线束靠近点火线圈布置之后温度读数开始无规律跳动加了屏蔽双绞线加滤波电容之后恢复正常。5.4 常见问题速查表现象可能原因解决方案温度读数跳变电源纹波大/采样时间过短加电容滤波采样时间改为239.5周期0度时读数严重偏高NTC阻值偏小或B值不匹配检查NTC型号确认B值与代码中一致温度读数整体偏低分压电阻偏大用万用表量分压电阻实际值ADC输出始终4095NTC短路或分压点对地开路检查焊接和接线ADC输出始终0NTC开路或线束断裂检查探头与线束连接温度响应特别慢RC滤波电容太大限制电容在0.1uF到1uF之间低温段误差大B值公式本身偏差改用Steinhart-Hart方程或查表温度读取偶尔变成负数采样时间不够导致ADC偏小增大ADC采样周期并做滤波电池供电时功耗过高分压电路一直通电用MOS管控制分压电路电源与精密温度计对比误差为固定值传感器精度差异做两点标定校正5.5 关于基准电压的进阶使用方法前文提到VREFINT校准实际使用中还有一个细节。STM32F042的VREFINT校准值存储在系统存储区因芯片批次而异精确读取方式是在STM32F0系列参考手册中找VREFINT_CAL地址。有这个校准值之后VREFINT的电压值就不必使用典型值1.23V而是用出厂校准值代入计算精度会更高。具体做法是在系统初始化时读一次这个校准值存入全局变量。之后每次计算VDDA都使用该校准值。如果项目对温度精度要求不是特别苛刻用典型值也能满足大部分场合。F042的ADC还支持注入组转换。简单说就是可以设置一组高优先级通道在后台周期采集与温度同组的通道时通过注入组触发VREFINT的采样。这种方式比较复杂一般场景不需要用到。6. 从测温到完整监测系统的扩展思路这套NTC测温模块做完之后可以扩展的方向其实很多。把温度数据通过CAN总线发出去就构成了一个简单的车载温度采集节点。STM32F042本身不带CAN控制器但通过SPI接口外挂MCP2515模块可以实现。如果不需要CAN用UART走Modbus协议也可以采集终端把它们挂在RS485总线上做一个多点温度巡检系统应用场景更广。与OLED显示屏组合可以做成一个便携式温度表实时显示当前温度、最高最低温度记录还可以加蜂鸣器做超温报警。如果测量冷却液温度那么PWM控制风扇转速是一个很自然的联动功能。设定一个目标温度区间温度低于下限风扇停止高于上限风扇满转中间按比例调速。这就是一个典型的单变量闭环控制逻辑简单、效果好对整车能耗优化也有帮助。多路采集的应用场景也很实用比如同一块板子上接三路NTC分别测环境温度、设备表面温度和冷却液温度三个通道的数据做对照分析能比单点测量提供更全面的信息。最后再分享一个实用技巧。板子量产阶段每块板的NTC探头和分压电阻都有个体差异如果不想逐台标定可以在烧录程序时通过UART或USB引导程序写入一组标定参数。这样做可以在生产线上快速完成批量校准不用拆外壳调电阻维护时也方便标定参数损坏后恢复默认值即可。NTC测温这个功能工程量不大但涉及的知识点横跨模拟电路、ADC采样、数据滤波、数学建模和故障诊断每个环节都能展开讲出不少细节。上面这套框架从设计到调试我完整走了一遍照着这个思路做测温方案至少不会走弯路。
返回列表