一款多功能露营专用氛围灯

一、主要功能

  • 使用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电容”,大家可以根据耐压需求换成别的电容型号

GCqtmBZLJhjRUtvBmZ5q9ptY4P29Z6epwdVKNWjm.png

在主控板的背面(主控板与转接板的夹层中),需要焊接一颗固态电容

3、“灯”的控制

灯丝及WS2812的供电部分如下(包括灯丝的调光控制电路)

升压(BAT转5V)输出部分使用mos进行控制,mos管可以基于5328的基本控制逻辑进行控制,也可以使用单片机进行iic通信,操作寄存器进行控制

需要注意的是,5328具有快充输入输出功能,VMID总线电压最高为12V,因此在单片机的程序中,会通过寄存器读取,判断5328是否处于快充充电宝模式,此时会强制关闭MOS防止高压输入“灯”的部分,防止损坏PWM控制器与2812灯珠,但考虑到程序可能存在bug或程序跑飞等特殊情况,还增加了LP5300B6F过压保护芯片,保护后级电路安全(不得不吐槽一些LP5300B6F的引脚设计是真的很离谱,为什么6个引脚给了4个GND,输入输出只是给给了1个,这里的GND根本不走大电流啊,流通路径全在输入输出,只能怀疑是不是为了兼容别的什么芯片进行这样的设计了)

注:上图的“底部灯圈”这一路输出目前没有使用,只是我一开始挖的坑(本来还想在底部做个环形灯圈手电筒功能)

灯丝也可以直接使用主板进行测试,不需要其他PCB,建议在组装前进行测试防止反工

灯丝的实际亮灯效果测试:

InKFXE91bNzRJ9u2gZH4lRI3D2ss9p6bfP454dRx.jpeg

4、单片机供电

对于单片机与蓝牙部分供电是通过RT6150芯片对电池电压自动升降压,从而实现3.3V的稳压输出

注:该芯片现在涨价了(涨的比5328主控都贵了,有点离谱),大家可以换成别的升降压芯片

RT6150芯片的PS引脚是用于控制PSM工作模式的,具体效果请查看数据手册

UT54R0ErKrGu8EPsLKJOdePkkQEpIgPydi55cvG7.png

焊接好主板和主桶下板后,建议采用长螺柱进行测试(这样可以在保证电气连接的情况下,也能使用万用表、示波器表笔对关键节点进行测试,不然全部装配好以后就没办法测试主控板背面的电气节点了)

可以先使用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的转换详解: 三分钟带你快速学习RGB、HSV和HSL颜色空间 - 知乎

注:一开始没有找到这个方法,使用了用函数计算数组的方法做出颜色变换,但是由于过于占用空间,就把最早使用的G0换成了F411,但后续找到了这个转HSV的好方法,大大降低了程序复杂度,不过由于PCB已经定型,就没有改设计

7、WS2812任务通过上位机APP选择WS2812可编程逻辑灯珠模式,程序中中暂时实现的模式有默认模式(默认选择默认模式(这听起来好像是一句废话)),流光溢彩,颜色渐变,和混合模式(混合了流光溢彩和颜色渐变两个模式)

8、电源控制芯片IP5328P输出控制任务监控系统状态:主要检测是否为5V放电,开启或关闭寄存器vout通路,避免高压烧毁灯光部分

这一部分说起来比较复杂,会涉及5328的快充与其他模式,程序部分为了减轻工作量,就采用了直接读取5328自身模式寄存器的方案,其实这种情况下可能会存在误判,但在灯光部分的硬件部分设计了过压保护防止意外,详解见硬件部分的说明

注:5328通信部分参考了以下链接内的程序,特此向原作者表示感谢!另,原作者部分程序可能存在bug(也有可能是我没有理解原作者的编程思路),已经进行修改,但不保证是否会引入新的bug

IP5328P寄存器数据读写 IP5328P程序: 一个完整的keil5工程,包含对IP5328P芯片的寄存器数据读写代码。工程基于stm32f103c8t6,使用了UCOSII,以及一些其他附属代码段,包括:开关机按键、显示屏等。

请教IP5318芯片在电量检测方面,是否区分I2C版与非I2C版。 (amobbs.com 阿莫电子论坛 - 东莞阿莫电子网站)

快充芯片IP5328P的寄存器数据读写[用于DIY数显快充充电宝]_ip5328p 寄存器-CSDN博客

【精选】快充芯片IP5328P的寄存器数据读写[用于DIY数显快充充电宝]_ip5328p 寄存器-程序员宅基地 - 程序员宅基地

寄存器部分请参考5328的datasheet和寄存器手册

原理图

PCB

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/198400.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

内置函数【MySQL】

文章目录 MySQL 内置函数日期和时间函数字符串函数数学函数信息函数参考资料 MySQL 内置函数 MySQL 的内置函数主要分为以下几种: 字符串函数:用于对字符串进行操作,如连接、截取、替换、反转、格式化等。数值函数:用于对数值进…

【vue】v-model在表单元素上的应用

表单元素&#xff1a; https://blog.csdn.net/m0_67930426/article/details/134655644 使用模板 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head><body>&l…

小程序静默授权获取unionid

文章目录 导文文章重点 导文 小程序静默授权获取unionid 文章重点 用wx.login(Object object)放到app.js里面 wx.login({success (res) {console.log(123);if (res.code) {//发起网络请求// wx.request({// url: https://example.com/onLogin,// data: {// code: res.…

软著项目推荐 深度学习二维码识别

文章目录 0 前言2 二维码基础概念2.1 二维码介绍2.2 QRCode2.3 QRCode 特点 3 机器视觉二维码识别技术3.1 二维码的识别流程3.2 二维码定位3.3 常用的扫描方法 4 深度学习二维码识别4.1 部分关键代码 5 测试结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天…

linux获得帮助_如何查看命令的用法、作用

Linux获得帮助 多层次的帮助&#xff1a; whatis command --help man and info /usr/share/doc/ Red Hat documentation 、Ubuntu documentation 软件项目网站 其它网站 搜索 whatis 使用数据库来显示命令的简短描述。 [rootlocalhost ~]# whatis rm rm (1) …

基于FPGA的五子棋游戏设计

基于FPGA的五子棋游戏设计 本文基于FPGA设计五子棋游戏&#xff0c;使用按键输入&#xff0c;使用VGA接口输出。五子棋的棋具与围棋相同&#xff0c;棋子分为黑白两色&#xff0c;棋盘为1010&#xff0c;棋子放置于棋盘线交叉点上。两人对局&#xff0c;各执一色&#xff0c;轮…

仿美团外卖源码/在线外卖平台源码PHP/支持多商户+多样化配送费+本土外卖+支持第三方配送

源码简介&#xff1a; 进云仿美团外卖源码&#xff0c;作为外卖平台源码&#xff0c;它不仅支持多商户、多样化配送费、本土外卖&#xff0c;还支持第三方配送。 进云仿美团外卖源码是一个进云源生插件&#xff0c;支持多商户多样化配送费模式本土外卖平台支持第三方配送&…

Unity针对XBOX,SWITCH,PS5手柄的适配踩坑

前言&#xff1a; 记录一点最近在做手柄适配问题的踩坑。 这里推荐一款Unity做手柄适配的插件->Rewired Rewired官方文档链接Rewired Documentation | Supported Controllers Rewired插件里面有个是Player类&#xff0c;这个类获取到当前玩家的输入设备&#xff0c;输入…

蓝桥杯双向排序

这里写自定义目录标题 题目分析代码思路 题目分析 n,m都是 1 0 5 10^5 105 &#xff0c;需要将时间复杂度控制在 n log ⁡ n n \log n nlogn以内。 如果有两次连续的前缀操作&#xff0c;由于它们都是降序排列&#xff0c;等价于只做第二次排列&#xff0c;忽略掉第一次。 同…

Python缺失值处理实现

在数据处理相关工作中&#xff0c;读取的数据中常常会有缺失值的情况&#xff0c;为顺利进行后续的操作&#xff0c;需要首先对缺失值进行处理&#xff0c;处理的方式一般为删除或填充&#xff0c;Python中提供了专门的工具包&#xff0c;可以方便地进行实现。读取操作可以由pa…

2023-简单点-机器学习中矩阵向量求导

机器学习中矩阵向量求导的概念是什么&#xff1f; 在机器学习中&#xff0c;矩阵向量求导的概念主要涉及对函数中的矩阵或向量参数进行求导运算。这种求导运算可以帮助我们了解函数值随参数的变化情况&#xff0c;进而应用于优化算法中。具体来说&#xff0c;当损失函数是一个…

六、Lua运算符

文章目录 一、Lua 运算符&#xff08;一&#xff09;算术运算符&#xff08;二&#xff09;关系运算符&#xff08;三&#xff09;逻辑运算符&#xff08;四&#xff09;其他运算符 二、运算符优先级 一、Lua 运算符 运算符是一个特殊的符号&#xff0c;用于告诉解释器执行特定…

大一学编程怎么学?刚接触编程怎么学习,有没有中文编程开发语言工具?

大一学编程怎么学&#xff1f;刚接触编程怎么学习&#xff0c;有没有中文编程开发语言工具&#xff1f; 1、大一刚开始学编程&#xff0c;面对复杂的代码学习非常吃力&#xff0c;很难入门。建议刚接触编程可以先学习中文编程&#xff0c;了解其中的编程逻辑&#xff0c;学编程…

Ubuntu 环境安装 Kafka、配置运行测试 Kafka 流程笔记

Kafka 介绍 Kafka 是一个由 Apache 软件基金会开发的开源流式处理平台。它被设计用于处理大规模数据流&#xff0c;提供高可靠性、高吞吐量和低延迟的消息传递系统。Kafka 可以用于构建实时数据管道和流式应用程序&#xff0c;让不同应用、系统或者数据源之间能够高效地进行数…

分子骨架跃迁工具-DiffHopp 评测

一、文章背景介绍 DiffHopp模型发表在ICML 2023 Workshop on Computational Biology&#xff08;简称&#xff1a;2023 ICML-WCB&#xff09;上的文章。第一作者是剑桥计算机系的Jos Torge。 DiffHopp是一个专门针对骨架跃迁任务而训练的E3等变条件扩散模型。此外&#xff0c;…

Vue2或者uniapp 中 使用 iframe 嵌入本地 HTML 页面 并 相互通信。

1.使用 iframe 嵌入本地 HTML 页面&#xff08;以pdfjs为例&#xff09; 在 public 文件夹下新建 static 文件夹&#xff0c;然后将 html 文件及相关引用拷贝到 static 文件夹下 uniapp在src下新建hybrid文件 vue 文件完整代码 <template><div class"wrap&q…

第三方发起备份的ORA-00245问题

文章目录 前言一、信息确认共享目录位置控制文件快照位置节点1节点2 二、RAC修改snapshot controlfile 参数三、字典表确认以及测试 前言 在使用 AnyBackup 管理控制台发起 Oracle RAC 数据库备份后&#xff0c;在任务历史记录 > 执行输出中显示如下错误信息&#xff1a; c…

ffmpeg之QT开发环境搭建

文章目录 前言ffmpegQT开发环境搭建1、新建 QT 工程2、拷贝所需的 lib 文件和头文件2、拷贝所需的 dll 动态库文件3、修改 QT 项目的主配置文件 &#xff08;.pro 文件&#xff09;4、验证测试5、解决运行时的报错 前言 之前我们进行了 FFmepg 的编译以及在 Visual Studio 中引…

【双指针】四数之和

四数之和 建议做过了解三数之和的思想再做这道题&#xff0c;思路是一样的~ 题目描述 18. 四数之和 - 力扣&#xff08;LeetCode&#xff09; 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [num…

linux下的工具---gdb

一、gdb简介 GDB,是The GNU Project Debugger 的缩写&#xff0c;是 Linux 下功能全面的调试工具。 GDB支持断点、单步执行、打印变量、观察变量、查看寄存器、查看堆栈等调试手段。 程序的发布方式有两种&#xff0c;debug模式和release模式 Linux gcc/g出来的二进制程序&am…