stm32f103c8t6热敏电阻
时间: 2024-12-30 12:23:34 浏览: 8
### STM32F103C8T6 上使用热敏电阻的方法
#### 硬件连接方式
为了在 STM32F103C8T6 微控制器上实现温度测量功能,通常采用负温度系数 (NTC) 的热敏电阻作为传感器。这种类型的热敏电阻随着温度升高其阻值会降低。硬件连接方面,建议将 NTC 热敏电阻与固定电阻组成分压电路接入 ADC 输入端口[^1]。
具体来说,在开发板上的 GPIO 引脚和 GND 之间串联一个适当大小的精密电阻 R1 和待测温元件即 NTC 热敏电阻 RT;再把该节点接到 MCU 内部模数转换器(ADC)的一个通道上去读取电压信号变化情况来反映当前环境下的实际温度数值[^1]。
#### 软件编程部分
对于软件设计而言,则需编写程序控制单片机周期性的采集来自上述模拟量输入接口处的数据并计算得出对应的真实物理意义下摄氏度单位表示的结果。下面给出一段基于 HAL 库编写的 C++ 实现示例:
```cpp
#include "stm32f1xx_hal.h"
// 定义使用的 ADC 通道编号以及参考电压 Vref(单位:mV)
#define ADC_CHANNEL ADC_CHANNEL_0
#define VREF 3300
float getTemperature(void){
uint32_t adcValue;
/* 启动一次单独模式下的 AD 转换 */
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,HAL_MAX_DELAY);
adcValue = HAL_ADC_GetValue(&hadc1);
float voltage = ((float)VREF / 4095)*adcValue; // 将采样值得到的实际电平
const float BETA = 3977.0; // Beta 参数由具体的型号决定
const float ROOM_TEMP_KELVIN = 298.15; // 参考室温为 25°C 对应开尔文制
const float REFERENCE_RESISTANCE = 10000.0;
// 计算此时对应的电阻值
float resistanceRatio = (voltage * REFERENCE_RESISTANCE)/(VREF-voltage);
double temperatureKelvinInv = log(resistanceRatio)/BETA + 1/ROOM_TEMP_KELVIN;
return 1/temperatureKelvinInv - 273.15 ; // 返回摄氏度
}
```
此函数 `getTemperature` 主要负责获取当前时刻所检测位置附近的空气温度,并返回浮点型变量形式表达出来的近似真实值给调用者处理显示等功能需求[^1]。
阅读全文