gaoyang9992006 发表于 2022-12-10 19:12

【新定义MCU开发板测评】+ ADC使用NTC热敏电阻测温

本帖最后由 gaoyang9992006 于 2022-12-12 14:22 编辑


测温电路如上所示,将OUT接入开发板的ADC接口,比如接入AIN2
接下来配置ADC,先设置ADC的时钟,然后配置IO端口作为ADC输入端口,然后选择该端口的通道切入ADC转化通路,然后使能ADC中断功能用于识别转化完成否,然后打开ADC功能开关。
接下来通过转换启动功能启动,然后通过中断寄存器判断是否完成转换,如果转换完成清理对应标志位,读取转换的结果。
根据转换的结果计算阻值,通过阻值计算温度。
#include<rd8_conf.h>
#include<stdio.h>
#include <math.h>

#define K 273.15
#define T0 (25.0+K)
#define R0 10000.0
#define B 3455.0

float Res_to_Tem(float res_val)

{
      float temp;
      temp=1/((1/T0)+(log(res_val/R0)/B));
      return temp-K;
}


void SC_Init(void)
{
GPIO_Init(GPIO0, GPIO_PIN_1, GPIO_MODE_OUT_PP); //设置P01为强推挽模式
      GPIO_Init(GPIO1, GPIO_PIN_ALL, GPIO_MODE_IN_PU); //设置P1为高阻输入模式
      GPIO_Init(GPIO1, GPIO_PIN_1,GPIO_MODE_IN_PU);
      GPIO_Init(GPIO1, GPIO_PIN_3,GPIO_MODE_IN_PU);
      USCI1_ITConfig(DISABLE,LOW);
      USCI1_UART_Init(32000000,115200,USCI1_UART_Mode_10B,USCI1_UART_RX_ENABLE);
      
      ADC_Init(ADC_PRESSEL_3CLOCK,ADC_Cycle_Null);
      ADC_EAINConfig(ADC_EAIN_2,ENABLE);
      ADC_ChannelConfig(ADC_CHANNEL_2, ENABLE);
      ADC_ITConfig(ENABLE, LOW);
ADC_Cmd(ENABLE);
}

//重写Printf发送函数
char putchar (char c)
{
      USCI1_UART_SendData8(c);
      while(!USCI1_GetFlagStatus(USCI1_UART_FLAG_TI));
      USCI1_ClearFlag(USCI1_UART_FLAG_TI);
      return c;
}

void Delay(unsigned int time)
{
      unsigned int Single_Time;
      while(time--)
      {
                Single_Time = 4095;
                while(Single_Time --);
      }
}

void main(void)
{
      uint16_t adc_val=0;
      uint16_t Res_val=0;
      float temp=0.0;


      SC_Init();
      while(1)
{
      GPIO_TogglePin(GPIO0, GPIO_PIN_1);
      ADC_StartConversion();                        //开启一次ADC转换
      while(!ADC_GetFlagStatus());                        //等待ADC转换结束
      ADC_ClearFlag();
      adc_val = ADC_GetConversionValue();
      Res_val=(adc_val*6200.0)/(4095-adc_val);
      temp=Res_to_Tem(Res_val);
      
      Delay(2000);
      printf("adc_val = %d\n",adc_val);
      printf("Rx=%d Ohm\n",Res_val);
      printf("Temp=%.2f ℃\n",temp);
      printf("---------------------------\n");

}
      

}

幸福小强 发表于 2024-5-21 15:25

ADC的使用。

幸福小强 发表于 2024-5-21 15:48

这个公式的误差有多大?

AdaMaYun 发表于 2024-5-23 09:36

ADC使用NTC热敏电阻测温
页: [1]
查看完整版本: 【新定义MCU开发板测评】+ ADC使用NTC热敏电阻测温