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

最低0.47元/天 解锁文章
2304

被折叠的 条评论
为什么被折叠?



