3S1P 21700移动电源的主要源程序与资料 立创开源平台链接:基于SW6306的3S1P 21700多协议快充移动电源
- 支持所有端口的插入检测,A口无负载时延迟一段时间关断
- 定时读取SW6306信息并通过串口以115200波特率打印(你需要拆机看到)
- 空闲状态下10s单片机会自动休眠,但在LED开启或充放电状态下则保持开启
- 休眠状态按下数码管会亮起5s,若无负载接入自动关闭
- 插入充电器/负载时数码管会自动亮起,并保持开启;但单A口负载低于50mA时一段时间后会自动关闭
- 电池亏电时数码管显示0%,并不断闪烁;出现异常(例如两个C口连接接在一起)数码管显示188%并闪烁一段时间后关闭
- 放电状态,且LED照明未激活时长按按键,可以强制关闭输出并使数码管关闭
- 数码管关闭后持续按键越15s,可以触发单片机复位,此时数码管重新亮起。该功能可用于SW6306出现异常且不便打开外壳时重新进行初始化
- 任何状态下快速双击(按下-松开-按下-松开)可以开关LED照明
- LED照明打开时长按可以调光(调亮/调暗),松开按键再次长按可以更换调光方向;单击不起作用
- LED照明打开时长按关闭输出与超长按复位功能不生效,需要先双击退出LED照明模式
- 为了使用SW6306片上自带库仑计统计电量,LED打开时需要使能其某一端口的输出。若已经连接端口则无特殊变化,无输出时会启动A口(小电流关闭不起作用)
- 若已经在无端口接入时打开LED,此时在C口插入设备会重复断联几次,但最后一般可以保证快充
- 尽量不要在开启LED时使用线缆连接移动电源的多个端口,LED关闭时这样做会无法输出,但不会损坏
相对原版芯片解锁了20V QC2协议与11V5A PPS
考虑到三星50G的电流能力将充放电功率分别限制在 60 / 80 W
若使用高性能电池(如新能安JP40 JP50等全极耳电池)可在sw6306.h文件中修改最大功率
多任务调度基于Protothread,进行了部分封装
合宙 Air001(换皮PUYA PY32F002AF15P,利用了一些手册上未提及的配置)
接线参考:
SW6306 AIR001 DAPLINK
TMOD/I2C -> GND -> GND
PISET/SDA -> PF0
POSET/SCL -> PF1
NMOD/IRQ -> PA6
PA2(TX) -> RX
PA3(RX) -> TX
PA13 -> SWDIO
PA14 -> SWCLK
PF2/NRST -> RST
电池:三串21700
- ARM KEIL 礦ision5 V5.33
- ARM Compiler V6.24
- 软件包:Puya.PY32F0xx_DFP.1.1.0.pack
- PY32F0xx LL库
Project.uvprojx所在根目录:
- main.c:各个任务的主体部分
- hardware_config.h:系统时钟与硬件连接宏定义,供Drivers内的各bsp文件使用
- software_config.h:波特率与软件时基宏定义,供main.c使用
- py32f0xx_it.c:Systick中断中自增系统时基
Drivers(包括所属目录):
- SW6306.c .h:SW6306库本体,提供各种操作方法 (更改电池参数等重要配置请修改C文件中初始化部分)
- bsp_py32f030x6.c .h:BSP驱动总领文件,负责将所有BSP驱动文件提供的初始化方法打包为SysInit()函数
- py32f0xx_bsp_exti.c .h:外部中断文件,负责初始化IRQ与按键的中断
- py32f0xx_bsp_gpio.c .h:GPIO初始化
- py32f0xx_bsp_i2c.c .h:I2C库,提供了中断模式下I2C外设的异步读写
- py32f0xx_bsp_tim.c .h:定时器与PWM通道初始化,提供了调光函数的具体实现
- py32f0xx_bsp_pwr.c .h:睡眠与低功耗特性初始化
- py32f0xx_bsp_rcc.c .h:时钟系统与Systick初始化
- py32f0xx_bsp_usart.c .h:USART库,提供了中断方式实现的UART带缓冲区收发
- 剩余为PY32 LL库文件
CoroOS(包括所属目录):
- coroOS.h:ProtoThread库的封装
- pt.h:ProtoThread库本体
- lc.h:C语言switch实现函数可重入的方法
方法一:直接使用对应或更高的版本打开Project.uvprojx,F7编译+F8下载
方法二:在Objects文件夹内找到Project.hex,使用下载器对应的软件打开下载
建议使用PW-Link,我的自制CH552 DAPLink烧录几乎无法成功
实在不行可以使用PuyaISPTool进行串口下载
-
未实现SW6306的异常状态处理,仅仅是重新复位初始化
-
使用一年后发现以下问题:
-
自带线脱落(可以通过根部套管后穿加强筋并焊接到面板上解决)
-
LED损坏,压降异常升高导致SY7203进入间歇工作模式,无法调光(通过延时启动修复了?)