1. NTC温度采集基础原理
NTC热敏电阻是一种负温度系数电阻,随着温度升高阻值会下降。这种特性使其成为温度测量的理想选择,但同时也带来了测量上的挑战。在实际项目中,我经常遇到新手开发者对NTC工作原理理解不透彻导致测量误差的问题。
NTC的阻值-温度关系遵循Steinhart-Hart方程,这个方程描述了半导体材料的电阻与温度之间的非线性关系。不过在实际工程应用中,我们更常用的是查表法,因为直接解这个方程需要复杂的计算,对单片机资源消耗较大。
硬件电路设计上,通常采用分压电路将NTC阻值变化转换为电压变化。我常用的电路是将NTC与一个固定电阻串联,中间节点接入STM32的ADC引脚。这里有个关键点:固定电阻的阻值最好选择与NTC在测量范围内的中间值相近,这样可以获得最佳的电压变化灵敏度。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. STM32 ADC配置实战
ADC配置是NTC温度采集的核心环节。以STM32G030C8T6为例,我通常会采用DMA方式采集ADC数据,这样可以减轻CPU负担。在CubeMX中配置时,需要注意以下几个关键参数:
- 采样时间:对于NTC这种变化较慢的信号,可以设置较长的采样时间(如239.5个周期)
- 分辨率:12位分辨率足够满足大多数温度测量需求
- 触发方式:通常使用软件触发即可
- DMA配置:要设置为循环模式,这样能持续更新数据
c复制// ADC初始化代码示例
void MX_ADC1_Init(void)
{
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
hadc1.Init.ScanConvMode = DISABLE;
hadc1.Init.ContinuousConvMode = ENABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
