【单片机笔记】详解如何用廉价NTC电阻准确高效的测量温度(附源码)
发布日期:2021-05-07 20:18:01 浏览次数:31 分类:精选文章

本文共 5560 字,大约阅读时间需要 18 分钟。

??????????????????????????????????????????????????????????????NTC-MF52AT 10K 5%???????????????????????????

??????????

????NTC-MF52AT??????????????

  • ???5%
  • ???10K?
  • B??3950
  • ?????

NTC??????????????????????????????????????NTC????????????????????????????????????

??????ADC???

???????NTC???????ADC????????????NTC?????????????????

  • NTC????????NTC???ADC???ADC????????????
  • NTC????????NTC???ADC???ADC????????????
  • ???ADC???????????????????????????????????????????????????ADC??

    ??????

    ??NTC?????????ADC?????????????????

    • ?NTC?????? [ \text{??} = \frac{\text{ADC?} - \text{???}}{\text{?????}} + \text{????} ]
    • ?NTC?????? [ \text{??} = \frac{\text{???} - \text{ADC?}}{\text{?????}} + \text{????} ]

    C????

    ????????????C?????

    #ifndef __FY_NTC_H
    #define __FY_NTC_H
    #include "fy_includes.h"
    #define NTC_UP // NTC????
    s16 NtcGetTemp(u16 adc);
    #endif
    #include "fy_ntc.h"
    #define NTC_R 10 // ???????K
    #define ADC_MAX 4095.0 // 12?ADC???
    #if NTC_UP
    #define NTC_ADC(ntc) ((u16)((NTC_R * ADC_MAX) / (ntc + NTC_R))) // NTC??????ADC???
    #else
    #define NTC_ADC(ntc) ((u16)((ntc * ADC_MAX) / (ntc + NTC_R))) // NTC??????ADC???
    #endif
    // ??-ADC????
    const unsigned int ntcData[] = {
    NTC_ADC(190.5562), // -40?
    NTC_ADC(183.4132), // -30?
    NTC_ADC(175.6740), // -20?
    NTC_ADC(167.6467), // -10?
    NTC_ADC(159.5647), // 0?
    NTC_ADC(151.5975), // 10?
    NTC_ADC(143.8624), // 20?
    NTC_ADC(136.4361), // 30?
    NTC_ADC(129.3641), // 40?
    NTC_ADC(122.6678), // 50?
    NTC_ADC(116.3519), // 60?
    NTC_ADC(110.4098), // 70?
    NTC_ADC(104.8272), // 80?
    NTC_ADC(99.5847), // 90?
    NTC_ADC(94.6608), // 100?
    NTC_ADC(90.0326), // 110?
    NTC_ADC(85.6778), // 120?
    NTC_ADC(81.5747), // 130?
    NTC_ADC(77.7031), // 140?
    NTC_ADC(74.0442), // 150?
    NTC_ADC(70.5811), // 160?
    NTC_ADC(67.2987), // 170?
    NTC_ADC(64.1834), // 180?
    NTC_ADC(61.2233), // 190?
    NTC_ADC(58.4080), // 200?
    NTC_ADC(55.7284), // 210?
    NTC_ADC(53.1766), // 220?
    NTC_ADC(50.7456), // 230?
    NTC_ADC(48.4294), // 240?
    NTC_ADC(46.2224), // 250?
    NTC_ADC(44.1201), // 260?
    NTC_ADC(42.1180), // 270?
    NTC_ADC(40.2121), // 280?
    NTC_ADC(38.3988), // 290?
    NTC_ADC(36.6746), // 300?
    NTC_ADC(35.0362), // 310?
    NTC_ADC(33.4802), // 320?
    NTC_ADC(32.0035), // 330?
    NTC_ADC(30.6028), // 340?
    NTC_ADC(29.2750), // 350?
    NTC_ADC(28.0170), // 360?
    NTC_ADC(26.8255), // 370?
    NTC_ADC(25.6972), // 380?
    NTC_ADC(24.6290), // 390?
    NTC_ADC(23.6176), // 400?
    NTC_ADC(22.6597), // 410?
    NTC_ADC(21.7522), // 420?
    NTC_ADC(20.8916), // 430?
    NTC_ADC(20.0749), // 440?
    NTC_ADC(19.2988), // 450?
    NTC_ADC(18.5600), // 460?
    NTC_ADC(18.4818), // 470?
    NTC_ADC(18.1489), // 480?
    NTC_ADC(17.6316), // 490?
    NTC_ADC(16.9917), // 500?
    NTC_ADC(16.2797), // 510?
    NTC_ADC(15.5350), // 520?
    NTC_ADC(14.7867), // 530?
    NTC_ADC(14.0551), // 540?
    NTC_ADC(13.3536), // 550?
    NTC_ADC(12.6900), // 560?
    NTC_ADC(12.0684), // 570?
    NTC_ADC(11.4900), // 580?
    NTC_ADC(10.9539), // 590?
    NTC_ADC(10.4582), // 600?
    NTC_ADC(10.0000), // 610?
    NTC_ADC(9.5762), // 620?
    NTC_ADC(9.1835), // 630?
    NTC_ADC(8.8186), // 640?
    NTC_ADC(8.4784), // 650?
    NTC_ADC(8.1600), // 660?
    NTC_ADC(7.8608), // 670?
    NTC_ADC(7.5785), // 680?
    NTC_ADC(7.3109), // 690?
    NTC_ADC(7.0564), // 700?
    NTC_ADC(6.8133), // 710?
    NTC_ADC(6.5806), // 720?
    NTC_ADC(6.3570), // 730?
    NTC_ADC(6.1418), // 740?
    NTC_ADC(5.9343), // 750?
    NTC_ADC(5.7340), // 760?
    NTC_ADC(5.5405), // 770?
    NTC_ADC(5.3534), // 780?
    NTC_ADC(5.1725), // 790?
    NTC_ADC(4.9976), // 800?
    NTC_ADC(4.8286), // 810?
    NTC_ADC(4.6652), // 820?
    NTC_ADC(4.5073), // 830?
    NTC_ADC(4.3548), // 840?
    NTC_ADC(4.2075), // 850?
    NTC_ADC(4.0650), // 860?
    NTC_ADC(3.9271), // 870?
    NTC_ADC(3.7936), // 880?
    NTC_ADC(3.6639), // 890?
    NTC_ADC(3.5377), // 900?
    NTC_ADC(3.4146), // 910?
    NTC_ADC(3.2939), // 920?
    NTC_ADC(3.1752), // 930?
    NTC_ADC(3.0579), // 940?
    NTC_ADC(2.9414), // 950?
    NTC_ADC(2.8250), // 960?
    NTC_ADC(2.7762), // 970?
    NTC_ADC(2.7179), // 980?
    NTC_ADC(2.6523), // 990?
    NTC_ADC(2.5817), // 1000?
    };
    // ??????
    s16 NtcGetTemp(u16 adc)
    {
    u16 i;
    s16 tp;
    if (NTC_UP)
    {
    // NTC????
    for (i = 0; i < 151; i++)
    {
    if (adc < ntcData[i])
    {
    break;
    }
    }
    if (i == 0)
    {
    tp = -4000; // ????
    }
    else if (i == 151)
    {
    tp = 1100; // ????
    }
    else
    {
    tp = (adc - ntcData[i - 1]) * 10 / (ntcData[i] - ntcData[i - 1]) + (i - 40 - 1) * 10;
    }
    }
    else
    {
    // NTC????
    for (i = 0; i < 151; i++)
    {
    if (adc > ntcData[i])
    {
    break;
    }
    }
    if (i == 0)
    {
    tp = -4000; // ????
    }
    else if (i == 151)
    {
    tp = 1100; // ????
    }
    else
    {
    tp = (ntcData[i - 1] - adc) * 10 / (ntcData[i] - ntcData[i - 1]) + (i - 40 - 1) * 10;
    }
    }
    return tp;
    }
    #endif

    ????

    // Adc_Value ?ADC?????
    // temp???????xxx.x?
    float temp = 0.1f * NtcGetTemp(Adc_Value);

    ??

    ?????????????NTC-MF52AT????????????????????????????????

    上一篇:font字体的一些常用代码
    下一篇:【单片机笔记】关于字符编码,UTF-8、GBK、UTF8、GB2312之间的区别和关系

    发表评论

    最新留言

    感谢大佬
    [***.8.128.20]2025年05月01日 08时45分38秒