在双向直流电源中,通过软件设置实现过温保护需结合硬件温度采样、软件算法处理和保护策略执行,确保在温度异常时及时响应并避免误动作。以下是具体实现步骤及关键技术要点:
一、硬件基础:温度采样与信号传输
- 温度传感器选型
- NTC热敏电阻:成本低,但需线性化处理(如通过查表法或Steinhart-Hart方程)。
- 数字温度传感器(如DS18B20、MAX31865):直接输出数字信号,精度高(±0.5℃),抗干扰能力强,推荐用于高精度场景。
- PT100/PT1000铂电阻:线性度好,温度范围宽(-200℃~850℃),适合工业级应用,但需专用激励电路(如恒流源)。
- 传感器布局
- 关键位置覆盖:在功率器件(如MOSFET、IGBT)、电感、变压器等发热元件附近布置传感器,确保能捕捉到最高温度点。
- 冗余设计:在关键区域布置多个传感器(如2~3个),软件中取最高值或平均值,提高可靠性。
- 信号传输与隔离
- 模拟信号传输:若使用NTC或PT100,需通过运放电路将电阻变化转换为电压信号,并通过ADC采样。传输线缆需采用屏蔽双绞线,减少干扰。
- 数字信号传输:若使用数字传感器(如DS18B20),通过单总线或I²C接口直接与MCU通信,需注意总线隔离(如光耦隔离)以防止高压侧干扰。
二、软件实现:温度采样与处理
1. 温度采样初始化
- ADC配置(模拟传感器):
c// 示例:STM32 HAL库配置ADC采样NTC电压ADC_HandleTypeDef hadc1;void ADC_Init() { hadc1.Instance = ADC1; hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; hadc1.Init.Resolution = ADC_RESOLUTION_12B; // 12位分辨率 hadc1.Init.ScanConvMode = DISABLE; hadc1.Init.ContinuousConvMode = ENABLE; // 连续采样 HAL_ADC_Init(&hadc1);}
- 数字传感器通信(如DS18B20):
c// 示例:初始化DS18B20单总线#define DS18B20_PIN GPIO_PIN_0#define DS18B20_PORT GPIOAvoid DS18B20_Init() { GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = DS18B20_PIN; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD; // 开漏输出 GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(DS18B20_PORT, &GPIO_InitStruct); DS18B20_Reset(); // 复位传感器}
2. 温度数据滤波
- 移动平均滤波(适用于模拟传感器):
c#define TEMP_WINDOW_SIZE 10float temp_buffer[TEMP_WINDOW_SIZE];uint8_t temp_index = 0;float Filtered_Temp() { float sum = 0; for (int i = 0; i < TEMP_WINDOW_SIZE; i++) { sum += temp_buffer[i]; } return sum / TEMP_WINDOW_SIZE;}// 在ADC采样中断中更新缓冲区void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) { uint32_t adc_value = HAL_ADC_GetValue(hadc); float raw_temp = NTC_To_Temp(adc_value); // 通过查表法或公式转换 temp_buffer[temp_index] = raw_temp; temp_index = (temp_index + 1) % TEMP_WINDOW_SIZE;}
- 中值滤波(适用于数字传感器,抑制脉冲干扰):
c#define MEDIAN_WINDOW_SIZE 5float temp_median_buffer[MEDIAN_WINDOW_SIZE];uint8_t median_index = 0;float Median_Filter() { float sorted[MEDIAN_WINDOW_SIZE]; memcpy(sorted, temp_median_buffer, sizeof(temp_median_buffer)); // 简单排序(实际可用快速排序) for (int i = 0; i < MEDIAN_WINDOW_SIZE - 1; i++) { for (int j = i + 1; j < MEDIAN_WINDOW_SIZE; j++) { if (sorted[i] > sorted[j]) { float temp = sorted[i]; sorted[i] = sorted[j]; sorted[j] = temp; } } } return sorted[MEDIAN_WINDOW_SIZE / 2];}
3. 温度校准与补偿
三、过温保护策略设计
1. 分级保护阈值
2. 软件实现逻辑
c#define TEMP_WARNING_THRESHOLD 70.0 // 预警阈值(℃)#define TEMP_PROTECT_THRESHOLD 85.0 // 保护阈值(℃)#define TEMP_EMERGENCY_THRESHOLD 100.0 // 紧急保护阈值(℃)#define HYSTERESIS 5.0 // 迟滞量(℃)typedef enum { TEMP_STATE_NORMAL, TEMP_STATE_WARNING, TEMP_STATE_PROTECT, TEMP_STATE_EMERGENCY} TempState_t;TempState_t current_temp_state = TEMP_STATE_NORMAL;void Check_Temperature(float filtered_temp) { switch (current_temp_state) { case TEMP_STATE_NORMAL: if (filtered_temp >= TEMP_WARNING_THRESHOLD) { current_temp_state = TEMP_STATE_WARNING; Limit_Output_Power(50); // 限流50% } break; case TEMP_STATE_WARNING: if (filtered_temp >= TEMP_PROTECT_THRESHOLD) { current_temp_state = TEMP_STATE_PROTECT; Shutdown_Output(); // 关断输出 Trigger_Alarm(); // 触发报警 } else if (filtered_temp < (TEMP_WARNING_THRESHOLD - HYSTERESIS)) { current_temp_state = TEMP_STATE_NORMAL; Remove_Power_Limit(); // 恢复功率 } break; case TEMP_STATE_PROTECT: if (filtered_temp >= TEMP_EMERGENCY_THRESHOLD) { current_temp_state = TEMP_STATE_EMERGENCY; Lock_System(); // 锁定系统,需手动复位 } else if (filtered_temp < (TEMP_PROTECT_THRESHOLD - HYSTERESIS)) { current_temp_state = TEMP_STATE_NORMAL; // 需手动确认后恢复输出(避免反复触发) } break; case TEMP_STATE_EMERGENCY: // 仅在温度降至安全值且手动复位后退出 if (filtered_temp < 50.0 && Manual_Reset_Pressed()) { current_temp_state = TEMP_STATE_NORMAL; Unlock_System(); } break; }}
四、抗干扰与容错设计
- 传感器故障检测
- 开路检测:若数字传感器无响应或模拟传感器ADC值超出合理范围(如接近0或4095),报错并切换至备用传感器(如有)。
- 一致性校验:若多个传感器温度差值超过阈值(如ΔT>10℃),报错并取中间值或安全侧值(如最高值)。
- 软件看门狗
- 监控温度采样任务执行周期,若超时(如>100ms)则复位系统,防止软件死锁导致保护失效。
- 硬件看门狗
- 独立于MCU的硬件看门狗(如MAX6745),在软件崩溃时强制关断功率器件,确保安全。
五、实际应用案例:新能源汽车充电桩
- 场景需求
- 充电模块在满载运行时(如60kW),功率器件温度可能升至90℃,需在85℃时降额,95℃时关断。
- 双向模式下(充电/放电),需分别设置充电和放电的温度保护阈值(如放电模式阈值可略高)。
- 软件实现优化
- 动态阈值调整:根据环境温度动态调整保护阈值(如高温环境下降低阈值,提前保护)。
- 与BMS通信:通过CAN总线获取电池温度,若电池温度过高,协同降低充电功率或关断输出。
- 日志记录:记录过温事件时间、温度值及保护动作,便于故障分析。
六、常见问题与解决方案