一.简介
第一次看到Holobubic项目是稚晖君视频:【自制】如何制作一个赛博朋克风格的 百大UP奖杯 【软核】
但是稚晖君的项目是基于ESP32PICO-D4,因此我想尝试使用STM32复刻一个。实际上,使用STM32复刻Holocubic在CSDN上已经有一位博主发布了他做的成品,并且博客介绍得很详细。因此,我也借鉴了他的部分设计,并重新设计制作了一个简易版的Holocubic。
文章链接:项目-Holocubic透明桌面站(基于STM32)
该项目完全开源,所有工程文件的下载链接放在文章最后。
具体实现效果如下:
设计创新如下:
1.重新设计了电路,并增加了锂电池充放电板,支持不接USB线运行;
2.重新设计了软件部分并优化部分功能,加入了FreeRTOS;
3.重新设计了外壳部分以适配电路板;
其余细节在后文给出。
二.硬件电路设计
1.总体介绍
本项目的硬件部分主要由3块PCB板组成:锂电池充放电电路板(四层板)、主控板(四层板)和IPS屏幕板(双层板)。其中板与板之间采用1.0的FPC软排线连接。其中锂电池充放电电路板和主控板通过2.0mm铜柱固定在一起,作为主体部分。
为了尽可能减小体积(锂电池充放电电路板和主控板尺寸为25mm x 25mm),采用了四层板,否则无法布线。
实物图如下:
2.锂电池充放电电路板
★本项目中,锂电池使用1S(3.7V) 200mAh的动力锂电池(容量大的话电池体积会过大,注意:非普通电池)。普通锂电池的最大放电电流为1C,即200mA;动力锂电池的最大放电电流可达15C,即3A。由于项目中使用了ESP8266,该模块的上电电流很大(600mA以上),加上其他器件,整体上电电流在800mA左右(后续会稳定在180mA左右),远大于普通锂电池的最大放电电流。使用普通锂电池会无法启动。
★★★首先需要了解:★★★
1.使用3.7V的软包锂电池对设备进行供电,需要先使用DC-DC进行升压(一般升压到5V),保证电压稳定;
2.电路应具备路径管理功能:不接入USB线时,设备电源来自锂电池升压输出;接入USB线时,设备直接由USB供电,同时为锂电池充电;
3.最好具备手动开关功能;
如果想单独实现以上功能,需要使用较为复杂的电路,会导致电路板面积大于设计值。因此,本项目采用了IP5306芯片,该芯片已经集成了升压和路径管理功能,可以大大减少元器件数量。同时,该芯片还可以通过外接按键进行输出的控制,可以直接作为电源开关(按一下开启,连按两下关闭)
但是!该设计还有一个较大的缺陷:由于IP5306并没有TP4056和AP5056那样的电流控制电阻,这会导致充电的峰值电流过大(实测可达700mA),远大于200mAh动力锂电池的推荐充电电流(0.5C,100mA)。注:充电电流过大很容易导致电池鼓包。
但是,如果使用TP4056或AP5056又不具备升压和路径管理功能,需要额外设计导致电路板面积过大。
如果大家有更好的方案可以在评论区介绍一下,目前该问题还没有解决。
加入了MAX17048芯片进行电池电量的精确检测,但是软件层面还没有对其进行编写。(实际上,IP5306也已经通过LED进行了简单的电量检测与显示,只是检测电池电压而非电量,因此并不精确)
3.主控板
主控芯片采用了STM32F405RGT6并搭配ESP8266-12F模块进行联网:
采用STM32F405RGT6的原因:
- 为了提高显示屏的刷新速度(即更高的SPI传输速率),优先选用F4以上芯片,F1速度略慢;
- STM32F407系列,引脚数最少的是STM32F407VET6,也多达100个引脚,体积过大;而STM32F405系列引脚最少的是STM32F405RGT6,只有64个引脚,同时符合其他的设计要求;
- STM32F405RGT6的FLASH也高达1M,便于后续软件程序设计;
STM32F407在STM32F405产品基础上增加了多个先进外设:第2个USB OTG接口(仅全速);1个支持MII和RMII的10/100M以太网接口,硬件支持IEEE1588 V2协议;1个8-14位并行相机接口,可以连接一个CMOS传感器,传输速率最高支持67.2 Mbyte/s。其余基本没有区别。
注:为了控制体积,在PCB布局中删去了USB转TTL模块的LED部分(原理图中未删去)。同时板子的丝印均被删去,手工焊接时一定要对照PCB,确保没有焊错元器件
4.IPS屏幕板
IPS屏幕板设计较简单,不过多介绍。
三.软件程序设计
本项目在软件功能部分做了较多删减,目前只实现了较为简单和基础的功能。具体修改可详细阅读代码,如有相关问题可在评论区或私信交流。
以下只简单进行介绍:
本项目软件部分目前只实现网络时间和天气的获取与显示,同时可以通过姿态切换不同城市的天气。
相比于项目-Holocubic透明桌面站(基于STM32),本项目主要做了如下修改:
- 使用了FreeRTOS;
- 网络时间只在上电后获取校准一次,然后基于该时间,初始化STM32的RTC。之后的时间都是通过RTC获取;
- 图片等数据直接保存在了STM32的FLASH中,而非外部FLASH。(省去了数据存入FLASH的操作,但是大大减少了可保存的数据量,尤其是图片数据)
四.外壳模型
使用Rhino软件进行建模、并使用光固化3D打印机进行打印。
模型分为上下两部分,通过卡扣滑动固定。打印完可能会有些许误差,需要打磨。
五.问题总结
硬件问题
- 锂电池充放电电路部分存在充电电流方面问题,已在文中详细说明;
- 锂电池充放电电路板的按键过小,放入外壳后,使用有些不方便;
- 主控板的STM32删去了32.768KHz的外部低速晶振(放不下了),但是RTC最推荐使用LSE,因此RTC时钟只能退而求其次使用了HSE。
- 为了控制电路板尺寸,布局布线方面存在不符合硬件设计规范的部分。
软件问题
- 锂电池充放电电路预留了MAX17048电量检测芯片的位置,但是软件中还未实现该功能;
- 软件整体实现的功能较简单;
- 没有设计外置FLASH,导致保存的图片数据有限;
六.开源链接
【Holocubic简化修改版-基于STM32F405+ESP8266-12F:使用FreeRTOS和标准库】