huyongji1.1-system/App/wendu/wendu.c

77 lines
2.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "wendu.h"
// 添加温度阈值变量(默认值)
float temp_lower_limit = 15.0f; // 默认下限温度15℃
float temp_upper_limit = 20.0f; // 默认上限温度20℃
// 定义常量
#define BALANCE_R 10000.0f // 10K分压电阻
#define NTC_R25 10000.0f // NTC在25℃时的电阻值假设是10K NTC
#define BETA 3950.0f // B值需要根据您的NTC型号修改
#define KELVIN_OFFSET 273.15f
float voltage = 0.0f, temperature = 0.0f;
void Save_Temp_Limits_To_EEPROM(float lower, float upper)
{
// 保存温度阈值
Save_Float_To_EEPROM(TEMP_LOWER_LIMIT_ADDR,lower);
Save_Float_To_EEPROM(TEMP_UPPER_LIMIT_ADDR,upper);
Inf_AT24C02_WriteByte(TEMP_FLAG_ADDR,TEMP_FLAG_VAL);
}
// 从EEPROM加载温度阈值
void Load_Temp_Limits_From_EEPROM(void)
{
uint8_t flag = Inf_AT24C02_ReadByte(TEMP_FLAG_ADDR);
if(flag==TEMP_FLAG_VAL)
{
temp_lower_limit = Read_Float_From_EEPROM(TEMP_LOWER_LIMIT_ADDR);
temp_upper_limit = Read_Float_From_EEPROM(TEMP_UPPER_LIMIT_ADDR);
}
else
{
Save_Temp_Limits_To_EEPROM(temp_lower_limit,temp_upper_limit);
}
}
//实现更新函数
void Update_Temp_Limits(float lower, float upper)
{
temp_lower_limit = lower; // 更新下限
temp_upper_limit = upper; // 更新上限
Save_Temp_Limits_To_EEPROM(lower, upper); // 保存到EEPROM
}
void Print_Temperature(uint16_t *data)
{
const float CALIBRATION_FACTOR = 0.6f;
// 直接使用data[1]作为ADC值ADC_IN4通道
uint16_t adc_value = data[0];
// 转换为电压值,并应用校准系数
voltage = (float)adc_value * (3.3f / 4096.0f) * CALIBRATION_FACTOR;
// 计算NTC电阻值
// 如果NTC接VCC上拉用这个
float ntc_r = BALANCE_R * voltage / (3.3f - voltage);
// 如果NTC接地下拉用这个
// float ntc_r = BALANCE_R * (3.3f - voltage) / voltage;
// 计算温度
temperature = 1.0f / (log(ntc_r/NTC_R25)/BETA + 1.0f/(25.0f + KELVIN_OFFSET)) - KELVIN_OFFSET;
// printf("T: %.2f°C\r\n", temperature);
// 控制加热膜逻辑
// 使用可调节的温度阈值进行控制
if (temperature < temp_lower_limit) {
// 温度低于下限,开启加热
Control_Heater(1);
//printf("温度%.2f低于%.2f℃,开启加热\n", temperature, temp_lower_limit);
}
else if (temperature > temp_upper_limit) {
// 温度高于上限,关闭加热
Control_Heater(0);
//printf("温度%.2f高于%.2f℃,关闭加热\n", temperature, temp_upper_limit);
}
}