0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ML51单片机通过ADC驱动NTC传感器测量温度实例

Q4MP_gh_c472c21 来源:嵌入式ARM 作者:嵌入式ARM 2021-01-26 16:58 次阅读

NTC传感器如下图所示,NTC的阻抗随着温度升高而降低。手册给出了阻抗到温度的转换公式。

e9b777ae-5f64-11eb-8b86-12bb97331649.png

ea8815bc-5f64-11eb-8b86-12bb97331649.png



我们可以通过ML51单片机提供的12位ADC来读取该串联电阻的分压,从而根据参考电阻计算出传感器的阻抗,然后利用手册的温度计算公式计算出温度。下图是手册给出的几个常用计算常数B,可根据测量的范围合理的选择,用于提高测量精度。

ebdb1f4a-5f64-11eb-8b86-12bb97331649.png


实现温度转换

根据手册提供的公式:R=R0 exp B(1/T - 1/T0);其中R是待测电阻,R0是某个温度T0 K下的已知电阻,B是温度传感器常数。

通过以上公式反推T = temp=1/((1/T0)+(log(RT/R0)/B));

代入数据测试,例如T0=25摄氏度时候R0=10K欧姆,主意以上代入实际计算时候要使用绝对温度,单位开尔文。

经过测试上述公式可以完成验算,即,正确。

根据手册该型号的B常数在25到50度之间采用3380,25到80之间采用3428,25到85之间采用3434,25到100摄氏度之间采用3455.

为了方便,本项目采用3455计算。

完成代码如下所示。

//***********************************************************************************************************//  File Function: ML51 series ADC software trigger on shot demo code//***********************************************************************************************************#include "ML51.h"#include "math.h"#include "NTC.h"/******************************************************************************The main C function.  Program execution startshere after stack initialization.******************************************************************************/


void main (){  unsigned int ADCRESULT;        float Rval;        float temp;
/*For UART0 P0.5 TXD output setting* include gipo.c in Library for GPIO mode setting* include uart.c in Library Setting for UART0*/    MFP_P31_UART0_TXD;                              // UART0 TXD use P0.5    P31_QUASI_MODE;                                 // set P0.5  as Quasi mode for UART0 trasnfer    UART_Open(24000000,UART0_Timer3,115200);        // Open UART0 use timer1 as baudrate generate and baud rate = 115200    ENABLE_UART0_PRINTF;  /*  ADCS to trig ADC convert  * include adc.c in Library for ADC initial setting*/    ADC_Open(ADC_SINGLE,1);                                        //Enable ADC_CH4    ADC_ConvertTime(3,7);//* find ADC result in ADC interrupt*/                                                while(1)    {        set_ADCCON0_ADCS;                           // Software trig adc start        while((ADCCON0|CLR_BIT7)==CLR_BIT7);         // wait ADCF = 1;        ADCRESULT = (ADCRH<<4)+ADCRL;        printf("
 ADC result = %d  ", ADCRESULT);        Timer0_Delay(24000000,100,5000);                                Rval=1000*((ADCRESULT*6.2)/(4095-ADCRESULT));                                printf("
 Rval=%d Ohm",(unsigned int)Rval);                                temp=Res_to_Tem(Rval);                                printf("
 temp=%.2f",temp-K);                                printf("
----------------");                                           }  }

将阻抗转换为温度作为一个独立的头文件NTC.h
#define K 273.15#define T0 (25.0+K)#define R0 10000.0#define B 3455.0        
/*电阻值换算到温度adc_val:NTC当前的阻抗值,单位欧姆返回值:摄氏度*/
float Res_to_Tem(float adc_val){        float temp;        temp=1/((1/T0)+(log(adc_val/R0)/B));        return temp-K;}
这样就可以直接调用得出摄氏度了。本例子,采用串口打印的测量结果如下图所示。

eddbf206-5f64-11eb-8b86-12bb97331649.png

手册还给出的查表方法,给出了几个特殊点,如下图所示

f18adcd2-5f64-11eb-8b86-12bb97331649.png


绘制出曲线如下图所示。


点评:NTC测量温度成本低,响应迅速,只需要使用1路ADC通道即可。比数字类型的温度计驱动更加容易,使用更加灵活,还可以自己实现校准功能。

责任编辑:xj

原文标题:实用应用案例:ML51单片机通过ADC驱动NTC传感器测量温度

文章出处:【微信公众号:嵌入式ARM】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • NTC
    NTC
    +关注

    关注

    7

    文章

    368

    浏览量

    51559
  • adc
    adc
    +关注

    关注

    95

    文章

    5652

    浏览量

    539491
  • 51单片机
    +关注

    关注

    269

    文章

    5649

    浏览量

    120717
  • ML
    ML
    +关注

    关注

    0

    文章

    139

    浏览量

    34294

原文标题:实用应用案例:ML51单片机通过ADC驱动NTC传感器测量温度

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    温度传感器(NTC)ADC转换实验

    本次实验所用到的simulink模型如图5.1所示,电路原图如图5.2所示,其中温度传感器在开发板中的位置如图5.3所示,实验效果为读取NTC温度
    的头像 发表于 11-29 16:26 933次阅读
    <b class='flag-5'>温度</b><b class='flag-5'>传感器</b>(<b class='flag-5'>NTC</b>)<b class='flag-5'>ADC</b>转换实验

    基于51单片机DS18B20温度测量仿真设计

    运用所学单片机知识,完成温度信号的测量。要求如下:单片机系统选择使用AT89C51温度
    的头像 发表于 10-22 17:47 911次阅读
    基于<b class='flag-5'>51</b><b class='flag-5'>单片机</b>DS18B20<b class='flag-5'>温度</b><b class='flag-5'>测量</b>仿真设计

    请问51单片机怎么接PT100温度传感器

    51单片机怎么接PT100温度传感器
    发表于 10-07 08:05

    新唐低功耗 ML51让你远离病毒的接触

    防疫先锋额温枪,采用新唐低功耗 ML51,让你远离病毒的接触
    的头像 发表于 08-21 10:54 451次阅读

    盘点新唐工业级低功耗微控制器:ML51/M251/M261

    盘点新唐工业级低功耗微控制器:ML51/M251/M261
    的头像 发表于 08-11 15:04 516次阅读

    NTC温度传感器的损坏原因

    不管是哪种传感器,所有的NTC温度传感器的结构和原理都是一样的:通过NTC热敏电阻探针(
    的头像 发表于 07-09 15:46 2991次阅读

    ML51系列单片机P5口不能位寻址,请问有何方便的操作方法?

    之前没想到新唐ML51系列的单片机P5口居然不能位寻址,ML51.H文件中对P5口的定义是: sfr P5= 0xB1;// SFR page 0 这样对P5口中某个单独的IO口进行操作就会特别不方便,造成程序中实现同类型功能的
    发表于 06-28 08:21

    ML51TC0AE,运行了一段自己编的ADC函数后,单片机就降级了是为什么?

    常是IO口方波频率是正常时的5倍的,有比率是5.5倍的,正符合12T单片机和1T单片机(当然也不是所有指令都是1T)同频处理指令速度之比。请问这个是新唐ML51系列单片机的BUG吗?
    发表于 06-27 07:40

    ML51都可以用作什么?

    ML51都可以用作什么
    发表于 06-25 08:39

    ML51TC0AE运行一段自己编的ADC函数后,单片机变成12T运行模式了延时时间长到7倍是为什么?

    常是IO口方波频率是正常时的5倍的,有比率是5.5倍的,正符合12T单片机和1T单片机(当然也不是所有指令都是1T)同频处理指令速度之比。请问这个是新唐ML51系列单片机的BUG吗?
    发表于 06-21 08:58

    ML51ADC有哪些特色?

    ML51ADC有哪些特色
    发表于 06-19 15:32

    ML51单片机用了ADC,P3.2就不可以作为输入端口了吗?

    ML51单片机,用了ADC,P3.2就不可以作为输入端口了吗? 我发现使能了ADC,包括是其它的通道,比如P2.4,发现P3.2就不可以作为输入端口了吗,是吗?如果不是,是哪里要设置吗
    发表于 06-16 08:06

    ML51系列单片机P5口不能位寻址,请问有何方便的操作方法?

    之前没想到新唐ML51系列的单片机P5口居然不能位寻址,ML51.H文件中对P5口的定义是: sfr P5= 0xB1;// SFR page 0 这样对P5口中某个单独的IO口进行操作就会特别不方便,造成程序中实现同类型功能的
    发表于 06-16 07:16

    请问ML51的程序可以保存多少年?

    ML51的程序可以保存多少年?
    发表于 06-14 10:29

    ML51单片机INT1将单片机从掉电模式唤醒后定时工作不正常怎么解决?

    ML51TC0AE试验板和NuMaker-ML51PC开发板上试验,新唐ML51单片机INT1将单片机从掉电模式唤醒后定时
    发表于 06-14 09:14