STM32 外设驱动模块六:NTC热敏电阻模块

在嵌入式开发的世界里,环境感知是构建智能系统的第一步。而在众多环境参数中,温度无疑是最基本也最关键的因素之一。无论是空调自动调温、风扇控制,还是工业设备过热报警——一切都离不开温度检测

今天我们就来认识一位温控“功臣”——NTC热敏电阻模块


🧊 1. 什么是NTC热敏电阻?

NTC,全称 Negative Temperature Coefficient,即“负温度系数”。顾名思义:温度升高 → 阻值下降


聪明的工程师们利用这个特性,将NTC热敏电阻与分压电路、比较器、LED等元件封装成一个小巧实用的模块,既能输出连续变化的模拟信号(模拟量),也能输出开关控制信号(数字量),完美适用于各种温控应用。


🔧 2. 模块结构与技术参数

下图是市面上常见的热敏电阻模块样式(含LED指示灯与可调电位器):

参数项说明
传感器类型NTC热敏电阻
工作电压DC 3.3V ~ 5V
检测范围-55℃ ~ 125℃(实用范围通常为20℃ ~ 80℃)
检测精度±1%
模拟输出(AO)输出范围 0~5V,随温度变化连续变化
数字输出(DO)可调温度阈值开关量输出(高/低电平),默认低温高电平,高温低电平
信号芯片LM393 双路比较器,波形干净,驱动能力强(可达15mA)
接口引脚VCC、GND、DO(数字输出)、AO(模拟输出)
调节方式板载蓝色可调电位器调节温度阈值

💡 不同厂家模块可能在电路细节上有所不同,实际参数请以技术手册为准。


🧠 3. 模块工作原理解析

模拟量输出(AO)

模块通过NTC与固定电阻组成分压电路,当温度升高时,NTC电阻下降 → 电压变化 → STM32通过ADC读取 → 推算出当前温度。

温度 (℃)电阻值 (Ω)输出电压(V)
032650≈ 4.0V
2510000≈ 2.5V
503500≈ 1.3V
751400≈ 0.6V
100700≈ 0.3V

参考电阻为10kΩ,供电电压为5V,数值为理论计算值,仅供参考。

数字量输出(DO)

模块内部比较器将AO与电位器设定阈值比较,当温度超过设定温度时,DO输出低电平(0),并点亮绿色指示灯;当低于阈值时,DO输出高电平(1),灯灭。


⚙️ 4. STM32读取温度实战教程

硬件平台:STM32F103C8T6
开发环境:Keil MDK + 标准外设库(StdLib)
接线方式:AOUT → PA1,VCC → 5V,GND → GND

🧩 步骤一:GPIO+ADC初始化

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1, ENABLE);

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);

ADC_InitTypeDef ADC_InitStructure;
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);

ADC_Cmd(ADC1, ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));

📐 步骤二:温度换算函数(Steinhart-Hart)

float Calculate_Temperature(float voltage) {
    float resistance = (3.3 - voltage) * 10000 / voltage;
    float steinhart = resistance / 10000.0;
    steinhart = log(steinhart);
    steinhart = 1.0 / (0.001129148 + 0.000234125 * steinhart +
                      0.0000000876741 * pow(steinhart, 3));
    return steinhart - 273.15; // 开尔文转摄氏度
}

🔄 步骤三:主循环读取并打印

float Read_ADC(uint8_t channel) {
    ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5);
    ADC_SoftwareStartConvCmd(ADC1, ENABLE);
    while (!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
    uint16_t adc_val = ADC_GetConversionValue(ADC1);
    return (adc_val * 3.3) / 4096.0;
}

int main(void) {
    float voltage, temp;
    ADC_Config();
    GPIO_Config();

    while (1) {
        voltage = Read_ADC(1);
        temp = Calculate_Temperature(voltage);
        printf("温度:%.2f °C\n", temp);  // 串口输出或OLED显示
        Delay_ms(1000);
    }
}

✅ 5. 实际调试小技巧

  • 💡 电位器调节方法
    通电后,将模块放置在桌面,缓慢调节蓝色电位器,直到绿色指示灯刚好亮起,再回调一点让其熄灭。然后通过加热热敏电阻(如手捂、热风枪等)测试其是否响应。

  • 📉 模拟输出更平稳
    读取AO时建议加软滤波(滑动平均),或硬件滤波电容,提高精度和抗干扰能力。

  • 🔥 过温保护注意
    模块虽然支持高温,但建议避免长时间处于80℃以上环境,防止元件老化。


🔗 6. 应用案例拓展

应用方向说明
家居自动控温系统控制风扇、暖气、空调等
智能农业环境监控棚室温度监测与通风调节
工业设备过温报警与蜂鸣器或继电器搭配使用
DIY电子钟温显OLED+温度传感器组合
水温控制应用更换为带引线NTC探头后,可测量水温/水箱温度

📐 原理图:


🎉 结语

NTC热敏电阻模块,是一个成本低廉、功能实用、使用简单的温度感知利器。在 STM32、Arduino、树莓派等主控平台中,都可以轻松接入并实现精准温控功能。无论你是初学者,还是正在开发一个实用项目,它都是你不可错过的传感器模块之一!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

极客晨风

感谢支持

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

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

打赏作者

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

抵扣说明:

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

余额充值