N32WB452LEQ6芯片NTC热敏电阻温度采集驱动程序

最近手头上一个项目需要NTC温度测试,网上搜了一下,各类驱动算法一大堆,指数公式,B温度常数,由于所用项目精度要求不高(±1摄氏度),所以就根据NTC电阻参数表,设计一个简短的温度采集驱动程序。
芯片采用N32WB452LEQ6,连接在PA5脚,该引脚通过10K电阻上拉到3.3V电源,通过1K电阻,串联NTC热敏电阻,到地线。ADC采集处电压数据(单位:毫伏)。后面开始附上代码,同样,前面是头文件代码,后面是应用代码,ADC初始化贴在前面,NTC代码贴在后面,移植应用可以根据项目需要,删减、增加自己的应用代码,代码实测。

#ifndef __ADC_H__

#define __ADC_H__

// #include "n32wb452.h"

#include "main.h"



 

#define V25        1.32f

#define AVG_SLOPE  0.004f

//__packed  

struct __ADC__

{

    u16 voltage;     //power voltage

    u16 adcBuf[10];

    u32 value;       //ADC原始数据

    u32 sampleTime;  //采样时间

    double tem;      //温度

    u32 resistance;  //电阻值

    u8  ok;          //采样OK标志

    u8  debug;       //调试模式控制。

};

extern struct __ADC__ Adc1;       //battery

extern struct __ADC__ Adc2;       //type_c J405

extern u16 cpuTemperature;        //0.1摄氏度

extern float cpuTemperatureFloat;

float TempCal(uint16_t TempAdVal);

uint16_t ADC_GetData(ADC_Module* ADCx, uint8_t ADC_Channel);

float cpuTempGet(void); //CPU内部温度获取。

void adcInit(void); //adc 初始化

void adcDeal(void); //ADC数据处理

#endif

// #include "main.h"

#include "adc.h"

#ifdef HARD_202303 //LDO芯片3.3V贴错成了2.8V的.

#define ADC1_TO_V_FACTOR  ((28*(570.0f))/4096) //The coefficient:adc value to voltage value,mv.

#else

#define ADC1_TO_V_FACTOR  ((33*(570.0f))/4096) //The coefficient:adc value to voltage value,mv.

// #define ADC_TO_V_FACTOR  ((3300*(100.0f+470))/(4096*100.0f)) //转换系数:ADC采样值转换到电池电压单位mv

#endif

#define ADC2_TO_V_FACTOR  (3300/4096.0f)

u16 cpuTemperature = 0; //0.1摄氏度

float cpuTemperatureFloat = 0;

struct __ADC__ Adc1;  //PA1 ADC1 battery voltage

struct __ADC__ Adc2;  //PA5 ADC2 TYPE_C NTC

void ADC_Initial(ADC_Module* ADCx)

{

    ADC_InitType ADC_InitStructure;

    ADC_InitStructure.WorkMode       = ADC_WORKMODE_INDEPENDENT;  //独立模式

    ADC_InitStructure.MultiChEn      = DISABLE;                   //单通道

    ADC_InitStructure.ContinueConvEn = DISABLE;                   //单次转换

    ADC_InitStructure.ExtTrigSelect  = ADC_EXT_TRIGCONV_NONE;     //软件触发方式

    ADC_InitStructure.DatAlign       = ADC_DAT_ALIGN_R;           //数据右对齐

    ADC_InitStructure.ChsNumber      = 1;//

    ADC_Init(ADCx, &ADC_InitStructure);

    ADC_Enable(ADCx, ENABLE);

    while(ADC_GetFlagStatusNew(ADCx,ADC_FLAG_RDY) == RESET);

    ADC_StartCalibration(ADCx);

    while (ADC_GetCalibrationStatus(ADCx));

}

void adcInit(void)  //adc 初始化 PA1:ADC1 供电电压  PA5:连接到TypeC接口

{

    GPIO_InitType GPIO_Initure;

    RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE);

    RCC_EnableAHBPeriphClk(RCC_AHB_PERIPH_ADC1,ENABLE);

    RCC_EnableAHBPeriphClk(RCC_AHB_PERIPH_ADC2,ENABLE);

    ADC_ConfigClk(ADC_CTRL3_CKMOD_AHB,RCC_ADCHCLK_DIV16);

   

    GPIO_Initure.Pin       = GPIO_PIN_1|GPIO_PIN_5;

    GPIO_Initure.GPIO_Mode = GPIO_Mode_AIN;

    GPIO_InitPeripheral(GPIOA, &GPIO_Initure);  

    ADC_Initial(ADC1);

    ADC_Initial(ADC2);



 

    Adc1.sampleTime = 500;          //This code just for testing.

    Adc2.sampleTime = 100;          //This code just for testing.  

    Power.powerDown = FALSE;

    Power.lowPower = FALSE;

    Adc1.debug = DEBUG_ENABLE;  //debug mode :default disable

    Adc1.debug = DEBUG_DISABLE; //debug mode :default disable  

    Adc2.debug = DEBUG_ENABLE;  //debug mode :default disable

    Adc2.debug = DEBUG_DISABLE; //debug mode :default disable  

}

uint16_t ADC_GetData(ADC_Module* ADCx, uint8_t ADC_Channel)

{

    uint16_t dat;

   

    ADC_ConfigRegularChannel(ADCx, ADC_Channel, 1, ADC_SAMP_TIME_239CYCLES5);

    ADC_EnableSoftwareStartConv(ADCx, ENABLE);

    while(ADC_GetFlagStatus(ADCx, ADC_FLAG_ENDC)==0){

    }

    ADC_ClearFlag(ADCx, ADC_FLAG_ENDC);

    ADC_ClearFlag(ADCx, ADC_FLAG_STR);

    dat=ADC_GetDat(ADCx);

    return dat;

}

// u16 V30 = 0;

#define Vc0        0    //X

#define Tc1        1.5f

float TempCal(uint16_t TempAdVal)

{

    float Temperate;

    u16 V30 = *(__IO uint32_t*)((uint32_t)0x1FFFF7D0);

    /* Get the temperature inside the chip */

    Temperate=((V30+Vc0-TempAdVal)*3.3/4095)/AVG_SLOPE+30.0f-Tc1;

    return Temperate;

}

float cpuTempGet(void) //CPU内部温度获取。

{

    float Temperate;

    float tempValue;

     

    ADC_ConfigRegularChannel(ADC1, ADC_CH_16, 1, ADC_SAMP_TIME_239CYCLES5);//ADC_CH_16:测温度,ADC_CH_18:测内部1.2V基准

   

    ADC_EnableTempSensorVrefint(ENABLE);

    ADC_EnableSoftwareStartConv(ADC1, ENABLE);

    while(ADC_GetFlagStatus(ADC1, ADC_FLAG_ENDC)==0)

    {

    }

    ADC_ClearFlag(ADC1, ADC_FLAG_ENDC);

    ADC_ClearFlag(ADC1, ADC_FLAG_STR);

    tempValue=ADC_GetDat(ADC1);

    // Voltage value of temperature sensor

    Temperate = TempCal(tempValue);

    return Temperate;

}

void adcDeal(void) //ADC数据处理

{  

    static u32 adc1Time = 0;

    static u32 adc2Time = 0;

    static u32 cpuTemTime = 0;  

    if (Timer.ms - cpuTemTime>5000)

    {

        cpuTemTime = Timer.ms;

        float Temperate = cpuTempGet();    

        cpuTemperature = Temperate*10;

        cpuTemperatureFloat = Temperate;

        // debugLog("CPU 温度:%f.",Temperate);

    }  

    if(Timer.ms -adc1Time>Adc1.sampleTime) //sampling time control.

    {

        adc1Time = Timer.ms;

        static u8 index = 0;

        Adc1.adcBuf[index++] = ADC_GetData(ADC1,ADC1_Channel_02_PA1);

        if (index>=10)

        {

            u16 max = Adc1.adcBuf[0];

            u16 min = Adc1.adcBuf[0];

            for (int i = 1; i < 10; i++) //从1开始

            {

                if (Adc1.adcBuf[i] > max)

                {

                    max = Adc1.adcBuf[i];

                }

                else if (Adc1.adcBuf[i] < min)

                {

                    min = Adc1.adcBuf[i];

                }

            }

            Adc1.value = 0;

            for (int i = 0; i < 10; i++)            

            {

                Adc1.value += Adc1.adcBuf[i];

            }

            Adc1.value = Adc1.value-max-min; //去掉一个最大值,去掉一个最小值

            Adc1.value = Adc1.value>>3;  //取8个采样点平均值。

            Adc1.voltage = Adc1.value*ADC1_TO_V_FACTOR; //equipment.voltage分辨率 mV

            Adc1.ok = TRUE;

            index = 0;          

        }

    }

    if(Timer.ms -adc2Time>Adc2.sampleTime) //sampling time control. NTC

    {

        static u8 times = 0;

        static u32 averageAdcValue = 0;

        adc2Time = Timer.ms;

        averageAdcValue += ADC_GetData(ADC2,ADC2_Channel_02_PA5);  //ADC value.    

        if (++times<10) return;

        times = 0;

        Adc2.value = averageAdcValue/10; //计算平均值。

        averageAdcValue = 0;

        Adc2.voltage = Adc2.value*ADC2_TO_V_FACTOR; //equipment.voltage分辨率 0.001V      

        Adc2.tem = getNtcTempertature(Adc2.voltage);        

        if (Adc2.value>2000)

        {

            if (Device.hallSw == 0)

            {

                Device.hallSw = 1;  //0:霍尔闭合状态,关门 1:开门,霍尔弹起状态

                Jt808.alarm = ALARM_HALL_ON;

                printf("霍尔报警:%d.\r\n",Device.hallSw);

            }          

        }

        else

        {

            if (Device.hallSw == 1)

            {

                Device.hallSw = 0;  //0:霍尔闭合状态,关门 1:开门,霍尔弹起状态

                Jt808.alarm = ALARM_HALL_OFF;

                printf("霍尔报警:%d.\r\n",Device.hallSw);

            }          

        }      

        debugLog("CPU温度:%.2f,温度:%.2f,湿度:%0.2f%%,NTC温度:%.2f,NTC_ADC:%d,NTC_V:%dmv,NTC RS:%dR.",cpuTemperatureFloat, Aht20.tem/10.0,Aht20.hum/10.0,Adc2.tem,Adc2.value,Adc2.voltage,Adc2.resistance);

        Adc2.ok = TRUE;

    }  

}

#ifndef __RES_NTC_H

#define __RES_NTC_H

#include "main.h" //

struct __NTC_

{

    unsigned int rMin;  //最小阻值

    unsigned int rMax;  //最大阻值

    int   tem;          //对应的温度值

};

void ntcTableInit(void);  //ntc R T表格初始化

double  getNtcTempertature(u16 ntcVoltage); //R=U/I; //R=U/I

#endif

#include  "ntc.h"

struct __NTC_ NtcTable[157]={0};

// struct _adc_temp    get_temp_value;

static int g_index=0;

// -------------------------------------------------

//  ntcTableInit                          

//  参  数  ntc R T表格初始化     R单位:R,T单位:摄氏度        

//  作  者: kevinPan

//  返回值:无                                      

// -------------------------------------------------

void ntcTableInit(void)  //ntc R T表格初始化

{

    int i = 0;  

    NtcTable[i].rMin = 116953;

    NtcTable[i].rMax = 125421;

    NtcTable[i].tem = -25;

    i++;

    NtcTable[i].rMin = 110459;

    NtcTable[i].rMax = 116953;

    NtcTable[i].tem = -24;

    i++;

    NtcTable[i].rMin = 104365;

    NtcTable[i].rMax = 110459;

    NtcTable[i].tem = -23;

    i++;

    NtcTable[i].rMin = 98643;

    NtcTable[i].rMax = 104365;

    NtcTable[i].tem = -22;

    i++;

    NtcTable[i].rMin = 93270;

    NtcTable[i].rMax = 98643;

    NtcTable[i].tem = -21;

    i++;

    NtcTable[i].rMin = 88221;

    NtcTable[i].rMax = 93270;

    NtcTable[i].tem = -20;  

    i++;

    NtcTable[i].rMin = 83476;

    NtcTable[i].rMax = 88221;

    NtcTable[i].tem = -19;

    i++;

    NtcTable[i].rMin = 79014;

    NtcTable[i].rMax = 83476;

    NtcTable[i].tem = -18;

    i++;

    NtcTable[i].rMin = 74816;

    NtcTable[i].rMax = 79014;

    NtcTable[i].tem = -17;

    i++;

    NtcTable[i].rMin = 70867;

    NtcTable[i].rMax = 74816;

    NtcTable[i].tem = -16;

    i++;

    NtcTable[i].rMin = 67148;

    NtcTable[i].rMax = 70867;

    NtcTable[i].tem = -15;

    i++;

    NtcTable[i].rMin = 63647;

    NtcTable[i].rMax = 67148;

    NtcTable[i].tem = -14;

    i++;

    NtcTable[i].rMin = 60348;

    NtcTable[i].rMax = 63647;

    NtcTable[i].tem = -13;

    i++;

    NtcTable[i].rMin = 57239;

    NtcTable[i].rMax = 60348;

    NtcTable[i].tem = -12;

    i++;

    NtcTable[i].rMin = 54308;

    NtcTable[i].rMax = 57239;

    NtcTable[i].tem = -11;

    i++;

    NtcTable[i].rMin = 51544;

    NtcTable[i].rMax = 54308;

    NtcTable[i].tem = -10;

    i++;

    NtcTable[i].rMin = 48969;

    NtcTable[i].rMax = 51544;

    NtcTable[i].tem = -9;

    i++;

    NtcTable[i].rMin = 46535;

    NtcTable[i].rMax = 48969;

    NtcTable[i].tem = -8;

    i++;

    NtcTable[i].rMin = 44234;

    NtcTable[i].rMax = 46535;

    NtcTable[i].tem = -7;

    i++;

    NtcTable[i].rMin = 42058;

    NtcTable[i].rMax = 44234;

    NtcTable[i].tem = -6;

    i++;

    NtcTable[i].rMin = 40000;

    NtcTable[i].rMax = 42058;

    NtcTable[i].tem = -5;

    i++;

    NtcTable[i].rMin = 38052;

    NtcTable[i].rMax = 40000;

    NtcTable[i].tem = -4;

    i++;

    NtcTable[i].rMin = 36208;

    NtcTable[i].rMax = 38052;

    NtcTable[i].tem = -3;

    i++;

    NtcTable[i].rMin = 34463;

    NtcTable[i].rMax = 36208;

    NtcTable[i].tem = -2;

    i++;

    NtcTable[i].rMin = 32810;

    NtcTable[i].rMax = 34463;

    NtcTable[i].tem = -1;

    i++;

    NtcTable[i].rMin = 31243;

    NtcTable[i].rMax = 32810;

    NtcTable[i].tem = 0;

    i++;

    NtcTable[i].rMin = 29770;

    NtcTable[i].rMax = 31243;

    NtcTable[i].tem = 1;

    i++;

    NtcTable[i].rMin = 28372;

    NtcTable[i].rMax = 29770;

    NtcTable[i].tem = 2;

    i++;

    NtcTable[i].rMin = 27045;

    NtcTable[i].rMax =  28372;

    NtcTable[i].tem = 3;

    i++;

    NtcTable[i].rMin = 25785;

    NtcTable[i].rMax = 27045;

    NtcTable[i].tem = 4;

    i++;

    NtcTable[i].rMin = 24590;

    NtcTable[i].rMax = 25785;

    NtcTable[i].tem = 5;

    i++;

    NtcTable[i].rMin = 23454;

    NtcTable[i].rMax = 24590;

    NtcTable[i].tem = 6;

    i++;

    NtcTable[i].rMin = 22376;

    NtcTable[i].rMax = 23454;

    NtcTable[i].tem = 7;

    i++;

    NtcTable[i].rMin = 21351;

    NtcTable[i].rMax = 22376;

    NtcTable[i].tem = 8;

    i++;

    NtcTable[i].rMin = 20377;

    NtcTable[i].rMax = 21351;

    NtcTable[i].tem = 9;

    i++;

    NtcTable[i].rMin = 19450;

    NtcTable[i].rMax = 20377;

    NtcTable[i].tem = 10;

    i++;

    NtcTable[i].rMin = 18560;

    NtcTable[i].rMax = 19450;

    NtcTable[i].tem = 11;

    i++;

    NtcTable[i].rMin = 17716;

    NtcTable[i].rMax = 18560;

    NtcTable[i].tem = 12;

    i++;

    NtcTable[i].rMin = 16914;

    NtcTable[i].rMax = 17716;

    NtcTable[i].tem = 13;

    i++;

    NtcTable[i].rMin = 16154;

    NtcTable[i].rMax = 16914;

    NtcTable[i].tem = 14;

    i++;

    NtcTable[i].rMin = 15431;

    NtcTable[i].rMax = 16154;

    NtcTable[i].tem = 15;

    i++;

    NtcTable[i].rMin = 14744;

    NtcTable[i].rMax = 15431;

    NtcTable[i].tem = 16;

    i++;

    NtcTable[i].rMin = 14092;

    NtcTable[i].rMax = 14744;

    NtcTable[i].tem = 17;

    i++;

    NtcTable[i].rMin = 13472;

    NtcTable[i].rMax = 14092;

    NtcTable[i].tem = 18;

    i++;

    NtcTable[i].rMin = 12882;

    NtcTable[i].rMax = 13472;

    NtcTable[i].tem = 19;

    i++;

    NtcTable[i].rMin = 12321;

    NtcTable[i].rMax = 12882;

    NtcTable[i].tem = 20;

    i++;

    NtcTable[i].rMin = 11788;

    NtcTable[i].rMax = 12321;

    NtcTable[i].tem = 21;

    i++;

    NtcTable[i].rMin = 11280;

    NtcTable[i].rMax = 11788;

    NtcTable[i].tem = 22;

    i++;

    NtcTable[i].rMin = 10797;

    NtcTable[i].rMax = 11280;

    NtcTable[i].tem = 23;

    i++;

    NtcTable[i].rMin = 10337;

    NtcTable[i].rMax = 10797;

    NtcTable[i].tem = 24;

    i++;

    NtcTable[i].rMin = 9900;

    NtcTable[i].rMax =10337;

    NtcTable[i].tem = 25;

    i++;

    NtcTable[i].rMin = 9477;

    NtcTable[i].rMax = 9900;

    NtcTable[i].tem = 26;

    i++;

    NtcTable[i].rMin = 9075;

    NtcTable[i].rMax = 9477;

    NtcTable[i].tem = 27;

    i++;

    NtcTable[i].rMin = 8692;

    NtcTable[i].rMax = 9075;

    NtcTable[i].tem = 28;

    i++;

    NtcTable[i].rMin = 8326;

    NtcTable[i].rMax = 8692;

    NtcTable[i].tem = 29;

    i++;

    NtcTable[i].rMin = 7978;

    NtcTable[i].rMax = 8326;

    NtcTable[i].tem = 30;

    i++;

    NtcTable[i].rMin = 7645;

    NtcTable[i].rMax = 7978;

    NtcTable[i].tem = 31;

    i++;

    NtcTable[i].rMin = 7328;

    NtcTable[i].rMax = 7645;

    NtcTable[i].tem = 32;

    i++;

    NtcTable[i].rMin = 7025;

    NtcTable[i].rMax = 7328;

    NtcTable[i].tem = 33;

    i++;

    NtcTable[i].rMin = 6736;

    NtcTable[i].rMax = 7025;

    NtcTable[i].tem = 34;

    i++;

    NtcTable[i].rMin = 6460;

    NtcTable[i].rMax = 6736;

    NtcTable[i].tem = 35;

    i++;

    NtcTable[i].rMin = 6196;

    NtcTable[i].rMax = 6460;

    NtcTable[i].tem = 36;

    i++;

    NtcTable[i].rMin = 5945;

    NtcTable[i].rMax = 6196;

    NtcTable[i].tem = 37;

    i++;

    NtcTable[i].rMin = 5704;

    NtcTable[i].rMax = 5945;

    NtcTable[i].tem = 38;

    i++;

    NtcTable[i].rMin = 5475;

    NtcTable[i].rMax = 5704;

    NtcTable[i].tem = 39;

    i++;

    NtcTable[i].rMin = 5255;

    NtcTable[i].rMax = 5475;

    NtcTable[i].tem = 40;

    i++;

    NtcTable[i].rMin = 5045;

    NtcTable[i].rMax = 5255;

    NtcTable[i].tem = 41;

    i++;

    NtcTable[i].rMin = 4844;

    NtcTable[i].rMax = 5045;

    NtcTable[i].tem = 42;

    i++;

    NtcTable[i].rMin = 4652;

    NtcTable[i].rMax = 4844;

    NtcTable[i].tem = 43;

    i++;

    NtcTable[i].rMin = 4468;

    NtcTable[i].rMax = 4652;

    NtcTable[i].tem = 44;

    i++;

    NtcTable[i].rMin = 4293;

    NtcTable[i].rMax = 4468;

    NtcTable[i].tem = 45;

    i++;

    NtcTable[i].rMin = 4125;

    NtcTable[i].rMax = 4293;

    NtcTable[i].tem = 46;

    i++;

    NtcTable[i].rMin = 3964;

    NtcTable[i].rMax = 4125;

    NtcTable[i].tem = 47;

    i++;

    NtcTable[i].rMin = 3810;

    NtcTable[i].rMax = 3964;

    NtcTable[i].tem = 48;

    i++;

    NtcTable[i].rMin = 3662;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 49;

    i++;

    NtcTable[i].rMin = 3521;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 50;

    i++;

    NtcTable[i].rMin = 3388;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 51;

    i++;

    NtcTable[i].rMin = 3261;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 52;

    i++;

    NtcTable[i].rMin = 3139;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 53;

    i++;

    NtcTable[i].rMin = 3023;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 54;

    i++;

    NtcTable[i].rMin = 2911;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 55;

    i++;

    NtcTable[i].rMin = 2804;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 56;

    i++;

    NtcTable[i].rMin = 2702;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 57;

    i++;

    NtcTable[i].rMin = 2603;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 58;

    i++;

    NtcTable[i].rMin = 2509;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 59;

    i++;

    NtcTable[i].rMin = 2419;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 60;

    i++;

    NtcTable[i].rMin = 2332;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 61;

    i++;

    NtcTable[i].rMin = 2249;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 62;

    i++;

    NtcTable[i].rMin = 2169;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 63;

    i++;

    NtcTable[i].rMin = 2093;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 64;

    i++;

    NtcTable[i].rMin = 2019;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 65;

    i++;

    NtcTable[i].rMin = 1949;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 66;

    i++;

    NtcTable[i].rMin = 1881;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 67;

    i++;

    NtcTable[i].rMin = 1816;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 68;

    i++;

    NtcTable[i].rMin = 1753;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 69;

    i++;

    NtcTable[i].rMin = 1693;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 70;

    i++;

    NtcTable[i].rMin = 1636;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 71;

    i++;

    NtcTable[i].rMin = 1580;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 72;

    i++;

    NtcTable[i].rMin = 1527;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 73;

    i++;

    NtcTable[i].rMin = 1471;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 74;

    i++;

    NtcTable[i].rMin = 1426;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 75;

    i++;

    NtcTable[i].rMin = 1379;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 76;

    i++;

    NtcTable[i].rMin = 1333;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 77;

    i++;

    NtcTable[i].rMin = 1289;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 78;

    i++;

    NtcTable[i].rMin = 1247;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 79;

    i++;

    NtcTable[i].rMin = 1206;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 80;

    i++;

    NtcTable[i].rMin = 1167;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 81;

    i++;

    NtcTable[i].rMin = 1129;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 82;

    i++;

    NtcTable[i].rMin = 1093;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 83;

    i++;

    NtcTable[i].rMin = 1058;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 84;

    i++;

    NtcTable[i].rMin = 1024;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 85;

    i++;

    NtcTable[i].rMin = 992;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 86;

    i++;

    NtcTable[i].rMin = 960;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 87;

    i++;

    NtcTable[i].rMin = 930;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 88;

    i++;

    NtcTable[i].rMin = 901;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 89;

    i++;

    NtcTable[i].rMin = 873;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 90;

    i++;

    NtcTable[i].rMin = 846;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 91;

    i++;

    NtcTable[i].rMin = 820;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 92;

    i++;

    NtcTable[i].rMin = 795;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 93;

    i++;

    NtcTable[i].rMin = 771;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 94;

    i++;

    NtcTable[i].rMin = 748;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 95;

    i++;

    NtcTable[i].rMin = 725;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 96;

    i++;

    NtcTable[i].rMin = 704;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 97;

    i++;

    NtcTable[i].rMin = 683;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 98;

    i++;

    NtcTable[i].rMin = 662;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 99;

    i++;

    NtcTable[i].rMin = 643;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 100;

    i++;

    NtcTable[i].rMin = 624;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 101;

    i++;

    NtcTable[i].rMin = 606;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 102;

    i++;

    NtcTable[i].rMin = 588;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 103;

    i++;

    NtcTable[i].rMin = 571;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 104;

    i++;

    NtcTable[i].rMin = 555;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 105;

    i++;

    NtcTable[i].rMin = 539;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 106;

    i++;

    NtcTable[i].rMin = 523;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 107;

    i++;

    NtcTable[i].rMin = 508;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 108;

    i++;

    NtcTable[i].rMin = 494;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 109;

    i++;

    NtcTable[i].rMin = 480;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 110;

    i++;

    NtcTable[i].rMin = 467;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 111;

    i++;

    NtcTable[i].rMin = 454;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 112;

    i++;

    NtcTable[i].rMin = 441;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 113;

    i++;

    NtcTable[i].rMin = 429;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 114;

    i++;

    NtcTable[i].rMin = 417;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 115;

    i++;

    NtcTable[i].rMin = 406;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 116;

    i++;

    NtcTable[i].rMin = 395;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 117;

    i++;

    NtcTable[i].rMin = 384;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 118;

    i++;

    NtcTable[i].rMin = 374;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 119;

    i++;

    NtcTable[i].rMin = 364;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 120;

    i++;

    NtcTable[i].rMin = 354;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 121;

    i++;

    NtcTable[i].rMin = 344;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 122;

    i++;

    NtcTable[i].rMin = 335;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 123;

    i++;

    NtcTable[i].rMin = 326;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 124;

    i++;

    NtcTable[i].rMin = 318;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 125;

    i++;

    NtcTable[i].rMin = 310;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 126;

    i++;

    NtcTable[i].rMin = 301;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 127;

    i++;

    NtcTable[i].rMin = 294;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 128;

    i++;

    NtcTable[i].rMin = 286;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 129;

    i++;

    NtcTable[i].rMin = 279;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 130;

    i++;

    NtcTable[i].rMin = 272;

    NtcTable[i].rMax = NtcTable[i-1].rMin;

    NtcTable[i].tem = 131;

    i++;

    g_index = i;

    printf("NTC列表长度:%d,温度范围%d-%d摄氏度.\r\n",g_index,NtcTable[0].tem,NtcTable[g_index-1].tem);

}

/*-------------------------------------------------

* resToTemperature                          

* 参  数  The resistance value is converted to the temperature value

* 作  者: kevinPan

* 返回值:temperature value                                

*-------------------------------------------------*/

double resToTemperature(unsigned int resistance)

{

    int i = 0;

    if (resistance > NtcTable[0].rMax)

    {

        return -25;

    }

    else  if (resistance <= NtcTable[g_index - 1].rMin)

    {

        return 131;

    }

    else if (resistance >= NtcTable[g_index - 1].rMin && resistance <= NtcTable[0].rMax)

    {

        for (i = 0; i < g_index; i++)

        {

            if (resistance > NtcTable[i].rMin && resistance <= NtcTable[i].rMax)

            {

                float temp = 0;

                temp = (float)(NtcTable[i].rMax-resistance)/(NtcTable[i].rMax-NtcTable[i].rMin);

                return NtcTable[i].tem+temp;

            }

        }

    }

    return 0;

}

// *-------------------------------------------------

// * 函数名:Check_car_tempertature                          

// * 参  数: 检测电压,单位 mv 每1S钟更新温度            

// * 作  者: kevinPan

// * 返回值:ntc temprature.                                      

// *-------------------------------------------------

double getNtcTempertature(u16 ntcVoltage) //R=U/I 电压单位:mv

{  

   

    double temperature = 0;

    Adc2.resistance = (ntcVoltage*10000)/(3300-ntcVoltage)-1000;//求取电阻值,减去串联的1K电阻。

    temperature = resToTemperature(Adc2.resistance);    

    return temperature;

}

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kevinpan2011

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值