1. 项目背景与需求分析
作为一名嵌入式开发工程师,我最近接手了一个温度监测项目。客户要求使用单片机采集两个温度传感器的数据,并通过ADC转换后显示温度值。虽然我之前没有芯片开发经验,但通过这个项目,我深入研究了温度传感器与ADC采集的相关技术。
这个项目的核心需求可以分解为:
- 需要同时监测两个不同位置的温度
- 使用单片机内置ADC进行模拟信号采集
- 将ADC原始值转换为实际的温度值
- 确保温度测量的准确性和稳定性
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件选型与电路设计
2.1 温度传感器选择
根据项目需求和市场调研,我选择了DS18B20数字温度传感器和NTC热敏电阻两种方案:
DS18B20特点:
- 数字输出,单总线接口
- ±0.5℃精度
- -55℃~+125℃测量范围
- 无需额外ADC
NTC热敏电阻特点:
- 模拟输出,需要ADC
- 成本低
- 需要线性化处理
- 精度取决于ADC分辨率
考虑到项目已经指定要使用ADC,我最终选择了NTC热敏电阻方案。
2.2 单片机选型
基于ADC需求,我选择了STM32F103系列单片机,主要因为:
- 内置12位ADC,满足精度要求
- 多通道ADC可同时采集两个传感器
- 丰富的外设和开发资源
- 性价比高
2.3 电路设计要点
NTC热敏电阻的接口电路设计需要注意:
code复制Vcc ---[10kΩ]---+---[NTC]--- GND
|
ADC输入
- 使用分压电路将温度变化转换为电压变化
- 10kΩ上拉电阻匹配NTC的标称阻值
- 添加0.1μF滤波电容减少噪声
- 走线尽量短,避免引入干扰
3. ADC采集实现
3.1 STM32 ADC配置
使用STM32CubeMX工具配置ADC:
- 选择ADC1,通道0和通道1
- 配置为12位分辨率
- 设置扫描模式和连续转换
- 采样时间设置为239.5周期
- 启用DMA传输提高效率
关键初始化代码:
c复制ADC_HandleTypeDef hadc1;
void ADC_Init(void)
{
hadc1.Instance = ADC1;
hadc1.Init.Scan
