一、主要功能
- 使用COB灯丝+3D打印构建精妙的螺旋线条露营灯
- 选用IP5328P作为电源主控,支持双向PD快充,支持PPS档位输出
- 电池仓结构设计兼容26650(不可更换)或21700/18650(可更换)电池
- 使用WS2812灯组成顶部灯圈,可以实现照明灯+氛围灯的双重功能
- 通过STM32与5328进行iic通信,获取充放电数据,并通过BLE透传
- 通过BLE与手机APP连接,实现对"萤辉"的掌上控制(目前存在一定bug)
二、硬件说明
请注意,本项目一共有4片PCB,其中两片4层板,两片2层板(均在10*10以内可以免费打样)
硬件说明将会根据PCB编写,以便对电路设计进行理解,建议结合电路图进行阅读。
一、主板
主板是负责承载ip5328充电宝电路和stm32主控电路的基板,使用跳线和铜柱对外连接(下图中露出的PCB便是主板PCB)
1、单片机主控及外围电路
主控单片机采用STM32F411单片机,确保有足够的可扩展性
该部分电路主要包括作为主控的F411单片机、对外的调试接口(使用1.25mm间距插口,包括SWD调试接口+串口方便进行调试工作,同时引出了复位引脚方便远程操作)、外置FlashW25Q128芯片(但后来程序没有用上,可以不焊,如果以后升级程序可以用)、BT-11蓝牙BLE模组、蜂鸣器等电路
对于单片机与IP5328P连接的端口,均进行了串阻保护,而对于对外的接口,则额外增加了ESD防护器件(当然你也可以选择不焊接
单片机采用SWD下载,不使用DFU,因此BOOT0和BOOT1使用10K电阻接地,这样也可以在需要使用的时候进行短接上拉BOOT引脚
晶振部分可以不用焊接,用不上注:最早是用G0的,但是写WS2812的程序最早采用的是刷数组的方案,需要较大的内存容量,因此后来换成了F411来实现,不过在后来,采用了RGB转HSV的方案,HSV的方案不仅显示效果好而且占用空间小,但由于PCB此时已经基本定型,就没有换回G0,这样的缺点就是项目成本会相对较高,其他并没有什么问题
2、IP5328充放电管理
本项目采用IP5328P作为充放电管理部分的主控
IP5328P同时承担了充电宝以及升压电源的功能,充电宝功能用于对外输出以及给内置电池充电,而升压输出则通过与单片机的程序控制联动,为萤辉的灯丝以及WS2812进行大功率的供电,同时我也预留了VOUT2(目前没有使用),可以让大家根据自己的需求,扩展更多的功能电路
充放电管理芯片IP5328P的电路设计主要参考了官方的数据手册,我这边就不再赘述了
我这边22uF的电容选型为了耐压,选择了相对较贵的TDK家"HiFi电容",大家可以根据耐压需求换成别的电容型号
在主控板的背面(主控板与转接板的夹层中),需要焊接一颗固态电容
3、"灯"的控制
灯丝及WS2812的供电部分如下(包括灯丝的调光控制电路)
升压(BAT转5V)输出部分使用mos进行控制,mos管可以基于5328的基本控制逻辑进行控制,也可以使用单片机进行iic通信,操作寄存器进行控制
需要注意的是,5328具有快充输入输出功能,VMID总线电压最高为12V,因此在单片机的程序中,会通过寄存器读取,判断5328是否处于快充充电宝模式,此时会强制关闭MOS防止高压输入"灯"的部分,防止损坏PWM控制器与2812灯珠,但考虑到程序可能存在bug或程序跑飞等特殊情况,还增加了LP5300B6F过压保护芯片,保护后级电路安全(不得不吐槽一些LP5300B6F的引脚设计是真的很离谱,为什么6个引脚给了4个GND,输入输出只是给给了1个,这里的GND根本不走大电流啊,流通路径全在输入输出,只能怀疑是不是为了兼容别的什么芯片进行这样的设计了)
注:上图的"底部灯圈"这一路输出目前没有使用,只是我一开始挖的坑(本来还想在底部做个环形灯圈手电筒功能)
灯丝也可以直接使用主板进行测试,不需要其他PCB,建议在组装前进行测试防止反工
灯丝的实际亮灯效果测试:
4、单片机供电
对于单片机与蓝牙部分供电是通过RT6150芯片对电池电压自动升降压,从而实现3.3V的稳压输出
注:该芯片现在涨价了(涨的比5328主控都贵了,有点离谱),大家可以换成别的升降压芯片
RT6150芯片的PS引脚是用于控制PSM工作模式的,具体效果请查看数据手册
焊接好主板和主桶下板后,建议采用长螺柱进行测试(这样可以在保证电气连接的情况下,也能使用万用表、示波器表笔对关键节点进行测试,不然全部装配好以后就没办法测试主控板背面的电气节点了)
可以先使用USB表等设备测试充电功能是否正常,再测试别的功能
底部盖板制作
嵌入式系统软件
嵌入式软件说明将会根据软件任务编写,以便对程序进行理解。
软件代码在项目附件压缩包中!
1、初始化任务1.1. 改变蓝牙名称
可以根据自己的需求修改蓝牙名称,蓝牙模块默认名称BT-11,程序初始化默认名称YingHui1.2. 等待电源控制芯片被激活
若第一次装入电池,则需要充电激活
若已经完成充电激活后单片机重置,则单击电源按钮激活1.3. 激活成功指示灯亮
单片机下方的指示灯,硬件标注为INIT
若安装夜光环或其他透光材质/颜色的装饰环,可以在调试结束后拆除这颗指示灯1.4. 删除初始化任务
2、看门狗任务从功能上说它可以让微控制器在程序发生意外(程序进入死循环或跑飞)的时候,能重新回复到系统刚上电状态,以保障系统出问题的时候可以重启一次。说的简单一点,看门狗就是能让程序出问题是能重新启动系统
3、按键任务用于在离线模式下控制灯丝按键任务会判断蓝牙是否连接,只有在蓝牙未连接情况下才能进入离线状态,(蓝牙)在线状态 下则不能通过按键控制防止冲突
4、LED任务(LED1和LED2相同)
注:如果有需要还可以开启LED3通道
具体逻辑如下:4.1.根据灯丝模式获取亮度,模式分别为固定值和随机值4.2.线性改变灯丝亮度(否则直接跳会很难看)4.3.改变指定定时器通道占空比
5、蓝牙任务若蓝牙未连接挂起LED任务即离线模式;若蓝牙已连接恢复LED任务即在线模式,并模拟打开充电宝
这一段听起来不好理解,但看了代码就明白了,下面为模拟打开充电宝核心代码:
HAL_GPIO_WritePin(KEY1_CONTROL_GPIO_Port, KEY1_CONTROL_Pin, GPIO_PIN_RESET);osDelay(600);HAL_GPIO_WritePin(KEY1_CONTROL_GPIO_Port, KEY1_CONTROL_Pin, GPIO_PIN_SET);
其实非常好理解,就是使用开漏输出模拟点击充电宝按键
6、WS2812控制
RGB转HSV: HSV用更加直观的数据描述我们需要的颜色,H代表色彩,S代表深浅,V代表明暗。此处转换易于编程。
由RGB到HSV的转换详解: zhuanlan.zhihu.com/p/67930839
注:一开始没有找到这个方法,使用了用函数计算数组的方法做出颜色变换,但是由于过于占用空间,就把最早使用的G0换成了F411,但后续找到了这个转HSV的好方法,大大降低了程序复杂度,不过由于PCB已经定型,就没有改设计
7、WS2812任务通过上位机APP选择WS2812可编程逻辑灯珠模式,程序中中暂时实现的模式有默认模式(默认选择默认模式(这听起来好像是一句废话)),流光溢彩,颜色渐变,和混合模式(混合了流光溢彩和颜色渐变两个模式)
8、电源控制芯片IP5328P输出控制任务监控系统状态:主要检测是否为5V放电,开启或关闭寄存器vout通路,避免高压烧毁灯光部分
这一部分说起来比较复杂,会涉及5328的快充与其他模式,程序部分为了减轻工作量,就采用了直接读取5328自身模式寄存器的方案,其实这种情况下可能会存在误判,但在灯光部分的硬件部分设计了过压保护防止意外,详解见硬件部分的说明
注:5328通信部分参考了以下链接内的程序,特此向原作者表示感谢!另,原作者部分程序可能存在bug(也有可能是我没有理解原作者的编程思路),已经进行修改,但不保证是否会引入新的bug
寄存器部分请参考5328的datasheet和寄存器手册
原理图
PCB