打印
[开发工具]

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

[复制链接]
340|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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");

}
        

}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:西安公路研究院南京院
简介:主要工作从事监控网络与通信网络设计,以及从事基于嵌入式的通信与控制设备研发。擅长单片机嵌入式系统物联网设备开发,音频功放电路开发。

1896

主题

15629

帖子

198

粉丝