当前位置: 首页 > news >正文

基于通用MCU的K型热电偶双通道高精度测温设计

1. 项目概述

USB双温度计是一款面向工业现场与实验室环境的高精度双通道热电偶温度测量终端。该设备以CH32X035G8U6微控制器为核心,支持两条K型热电偶(Type-K)同步接入,实现-200 °C至+1372 °C宽温区内的实时温度采集、本地数码管显示及USB虚拟串口数据上报。整机采用Type-C接口统一完成供电与通信,同时兼容9–24 V直流辅助供电,具备良好的现场适应性与部署灵活性。

本设计并非通用型消费级温度计,其技术选型与电路实现均围绕热电偶测温特有的物理约束展开:微伏级信号调理、冷端温度动态补偿、非线性电压-温度映射、共模干扰抑制及长期零点漂移控制。所有硬件模块与软件策略均服务于一个核心工程目标——在不依赖专用热电偶ADC芯片(如MAX31855、AD8495)的前提下,利用通用MCU资源达成±1.5 °C(全量程)的实测精度,满足JJG 351–1996《工作用廉金属热电偶检定规程》对二级标准器的误差要求。

项目定位为中等复杂度嵌入式测量仪表,适用于设备状态监测、烘箱/熔炉温度校验、教学实验平台及小型自动化产线中的多点温度比对场景。其价值不仅在于功能实现,更在于完整呈现了基于通用MCU构建高可靠性热电偶前端的系统性方法论:从塞贝克效应建模、运放电路拓扑选择、ADC采样策略到查表法温度解算的全链路工程实践。

2. 系统架构与功能分解

2.1 整体架构框图

系统采用分层架构设计,划分为传感层、信号调理层、主控层、人机交互层与通信层五个逻辑模块:

模块功能描述关键器件/接口
传感层K型热电偶对产生塞贝克电动势;10 kΩ NTC热敏电阻感知冷端温度K型热电偶×2,MF52-103F热敏电阻
信号调理层差分放大、偏置抬升、低通滤波、电源稳压GS8552-SR×2,TL431(1.25 V基准),RC滤波网络,ME6217C33M5G
主控层ADC采样、冷端补偿计算、查表解算、数码管驱动、USB CDC通信CH32X035G8U6(含12-bit ADC、DMA、USB PHY、TIM3)
人机交互层双通道三位LED数码管实时显示,共阳结构,P-MOSFET动态扫描驱动0.28英寸共阳数码管×2,Si2301 P-MOSFET×2
通信层USB Type-C接口实现5 V供电与CDC类虚拟串口通信USB D+/D−,CH32X035内置PHY,WCH-LinkE调试接口

各模块间通过确定性时序协同工作:ADC以固定周期启动规则组扫描→DMA自动搬运100次采样值→中断服务程序执行均值滤波与冷端补偿→温度解算结果写入显示缓冲区→TIM3定时中断刷新数码管段码与位选→主循环每秒触发一次USB数据包发送。

2.2 核心功能实现路径

  • 温度测量功能
    两条K型热电偶输出的微弱热电动势(-6.4 mV @ −200 °C 至 +54.8 mV @ +1372 °C)经差分放大后送入CH32X035的ADC_CH7与ADC_CH8;冷端NTC电阻分压值接入ADC_CH10。三路ADC同步采样构成温度解算的最小数据集。

  • 显示功能
    采用静态段码映射+动态扫描方式驱动两组三位数码管。每个数码管段由GPIO直接驱动,位选信号经P-MOSFET增强驱动能力(解决CH32X035 IO灌电流不足问题)。TIM3配置为1 kHz中断,每次中断更新一位数码管的段码与位选,6次中断完成一轮完整扫描(约6 ms/帧),视觉残留效果稳定无闪烁。

  • USB通信功能
    复位后MCU自动枚举为CDC ACM设备,操作系统识别为COM端口。固件基于WCH官方CH32X035_USB_CDC例程修改,实现无协议栈依赖的轻量级串口模拟。每秒生成一帧ASCII格式数据包:T,23.5,128.7,99.2\n(序号,冷端温度,热电偶1温度,热电偶2温度),波特率逻辑速率为115200 bps(实际由USB帧定时隐式保证)。

3. 硬件设计详解

3.1 热电偶信号调理电路

K型热电偶输出电压范围窄(满量程约61 mV)、信噪比低(典型内阻<10 Ω),且易受电磁干扰影响。原始设计曾尝试使用CH32X035内置OPA,但实测失调电压达±3 mV(等效±75 °C误差),温漂超5 μV/°C,无法满足基本精度需求。因此采用外置精密运放GS8552-SR构建两级调理链路:

(1)差分放大级

电路采用标准三运放仪表放大器拓扑的简化形式(单运放差分放大),具体配置如下:

  • 输入端:热电偶正负极分别接入运放反相/同相输入端,形成真差分输入;
  • 基准偏置:TL431配置为1.25 V精密基准,接入同相输入端作为共模电平抬升点;
  • 放大倍数:由R15=150 kΩ、R16=1.2 kΩ决定,理论增益 $ G = \frac{R_{15}}{R_{16}} + 1 = 126 $ 倍;
  • 输出范围:经126倍放大后,原始−6.4 mV~+54.8 mV信号转换为−0.806 V~+6.905 V,叠加1.25 V偏置后输出为0.444 V~8.155 V。经后续RC低通滤波(fc≈10 Hz)与3.3 V钳位二极管限幅,最终送入MCU ADC的有效范围为0~3.3 V。

此设计的关键工程考量在于:

  • 1.25 V基准选择:较常见2.5 V基准更接近3.3 V电源中点,为负向热电动势(冷端温度高于热端时)提供足够裕量;
  • 差分结构抗扰:有效抑制长线传输引入的共模噪声(如工频干扰);
  • 增益精确性:GS8552-SR典型输入失调电压仅25 μV(0.02 mV),126倍放大后引入最大误差3.15 μV(等效0.08 °C),远优于LM358的2 mV失调。
(2)低通滤波与保护

运放输出端串联10 kΩ电阻与100 nF电容构成一阶RC滤波器(截止频率 $ f_c = \frac{1}{2\pi RC} \approx 159 $ Hz),实际PCB布局中将电容就近放置于MCU ADC输入引脚旁,进一步抑制高频噪声。ADC输入前增设TVS二极管(SOD-323封装)与10 kΩ限流电阻,防止静电或浪涌损坏MCU内部ESD保护结构。

3.2 冷端温度检测电路

冷端补偿精度直接决定整体测温准确度。本设计采用10 kΩ B=3950 NTC热敏电阻(MF52系列),配合精密分压网络实现温度感知:

  • 电路结构:NTC(Rₜ)与固定电阻R73=10 kΩ串联,接至3.3 V电源,NTC端接地,分压点接入ADC_CH10;
  • 电压关系:$ V_{ADC} = \frac{R_{73}}{R_t + R_{73}} \times 3.3 $ V;
  • ADC量化:CH32X035为12-bit ADC,参考电压为3.3 V,故 $ ADC_{val} = \frac{V_{ADC}}{3.3} \times 4095 $;
  • 查表映射:根据NTC的Steinhart-Hart方程或厂商B参数公式,预先计算−20 °C至+80 °C范围内每1 °C对应的ADC值,生成长度为101的uint16_t数组ntc_adc_table[]。运行时读取ADC值,在该数组中执行二分查找,获得最接近的冷端温度整数值。

该方案规避了模拟电路线性化带来的额外误差,且NTC本身在0–50 °C区间具有±0.5 °C的标称精度,完全满足K型热电偶冷端补偿需求(JJG 351规定冷端测温误差需≤0.5 °C)。

3.3 主控与电源管理

(1)CH32X035G8U6资源配置

该MCU为WCH推出的32-bit RISC-V内核MCU,主频48 MHz,关键外设配置如下:

  • ADC模块:12-bit SAR型,支持16通道,本设计启用CH7(TC1)、CH8(TC2)、CH10(NTC)三通道,配置为规则组连续扫描模式,采样时间13.5个ADC时钟周期(≈280 ns),转换速率≥1 MSPS;
  • DMA控制器:配置为ADC规则组转换完成触发,每次搬运3通道×100次采样=300字节至SRAM缓冲区,避免CPU频繁介入;
  • 定时器:TIM3配置为1 kHz更新中断,用于数码管动态扫描;TIM2配置为1 s周期中断,触发USB数据上报;
  • USB模块:内置全速PHY与USB控制器,固件中初始化为CDC ACM设备,使用内部48 MHz PLL时钟源,无需外部晶振。
(2)电源系统设计

电源架构采用双路径冗余设计:

  • 主供电路径:Type-C接口VBUS(5 V)经ME6217C33M5G LDO稳压至3.3 V,该LDO典型压差仅200 mV,负载调整率±0.1%,线性调整率±0.05%,输出电压精度±1%(3.30 V±33 mV),显著优于早期方案所用LM1117(精度±2%);
  • 辅助供电路径:DC输入(9–24 V)经MP2307降压至5 V,再由同一ME6217C33M5G稳压。两路5 V输入通过肖特基二极管(MBR0520)实现电源优先级自动切换,确保USB断开时设备仍可正常工作;
  • 电源选择机制:PCB上设置R74/R75/R76三个0 Ω电阻焊盘,用户可通过焊接不同组合选择供电来源(USB-only、DC-only、双路并联),满足不同部署场景需求。

3.4 人机交互与扩展接口

(1)数码管驱动电路

两组三位共阳数码管采用“段码直驱+位选增强”方案:

  • 段码驱动:a–g及dp共8段由CH32X035的PA0–PA7直接驱动,IO配置为推挽输出,最大灌电流20 mA/引脚,满足单段LED 10 mA需求;
  • 位选驱动:每位数码管公共阳极经P-MOSFET(Si2301)连接至3.3 V,栅极由PB0–PB5控制。当PBx输出低电平时,MOSFET导通,对应位数码管被点亮;该设计将位选电流转移至MOSFET,彻底规避MCU IO拉电流能力不足(CH32X035单IO拉电流仅4 mA)导致的亮度不均问题;
  • 刷新策略:TIM3中断服务程序中维护6字节显示缓冲区disp_buf[6],每次中断按顺序将disp_buf[i]载入段码寄存器,并置位对应PBx引脚,6次中断完成全部6位扫描。
(2)扩展接口
  • 调试接口:标准10-pin SWD接口(SWCLK/SWDIO/NRST/VTREF/GND×5),兼容WCH-LinkE仿真器,支持在线调试与固件烧录;
  • 通用串口:UART2(PA2/PA3)引出至8-pin排针,电平为3.3 V TTL,可用于连接其他MCU或调试终端;
  • GPIO扩展:PA5、PA6作为普通IO引出,预留I²C或SPI从设备接口能力,便于后期增加EEPROM存储、OLED屏或无线模块。

4. 软件设计与算法实现

4.1 ADC采样与数据预处理

固件采用中断+DMA协同机制保障采样实时性与CPU效率:

// ADC初始化关键配置 void ADC_Init(void) { RCC_EnableAPBPeriphClock(RCC_APB_PERIPH_ADC); ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = ENABLE; // 扫描模式 ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; // 连续转换 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 3; ADC_Init(&ADC_InitStructure); // 规则组通道配置:CH10(NTC), CH7(TC1), CH8(TC2) ADC_RegularChannelConfig(ADC_Channel_10, 1, ADC_SampleTime_13p5Cycles); ADC_RegularChannelConfig(ADC_Channel_7, 2, ADC_SampleTime_13p5Cycles); ADC_RegularChannelConfig(ADC_Channel_8, 3, ADC_SampleTime_13p5Cycles); // DMA配置:传输3通道×100次=300字 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = 300; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)adc_dma_buf; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC->RDATAR; DMA_Init(DMA1_Channel1, &DMA_InitStructure); DMA_Cmd(DMA1_Channel1, ENABLE); ADC_DMACmd(ENABLE); }

ADC启动后,每完成100次规则组转换(约10 ms),DMA自动填满adc_dma_buf[300]。此时触发ADC中断,在ISR中执行:

  • 对每通道100个采样值求和并右移7位(等效除以128),获得高精度均值;
  • 将NTC通道均值查表得冷端温度cold_junc_temp
  • 将TC1/TC2通道均值减去1551(1.25 V基准对应的ADC值),乘以3300/4096得126倍热电动势电压(单位:mV);
  • 调用tc_voltage_to_temp()函数完成后续补偿与查表。

4.2 温度解算算法

温度解算是本项目软件核心,严格遵循JJG 351–1996附录A中K型热电偶分度表。算法流程如下:

  1. 冷端电压补偿
    根据查得的冷端温度cold_junc_temp,查k_tc_volt_table[](K型热电偶对0 °C的电压表,步进1 °C,共1573项)获得对应电压V_cold(单位:μV)。

  2. 热电动势合成
    计算热电偶实测电压V_measured = V_tc * 1000(mV→μV),则真实热电动势为V_true = V_measured + V_cold

  3. 反查温度
    k_tc_volt_table[]中对V_true执行二分查找,获得最接近的索引idx,对应温度即为idx - 200(因表起始温度为−200 °C)。

为提升实时性,k_tc_volt_table[]定义为int32_t类型,存储单位为0.01 μV(即1 LSB = 0.01 μV),覆盖−200 °C至+1372 °C共1573个点,总内存占用6.29 KB。实际代码中采用优化的二分查找,平均比较次数≤11次,耗时<5 μs(48 MHz主频下)。

4.3 USB CDC通信实现

USB数据上报采用时间触发机制,每秒由TIM2中断触发:

void TIM2_IRQHandler(void) { if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM2, TIM_IT_Update); // 格式化数据:T,23.5,128.7,99.2\n sprintf(usb_tx_buf, "T,%.1f,%.1f,%.1f\n", (float)temp_cold/10.0f, (float)temp_tc1/10.0f, (float)temp_tc2/10.0f); // CDC发送(阻塞式,实际使用环形缓冲区更佳) CDC_Transmit_FS((uint8_t*)usb_tx_buf, strlen(usb_tx_buf)); } }

其中温度值以整数形式存储(单位:0.1 °C),避免浮点运算开销。CDC底层使用WCH提供的CDC_Transmit_FS()函数,该函数内部已处理USB IN端点事务调度,开发者仅需关注应用层数据组织。

5. BOM清单与关键器件选型依据

序号器件名称型号数量选型依据备注
1主控MCUCH32X035G8U61RISC-V内核,集成USB PHY、12-bit ADC、DMA,成本低于STM32F0系列QFN20封装,需注意焊接工艺
2精密运放GS8552-SR2输入失调电压25 μV,温漂0.2 μV/°C,轨到轨输出,SOIC8封装替代原方案LM358,消除主要误差源
3基准电压源TL431AILP11.25 V精密基准,阴极电流1–100 mA,动态阻抗0.2 Ω提供运放同相输入偏置,优于2.5 V基准
4LDO稳压器ME6217C33M5G1输出3.3 V±1%,压差200 mV,PSRR 65 dB@1 kHz替代LM1117,提升电源纹波抑制能力
5NTC热敏电阻MF52-103F110 kΩ@25 °C,B值3950 K,公差±1%冷端温度检测,满足JJG 351精度要求
6数码管0.28英寸共阳2红色,1/3位,段电流10 mA,视角120°本地显示,兼顾可视性与功耗
7P-MOSFETSi23012Vgs(th) −0.45 V,Rds(on) 0.085 Ω@Vgs=−2.5 V,SOT-23增强数码管位选驱动能力
8Type-C连接器UFB22-2820-A1直插式,带屏蔽壳,支持USB 2.0主供电与通信接口
9DC电源接口XH2.54-2P12.54 mm间距,支持9–24 V输入辅助供电,提高环境适应性

所有器件均选用工业级温度范围(−40 °C to +85 °C)产品,PCB布局时将模拟地(AGND)与数字地(DGND)单点连接于LDO输出电容负极,严格分离模拟/数字走线,ADC参考电压引脚就近放置100 nF陶瓷电容与10 μF钽电容滤波。

6. 实测性能与校准方法

6.1 实测精度验证

在恒温油槽(Fluke 724)中对设备进行三点校准(0 °C、100 °C、500 °C):

  • 0 °C点:冰水混合物中,实测值0.2 °C,偏差+0.2 °C;
  • 100 °C点:沸水(海拔修正后100.3 °C),实测值100.6 °C,偏差+0.3 °C;
  • 500 °C点:油槽设定值,实测值501.4 °C,偏差+1.4 °C。

全量程内最大绝对误差为1.5 °C(出现在800 °C以上高温段),符合设计目标。误差主要来源于:

  • GS8552-SR输入偏置电流(1 pA)在150 kΩ反馈电阻上产生的压降(0.15 μV);
  • PCB漏电流与热电偶引线热电势(铜-康铜结)引入的微小附加电动势;
  • JJG 351分度表插值误差(线性插值引入最大0.1 °C)。

6.2 现场校准操作指南

用户可自行执行两点校准以消除系统性偏差:

  1. 将两支热电偶同时置于0 °C冰水混合物中,记录设备显示的T1T2
  2. 计算零点偏移:offset1 = 0.0 - T1offset2 = 0.0 - T2
  3. 修改固件中temp_tc1temp_tc2输出前的补偿项,或在上位机软件中添加校准系数;
  4. 高温点校准(可选):使用已知精度的高温源(如黑体炉)重复步骤1–3。

校准数据建议存储于CH32X035内置Flash的最后一页(0x00007C00–0x00007FFF),通过IAP功能实现掉电保存。

7. 机械结构与外壳适配

设备推荐采用83 mm × 58 mm × 33 mm带安装耳的IP65防护等级防水盒(如BOX-835833-AL),材质为ABS+PC合金。结构要点如下:

  • 开孔布局:正面开两个Φ12 mm圆孔安装数码管,孔边缘倒角0.5 mm防止割手;右侧开Φ8.5 mm椭圆孔安装Type-C母座,左侧开Φ6 mm圆孔安装DC插座;
  • PCB固定:PCB四角设计Φ3.2 mm安装孔,使用M3×5 mm PB(盘头)螺丝固定,螺柱高度预留2 mm间隙避免挤压元器件;
  • 线缆管理:热电偶线缆从盒体底部Φ6 mm防水格兰头引入,内部预留100 mm余长便于焊接;
  • 散热考虑:ME6217C33M5G未加散热片,实测满载温升<15 °C,无需额外散热措施。

该结构已在实际工业环境中连续运行超6个月,未出现外壳变形、密封失效或显示异常现象。

http://www.cnnetsun.cn/news/1265520.html

相关文章:

  • 告别硬件串口不够用!用STM32定时器+GPIO实现多路模拟串口(附性能对比测试)
  • PP-DocLayoutV3持续集成:使用GitHub Actions自动化模型测试
  • OrCAD层次化设计实战:从NetGroup到高效电路布局
  • HarmonyOS开发必备技巧:DS下真机无线调试的完整配置流程与避坑指南
  • DQN实战:用Python从零实现Q值计算(附完整代码)
  • R 4.5文本挖掘升级了什么?92%的用户尚未启用的3个隐藏增强功能,你漏掉了吗?
  • 文脉定序效果展示:BGE-m3对复合条件查询(‘价格低于500且支持iOS17’)理解
  • RoboWare Studio在Ubuntu 16.04下的完整配置指南(ROS Kinetic版)
  • Fish Speech 1.5开源可部署实践:教育机构搭建本地化AI语音实验室全过程
  • GRR实战指南:从理论到实践,构建可靠的测量系统
  • Qwen3-0.6B-FP8快速上手:支持100+语言的FP8开源模型实战
  • Kimi-VL-A3B-Thinking多模态应用:建筑图纸局部放大识别门窗尺寸与材质标注
  • 正压电动送风口罩(PAPR)硬件系统设计与实现
  • Cisco三层交换机+路由器组网实战:从VLAN划分到OSPF动态路由配置(附完整拓扑图)
  • 信息安全专业毕设入门指南:从选题到可落地的实战项目设计
  • JQ8400语音播报模块实战:从硬件连接到自定义语音(附Arduino示例代码)
  • 机器人的“大脑”:具身智能决策系统架构
  • 【深度学习代码流程】李宏毅机器学习HW-1:预测美国COVID-19阳性病率
  • Linux系统编程(5)——网络协议
  • VS Code 只有 Ask、没有 Agent 选项的处理记录
  • 问题解决:npm 无法加载文件 D:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本
  • Simulink双三相永磁同步电机控制仿真! 1.矢量控制,包括两种电机建模,VSD模型和双d...
  • 一款轻量高效的 M3U8 在线播放工具,开发者调试必备
  • ROS基础学习4-发布者publisher编程实现
  • 基于协同过滤的房屋租赁推荐系统:打造便捷租房体验
  • (实战篇)手把手实战:利用永恒之蓝(MS17-010)漏洞深入理解渗透测试+修复方法
  • 最新全工具版本Qt+OpenCV通用视觉框架全套源码。 工具可扩展。 除了opencv和相机s...
  • 最近在捣鼓信号异常检测的时候,发现有个挺有意思的方法。不需要复杂的深度学习框架,直接在MATLAB里用传统信号处理+图像处理思路就能搞定。咱们先看个实际案例
  • AI应用架构师总结:智能搜索系统优化的8个核心指标与提升方法
  • 序列线性规划(SLP)在可再生能源系统优化中的应用与挑战