eefocus_4249710 发表于 2026-7-8 16:53:03

硬件分享:低成本智能蓝牙风扇方案,CK6869D单芯片替代蓝牙+双MCU架构

**客户的需求很简单:蓝牙播歌** + 风扇调速 + 电量显示 + 充电唤醒。市面上大部分蓝牙风扇的方案是:蓝牙芯片负责音频,另外加一颗单片机控制风扇电机。

**这次我们用**CK6969D 直接一颗芯片搞定,蓝牙 + 风扇 PWM + 升压控制 + ADC 采样 + 电量显示全部集成,省去额外搭配 MCU 的环节。

## **核心难点**

1. 动态升压控制:PWM 闭环调压,划分 5 个档位,对应输出 5V~10.8V 电压,电压输出状态稳定,不会因为电机负载发生变化而出现偏移。
2. 电量显示 0~100%:做好信号滤波处理后,电量数值显示平稳,不会出现跳动现象,设备开关机前后,电量数值也不会产生明显变动。
3. 三路独立唤醒:拨动开关唤醒蓝牙、按键唤醒风扇、充电器插入唤醒显示,三类唤醒逻辑相互独立,运行过程不会互相干扰。

## **核心思路**

CK6969D自带硬件 Timer PWM 和 ADC 外设,硬件资源可以满足风扇的升压闭环控制需求,无需额外外接单片机。

## **一、硬件引脚分配**

!(https://file1.elecfans.com/web3/M00/64/6F/wKgZPGoo2cKANHhpAAKRt6ufFes700.png)

##

升压电路工作原理:PA3 引脚输出 200kHz 的 PWM 信号驱动 MOS 管,MOS 管配合升压电感完成储能、释能动作,最终输出 5V~10.8V 可调电压。PA0 引脚外接分压电阻,对升压输出电压进行采样,将采样数据传输至 ADC,以此实现闭环控制。

## **二、风扇速度与升压电压**

风扇设置 5 档调速模式,不同档位对应不同的升压输出电压,相关参数定义如下:

#define FAN_LEVEL_OFF 0

#define FAN_LEVEL_1 20 // 低速

#define FAN_LEVEL_2 40 // 中低

#define FAN_LEVEL_3 60 // 中等

#define FAN_LEVEL_4 80 // 中高

#define FAN_LEVEL_5 100 // 高速

速度与升压电压映射公式:boost_mv = 5000 + (level - 20) * 5000 / 80档位对应电压参考:1 档 = 5.0V,2 档 = 6.25V,3 档 = 7.5V,4 档 = 8.75V,5 档 = 10.8V。

该映射参数经过多轮调试确定,电压偏低会出现电机无法启动的情况,电压偏高则会加剧电机发热,10.8V 为该款电机的适配上限电压。

升压输出电压通过分压电阻接入 PA0 引脚,分压参数定义:

#define VBST_DET_DIV 11 // 分压比 11:1

举例:升压电路输出 10V 电压时,PA0 引脚采样得到的电压约为 10000/11 ≈ 909mV。

## **三、升压闭环控制(核心)**

这是整套方案的关键部分,由 PWM 驱动升压电路,ADC 完成电压采样反馈,软件层面实现闭环 PID 调节。

### **PWM 配置代码**

static void fan_pwm_init(void){

```
timer_pwm_init(FAN_PWM_TIMER, 10000, 0, FAN_PWM_PIN, FAN_PWM_OUT_CH);

// 直接操作Timer寄存器,设置200kHz工作频率

FAN_PWM_TIMER- >PRD = FAN_PWM_PRD; // 周期=120

FAN_PWM_TIMER- >CNT = FAN_PWM_PRD;

FAN_PWM_TIMER- >PWM = 0;         // 初始占空比0

// 配置PWM输出引脚

gpio_output_channle(FAN_PWM_PIN, FAN_PWM_OUT_CH);}
```

### **升压状态机定义**

升压控制逻辑每 5ms 执行一次,划分三个工作状态:

enum {

```
FAN_BST_OFF = 0,       // 关闭状态

FAN_BST_ADJUSTING,    // 电压调节中,自动增减PWM占空比

FAN_BST_STABLE,       // 电压稳定状态};
```

### **控制逻辑说明**

1. 系统每 5ms 读取一次 ADC 采样数据;
2. 增加过压保护逻辑,连续检测到过压状态时,设备自动关机;
3. 根据当前选择的风扇档位,计算目标输出电压;
4. 执行闭环调节:采样电压低于目标值则增加 PWM 占空比,采样电压高于目标值则降低占空比,电压处于容差区间内时,保持参数不变。

### **采样抖动问题解决方案**

ADC 原始采样数值存在明显抖动,直接使用原始数据做闭环控制,会造成 PWM 参数频繁跳变,电机运行时产生异响。优化方案:采用 128 点滑动平均滤波,同时增加尖峰数据丢弃逻辑,采样数值超过 1500mV 判定为异常数据并直接过滤,剩余有效数据做移位平均处理。经过滤波后,采样波形更加平稳,PWM 参数不再频繁变化。

## **四、风扇独立控制**

风扇运行逻辑与蓝牙功能相互独立,相关底层定义如下:

// 风扇开关独立于蓝牙#define FAN_SW_ON() do { \

```
gpio_set_direction(FAN_SW_PIN, 0); \

gpio_set_output_value(FAN_SW_PIN, 1); \} while(0)
```

#define FAN_SW_OFF() do { \

```
gpio_set_direction(FAN_SW_PIN, 0); \

gpio_set_output_value(FAN_SW_PIN, 0); \} while(0)
```

PA2 引脚负责控制风扇电源通断,即便蓝牙模块进入 idle 休眠模式,PA2 依旧可以输出高电平,维持风扇正常运转。

### **档位循环切换代码**

通过按键实现档位循环切换,切换逻辑为:关闭→1 档→2 档→3 档→4 档→5 档→关闭

void fan_ctrl_level_cycle(void){

```
static const u8 level_table[] = { 0, 20, 40, 60, 80, 100 };

for (int i = 0; i < 6; i++) {

    if (fan_ctrl.level < level_table) {

      fan_ctrl_set_level(level_table);

      return;

    }

}

fan_ctrl_off(); // 切换至最高档后再次按键,关闭风扇}
```

## **五、充电独立唤醒**

设备接入充电器时,需要自动唤醒芯片并展示充电状态,此过程无需启动蓝牙功能。引脚定义说明:

· PA4:充电检测引脚 (DC_DET)

· PB5:拨动开关检测引脚 (SW_DET)

工作逻辑:充电器插入后,引脚变为高电平,芯片完成唤醒,进入假开机模式,仅展示电量信息,蓝牙模块不启动;拨动开关拨至工作档位,设备完成真开机,蓝牙与风扇功能均可正常使用。

整套设计实现三类独立电源管理逻辑:

1. 拨动开关:控制蓝牙模块整体启停;
2. 实体按键:控制风扇档位切换;
3. 充电器插拔:控制充电显示功能的唤醒与休眠。

## **六、电量显示**

电池电压与电量百分比的对应关系如下表:

**电池电压电量占比**

3.30V 0%

3.50V 15%

3.60V 30%

3.70V 50%

3.80V 70%

3.90V 85%

4.20V 100%

设备支持数码管或 LED 指示灯展示电量。切换风扇档位时,数码管会临时展示当前档位,持续 2 秒后自动切换回电量显示界面,对应调用逻辑:

// 切换风扇档位时临时显示档位user_bat_disp_set_temp(TEMP_DISP_FAN_LEVEL, disp_level, 2);// 第三个参数代表2秒后恢复电量显示

## **七、平滑启动功能**

电机直接从静止切换至目标转速,会产生较大的启动电流冲击。本次方案增加平滑启动逻辑,优化使用体验。

#define FAN_SMOOTH_INTERVAL_MS 150 // 每150ms提升一个档位

static void fan_smooth_timer_cb(void *priv){

```
if (fan_ctrl.level < FAN_MAX_LEVEL) {

    fan_ctrl.level++;

}

// 档位达到上限后,关闭定时器

if (fan_ctrl.level >= FAN_MAX_LEVEL) {

    sys_timer_del(smooth_timer_id);

    smooth_timer_id = 0;

}}
```

void fan_ctrl_smooth_start(void){

```
fan_ctrl_on(FAN_LEVEL_1);

smooth_timer_id = sys_timer_add(NULL, fan_smooth_timer_cb, 150);}
```

工作逻辑:长按按键,风扇从 1 档开始启动,每 150ms 自动提升一个档位,松开按键后,风扇停留在当前档位运行,规避瞬间大电流带来的不良影响。

## **八、配置宏定义**

在板级配置文件中开启对应功能,参数配置如下:

#define USER_FAN_CTRL_EN 1 // 风扇控制功能使能

#define USER_BAT_DISP_EN 1 // 电量显示功能使能

#define USER_FAN_INDEPENDENT_EN 1 // 风扇独立工作模式使能

#define USER_SW_DC_WAKEUP_EN 1 // 拨动开关+充电唤醒功能


页: [1]
查看完整版本: 硬件分享:低成本智能蓝牙风扇方案,CK6869D单芯片替代蓝牙+双MCU架构