发作品签到
专业版

便携涵道小风扇,4档位,12V供电,支持 PD诱骗 +DC直插

工程标签

2.5k
0
0
50

简介

便携涵道小风扇,4档位,12V供电,支持 PD诱骗 +DC直插

简介:便携涵道小风扇,4档位,12V供电,支持 PD诱骗 +DC直插

开源协议

GPL 3.0

(未经作者授权,禁止转载)
创建时间:2024-06-12 10:44:57更新时间:2025-08-25 14:54:29

描述

 

风扇使用的是:GFC0412DS,40*40的尺寸,淘宝价格 如下:我的是设备上拆下来的

使用了8脚STC8G1K08A-36I-SOP8  单片机进行控制 ,

按键逻辑

0档位:停转(初始档位)
1档位,慢速
2档位 中速
3档位 高速
4档位 最快

指示灯

LED指示灯 单片机上电后,亮1秒就灭
然后 LED灯随着 挡位提升,闪烁速度也提升,直至最高挡位一直亮

固件见附件

打板的话 选择 78M05的版本

板子背面 开了阻焊层,可以堆锡增大电流

源码 参考:

#include

// 定义端口
#define FAN_POWER_PIN P32
#define LED_PIN       P33
#define PWM_PIN       P54
#define SWITCH_PIN    P55

// 定义PWM频率
#define PWM_FREQUENCY 25000

// 档位定义
#define GEAR_0 0
#define GEAR_1 1
#define GEAR_2 2
#define GEAR_3 3
#define GEAR_4 4

// 定义档位对应的占空比
unsigned char duty_cycle[] = {0, 51, 102, 153, 255}; // 对应0%, 20%, 40%, 60%, 100%

unsigned char current_gear = GEAR_0; // 初始档位为0

void delay_ms(unsigned int ms);
void init_ports(void);
void init_pwm(void);
void set_pwm_duty(unsigned char duty);
void switch_gear(void);

void main(void) {
    init_ports();
    init_pwm();
    FAN_POWER_PIN = 0; // 初始关闭风扇电源
    
    // 上电后LED闪烁1秒
    LED_PIN = 1;
    delay_ms(500);
    LED_PIN = 0;
    delay_ms(500);
    LED_PIN = 1;
    delay_ms(500);
    LED_PIN = 0;

    while(1) {
        if (SWITCH_PIN == 0) { // 检测微动开关按下
            delay_ms(20); // 消抖
            if (SWITCH_PIN == 0) {
                switch_gear();
                while (SWITCH_PIN == 0); // 等待按键释放
            }
        }
        if (current_gear == GEAR_0) {
            FAN_POWER_PIN = 0;
            LED_PIN = 0;
        } else {
            FAN_POWER_PIN = 1;
            set_pwm_duty(duty_cycle[current_gear]);
            if (current_gear == GEAR_4) {
                LED_PIN = 1; // 最高档位时LED常亮
            } else {
                LED_PIN = !LED_PIN; // 其他档位LED闪烁
                delay_ms(1000 / current_gear); // 档位越高闪烁越快
            }
        }
    }
}

void delay_ms(unsigned int ms) {
    unsigned int i, j;
    for (i = ms; i > 0; i--) {
        for (j = 112; j > 0; j--);
    }
}

void init_ports(void) {
    P3M1 = 0x00;
    P3M0 = 0xFF;
    P5M1 = 0x00;
    P5M0 = 0x30;
}

void init_pwm(void) {
    // 配置PWM模块,设置频率为25kHz
    // 假设系统时钟为24MHz
    PCA_PWM0 = 0x00; // 清除PCA寄存器
    PCA_PWM1 = 0x00; // 清除PCA寄存器
    CMOD = 0x02; // 设置PCA计数器工作时钟源为系统时钟/2
    CL = 0;      // 清除计数器
    CH = 0;      // 清除计数器
    CCAP0L = 0x00; // 设置初始占空比为0%
    CCAP0H = 0x00; // 设置初始占空比为0%
    CCAPM0 = 0x42; // PCA模块0的工作模式设置为PWM模式
    CR = 1;      // 启动PCA计数器
}

void set_pwm_duty(unsigned char duty) {
    CCAP0L = duty; // 设置占空比低字节
    CCAP0H = duty; // 设置占空比高字节
}

void switch_gear(void) {
    current_gear++;
    if (current_gear > GEAR_4) {
        current_gear = GEAR_0;
    }
}



红、橙 是正极,

黑、灰 是负极,

黄、绿 是调速线

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
1
fan1.hex
53
2
2fc04c3413f8707c6e0f04f47ecdb3cd.mp4
21
3
fan工程文件包含源码.rar
81
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

评论

全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航