
617 - 软硬件全开源彩屏快充桌充
简介
桌面彩屏快速充电站-基于3个SW3526S + STM32G030实现
简介:桌面彩屏快速充电站-基于3个SW3526S + STM32G030实现开源协议
:CC BY-NC-SA 4.0
(未经作者授权,禁止转载)描述
LoveFinder617-3LaneSW3526 — 三路独立快充功率检测站
> 实时显示 · 多协议兼容 · 独立三通道快充输出
📋 项目简介
这是一个基于 SW3526S 快充芯片的开源硬件项目,实现了 三路完全独立 的快速充电输出通道(1×USB-A + 2×USB Type-C),并配备 0.96 寸 ST7735 彩屏 实时显示各通道的电压、电流、功率及快充协议状态。主控采用 STM32G030F6P6(Cortex-M0+, 32KB Flash),代码以 C++17 编写,工程基于 STM32CubeMX + MDK-ARM (Keil) 开发。
无论是作为桌面快充测试工具,还是嵌入式快充方案的学习参考,本项目都能为你提供完整且可复现的实现。
✨ 功能特性
⚡ 三路独立快充
| 通道 | 接口类型 | I2C 连接 | 说明 |
|---|---|---|---|
| A1 | USB-A | I2C1 直连 | TYPE-A 快充输出 |
| C1 | USB Type-C #1 | I2C2 + MUX LOW | 与 C2 分时共享 I2C2 总线 |
| C2 | USB Type-C #2 | I2C2 + MUX HIGH | 与 C1 分时共享 I2C2 总线 |
三颗 SW3526S 芯片完全独立工作,互不干扰,每路均可独立触发快充协议并输出最大功率。
🚀 超宽快充协议覆盖
每颗 SW3526S 集成了丰富的快充协议,通过 I2C 寄存器读取实时握手状态,开箱即支持:
| 协议 | 全称 | 典型输出 |
|---|---|---|
| PPS | USB PD Programmable Power Supply | 3.3~21V@3A |
| PD3.0 / PD2.0 | USB Power Delivery | 5V / 9V / 12V / 15V / 20V@3A |
| QC4+ / QC4 / QC3+ / QC2.0 | Qualcomm Quick Charge | 3.6~20V (200mV/Step) |
| AFC | Samsung Adaptive Fast Charging | 5V / 9V / 12V |
| FCP / SCP | Huawei Fast Charge / Super Charge | 5V / 9V / 12V / 10V@2A |
| PE2.0 / PE1.1 | MediaTek Pump Express | 5~20V (500mV/Step) |
| SFCP | Spreadtrum Fast Charge | 5V / 9V / 12V |
| BC1.2 | Battery Charging 1.2 | DCP 模式 / 苹果 2.4A / 三星 |
🖥️ 实时彩屏监控
0.96 寸 ST7735 彩屏(160×80)通过 SPI 驱动,采用分段局部刷新机制实现无闪烁实时显示:
┌─────────────────────────────────────────────┐
│ 23.50V 28'C 123.4W ← VIN · 温度 · 总功率 │
├──────┬──────────────┬──────────────┬─────────┤
│ │ A1 │ C1 │ C2 │
│ │ QC3 │ PPS │ PD FX │ ← 快充协议/通道名称 (圆角背景)
│ │ 12.1V │ 20.0V │ 5.0V │ ← 输出电压 + 进度条
│ │ 1.50A │ 2.95A │ 0.00A │ ← 输出电流 + 进度条 (空载动画)
└──────┴──────────────┴──────────────┴─────────┘
- 第一排:输入电压(红色)| 工作温度(蓝→绿→黄→红色阶)| 总功率(白色)
- 第二排:通道名称 / 快充协议名称(绿色,圆角底色背景),空载时显示
[A1]/[C1]/[C2] - 第三排:输出电压(青色),数值 + 柱状进度条(最大 21V)
- 第四排:输出电流(黄色),数值 + 柱状进度条(最大 3.5A)
- 进度条空载动画:无输出时以来回滑动效果指示通道待机中
🔌 电气参数
| 参数 | 最小值 | 推荐值 | 最大值 | 单位 |
|---|---|---|---|---|
| 输入电压 | 6 | 24 | 35 | V |
| 输入电流(推荐) | — | ≥10 | — | A |
| 单路输出电流 | — | — | 3.5 | A |
| 单路最高输出电压 | — | — | 21 (PPS) | V |
| 单路最大功率 | — | — | ≈65 | W |
| 降压效率 | — | >94% | — | (@12V→5V/3A) |
| 工作温度 | -10 | — | +60 | °C |
> ⚠️ 供电要求:模块需要 高压直流输入(推荐 24V @ ≥10A 的 DC 电源适配器)方可正常运作。模块本身 无法直接接入 220V 市电,必须外接 DC 电源适配器。若低于 23V 输入可能无法触发全部快充协议的最高功率档位。
🧠 硬件架构
┌──────────────────────────────────────┐
│ DC Power (24V@10A+) │
└────────────┬─────────────────────────┘
│
┌─────────────┼──────────────┐
│ │ │
┌─────▼─────┐ ┌────▼────┐ ┌──────▼──────┐
│ SW3526 A1 │ │SW3526 C1│ │ SW3526 C2 │
│ (TYPE-A) │ │(TYPE-C) │ │ (TYPE-C) │
│ I2C1 直连 │ │I2C2+ MUX│ │ I2C2 + MUX │
│ │ │ LOW │ │ HIGH │
└─────┬─────┘ └────┬────┘ └──────┬──────┘
│ │ │
└────────────┼───────────────┘
│ I2C
┌────────────▼────────────┐
│ STM32G030F6P6 │
│ (Cortex-M0+, 64MHz) │
│ I2C1/I2C2/SPI/ADC │
└─────┬──────┬──────┬─────┘
│ │ │
SPI │ ADC│ UART│
│ │ │
┌───────────▼┐ ┌──▼──┐ ┌──▼────────┐
│ ST7735 │ │ NTC │ │ UART │
│ 0.96" LCD │ │10K │ │ Debug Out │
│ (160×80) │ │103AT│ │ (115200) │
└────────────┘ └─────┘ └───────────┘
关键器件
- SW3526S × 3 — 智融科技 (iSmartWare) 高集成度多快充协议充电芯片,QFN-24 (4×4mm) 封装
- 内置 3.5A 高效率同步降压变换器
- 支持 CC/CV 模式 + 线损补偿
- 完善的保护机制:输入过压/欠压、输出过流/短路、过温保护
- STM32G030F6P6 — ST 主流级 Cortex-M0+ 微控制器,TSSOP-20 封装
- 64MHz 主频,32KB Flash,8KB SRAM
- 2×I2C、1×SPI、1×ADC、多路 USART
- ST7735 0.96" — 128×160 像素 65K 色彩屏 SPI 接口(驱动 IC 焊接款,非排针模块)
- NTC 10K 103AT (B=3950) — NTC 热敏电阻用于工作温度监测,ADC+DMA 非阻塞采样。探头需使用 导热双面胶 粘贴到 PCB 背面中央,以准确检测板载工作温度
硬件设计要点
| 特性 | 说明 |
|---|---|
| Type-C 接口 | SW3526S 内置 Type-C 控制器逻辑,CC 引脚广播 3A 电流能力,支持 DFP/Source 角色,自动检测插入与移除 |
| Type-A 接口 | CC1 对地接 5.1K 电阻即可配置为 A 口输出模式 |
| I2C 地址与 MUX | 三颗芯片使用相同 I2C 地址 (0x3C),TYPE-A 独占 I2C1,两路 TYPE-C 通过 GPIO 控制 MUX 分时访问 I2C2:MUX_SELECT=0 选通 C1,MUX_SELECT=1 选通 C2 |
| SPI 驱动彩屏 | ST7735 使用 SPI1 接口驱动,PA5 (SCK) / PA7 (MOSI),CS/DC/Reset 分别控制 |
| 温度监测 | NTC 分压后接 ADC1 (PA1),DMA 连续采样不阻塞主循环 |
| UART 调试 | 通过 USART2 以 115200bps 输出结构化 JSON 风格数据帧,方便上位机采集分析 |
| 供电拓扑 | 24V 输入直供 SW3526S 三颗芯片(内置 Buck DCDC 降压至各通道输出),主控与屏幕通过板载 LDO 降压至 3.3V |
💻 软件架构
开发环境
- IDE:MDK-ARM (Keil μVision) v5
- MCU 配置:STM32CubeMX (STM32G0xx HAL)
- 编译器:Arm Compiler v6 (AC6) / ArmCC
- 语言标准:C++17(自定义库)/ C99(HAL 库)
- 调试器:CMSIS-DAP / ST-Link
工程结构
LoveFinder617-3LaneSW3526/
├── Core/ # STM32CubeMX 生成代码
│ ├── Inc/ # 头文件
│ │ ├── main.h
│ │ ├── stm32g0xx_hal_conf.h
│ │ ├── stm32g0xx_it.h
│ │ ├── gpio.h / i2c.h / spi.h / adc.h / tim.h / usart.h / dma.h
│ └── Src/ # 源文件
│ ├── main.cpp # ⭐ 主程序入口与应用逻辑
│ ├── stm32g0xx_it.c # 中断服务
│ ├── stm32g0xx_hal_msp.c # HAL 底层初始化
│ └── system_stm32g0xx.c
│
├── Drivers/
│ ├── CMSIS/ # ARM CMSIS 核心与 DSP 库
│ └── STM32G0xx_HAL_Driver/ # STM32G0 HAL 外设驱动
│
├── LoveFinderLib/ # ⭐ 自定义 C++17 驱动库
│ ├── SW3526/
│ │ ├── SW3526.hpp # SW3526 控制器驱动 (含Manager多设备管理)
│ │ └── SW3526.cpp
│ ├── ST7735/
│ │ ├── ST7735.hpp # ST7735 彩屏驱动 (DMA优化)
│ │ ├── ST7735.cpp
│ │ ├── fonts.hpp / fonts.c # 自定义字库 (7×10, 11×18)
│ │ └── icons.hpp / icons.c # 图标资源
│ ├── NTC_ADC/
│ │ ├── NTC_ADC.hpp # NTC 温度传感器驱动
│ │ └── NTC_ADC.cpp
│ └── UART/
│ ├── UART.hpp # UART 调试输出 (printf风格)
│ └── UART.cpp
│
├── MDK-ARM/ # Keil μVision 工程文件
│ ├── LoveFinder617-3LaneSW3526.uvprojx
│ └── LoveFinder617-3LaneSW3526/ # 编译输出
│
├── refProj/ # 参考工程 (STM32F405, 早期版本)
├── refDoc/ # 参考文档 (ST7735 驱动参考)
├── tools/ # 辅助脚本
│ ├── analyze_map.py # Map 文件分析
│ ├── analyze_memory.py # 内存用量分析
│ ├── generate_fonts.py # 字库生成工具
│ └── keil_optimization_guide.py # Keil 优化指南
│
└── README.md # 本文件
核心逻辑流程
main()
├── HAL_Init() / SystemClock_Config()
├── MX_GPIO_Init()... # HAL 外设初始化
├── initDevices() # 自定义设备初始化
│ ├── UART 初始化
│ ├── I2C MUX 使能
│ ├── NTC 温度传感器初始化 (ADC+DMA)
│ ├── SW3526 × 3 初始化
│ │ ├── A1 → I2C1 直连
│ │ ├── C1 → I2C2 + MUX LOW
│ │ └── C2 → I2C2 + MUX HIGH
│ ├── SW3526_Manager 多设备注册
│ └── ST7735 彩屏初始化
│
└── while(1) # 主循环
├── updateDisplay() # 无闪烁分段刷新屏幕
│ ├── 输入电压 (变化时刷新)
│ ├── 工作温度 (变化时刷新,颜色分级)
│ ├── 总功率 (变化时刷新)
│ ├── 快充协议协议 (变化时刷新,圆角背景)
│ ├── 输出电压 + 进度条 (变化时刷新)
│ ├── 输出电流 + 进度条 (变化时刷新)
│ └── 空载动画进度条 (每帧更新,来回滑动)
│
├── processPowerData() # 数据处理
│
├── 计时 (TIM17 1kHz)
└── HAL_Delay(100) # 100ms 刷新周期
软件设计与决策
| 决策 | 方案 | 理由 |
|---|---|---|
| 多芯片 I2C 访问 | MUX GPIO 分时选通 | 三颗芯片 I2C 地址相同,无法同时挂载同一总线;A1 独占 I2C1 保证无冲突,C1/C2 通过 MUX 共享 I2C2 |
| C++17 编写驱动 | 类封装、命名空间、std::optional、std::array、lambda | 相比纯 C 代码更易维护和扩展,利用 RAII 确保资源安全 |
| 无闪烁刷新 | 分段局部刷新 + 变化检测 | 仅在有数据变化时重绘对应区域,帧率稳定且不闪烁 |
| 进度条空载动画 | 来回滑动滑块(ping-pong 0→30→0) | 视觉上指示通道存活待机中,避免死板显示 0 |
| 温度颜色分级 | 蓝(<10°C) → 绿(10-30) → 黄(30-50) → 红(>50) | 直观的温度预警视觉反馈 |
| UART 调试输出 | 机器可读字段帧,每秒一次 | 便于上位机/串口工具采集和日志记录 |
> 详细 BOM 及原理图请参考工程源文件(.ioc / 原理图 PDF)。
🚧 当前状态与 roadmap
- ✅ 硬件设计完成 — 三路 SW3526S + STM32G030 + ST7735 验证通过
- ✅ 固件核心功能完成 — 三通道独立读取、协议识别、彩屏刷新
- ✅ 预览视频已发布 — B站播放
- 🚧 讲解视频 — 制作中,敬请期待
🔗 参考资源
| 资源 | 链接 |
|---|---|
| 📺 预览视频 | Bilibili: BV16UT369EBX |
| 📦 外壳购买 | 淘宝:604038549945 |
| 🔌 前置 USB-A 母座 | 淘宝:1059904825737 |
| 📄 STM32G030 数据手册 | ST官网 |
| 🛠️ STM32CubeMX | ST官网 |
| 🛠️ MDK-ARM (Keil) | Arm Keil |
📜 许可
本项目以 CC BY-NC-SA 4.0 协议发布 — 即 署名-非商业使用-相同方式共享 4.0 国际。
您可以自由地 共享(复制、发行)和 演绎(修改、创作衍生作品),但必须:
- 署名(BY) — 给予原作者署名
- 非商业使用(NC) — 不得将本作品用于商业目的
- 相同方式共享(SA) — 衍生作品须采用相同许可协议发布
完整协议文本请见 Creative Commons。
Made with ❤️ by LoveFinder
如果项目对你有所帮助,欢迎在 GitHub 上 ⭐star 或在 B站三连支持!
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。










