ARTICLE DETAIL

资讯详情

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

HC32L136额温枪硬件方案拆解:热电堆信号链与PCB设计实战

HC32L136额温枪硬件方案拆解:热电堆信号链与PCB设计实战 简介面向医疗电子与嵌入式硬件开发者这套华大HC32L136额温枪方案是一份可直接参考量产的完整设计包。方案基于模拟热电堆传感器涵盖AD绘制的原理图与PCB、底层驱动软件及调试注意说明整体采用77x28mm双面布局的2层板结构紧凑适合额温枪、红外测温类产品的研发与生产导入。压缩包内共129个文件大小约7.84MB其中45个h与40个c文件构成完整嵌入式工程源码schdoc/pcbdoc及board等为AD工程核心设计文件pdf与docx提供调试说明与参数调整指南png/jpg便于快速查看板卡效果uvprojx、icf、flash等对应编译器与烧录配置目录结构清晰便于按模块查找。目前已有365人学习下载。资料不仅包含可直接导入的AD工程还附带了详细的调试注意说明针对热电堆传感器参数调整、双面布局布线要点给出落地建议源码模块划分明确拿到后能较快理解采集、计时、存储等逻辑可作为额温枪产品开发或毕业设计的实用参考。1. 华大HC32L136额温枪方案先看清里面装的是硬件工程不是一份PPT解压这个.zip你会看到 Altium Designer 设计的原理图与 PCB、基于 HC32L136 的软件源码还有一份调试注意说明。很多工程师第一反应是打开源码找温度采样函数但真正决定额温枪准不准的是热电堆模拟信号链、PCB 布局和标定参数三个环节。这个方案的本质不是一颗 MCU 怎么读温度而是一套从传感器端到人体表皮温度显示的低噪声模拟链路设计。这篇文章按原理图、PCB、软件、调试四个阶段拆解给出可复现的开发路径适合负责硬件联调、软硬件协同和产品转产的人参考。2. AD原理图设计从HC32L136最小系统到热电堆信号调理2.1 热电堆方案选型摸清模拟输出和数字输出的路线差异额温枪的探测核心是红外热电堆传感器常见结构是热电堆芯片内封装一颗 NTC 热敏电阻NTC 用来测量探头本体温度也就是环境温度。热电堆本身输出纳伏到毫伏级电压需要高增益、低漂移的放大链路。还有一种做法是选用 MLX90614 这类数字红外传感器内部集成放大与 ADC直接输出 I2C 温度数据开发省事但 BOM 成本比模拟方案高 5 到 10 元。HC32L136 额温枪方案如果按低毛利市场设计普遍采用模拟热电堆加外部运放把信号放大到 HC32L136 内置 ADC 的满量程附近。方案类型输出信号电路复杂度标定成本量产成本适用场景模拟热电堆 外部运放差分微伏信号需仪表/差分放大中高需黑体炉低消费类额温枪、电子体温计数字红外传感器直接温度值I2C 接口低低出厂预标定高快速打样、高端产品热电堆 HC32L136 内置 ADC模拟量直接进 ADC较低高受参考电压精度限制低已经压缩成本到极限的方案从压缩包的名字看你拿到的应该是第一种方案AD 原理图里会有一个运放芯片、几个分压电阻以及一颗带金属封装的探头。选型时优先看三个参数热电堆灵敏度、热时间常数、NTC 的 B 值。灵敏度决定放大倍数热时间常数决定响应速度NTC 精度直接影响环境温度补偿推荐 __ NTC 精度在 1% 以内。2.2 信号放大与偏置HC32L136的ADC输入范围是怎样匹配的热电堆差分信号经过运放放大后需要按单电源系统处理。HC32L136 的 ADC 输入范围取决于参考电压常见用 2.5V 外部基准运放输出只能在 0.1V 到 2.4V 之间线性保证。热电堆输出几毫伏要放大到 1V 到 2V放大倍数大约在 100 到 500 倍。可以在 AD 原理图里利用运放反馈电阻计算假设传感器灵敏度 2V/W被测目标与探头温差 30℃ 时输出 0.6mV 到 5mV取放大倍数 200输出 0.12V 到 1V。再加上一个固定的 1.25V 共模偏置最终 ADC 输入范围落在 1.1V 到 2.25V不会碰 ADC 轨到轨死区。运放选型用低偏置电流、低失调电压的精密运放比如 OPA333、AD8606 这类偏置电流控制在 nA 级。HC32L136 的 ADC 内部输入阻抗在采样瞬间会远低于静态输入阻抗因此 RC 滤波电容不能选太大否则采样保持电容充不满动态性能下降。2.3 原理图页面组织与引脚分配检查HC32L136的每个外设落在哪一页拿到 AD 原理图后不要急着看网络表先按页找模块。一个结构合理的 HC32L136 额温枪原理图通常分成 3 页第一页是电源与最小系统包含 LDO、晶振、复位等第二页是热电堆运放电路和 NTC 分压第三页是 LCD 段码屏、按键、蜂鸣器和调试接口。每页在 Properties 面板中必须设置独立的 Sheet Number如果多页原理图的页码重复导出 PDF 时会出现只导出部分区域或 ERC 报告里网络悬空查不到的问题。这个现象在 AD 20 中很常见检查方法是在 Project 面板里打开单个 Sheet看看右下角 Title Block 的编号是否连续。HC32L136 最小系统的引脚分配建议如下表具体引脚号要以你手上的芯片封装图和实际原理图为准信号功能外设接口设计注意热电堆放大输出ADC 通道 0走线尽量短原理图上标注参考地NTC 分压ADC 通道 1分压电阻要 1% 精度上拉取 AVDDLCD 段码LCD 驱动引脚HC32L136 支持点亮段码屏注意电压档按键触发测量GPIO 输入按键要加滤波电容去弹簧抖动蜂鸣器GPIO 输出 / PWM驱动管预留限流电阻避免拉低 MCU 电源SWD 调试SWDIO / SWCLK原理图上保留 4 脚排针串 100Ω 电阻检查引脚分配时重点看电源网络是否有同网络的碎片号。执行 Design - Netlist - Create Netlist然后在 Messages 面板看警告。如果有 GND 和 AGND 混用问题额温枪的小信号精度直接受影响。这部分不是 ERC 报错但一定要改掉。2.4 AD工程设置焊盘封装、元器件库对照和PDF导出质量原理图里符号和 PCB 封装一一对应在 AD 中通过 Library 对话框管理。实际工程出现封装缺失多半是原理图符号库和 PCB 库没有做对照。打开原理图中的元件在 Properties 面板确认 PCB 封装字段是否指向当前项目库。如果封装名不对生成 PCB 时元件会悬空后续布局会乱。元器件库对照表是硬件工程师常见的交付物建议在压缩包里补一份包含符号库、封装库、3D 库的 Excel 清单标明芯片料号、封装、阻值精度。这样做转产时不会出现采购手上没有对应物料的情况。PDF 导出只显示部分区域是 AD 一个困扰很多人的问题。导出时在 Print 对话框勾选 All Sheets 和 Fit To Page确认 Page Size 与原理图一致。还原始图时最好让打印范围选择 All Sheets而不是当前激活的 Sheet。最后再跑一次 ERC优先处理带红色 No ERC 标记或悬空网络符号的问题。HC32L136 额温枪的模拟输入引脚是高阻输入哪怕原理图上有一根 2cm 的悬空线都会导致实际 PCB 上的共模噪声上升。3. PCB布局与走线HC32L136额温枪的双面板实战3.1 叠层与元件摆放把热电堆、运放和HC32L136放在一条热传导闭环里额温枪探头结构决定 PCB 形状热电堆传感器放在前端对准测量目标运放和 NTC 紧贴传感器HC32L136 放在手柄中段LCD 和按键靠后。这样摆的目的是让热电堆引线最短避免微伏信号穿越整个板。叠层用双面板就够顶层走信号底层铺完整地平面不要在地平面上开长槽。在 AD 的 Layer Stack Manager 里设置板厚 1.6mm 或 1.2mm铜厚 1oz具体根据探头外壳厚度微调。元件摆放顺序建议是先固定传感器再以传感器为中心布置运放然后布 MCU 和电源。热电堆传感器底部不能铺铜因为金属铜会形成热通道把探头上的温度传到 PCB 上影响 NTC 对环境温度的采集。这里要在 AD 中画一个机械层区域将来铺铜后需要做铺铜挖空。分段原则是模拟地、数字地、电源地最后单点连接并且连接点放在 ADC 参考地附近。3.2 模拟小信号走线与铺铜开窗避开数字噪声和热捷径热电堆差分输出线是整块 PCB 最敏感的信号。两条线要等长、平行、尽量靠近走独立短路径接到运放输入端运放周围 5mm 内不要走按键、蜂鸣器、LCD 背光的数字线。HC32L136 的晶振引脚也属于高频区晶振应布局在 MCU 引脚旁远离模拟走线。铺铜挖空在 AD 20 中的做法是 Place - Polygon Pour Cutout框选传感器底部区域。也有工程师直接走 Keep-Out Layer在禁止布线区上画一个椭圆铺铜时这块被避开。需要提醒的是开窗区域越大地平面越不完整不要为了散热盲目挖空。开窗区域的边界距离敏感模拟线至少 0.5mm防止边缘电场耦合噪声。另一个常见需求是铺铜开窗比如 PCB 上预留测试点位置需要开窗露铜便于万用表探针接触。操作时在 Top Solder 层画线所覆盖的铜皮区域不会被盖绿油这就是开窗。开窗只用于电池负极端触点和校准触点其他位置不要随意加避免焊锡桥接。3.3 线宽、过孔与DRC检查0.3mm线径的载流能力用脚本算一下PCB 设计规则里过孔和线宽需要根据电流决定。HC32L136 额温枪整机电流通常不超过 50mA电源线 0.3mm 完全够用。许多工程师会问 0.3mm 线宽能过多少电流用 IPC-2221 近似公式可以自己算不需要背表。下面是一段快速估算脚本import math def trace_current_area(width_mm, copper_oz): # 计算PCB走线截面积, 单位mil^2 mil_per_mm 39.37 mil_per_oz 1.378 area (width_mm * mil_per_mm) * (copper_oz * mil_per_oz) return area def max_trace_current(area_mil2, temperature_rise10): # IPC-2221标准, 温升10摄氏度, 走线外部散热 k 0.024 b 0.44 c 0.725 return k * math.pow(area_mil2, b) * math.pow(temperature_rise, c) area trace_current_area(0.3, 1) print(0.3mm面积(mil^2):, int(area)) print(允许电流(A):, round(max_trace_current(area), 2))计算结果会告诉你1oz 铜厚、0.3mm 线宽的走线在外曝光条件下大概能过 1A 左右远大于额温枪的负载。但实际布局还要留裕量电源线建议走 0.5mm地线在条件允许时尽量加宽到 1mm。过孔选用 0.3mm 孔径、0.6mm 焊盘外径的标准工艺避免制造端额外加钱。DRC 检查要勾选 Un-Routed Net Constraint、Width Constraint、Clearance Constraint。AD 20 的 DRC 可以实时检查所有 PCB 走线和覆铜间距运行时注意 Messages 面板里有没有 Lar 的 short circuit 错误。如果 DRC 通过但有 Silk To Solder Mask 提示那是丝印压在开窗区上最好把相关丝印文本挪走否则生产时开窗边缘容易翘起。3.4 导入DXF外形、导出Gerber和钻孔文件时的AD操作细节很多额温枪外壳是供应商给 DXF 结构图AD 中通过 File - Import - DXF/DWG 把边框导入 Mechanical 1 层。导入后需要检查尺寸单位DXF 文件通常是毫米AD 默认也是毫米但如果用 mil 工程坐标会被放大 100 倍以上边框导出到 PCB 制造厂就废了。导入后把机械层边框闭合再通过 Design - Board Shape - Define from selected objects 生成 PCB 外形。制板导出时输出 Gerber 文件和钻孔文件是两个步骤。AD 里选择 File - Fabrication Outputs - Gerber Files格式选 RS-274X分辨率 2:5。钻孔文件在 Fabrication Outputs - NC Drill Files 里生成格式建议保留默认。导出后注意看输出目录AD 生成的钻孔文件名可能是xxx-TDRL或xxx.drl和 Gerber 文件后缀不同。转产时把钻孔文件和 Gerber 一并放进压缩包忽略其中任意一个PCB 上孔位就会全部丢失。最后提一个容易被忽略的点由于热电堆信号偏弱PCB 布线层的走线夹角不要小于 90 度走线拐角做圆弧或 135 度这样能减少阻抗突变。HC32L136 的晶振线路则尽量走短且远离排线必要的时候包一圈地线。4. 软件程序HC32L136的ADC采集、滤波与温度标定4.1 基于HC32L136主循环的ADC多通道采集HC32L136 的软件工程推荐使用官方 DDL 库main 函数中先做时钟配置再初始化 ADC、LCD 和 GPIO。额温枪软件时序分三段按键按下启动测量延时让传感器稳定然后连续读 32 次 ADC 取平均。不要用单次采集数据直接计算温度热电堆信号本身带随机噪声单次结果可能波动 ±0.3℃。// 使用HC32L136官方驱动库, 伪函数名对应当前SDK实际接口 void ADC_Init(void) { // 配置ADC参考电压为外部Vref12位分辨率 ADC_SetReferenceVoltage(ADC_VERF_EXT); ADC_SetResolution(ADC_RES_12BIT); // 开启热电堆通道(CH0)和NTC通道(CH1) ADC_EnableChannel(ADC_CH0); ADC_EnableChannel(ADC_CH1); // 采样时间设长一点, 模拟前端输出阻抗较高 ADC_SetSampleTime(ADC_CH0, 10); ADC_SetSampleTime(ADC_CH1, 10); } uint16_t ADC_ReadAverage(uint8_t ch, uint8_t times) { uint32_t sum 0; for (uint8_t i 0; i times; i) { ADC_StartConvert(1 ch); while (ADC_IsConversionFinished(ch) 0); sum ADC_GetConversionValue(ch); // 连续采样之间必须留出充电时间 delay_us(200); } return (uint16_t)(sum / times); }逻辑说明先走通道配置再采集。参数里最重要的是采样时间ADC 内部采样电容源阻抗如果匹配不好采样时间不足会导致 ADC 结果偏小热电堆输出阻抗可能到几十千欧外部 RC 滤波电容选了 100nF 时采样时间必须比普通信号长出一倍以上。如果采样时间设置过短读到的码值会呈现周期性偏差表现为温度值随距离变化敏感。NTC 通道采集同理用同一条 ADC 初始化代码只要切换通道号即可。4.2 从ADC码值到目标温度四次方辐射公式与查表法热电堆输出电压不只正比于目标温度还和环境温度的四次方之差成正比。精确算法是用斯蒂芬-玻尔兹曼辐射公式把环境温度 K 值四次方后与目标温度四次方比较。下面这段 C 代码用 powf 实现温度转换K_TEMP_SENS 是传感器的电压-四次方系数需要标定。#include math.h #define T_ZERO_ABS 273.15f #define K_TEMP_SENS 2.3e-8f // 单位: V/K^4, 由标定获得 float CalcObjectTemp(float v_sensor, float t_amb_c) { float t_amb_k t_amb_c T_ZERO_ABS; float t_amb_k4 t_amb_k * t_amb_k * t_amb_k * t_amb_k; // 目标黑体四次方 环境四次方 传感器电压/灵敏度系数 float t_obj_k4 t_amb_k4 v_sensor / K_TEMP_SENS; if (t_obj_k4 0.0f) { return 0.0f; } // 开四次方后转换回摄氏度 return powf(t_obj_k4, 0.25f) - T_ZERO_ABS; }参数说明v_sensor 是热电堆的实测输出单位伏特不是 ADC 码值。ADC 码值要先换算成电压VC 公式为v_sensor adc_code * Vref / 4096.0f。K_TEMP_SENS 初始值可以从传感器手册里读但手册给的值通常是大批量统计中间值每颗芯片会因为热阻、探头封装差异导致偏差必须在整机组装后做两点或三点标定。如果产品要求 0.2℃ 精度K_TEMP_SENS 用单一固定值不够通常要配合 NTC 实测的环境温度做二维校准表。如果 MCU 资源紧张也可以改成查表加线性插值避免 powf 在 Cortex-M0 上占用过多 CPU 时间。查表法需要在数组里存放一组环境温度-目标温差-ADC 码值映射插值步长越小内存开销越大。量大的产品一般用插值因为 MCU 有休眠功耗要求保持 powf 超过 10ms 会拖累低功耗节奏。4.3 标定参数存储HC32L136内部Flash模拟EEPROM的做法标定完成后K_TEMP_SENS、NTC 分压系数、环境温度偏置以及出厂日期会写入 HC32L136 内部 Flash 的末尾页而不是每次开机重新算。这样做的原因是 HC32L136 没有真正的 EEPROM只能利用 Flash 的最后一片扇区用擦写模拟。写入前必须关闭全局中断避免擦写 Flash 期间被按键中断打断导致异常。写完后要读回校验再恢复中断。这里有个经验Flash 擦写寿命有限因此不要把每次测量的温度都写进去。只有标定模式才写正常运行只读。标定模式通常进入条件是在上电瞬间按住某个按键 3 秒此时蜂鸣器发出提示音系统采集恒温槽或黑体炉的标准温度然后覆盖 Flash 中的旧参数。这样即使关键参数写坏也能重新进入标定模式恢复。4.4 软件滤波与状态机避免LCD刷新干扰ADC读数HC32L136 的软件程序在拿到原始 ADC 均值后一般还会做一次滑动平均或中位值滤波。推荐中位值滤波取 5 个采样点因为偶发的近距离人体红外反射会造成尖峰均值滤波会把这个尖峰带入结果。处理后得到的浮点温度再送去 LCD 显示并判断是否超过 37.3℃ 触发蜂鸣器。LCD 刷新和 ADC 转换不要在循环里同时进行。段码 LCD 的 COM 翻转会产生内部电场变化如果 ADC 采样正好碰到系统电源毛刺就会在显示上看到温度跳 0.1℃。常见做法是先把 ADC 采样完成把结果放进 ring buffer等下一次按键后再处理显示过程中不启动新转换。5. 调试注意事项从传感器输出到整机稳定性的逐级排查5.1 上电先测三组电压运放供电、偏置、热电堆差分拿到焊好的板子先不要烧程序。万用表量三个点运放电源脚相对 GND 是否为 2.5V 或 3.3V运放同相输入端偏置是否为 Vref 的一半热电堆两脚之间的差分电压静止状态下应该在 0mV 到 ±1mV 之间。如果差分电压达到几十毫伏多半是热电堆引脚连到运放时形成了天线回路检查运放输入端的 1nF 到 10nF 高频滤波电容有没有贴歪。没有示波器时可以先把运放输出引脚对地短路看 ADC 读到的码值是否趋近零如果还是卡在满量程附近说明运放自激或参考电压没起振。5.2 温度读数跳动的三个隐藏原因第一个隐藏原因是 NTC 分压电阻的供电端接了数字 3.3V没有接模拟参考电压。热电堆放大电路和 NTC 分压如果共用同一路 LDOLDO 的动态响应会受 LCD 背光开关影响。第二个原因是 PCB 开窗边缘的绿油没有覆盖好导致手指触碰时引入几十毫伏噪声表现为温度按身体摆动节奏跳。第三个原因是 ADC 采样前没有做 50Hz 工频滤波环境中的日光灯干扰会叠加在热电堆输出上需要在软件里把采样速度设置在工频的非整数倍比如每秒采样 21 次再做均值消除。5.3 标定时记录环境温度而不是只记录目标温度额温枪标定最常见的错误是只对着黑体炉记录目标温度却忽略环境温度的变化。标定时必须同时记录探头附近的环境温度尤其是冬天和夏天环境温度差超过 20℃K_TEMP_SENS 如果用单一值在另一环境下会显著偏移。建议标定流程先让整机在测试环境中静置 20 分钟让探头 NTC 和外壳温度一致然后用黑体炉设置 35℃、37℃、40℃ 三个点每个点稳定 10 分钟后再采集最后把三个点的数据拟合到四次方模型并把拟合系数写入 HC32L136 的 Flash。如果做完这些温度还是比标准体温计低 0.2℃ 到 0.5℃检查传感器探头与 PCB 之间是否用了隔热泡棉以及热电堆进光孔径是否被外壳遮挡。红外额温枪的光路设计直接影响热电堆接收能量这部分问题通过改电路和软件是解决不了的需要同步确认探头结构件的开孔尺寸和发射率设置。本文还有配套的精品资源点击获取
返回列表