基于单片机的多路热电偶温度监测与报警器

1 基于单片机的多路热电偶温度监测与报警器

点击链接下载prrotues仿真设计资料:https://download.csdn.net/download/m0_51061483/92081542

1.1 项目背景与系统概述

  1. 温度是工业生产、实验室测量、食品加工、医药冷链、环境监控等领域中最常用、最关键的过程参数之一。许多现场需要对多个测点同时监测温度并在异常时及时报警,例如:

    1. 设备多点轴承温升监控;
    2. 加热炉不同区域温度均衡性检测;
    3. 化工反应釜多点温度监测;
    4. 实验室恒温箱多通道记录与报警;
    5. 电力设备接头温升监测等。
  2. 在多点测温场景中,如果仅靠单通道测温或人工巡检,容易出现响应慢、漏检、无法及时处置等问题。构建一个"多路采集 + 实时显示 + 上下限报警 + 参数可设置"的温度监测与报警器,可显著提升安全性与管理效率。

  3. 本设计以单片机(MCU)为核心控制器,采用4路N型热电偶作为温度传感器输入,完成对4路温度的实时采集、计算、显示与报警控制。系统支持按键为每路温度独立设置上限报警值与下限报警值,并在检测到温度超出范围时通过蜂鸣器与LED实现声光报警提示。

  4. 本系统测温范围设定为0~100℃,属于相对低温测量。N型热电偶本身适用于更宽的温区(可到上千摄氏度),但在本应用中重点在于低温区的精度与稳定性。题目指出"低温区精度较高,高温区误差相对增大",其原因主要包括:

    1. 热电偶输出电压在低温区变化较小,对放大与ADC分辨率要求高;
    2. 冷端补偿误差在高温区会被放大;
    3. 放大器零漂、ADC偏置、噪声等会形成温度误差;
    4. 传感器安装方式导致热传导误差随温度变化加剧。
  5. 本设计强调工程可用性与可扩展性,硬件采用模块化结构:

    1. 单片机最小系统模块
    2. 4路热电偶采集与信号调理模块
    3. ADC采样模块(内置或外置)
    4. 显示模块(数码管或LCD1602/12864)
    5. 按键输入与设置模块
    6. 报警输出模块(蜂鸣器+LED)
    7. 电源与抗干扰模块
  6. 软件设计同样采用模块化结构:

    1. 温度采样与转换模块(含冷端补偿、滤波)
    2. 显示刷新模块
    3. 按键扫描与参数设置模块(每路上下限)
    4. 报警判断与声光控制模块
    5. 参数存储模块(EEPROM/Flash保存报警阈值)
    6. 系统任务调度模块(定时刷新、报警节奏等)

2 功能设计

2.1 4路N型热电偶温度采集与实时显示

  1. 系统采用4路N型热电偶作为温度采集传感器,分别对应4个测温点:CH1~CH4。

  2. 热电偶输出为毫伏级差分电压信号,必须经过信号调理后送入ADC。

  3. 单片机周期性采集四路温度数据,计算为摄氏度值后实时显示。

  4. 为增强可读性,显示策略可采用:

    1. 同屏显示4路温度(适合LCD12864或TFT);
    2. 两行显示(LCD1602)轮显或分页显示;
    3. 数码管动态扫描显示,按键切换通道显示。
  5. 由于题目强调"实时显示",系统建议刷新周期为200ms~500ms,在显示稳定与响应速度之间取得平衡。

2.2 按键设置每路上下限报警值

  1. 系统每一路温度均可独立设置:

    1. 上限报警值 HighLimit[i]
    2. 下限报警值 LowLimit[i]
  2. 按键设置逻辑建议:

    1. CH键:选择通道(CH1~CH4)
    2. SET键:进入设置模式
    3. NEXT键:切换设置项(下限→上限→退出)
    4. UP/DOWN:增减数值
    5. SAVE键或SET长按:保存并退出
  3. 设置过程中应对阈值进行合理性检查:

    1. 下限不能高于上限
    2. 阈值范围应限制在0100℃或允许稍扩展(例如-10110℃)
  4. 设置完成后阈值可保存到EEPROM或Flash中,避免掉电丢失。

2.3 超限声光报警提示(蜂鸣器+LED)

  1. 系统持续监测每路温度是否在设定区间内:

    1. 若 T < LowLimit[i] 或 T > HighLimit[i] → 判定该路超限
  2. 报警动作:

    1. 蜂鸣器鸣叫(持续或间歇)
    2. LED报警灯点亮或闪烁
    3. 显示界面突出显示异常通道(例如"CH2 HI"或"CH3 LO")
  3. 多路同时超限的处理策略:

    1. 蜂鸣器统一报警(只要有任一路超限就报警)
    2. LED可以采用"总报警灯+通道指示灯"模式,或轮流闪烁表示哪一路超限
  4. 为避免温度在阈值附近抖动导致报警频繁开关,应加入滞回与延时确认:

    1. 超限持续超过1秒才报警
    2. 恢复正常需低于上限-Δ或高于下限+Δ一定幅度才解除报警

2.4 测温范围与精度特性说明

  1. 系统测温范围为0~100℃,属于低温测量区间。

  2. 精度特性:

    1. 在0~50℃低温区,热电偶电压变化更线性且漂移小,系统经过良好校准可获得较高精度;
    2. 在50~100℃高温区,受冷端补偿误差、放大器零漂、安装热阻等影响,误差相对增大。
  3. 本系统通过以下手段提升低温区精度:

    1. 采用精密运放与高分辨率ADC
    2. 冷端补偿使用精度高的温度传感器(如NTC或数字温度计)
    3. 软件滤波与两点校准
  4. 高温区误差增大属于正常现象,可通过增加标定点、优化补偿算法或提高硬件精度进一步改善。


3 N型热电偶测温原理与系统算法说明

3.1 N型热电偶基本原理

  1. 热电偶基于塞贝克效应:两种不同金属材料连接形成闭合回路,当两个接点存在温差时会产生热电势。
  2. 热电偶输出是"热端温度与冷端温度差"的函数,表现为毫伏级电压。
  3. N型热电偶相比K型热电偶具有更好的高温稳定性与抗氧化能力,适用于宽温区测量。
  4. 在0~100℃范围内,热电偶输出电压非常小(一般在几毫伏级),因此系统必须对信号进行放大与高精度采样。

3.2 冷端补偿的重要性

  1. 热电偶测得的是"热端相对于冷端的温差",若冷端温度变化而不补偿,会导致测量误差。

  2. 冷端补偿方法:

    1. 测量冷端温度T_cold
    2. 根据热电偶分度表或近似多项式计算热电势E_hot(对应热端温度)
    3. 将冷端温度换算成对应热电势E_cold
    4. 实际热电势E_total = E_measured + E_cold
    5. 再由E_total反查得到热端温度T_hot
  3. 在0~100℃低温区,冷端补偿误差对结果影响非常明显,因此必须重视冷端测量与补偿算法。

3.3 多路采集策略

  1. 4路热电偶采集可以有两种方式:

    1. 4路独立放大与独立ADC通道(并行结构)
    2. 4路通过模拟多路复用器轮询采样(节省成本但对通道切换稳定时间有要求)
  2. 对精度要求较高时推荐每路独立调理电路,减少通道间串扰与开关误差。

  3. 对成本敏感且对精度要求一般时,可采用多路复用器(如CD4051)+单路放大器方案,但要增加稳定等待与采样滤波。

3.4 软件滤波与抗干扰

  1. 热电偶信号非常微弱,容易受到电磁干扰、工频噪声、地线回流等影响。

  2. 软件滤波常用方法:

    1. 多次采样平均
    2. 中值滤波(抑制瞬态干扰)
    3. 一阶低通滤波(指数滑动平均)
  3. 对报警判断应使用滤波后的温度值,避免短时噪声触发误报警。


4 系统电路设计

4.1 电路总体结构与模块划分

  1. 系统硬件结构可划分为以下模块:

    1. 单片机最小系统模块
    2. 4路N型热电偶输入与保护模块
    3. 信号调理模块(放大、滤波、偏置)
    4. 冷端补偿传感器模块
    5. ADC采样模块(内置/外置)
    6. 显示模块
    7. 按键设置模块
    8. 报警输出模块(蜂鸣器+LED)
    9. 电源模块与抗干扰模块
  2. 由于热电偶属于弱信号输入,电路设计中最重要的原则是:

    1. 输入保护要可靠
    2. 放大电路要低噪声、低漂移
    3. 模拟地与数字地要合理分区
    4. ADC参考电压要稳定
    5. 走线要避免与数码管扫描、电源开关等强噪声源交叉。

4.2 单片机最小系统模块

4.2.1 MCU选型与资源需求

  1. MCU需具备:

    1. 至少4路ADC通道(或SPI接口连接外置ADC)
    2. 定时器用于周期采样与显示刷新
    3. 足够GPIO用于显示、按键与报警控制
    4. EEPROM/Flash用于保存阈值参数
  2. 可选平台示例:

    1. 8位MCU:STC系列(带ADC)、AVR
    2. 32位MCU:STM32(ADC能力强、计算资源丰富)
  3. 若采用外置热电偶专用转换芯片(如MAX31856等),MCU的ADC要求可以降低,仅需SPI通信。

4.2.2 时钟、复位与去耦

  1. 使用晶振或内部RC时钟均可,若对采样稳定性要求高建议晶振。
  2. 上电复位保证系统稳定启动。
  3. VCC旁必须布置0.1uF去耦电容,模拟电源部分额外加10uF电容抑制噪声。

4.3 4路热电偶输入与保护模块

4.3.1 输入连接与屏蔽

  1. 热电偶线缆应使用屏蔽线并单端接地,减少工频干扰。
  2. 热电偶接入端应尽量靠近放大电路,减少引线长度引入噪声。
  3. 热电偶接线必须使用匹配材质的补偿导线,避免引入额外热电势。

4.3.2 过压与浪涌保护

  1. 虽然热电偶输出电压很低,但线路可能受到静电或浪涌干扰,需加入保护器件:

    1. TVS二极管(低电容型)
    2. 限流电阻
    3. RC滤波网络
  2. 保护必须兼顾精度:器件漏电流与偏置电流可能影响低温测量,因此应选择低漏电保护器件。


4.4 信号调理模块(放大、滤波、偏置)

4.4.1 放大电路设计

  1. 热电偶信号为差分毫伏级,推荐使用:

    1. 仪表放大器(INA系列)
    2. 或低漂移运放构成差分放大器
  2. 放大倍数选择需匹配0~100℃输出范围与ADC输入范围:

    1. 若热电势范围约为0几mV,放大100500倍使其接近0~3.3V
  3. 放大器要求:

    1. 低输入失调电压(μV级)
    2. 低温漂
    3. 低噪声
    4. 高共模抑制比(CMRR)

4.4.2 滤波与抗工频干扰

  1. 加入低通滤波抑制高频噪声与数码管扫描干扰:

    1. RC滤波(几十Hz~几百Hz截止)
    2. 必要时加入50Hz陷波(复杂度较高)
  2. 滤波不能过重,否则响应过慢影响报警速度。一般测温系统允许0.2~1秒响应延时。

4.4.3 偏置设计(单电源采集)

  1. 若放大器输出需要进入单片机ADC(0~Vref),需将热电偶差分信号偏置到中点:

    1. Vmid = Vref/2
    2. 放大器输出以Vmid为中心摆动
  2. 软件中再减去Vmid对应的ADC值还原热电偶电压。

  3. 若使用双电源放大器(±5V),可直接输出正电压,但系统供电更复杂。


4.5 冷端补偿传感器模块

4.5.1 冷端补偿的硬件实现

  1. 冷端补偿需要测量热电偶接线端子处温度。

  2. 常用传感器:

    1. NTC热敏电阻 + ADC采样
    2. 数字温度传感器(如DS18B20)
    3. 高精度传感器(如TMP117等)
  3. 冷端传感器应安装在热电偶接线端附近,确保测得的温度代表冷端真实温度。

4.5.2 NTC采样与电路

  1. NTC与电阻分压产生电压送入ADC。
  2. 软件查表或使用Steinhart-Hart公式计算温度。
  3. NTC方案成本低但需要校准;数字温度传感器精度更好、软件更简单。

4.6 ADC采样模块

4.6.1 内置ADC方案

  1. MCU内置ADC采样4路放大后的模拟电压。

  2. 需要保证:

    1. ADC分辨率足够(建议12位或以上)
    2. 参考电压稳定(使用内部参考或外部精密参考)
    3. 采样时间足够,避免高阻源造成误差
  3. 多路采样需注意通道切换后增加稳定延时或丢弃第一点。

4.6.2 外置ADC/专用热电偶芯片方案

  1. 若追求更高精度,可使用外置高精度ADC或热电偶专用转换芯片:

    1. 内置冷端补偿
    2. 内置线性化与滤波
    3. SPI通信直接输出温度值
  2. 该方案硬件成本略高,但整体开发更稳定、误差更易控制,尤其适用于弱信号热电偶测温。


4.7 显示模块

4.7.1 显示方式选择

  1. LCD1602:可显示两行字符,适合显示两路/四路轮显或分页。
  2. LCD12864:可同时显示4路温度与上下限信息,更直观。
  3. 数码管:亮度高但信息量有限,需要切换通道显示。
  4. 本设计为了满足"实时显示4路温度"并便于设置阈值,推荐LCD12864或LCD1602分页显示。

4.7.2 显示内容规划

  1. 正常显示界面:

    1. 第一行:CH1:xx.x CH2:xx.x
    2. 第二行:CH3:xx.x CH4:xx.x
  2. 设置界面:显示当前通道的上下限参数并提示可调。

  3. 报警界面:突出显示超限通道与状态(HI/LO),并可闪烁。


4.8 按键设置模块

  1. 按键用于:

    1. 通道选择
    2. 进入/退出设置
    3. 设置项切换
    4. 参数增减
  2. 按键需硬件上拉、软件消抖。

  3. 采用短按/长按加速:长按UP/DOWN每100ms改变一次,提高设定效率。


4.9 报警输出模块(蜂鸣器+LED)

4.9.1 蜂鸣器驱动

  1. 推荐有源蜂鸣器,驱动简单。

  2. 用NPN三极管或NMOS扩流,避免MCU IO过载。

  3. 报警节奏:

    1. 连续鸣叫适用于严重报警;
    2. 间歇鸣叫(例如0.5s响0.5s停)更符合现场提示且省电。

4.9.2 LED报警指示

  1. 可设置:

    1. 总报警LED:任一路超限则点亮/闪烁
    2. 4个通道LED:对应通道超限则点亮
  2. 若仅用一个LED,也可通过闪烁次数表示通道号(扩展)。


4.10 电源与抗干扰模块

  1. 电源建议采用稳压芯片提供3.3V或5V,热电偶放大器与ADC参考电压部分可单独滤波。

  2. 数码管/背光等大电流负载与模拟采样部分应分区供电,减少耦合。

  3. PCB布线需遵循:

    1. 模拟地与数字地分区单点连接
    2. 热电偶输入差分走线等长、靠近
    3. 放大器输入远离蜂鸣器与显示扫描线
    4. 参考电压走线短且加去耦。

5 程序设计

5.1 软件总体结构与任务调度

  1. 软件采用"定时采样 + 周期计算 + 显示刷新 + 报警控制"的结构:

    1. 10ms任务:按键扫描、蜂鸣器节奏
    2. 100ms任务:温度采样与滤波、报警判定
    3. 200ms任务:显示刷新
    4. 1s任务:保存参数、统计与状态提示(可选)
  2. 软件模块划分:

    1. ADC驱动与采样模块
    2. 热电偶电压转换与温度线性化模块
    3. 冷端补偿模块
    4. 多路温度滤波模块
    5. 参数设置与存储模块
    6. 报警判断与控制模块
    7. 显示模块
    8. 系统状态机模块

5.2 温度采样与ADC驱动模块

5.2.1 多通道采样流程

  1. 依次采样CH1~CH4的热电偶通道。

  2. 每次切换通道后:

    1. 等待采样电容稳定(几微秒到几十微秒)
    2. 丢弃第一点或做平均
  3. 冷端补偿通道(NTC或数字温度)也需周期采样。

5.2.2 采样代码示例

c 复制代码
#define CH_NUM 4

uint16_t adc_tc[CH_NUM];
uint16_t adc_cj;  // 冷端补偿ADC

void ADC_SampleAll(void)
{
    for(uint8_t i=0;i<CH_NUM;i++)
    {
        ADC_SelectChannel(i);
        Delay_us(10);
        adc_tc[i] = ADC_ReadOnce();
    }

    ADC_SelectChannel(ADC_CH_CJ);
    Delay_us(10);
    adc_cj = ADC_ReadOnce();
}

5.3 冷端温度计算模块

5.3.1 NTC查表与温度换算

  1. 将adc_cj换算为电阻值,再通过查表得到温度。
  2. 若使用数字温度传感器,可直接读取温度值,软件更简单。

5.3.2 NTC换算示例代码

c 复制代码
float CJ_GetTemp(void)
{
    // 示例:将ADC换算为温度(具体参数取决于NTC型号与分压电阻)
    float v = ADC_ToVoltage(adc_cj);
    float r = (v * R_FIXED) / (VREF - v);
    float t = NTC_LookupTemp(r);
    return t;
}

5.4 热电偶电压转换与温度线性化模块

5.4.1 从ADC到热电偶电压

  1. 放大器输出电压Vout由ADC采样得到。

  2. 需要减去偏置Vmid并除以放大倍数Gain得到热电偶原始热电势E_meas:

    1. E_meas = (Vout - Vmid) / Gain

5.4.2 冷端补偿与温度换算

  1. 根据冷端温度T_cold计算对应热电势E_cold(通过分度表或多项式)。

  2. 总热电势:

    1. E_total = E_meas + E_cold
  3. 根据E_total反查热端温度T_hot。

5.4.3 简化线性化方法(0~100℃)

  1. 在0~100℃范围内,热电偶电势与温度近似线性,可用一阶或二阶拟合减少计算量。

  2. 线性模型:

    1. T ≈ k * E_total + b
  3. 为提高低温区精度,可采用分段线性:

    1. 0~50℃一组系数
    2. 50~100℃一组系数
  4. 这样可实现题目所述"低温区精度较高,高温区误差相对增大"的特点,同时控制运算复杂度。

5.4.4 温度换算示例代码

c 复制代码
float TC_EmfToTemp(float emf_mV)
{
    // 分段线性示例(参数需通过标定或查表拟合得到)
    if(emf_mV < 2.0f) // 低温区
    {
        return 25.0f * emf_mV; // 示例系数
    }
    else
    {
        return 24.0f * emf_mV + 2.0f; // 示例系数
    }
}

float TC_GetTemp(uint8_t ch, float cjTemp)
{
    float vout = ADC_ToVoltage(adc_tc[ch]);
    float emf_meas_mV = (vout - V_MID) / GAIN * 1000.0f;

    float emf_cold_mV = CJ_TempToEmf(cjTemp); // 冷端温度→电势
    float emf_total_mV = emf_meas_mV + emf_cold_mV;

    float thot = TC_EmfToTemp(emf_total_mV);
    return thot;
}

5.5 多路温度滤波模块

5.5.1 滤波必要性

  1. 热电偶信号微弱,噪声会导致显示跳动与误报警。

  2. 对每路温度使用滤波:

    1. 平均滤波:N次求平均
    2. 指数滤波:y = a*y + (1-a)*x
  3. 滤波参数建议:

    1. 低温区可用较小滤波(响应更快)
    2. 高温区可用更强滤波(稳定显示)

5.5.2 滤波代码示例

c 复制代码
float tempFilt[CH_NUM] = {0};

float LowPass(float last, float now, float a)
{
    return last * a + now * (1.0f - a);
}

void Temp_FilterUpdate(float tempNow[CH_NUM])
{
    for(uint8_t i=0;i<CH_NUM;i++)
    {
        tempFilt[i] = LowPass(tempFilt[i], tempNow[i], 0.85f);
    }
}

5.6 上下限阈值管理与参数存储模块

5.6.1 阈值数据结构

  1. 每路包含上下限:

    1. lowLimit[i]
    2. highLimit[i]
  2. 提供默认阈值,例如:

    1. low=0℃
    2. high=80℃

5.6.2 保存与读取

  1. 参数存储可使用:

    1. MCU内部EEPROM
    2. 外置EEPROM(24C02等)
    3. Flash模拟EEPROM
  2. 保存策略:

    1. 设置退出时保存
    2. 或定时保存(避免频繁写入损耗)

5.6.3 示例代码

c 复制代码
float lowLimit[CH_NUM]  = {0,0,0,0};
float highLimit[CH_NUM] = {80,80,80,80};

void Limit_Save(void)
{
    EEPROM_WriteBlock(0x00, (uint8_t*)lowLimit, sizeof(lowLimit));
    EEPROM_WriteBlock(0x20, (uint8_t*)highLimit, sizeof(highLimit));
}

void Limit_Load(void)
{
    EEPROM_ReadBlock(0x00, (uint8_t*)lowLimit, sizeof(lowLimit));
    EEPROM_ReadBlock(0x20, (uint8_t*)highLimit, sizeof(highLimit));
}

5.7 按键扫描与设置界面模块

5.7.1 设置状态机设计

  1. 状态包括:

    1. NORMAL:正常显示4路温度
    2. SET_CH_SELECT:选择通道
    3. SET_LOW:设置下限
    4. SET_HIGH:设置上限
    5. SAVE_EXIT:保存退出
  2. 按键逻辑:

    1. CH键切换通道
    2. SET进入设置/下一项
    3. UP/DOWN调整数值
    4. SET长按保存退出

5.7.2 示例代码框架

c 复制代码
typedef enum {
    UI_NORMAL,
    UI_SET_CH,
    UI_SET_LOW,
    UI_SET_HIGH
} UiState_t;

UiState_t uiState = UI_NORMAL;
uint8_t uiCh = 0;

void UI_Task(void)
{
    if(Key_MODE_Pressed())
    {
        if(uiState == UI_NORMAL) uiState = UI_SET_CH;
        else uiState = UI_NORMAL;
    }

    if(uiState == UI_SET_CH)
    {
        if(Key_CH_Pressed()) uiCh = (uiCh + 1) % CH_NUM;
        if(Key_SET_Pressed()) uiState = UI_SET_LOW;
    }
    else if(uiState == UI_SET_LOW)
    {
        if(Key_UP_Pressed())   lowLimit[uiCh] += 0.5f;
        if(Key_DOWN_Pressed()) lowLimit[uiCh] -= 0.5f;
        if(lowLimit[uiCh] < 0) lowLimit[uiCh] = 0;

        if(Key_SET_Pressed()) uiState = UI_SET_HIGH;
    }
    else if(uiState == UI_SET_HIGH)
    {
        if(Key_UP_Pressed())   highLimit[uiCh] += 0.5f;
        if(Key_DOWN_Pressed()) highLimit[uiCh] -= 0.5f;
        if(highLimit[uiCh] > 100) highLimit[uiCh] = 100;

        // 保证低限不高于高限
        if(lowLimit[uiCh] > highLimit[uiCh]) lowLimit[uiCh] = highLimit[uiCh];

        if(Key_SET_LongPress())
        {
            Limit_Save();
            uiState = UI_NORMAL;
        }
    }
}

5.8 报警判断与声光控制模块

5.8.1 报警判断逻辑

  1. 对每路温度进行判断:

    1. tempFilt[i] > highLimit[i] → 高温报警
    2. tempFilt[i] < lowLimit[i] → 低温报警
  2. 若任意一路报警,则总报警输出开启。

  3. 报警解除需加入滞回:

    1. 高温解除:温度降到highLimit - 1℃
    2. 低温解除:温度升到lowLimit + 1℃
  4. 同时加入延时确认:超限持续1秒才进入报警。

5.8.2 示例代码

c 复制代码
uint8_t alarmCh[CH_NUM] = {0}; // 0正常 1高 2低
uint8_t alarmAny = 0;

void Alarm_Judge(void)
{
    alarmAny = 0;
    for(uint8_t i=0;i<CH_NUM;i++)
    {
        if(tempFilt[i] > highLimit[i])
        {
            alarmCh[i] = 1;
            alarmAny = 1;
        }
        else if(tempFilt[i] < lowLimit[i])
        {
            alarmCh[i] = 2;
            alarmAny = 1;
        }
        else
        {
            alarmCh[i] = 0;
        }
    }
}

void Alarm_OutputTask_100ms(void)
{
    static uint8_t blink = 0;
    blink ^= 1;

    if(alarmAny)
    {
        Buzzer_Set(blink);     // 间歇鸣叫
        LED_ALARM_Set(blink);  // 间歇闪烁
    }
    else
    {
        Buzzer_Set(0);
        LED_ALARM_Set(0);
    }
}

5.9 显示刷新模块

5.9.1 正常显示界面

  1. 建议LCD显示两行四路:

    1. 第一行:CH1与CH2
    2. 第二行:CH3与CH4
  2. 显示格式示例:

    1. 1:25.3 2:26.1
    2. 3:24.8 4:27.0
  3. 若报警,则在对应通道旁显示"HI/LO"。

5.9.2 显示代码示例

c 复制代码
char line1[17], line2[17];

const char* AlarmStr(uint8_t s)
{
    if(s==1) return "H";
    if(s==2) return "L";
    return " ";
}

void Display_Update(void)
{
    snprintf(line1, sizeof(line1), "1:%4.1f%s 2:%4.1f%s",
             tempFilt[0], AlarmStr(alarmCh[0]),
             tempFilt[1], AlarmStr(alarmCh[1]));

    snprintf(line2, sizeof(line2), "3:%4.1f%s 4:%4.1f%s",
             tempFilt[2], AlarmStr(alarmCh[2]),
             tempFilt[3], AlarmStr(alarmCh[3]));

    LCD_SetCursor(0,0); LCD_Print(line1);
    LCD_SetCursor(0,1); LCD_Print(line2);
}

6 精度特性、误差来源与改进策略

6.1 低温区精度较高的原因

  1. 0~50℃范围内环境变化较温和,冷端温度也相对稳定,补偿误差较小。
  2. 系统在低温区可通过两点校准(例如0℃与50℃)获得较高准确度。
  3. 滤波后数据稳定,显示与报警可靠性更高。

6.2 高温区误差增大的原因

  1. 热电偶线性度在高温区需要更高阶补偿,分段线性会引入拟合误差。
  2. 冷端补偿误差对高温结果放大更明显。
  3. 放大器温漂、ADC漂移、热电偶安装热阻等影响增大。
  4. 若系统只按低温区标定,高温区会出现系统性偏差。

6.3 改进策略

  1. 增加标定点:0℃、50℃、100℃三点校准,减少高温区误差。

  2. 使用更精密的冷端补偿传感器(数字高精度温度传感器)。

  3. 使用热电偶专用转换芯片,内部集成冷端补偿与线性化。

  4. 模拟部分优化:

    1. 低噪声仪表放大器
    2. 低漂移运放
    3. 稳定参考电压
  5. 软件部分优化:

    1. 采用分度表插值替代线性模型
    2. 对不同温区使用不同拟合参数
    3. 对异常跳变采用中值滤波抑制。

7 系统总结

7.1 设计成果总结

  1. 本设计实现了一套基于单片机的多路热电偶温度监测与报警器,采用4路N型热电偶采集温度数据,并能够实时计算与显示四路温度值,满足多点测温场景的监控需求。
  2. 系统支持按键对每一路温度独立设置上下限报警值,具备清晰的人机交互流程与参数保存能力,便于现场快速配置不同测点的安全范围。
  3. 当任一路温度超出设定范围时,系统通过蜂鸣器与LED实现声光报警提示,并可在显示界面标注超限通道与超限类型(高温或低温),帮助用户快速定位异常点。
  4. 系统测温范围覆盖0~100℃,在低温区通过冷端补偿、滤波与校准可获得较高精度;在高温区误差相对增大,符合热电偶弱信号测温与补偿误差放大规律,并可通过增加标定点、优化线性化算法或采用专用转换芯片进一步提升高温区精度与一致性。
  5. 整体方案硬件模块化清晰、软件结构完整,具备良好的工程可扩展性,可进一步增加通道数量、增加通信接口(RS485/蓝牙/WiFi)、加入数据记录与曲线显示等功能,形成更完善的多通道温度监测系统。
相关推荐
金线银线还是铜线?4 小时前
米德方格MF9005/MF9006:低功耗光能利用的PMIC芯片解析
嵌入式硬件·物联网·iot·太阳能
Arciab4 小时前
51单片机_数码管显示
单片机·嵌入式硬件·51单片机
qq_401700415 小时前
FreeRTOS用事件组替代全局变量实现同步
单片机
zhongvv5 小时前
8位应广单片机与32位M0单片机开发差异总结
经验分享·单片机·嵌入式硬件
咸蛋-超人5 小时前
聊一聊 - STM32的堆和栈空间怎么分配
stm32·单片机·嵌入式硬件
raindrops.8 小时前
STM32之LL库使用(二)
stm32·单片机·嵌入式硬件
日更嵌入式的打工仔10 小时前
单片机基础知识:内狗外狗/软狗硬狗
笔记·单片机
v先v关v住v获v取10 小时前
12米折叠式高空作业车工作臂设计9张cad+三维图+设计说明书
科技·单片机·51单片机
单片机系统设计11 小时前
基于STM32的水质检测系统
网络·stm32·单片机·嵌入式硬件·毕业设计·水质检测
唔好理总之好犀利12 小时前
FreeRTOS中断内使用taskENTER_CRITICAL()进入临界区
单片机·嵌入式硬件