【ESP32】打造全网最强esp-idf基础教程——8.ADC获取NTC温度

ADC获取NTC温度

       一星期总有那么七天不想上班……麻了麻了,我还是来写我的博客吧。

一、NTC介绍
       NTC是Negative Temperature Coefficient的缩写,一般指负温度系数半导体器件,而在我们物联网实验中,称为NTC热敏电阻。NTC热敏电阻阻值计算公式如下:

       式中 RT、 RT0 分别为温度 T 、 T0 时的电阻值,Bn为材料常数。
       对于 T0=25 ℃,R0=10KΩ ,Bn=3950 的电阻-温度曲线如下所示:

       由此可见,温度越高,阻值越小。对于NTC的电路相对简单,如下图 :

       当NTC阻值发生变化时,Vout也随之发生变化,通过采样Vout电压,然后根据欧姆定律计算出电阻值,再由电阻值可算出对应的温度值。 

二、NTC例程
       由上节可知,我们需要采样Vout的值,需要用到ESP32的ADC功能,esp-idf库对ADC的操作已经封装的相当好,直接引出API给我们使用,虽然如此,但依然有一些东西我们要注意,开发板中的Vout接到了GPIO36上,关于ESP32的ADC,ESP32上具有两个ADC转化模块,分别是ADC1和ADC2,每个ADC模块均具有8路,由于在启用ADC2时,无法使用WIFI功能,因此本例程不介绍ADC2,也不推荐大家使用ADC2。然后并不是所有的GPIO口都具有ADC功能,只有如下GPIO口具有ADC功能:

1)GPIO32  ADC1_CH4
2)GPIO33  ADC1_CH5
3)GPIO34  ADC1_CH6
4)GPIO35  ADC1_CH7
5)GPIO36  ADC1_CH0
6)GPIO37  ADC1_CH1
7)GPIO38  ADC1_CH2
8)GPIO39  ADC1_CH3

       以下是部分初始化代码:

/**
 * 温度检测初始化
 * @param 无
 * @return 无
*/
void temp_ntc_init(void)
{
    adc_oneshot_unit_init_cfg_t init_config1 = {
        .unit_id = ADC_UNIT_1,  //WIFI和ADC2无法同时启用,这里选择ADC1
    };
    //启用单次转换模式
    ESP_ERROR_CHECK(adc_oneshot_new_unit(&init_config1, &s_adc_handle));
    //-------------ADC1 Config---------------//
    adc_oneshot_chan_cfg_t config = {
        .bitwidth = ADC_BITWIDTH_12,       //分辨率
        .atten = ADC_ATTEN_DB_12,          
        //衰减倍数,ESP32设计的ADC参考电压为1100mV,只能测量0-1100mV之间的电压,如果要测量更大范围的电压
        //需要设置衰减倍数
        /*以下是对应可测量范围
        ADC_ATTEN_DB_0      100 mV ~ 950 mV
&nb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值