/****************************************************************************** * @file app_fan.c * @brief CBR3 风扇档位实现 * @author cyWu <1917507415@qq.com> * @date 2026.08.31 * @version V1.1.0,删除 app_fan_run(P0 无动作的空占位,从未真正做过软爬坡) ******************************************************************************/ #include "app_fan.h" #include "bsp_hw.h" #include "board_pin.h" #define LOG_TAG_CONST APP #define LOG_TAG "[APP_FAN]" #define LOG_INFO_ENABLE #include "debug.h" static uint8_t s_gear; /** * @brief 初始化风扇(档位 0,PWM 关) * @return 无 */ void app_fan_init(void) { #if !BOARD_FAN_ENABLE log_info("fan disabled\n"); return; #endif s_gear = 0; bsp_fan_set_duty(BOARD_FAN_DUTY_GEAR0); log_info("fan init gear=0\n"); } /** * @brief 设置档位并立即生效(P0 无软爬坡) * @param gear 0=关,1=50%,2=75%,3=100%;>3 钳位到 3 * @return 无 */ void app_fan_set_gear(uint8_t gear) { #if !BOARD_FAN_ENABLE (void)gear; s_gear = 0; return; #endif static const uint16_t duty_tbl[4] = { BOARD_FAN_DUTY_GEAR0, BOARD_FAN_DUTY_GEAR1, BOARD_FAN_DUTY_GEAR2, BOARD_FAN_DUTY_GEAR3 }; if (gear > 3) { gear = 3; } if (gear == s_gear) { return; } s_gear = gear; bsp_fan_set_duty(duty_tbl[gear]); log_info("fan gear=%d duty=%u/10000\n", gear, (unsigned)duty_tbl[gear]); } /** * @brief 查询当前真实档位(DP2 必须等于它,通风停段时为 0) * @return 0~3 */ uint8_t app_fan_get_gear(void) { return s_gear; }