generated from hulk/gd32f4xx_template_cmake_vscode
Heater PID closed-loop on PB12 (HEAT_EN) with safety protections
This commit is contained in:
@@ -143,6 +143,21 @@ void usart1_irq_handler(void);
|
||||
#define PWR_HOLD_PORT GPIOA
|
||||
#define PWR_HOLD_PIN GPIO_PIN_11
|
||||
|
||||
/* >>>>>>>>>>>>>>>>>>>>[HEATER OUTPUT(加热驱动 PB12=HEAT_EN)]<<<<<<<<<<<<<<<<<<<< */
|
||||
/* PB12:高 = 加热开,低 = 关(2N7002K 电平转换 → VBE2412 PMOS → 24V 加热回路)。
|
||||
开关频率限制:慢 PWM 周期 1s、占空比 10% 步进——脉宽恒 >=100ms,开关频率恒 1Hz。 */
|
||||
#define HEATER_EN_RCU RCU_GPIOB
|
||||
#define HEATER_EN_PORT GPIOB
|
||||
#define HEATER_EN_PIN GPIO_PIN_12
|
||||
#define HEATER_PWM_PERIOD_MS 1000U /* PWM 载波周期(1s,恒 1Hz 开关频率) */
|
||||
#define HEATER_PWM_STEP_PCT 10U /* 占空比步进(每档脉宽 = 100ms) */
|
||||
#define HEATER_PID_PERIOD_MS 500U /* PID 计算周期 */
|
||||
#define HEATER_PID_KP 8.0f /* PID 参数:初值,需上板实测整定 */
|
||||
#define HEATER_PID_KI 0.05f
|
||||
#define HEATER_PID_KD 0.0f /* NTC 噪声对微分放大,先禁用 */
|
||||
#define HEATER_OVERTEMP_C 150.0f /* 过温强制关断阈值(滞回保护) */
|
||||
#define HEATER_OVERTEMP_HYST 5.0f /* 过温恢复滞回 */
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
#define DEBUG_UART USART1
|
||||
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
#ifndef HEAT_H
|
||||
#define HEAT_H
|
||||
|
||||
#include "gd32f4xx.h"
|
||||
#include "board_config.h"
|
||||
#include <stdbool.h>
|
||||
|
||||
/**
|
||||
* @brief 初始化加热输出(PB12 推挽输出低 = 加热关)。
|
||||
*/
|
||||
void heat_init(void);
|
||||
|
||||
/**
|
||||
* @brief 加热控制任务(在主循环中周期调用,主循环周期 10ms)。
|
||||
* @details 内部包含:慢 PWM 载波(1s 周期、10% 步进,脉宽恒 >=100ms)、
|
||||
* PID 计算(500ms 周期,输出量化到占空档位)、安全保护
|
||||
* (传感器故障强制关断 / 过温滞回保护 / 未使能强制关断)。
|
||||
*/
|
||||
void heat_task(void);
|
||||
|
||||
/**
|
||||
* @brief 使能/关闭加热(对应 M3S1/M3S0)。
|
||||
* @note 关闭时立即输出低并复位 PID 积分。
|
||||
*/
|
||||
void heat_set_enable(bool on);
|
||||
|
||||
/**
|
||||
* @brief 查询加热使能状态。
|
||||
*/
|
||||
bool heat_get_enable(void);
|
||||
|
||||
/**
|
||||
* @brief 设定目标温度(摄氏度,对应 M4S)。
|
||||
*/
|
||||
void heat_set_target(float temp_c);
|
||||
|
||||
/**
|
||||
* @brief 查询目标温度(摄氏度)。
|
||||
*/
|
||||
float heat_get_target(void);
|
||||
|
||||
/**
|
||||
* @brief 查询当前量化占空比档位(0~10,对应 0~100%,10% 步进)。
|
||||
*/
|
||||
uint8_t heat_get_duty(void);
|
||||
|
||||
#endif // HEAT_H
|
||||
Reference in New Issue
Block a user