1. 项目背景与需求分析
最近接手了一个物联网项目,需要实现蓝牙控制继电器功能,同时采集两个温度传感器的数据。主控芯片选用了国产沁恒CH592F,这是我第一次使用这款MCU。项目中需要将两个NTC温度传感器连接到PA12和PA13引脚,通过ADC采集并转换为温度值。
看似简单的温度采集任务,在实际开发中却遇到了不少坑。本文将详细记录整个开发过程,特别是ADC采集部分的实现细节和踩坑经验,希望能帮助到同样使用CH592F的开发人员。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件设计与电路分析
2.1 NTC温度传感器电路设计
NTC(负温度系数)热敏电阻的阻值随温度升高而降低。为了将电阻变化转换为电压信号,我们采用了经典的分压电路设计:
code复制VCC ---[10kΩ]---+---[NTC]--- GND
|
ADC输入
具体到本项目:
- 两个NTC传感器分别连接PA12和PA13
- 上拉电阻选用10kΩ 1%精度金属膜电阻
- NTC型号为MF52-103(10kΩ @25℃)
- VCC使用MCU的3.3V供电
注意:NTC的精度和稳定性受上拉电阻影响很大,建议使用1%精度或更好的电阻。
2.2 CH592F ADC特性分析
CH592F的ADC有以下几个关键特性:
- 12位分辨率
- 最大采样率1Msps
- 可编程增益放大器(PGA)
- 内部参考电压可选1.2V或2.4V
- 支持DMA传输
这些特性与常见的STM32等MCU有所不同,特别是PGA和参考电压选项,这也是最初采集数据异常的主要原因。
3. 软件实现与代码解析
3.1 ADC初始化配置
正确的ADC初始化对采集精度至关重要。以下是关键配置步骤:
c复制// ADC时钟配置
R8_ADC_CFG = RB_ADC_POWER_ON | RB_ADC_CLK_DIV12; // 开启ADC电源,时钟分频
// 参考电压选择
R8_ADC_CFG |= RB_ADC_REF_INN; // 使用内部1.2V参考
// 采样时间配置
R8_ADC_SAMPLE = 0x0F; // 延长采样时间提高精度
// 禁用PGA(初始配置错误点)
R8_ADC_PGA_CFG
