STM32F103基于公式计算实现3380 NTC温度检测电路设计与编程

引言

本教程将详细介绍如何使用STM32F103微控制器设计一个简单而有效的NTC温度检测电路,并附上完整的C代码示例。我们选择了3380 10K NTC热敏电阻,该电阻在-40°C至+125°C范围内表现出色。

NTC温度检测电路设计

1. NTC电阻的选择

首先,我们选择了3380 10K NTC热敏电阻,这是一个常见的型号,适用于多种温度检测应用。其阻值会随温度的变化而变化,为我们提供了可靠的温度信息。

2. 电路连接

我们使用一个简单的电压分压电路,将NTC电阻与一个10K电阻连接,中点通过ADC引脚连接到STM32F103微控制器。这样的电路配置允许我们通过ADC读取NTC电阻的电压,从而获取温度信息。

3. 分压电阻的选择

由于我们选择的NTC电阻是10K,我们也选择了一个10K的分压电阻。这确保了在较大的温度范围内提供较大的电压变化,以增加测量的灵敏度。

STM32F103代码示例

以下是使用STM32F103的C代码示例,用于读取NTC电阻的温度,并通过串口输出。代码中包含了详细的注释,方便理解和定制。

#include "stm32f10x.h"
#include "stdio.h"

// 定义分压电阻值
#define R1 10000.0

// 定义ADC通道
#define ADC_CHANNEL 0

// 温度相关参数
#define B_VALUE 3380
#define REFERENCE_RESISTANCE 10000.0
#define ROOM_TEMPERATURE 25.0

// 函数声明
void ADC_Configuration(void);
float Read_Temperature(void);

int main(void) {
    // 初始化时钟
    SystemInit();

    // 配置ADC
    ADC_Configuration();

    // 初始化串口
    // 请根据实际情况配置串口

    // 主循环
    while (1) {
        // 读取温度
        float temperature = Read_Temperature();

        // 输出到串口
        printf("Temperature: %.2f degrees Celsius\r\n", temperature);

        // 延时
        for (int i = 0; i < 500000; i++);
    }
}

void ADC_Configuration(void) {
    ADC_InitTypeDef ADC_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;

    // 使能 ADC1 时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

    // 使能 GPIOA 时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    // 配置 ADC 输入引脚
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    // 配置 ADC 参数
    ADC_DeInit(ADC1);
    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 通道
    ADC_RegularChannelConfig(ADC1, ADC_CHANNEL, 1, ADC_SampleTime_55Cycles5);

    // 使能 ADC
    ADC_Cmd(ADC1, ENABLE);

    // 校准 ADC
    ADC_ResetCalibration(ADC1);
    while (ADC_GetResetCalibrationStatus(ADC1));
    ADC_StartCalibration(ADC1);
    while (ADC_GetCalibrationStatus(ADC1));
}

float Read_Temperature(void) {
    // 启动 ADC 转换
    ADC_SoftwareStartConvCmd(ADC1, ENABLE);

    // 等待转换完成
    while (!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));

    // 读取 ADC 值
    uint16_t adc_value = ADC_GetConversionValue(ADC1);

    // 计算电压值
    float voltage = (float)adc_value / 4095.0 * 3.3;

    // 计算NTC电阻值
    float ntc_resistance = (voltage * R1) / (3.3 - voltage);

    // 计算温度
    float temperature = 1.0 / ((1.0 / ROOM_TEMPERATURE) + (1.0 / B_VALUE) * log(ntc_resistance / REFERENCE_RESISTANCE));

    return temperature - 273.15; // 转换为摄氏温度
}

温度计算和公式

Read_Temperature函数中,我们使用了热敏电阻的Steinhart-Hart方程进行温度计算。这个公式在数据手册中通常可以找到,用于将电阻值转换为温度。也可以基于组织表,通过查表形式转换温度。

注意事项

  • 代码中使用了STM32的ADC功能,需要配置ADC参数。
  • 为了保证准确的测量,可能需要添加温度补偿和校准步骤。
  • 串口输出是一个示例,你可能需要根据实际情况配置串口通信。
  • 结论

    通过本教程,我们详细介绍了如何使用STM32F103微控制器设计一个基本的NTC温度检测电路,并提供了完整的C代码示例。这个电路和代码可以作为起点,根据具体应用需求进行定制和优化。在实际应用中,请确保遵循相关硬件和软件设计的最佳实践,以获得准确和可靠的温度测量。

    作者:字节人生

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32F103基于公式计算实现3380 NTC温度检测电路设计与编程

    发表评论