/* * blowers_pwm_action.c * * Created on: Apr 9, 2026 * Author: SHI */ #include "blowers_pwm_action.h" #include "tim.h" // 用于 HAL_TIM_PWM_Start 等 static void Blowers_On_Do(transition_t *p_this); static void Blowers_Off_Do(transition_t *p_this); static void setBlowersSpeed(uint8_t percent); transition_t current_blowers_state; transition_state_t blowers_on_state = {NULL, Blowers_On_Do, NULL}; transition_state_t blowers_off_state= {NULL, Blowers_Off_Do,NULL}; static void Blowers_On_Do(transition_t *p_this) { setBlowersSpeed(GV.speed_blowers_pwm); } static void Blowers_Off_Do(transition_t *p_this) { setBlowersSpeed(0); } // 风机转速百分比控制 (0~100) // 0%: 停止, 10%: 最低速, 90%: 最高速 static void setBlowersSpeed(uint8_t percent) { uint32_t pulse; if (percent <= 0) { pulse = 0; // 停止 (占空比 <10%) } else if (percent < 10) { pulse = 100; // 最低速 (占空比 10%) } else if (percent > 90) { pulse = 900; // 最高速 (占空比 90%) } else { pulse = 100 + (percent - 10) * 10;// 线性映射 10%~90% → 100~900 } __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, pulse); } // 风机控制初始化 (在 初始化 中调用) void blowers_Control_Init(void) { // 启动 TIM2 PWM 输出 HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); // 初始设置为停止 setBlowersSpeed(0); }