这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 国产MCU » 学习AI8051开发板例程:10AI8051的NTC采集环境温度

共1条 1/1 1 跳转至

学习AI8051开发板例程:10AI8051的NTC采集环境温度

高工
2025-11-28 14:16:26     打赏

一、什么是NTC电阻?

NTC 是 Negative Temperature Coefficient 的缩写,中文全称为负温度系数热敏电阻。

核心特性:其电阻值随温度的升高而指数性下降,随温度的降低而指数性上升。

本质:它是一种由锰、钴、镍、铜等两种或多种金属氧化物经过高温烧结而成的半导体陶瓷元件。

直观理解:你可以把它看作一个“对温度敏感的电阻”,温度是它的“开关”或“调节器”。

二、主要特性与关键参数

1. 零功率电阻值

定义:在指定的温度(通常是25°C)下,使用不会引起元件明显发热的测量功率所测得的电阻值。

常见值:例如 10KΩ, 100KΩ, 1MΩ 等。我们常说的“10K NTC”就是指它在25°C时的标称电阻值为10KΩ。

2. B值(材料常数)

定义:描述NTC电阻-温度特性曲线形状的参数。它代表了在两个特定温度(通常是25°C和85°C)下的电阻比值。

其中,R1是温度T1(如25°C,即298.15K)时的电阻,R2是温度T2(如85°C,即358.15K)时的电阻。

意义:B值越大,表示电阻对温度的变化越敏感,曲线越陡峭。常见的B值有 3435K, 3950K, 4700K 等。

3. 耗散系数

定义:NTC元件自身每升高1°C所消耗的功率。单位是mW/°C。

意义:它反映了NTC自热效应的程度。在测量小电流或微小温度变化时,自热效应会引入误差,需要特别注意。

4. 热时间常数

定义:在无功耗的状态下,当环境温度发生阶跃变化时,NTC元件的温度变化量达到总变化量的63.2%所需的时间。

意义:它反映了NTC对温度变化的响应速度。时间常数越小,响应越快。

5. 额定功率

定义:在25°C的静止空气中,NTC能够连续工作的最大功率。超过此功率,会因自热过度而损坏。

6. 工作温度范围

定义:NTC能够正常工作的环境温度范围。

四、主要应用领域

NTC凭借其独特的特性,在电路中主要有两大应用方向:

温度测量与控制(作为传感器)

这是最直接的应用。利用其电阻值与温度一一对应的关系。

工作原理:将NTC作为分压电路的一部分,通过测量其两端的电压,即可推算出当前的电阻值,进而通过查表或公式计算出温度。

电路示例:

图片2.png

五:软件代码如下所示:

5.1  ADC的初始化:

u16 Get_ADC12bitResult(u8 channel)  //channel = 0~15
{
    ADC_RES = 0;
    ADC_RESL = 0;

		ADC_CONTR = (ADC_CONTR & 0xf0) | channel; //设置ADC转换通道
		ADC_START = 1;//启动ADC转换
    _nop_();
    _nop_();
    _nop_();
    _nop_();

    while(ADC_FLAG == 0);   //wait for ADC finish
    ADC_FLAG = 0;     //清除ADC结束标志
    return  (((u16)ADC_RES << 8) | ADC_RESL);
}

5.2 通过采集的ADC,与查表计算当前的温度值

u16 get_temperature(u16 adc)
{
    u16 code *p;
    u16 i;
    u8  j,k,min,max;
    
    adc = 4096 - adc;   //Rt接地
    p = temp_table;
    if(adc < p[0])      return (0xfffe);
    if(adc > p[160])    return (0xffff);
    
    min = 0;        //-40度
    max = 160;      //120度

    for(j=0; j<5; j++)  //对分查表
    {
        k = min / 2 + max / 2;
        if(adc <= p[k]) max = k;
        else            min = k;
    }
         if(adc == p[min])  i = min * D_SCALE;
    else if(adc == p[max])  i = max * D_SCALE;
    else    // min < temp < max
    {
        while(min <= max)
        {
            min++;
            if(adc == p[min])   {i = min * D_SCALE; break;}
            else if(adc < p[min])
            {
                min--;
                i = p[min]; //min
                j = (adc - i) * D_SCALE / (p[min+1] - i);
                i = min;
                i *= D_SCALE;
                i += j;
                break;
            }
        }
    }
    return i;
}

5.3 显示当前的温度数据:

                j = Get_ADC12bitResult(3);  //参数0~15,查询方式做一次ADC, 返回值就是结果, == 4096 为错误

                if(j < 4096)
                {
                    j = get_temperature(j); //计算温度值

                    if(j >= 400)    F0 = 0, j -= 400;       //温度 >= 0度
                    else            F0 = 1, j  = 400 - j;   //温度 <  0度
                    LED8[4] = j / 1000;     //显示温度值
                    LED8[5] = (j % 1000) / 100;
                    LED8[6] = (j % 100) / 10 + DIS_DOT;
                    LED8[7] = j % 10;
                    if(LED8[4] == 0)    LED8[4] = DIS_BLACK;
                    if(F0)  LED8[4] = DIS_;     //显示-
                }
                else    //错误
                {
                    for(i=0; i<8; i++)  LED8[i] = DIS_;
                }

5.4 实物测试图如下所示:

1128-1.png


典型场景:

家电:空调、冰箱、热水器、电饭煲的温度检测。

汽车:发动机水温、机油温度、车内环境温度检测。

工业设备:电机绕组过热保护、环境温度监控。

医疗电子:体温计、培养箱温度控制。

应用二:浪涌电流抑制(作为限流器)

这是NTC一个非常重要且广泛的应用。

问题背景:在开关电源、电机等设备启动的瞬间,其内部的滤波电容相当于短路,会产生一个比正常工作电流大5-10倍甚至更高的浪涌电流,可能损坏保险丝、整流桥等元件。

解决方案:

冷态时:在电路通电瞬间,NTC处于室温,电阻值较高,可以有效地限制流过电路的浪涌电流。

工作时:由于电流流过,NTC自身发热,温度迅速升高,电阻值急剧下降到很低的水平(通常只有几欧姆甚至更低),此时它对正常工作的影响可以忽略不计。

断电后:NTC需要一段时间冷却,恢复其高阻态,以便下一次开机时再次起到限流作用。

典型场景:几乎所有开关电源(如手机充电器、电脑电源)、LED驱动电源、大功率电机驱动器中。


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]