ADC结合NTC电阻检测温度_实践记录

文章讲述了如何利用NTC电阻的R25值和B值计算不同温度下的电阻,然后通过ADC检测获取温度值。介绍了NTC电阻与ADC检测值的映射关系,以及在实际电路中的应用和温度校准方法。
摘要由CSDN通过智能技术生成

NTC电阻温度上升,阻值减小,假设有一NTC电阻,型号XXX,搜索型号可以得知官方数据25摄氏度时的电阻,
需要注意两个数据,一为该元件25摄氏度时的电阻值R25,二为该元件的B值,B值有时在元件型号名中有所体现.

假设有一NTC电阻的R25 = 100K欧姆   B值为4200;
有这两个数据就可以求得不同温度下该NTC电阻的阻值,即 温度--电阻 之间形成映射关系

(网上找到热心老哥分享的自动换算表格,填入对应值就可以得到温度和阻值的数据)

再求得 电阻--ADC检测值 之间的映射关系,即可求得 温度---ADC检测值 之间的关系


那么已知ADC检测值,如何求得对应的NTC电阻?
需要结合电路图来看,已知ADC检测NTC电阻两端的电压,总输入电压固定,有一个固定的分压电阻和动态的NTC电阻,
NTC电阻的值随温度变化改变,它分到的压也不同,那么ADC检测值自然也不同

根据电路分析,得到NTC电阻值两端电压随温度的变化的映射关系,提取出对应的ADC值,应用查表法不断检查实际的ADC值,就可以得到温度数据啦

#define NTC_DIAG_TICK            (10)
#define NTC_DIAG_TIME            (100) 
#define NTC_ADC_MAX  			 137
/*检测范围  -30--105摄氏度  合计136量程*/
const unsigned short ADC_NTC[NTC_ADC_MAX]=							// 温度电阻对应表
{   2782,	2782,	2782,	2781,	2781,	2781,	2780,	2780,	2780,	2779,//-30  -21
	2779,	2778,	2778,	2777,	2776,	2776,	2775,	2775,	2774,	2773,//-20  -11
	2772,	2771,	2771,	2770,	2769,	2768,	2767,	2765,	2764,	2763,//-10  -01
	2762,	2760,	2759,	2757,	2756,	2754,	2752,	2750,	2748,	2746,//0    9
	2744,	2742,	2740,	2737,	2735,	2732,	2730,	2727,	2724,	2721,//10   19
	2718,	2714,	2711,	2707,	2703,	2700,	2696,	2691,	2687,	2683,//20   29
	2678,	2673,	2668,	2663,	2657,	2652,	2646,	2640,	2634,	2628,//30   39
	2621,	2615,	2608,	2600,	2593,	2585,	2578,	2570,	2561,	2553,//40   49
	2544,	2535,	2526,	2516,	2506,	2496,	2486,	2476,	2465,	2454,//50   59
	2443,	2431,	2419,	2407,	2395,	2383,	2370,	2357,	2343,	2330,//60   69
	2316,	2302,	2288,	2273,	2258,	2243,	2228,	2213,	2197,	2181,//70   79
	2165,	2149,	2132,	2115,	2098,	2081,	2064,	2046,	2029,	2011,//80   89
	1993,	1975,	1956,	1938,	1919,	1901,	1882,	1863,	1844,	1825,//90   99
	1806,	1787,	1767,	1748,	1729,	1709								 //100  105


};

char Get_temper(unsigned short adc_value)								// 返回查表对应的温度值				-20~80度  根据电路最大5V,NTC电压范围 = 5V* (NTC阻值)/总阻值
{
    int i;
    for(i=0;i<NTC_ADC_MAX;i++)
    {
        if(adc_value >= ADC_NTC[i]) //当没有ADC值对应温度的时候,就取相近的,也就是大于的情况
        {
            return i-30;
            break;
        }
    }
    return 105;
}



void NTC_Check_MainFunc(void)
{
    uint16_t ntc_adc_val[3] = {0};
    
    uint8_t adc_seq = 0;
    char temp = 0;	
    
    for(adc_seq = 0; adc_seq < 3; adc_seq++)										//一共三个NTC检测模块,循环访问
    {
        ntc_adc_val[adc_seq] = ADC_GetArray(DRIVER_TEMP_CHECK_SEQ + adc_seq);
        
        ntc_array_counter[adc_seq] += ntc_adc_val[adc_seq];

        ntc_check_counter[adc_seq]++;
        
        if(ntc_check_counter[adc_seq] >= (NTC_DIAG_TIME / NTC_DIAG_TICK))			//检测10次,求平均值			
        {
            ntc_adc_val[adc_seq] = (ntc_array_counter[adc_seq] / ntc_check_counter[adc_seq]);
            
            ntc_check_counter[adc_seq] = 0;
            
            ntc_array_counter[adc_seq] = 0;
			temp = Get_temper(ntc_adc_val[adc_seq]);
			if(temp<-30 || temp >105)
			{
				temp = 0;
			}
			
        	printf("ntc_%d 值是 %d, 温度是%d \r\n" ,adc_seq+1,ntc_adc_val[adc_seq],temp);
			
        }
    }
    


文件分享:

NTC温度阻值对应表:

https://chhhcooh.lanzouo.com/ivEcj1lj86ri
密码:SCP001

NTC阻值与ADC换算表:

https://chhhcooh.lanzouo.com/ipw4R1ljauah
密码:SCP002

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值