【Holocubic简化修改版——基于STM32F405+ESP8266-12F:使用FreeRTOS和标准库】

一.简介

第一次看到Holobubic项目是稚晖君视频:【自制】如何制作一个赛博朋克风格的 百大UP奖杯 【软核】
但是稚晖君的项目是基于ESP32PICO-D4,因此我想尝试使用STM32复刻一个。实际上,使用STM32复刻Holocubic在CSDN上已经有一位博主发布了他做的成品,并且博客介绍得很详细。因此,我也借鉴了他的部分设计,并重新设计制作了一个简易版的Holocubic
文章链接:项目-Holocubic透明桌面站(基于STM32)
该项目完全开源,所有工程文件的下载链接放在文章最后
具体实现效果如下:

【Holocubic简化修改版——基于STM32F405+ESP8266-12F:使用FreeRTOS和标准库】_第1张图片

设计创新如下
1.重新设计了电路,并增加了锂电池充放电板,支持不接USB线运行;
2.重新设计了软件部分并优化部分功能,加入了FreeRTOS
3.重新设计了外壳部分以适配电路板;
其余细节在后文给出。

二.硬件电路设计

1.总体介绍

本项目的硬件部分主要由3块PCB板组成:锂电池充放电电路板(四层板)、主控板(四层板)和IPS屏幕板(双层板)。其中板与板之间采用1.0的FPC软排线连接。其中锂电池充放电电路板和主控板通过2.0mm铜柱固定在一起,作为主体部分。
为了尽可能减小体积(锂电池充放电电路板和主控板尺寸为25mm x 25mm),采用了四层板,否则无法布线。
实物图如下:

【Holocubic简化修改版——基于STM32F405+ESP8266-12F:使用FreeRTOS和标准库】_第2张图片

2.锂电池充放电电路板

【Holocubic简化修改版——基于STM32F405+ESP8266-12F:使用FreeRTOS和标准库】_第3张图片
★本项目中,锂电池使用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进行了简单的电量检测与显示,只是检测电池电压而非电量,因此并不精确

原理图右下角的肖特基二极管自恢复保险丝是为了防止电池正负极接反:如果电池正负极接反,肖特基二极管正向导通,此时电流很大,保险丝断开,从而保护后级电路。但是:由于肖特基二极管(型号SS34)的反向漏电流较大(500uA左右),电池电量流失较快。因此推荐去掉肖特基二极管,并把自恢复保险丝换成0Ω电阻(舍弃反接保护功能,防止电池电量流失)

【Holocubic简化修改版——基于STM32F405+ESP8266-12F:使用FreeRTOS和标准库】_第4张图片

3.主控板

【Holocubic简化修改版——基于STM32F405+ESP8266-12F:使用FreeRTOS和标准库】_第5张图片
主控芯片采用了STM32F405RGT6并搭配ESP8266-12F模块进行联网:

采用STM32F405RGT6的原因:

  1. 为了提高显示屏的刷新速度(即更高的SPI传输速率),优先选用F4以上芯片,F1速度略慢;
  2. STM32F407系列,引脚数最少的是STM32F407VET6,也多达100个引脚,体积过大;而STM32F405系列引脚最少的是STM32F405RGT6,只有64个引脚,同时符合其他的设计要求;
  3. STM32F405RGT6的FLASH也高达1M,便于后续软件程序设计;

STM32F407在STM32F405产品基础上增加了多个先进外设:第2个USB OTG接口(仅全速);1个支持MII和RMII的10/100M以太网接口,硬件支持IEEE1588 V2协议;1个8-14位并行相机接口,可以连接一个CMOS传感器,传输速率最高支持67.2 Mbyte/s。其余基本没有区别。

【Holocubic简化修改版——基于STM32F405+ESP8266-12F:使用FreeRTOS和标准库】_第6张图片
注:为了控制体积,在PCB布局中删去了USB转TTL模块的LED部分(原理图中未删去)。同时板子的丝印均被删去,手工焊接时一定要对照PCB,确保没有焊错元器件

4.IPS屏幕板

IPS屏幕板设计较简单,不过多介绍。
【Holocubic简化修改版——基于STM32F405+ESP8266-12F:使用FreeRTOS和标准库】_第7张图片
【Holocubic简化修改版——基于STM32F405+ESP8266-12F:使用FreeRTOS和标准库】_第8张图片

三.软件程序设计

本项目在软件功能部分做了较多删减,目前只实现了较为简单和基础的功能。具体修改可详细阅读代码,如有相关问题可在评论区或私信交流。

以下只简单进行介绍:
本项目软件部分目前只实现网络时间和天气的获取与显示,同时可以通过姿态切换不同城市的天气。
相比于项目-Holocubic透明桌面站(基于STM32),本项目主要做了如下修改:

  1. 使用了FreeRTOS;
  2. 网络时间只在上电后获取校准一次,然后基于该时间,初始化STM32的RTC。之后的时间都是通过RTC获取;
  3. 图片等数据直接保存在了STM32的FLASH中,而非外部FLASH。(省去了数据存入FLASH的操作,但是大大减少了可保存的数据量,尤其是图片数据)

四.外壳模型

使用Rhino软件进行建模、并使用光固化3D打印机进行打印。
模型分为上下两部分,通过卡扣滑动固定。打印完可能会有些许误差,需要打磨。
【Holocubic简化修改版——基于STM32F405+ESP8266-12F:使用FreeRTOS和标准库】_第9张图片
【Holocubic简化修改版——基于STM32F405+ESP8266-12F:使用FreeRTOS和标准库】_第10张图片
【Holocubic简化修改版——基于STM32F405+ESP8266-12F:使用FreeRTOS和标准库】_第11张图片

五.问题总结

硬件问题

  1. 锂电池充放电电路部分存在充电电流方面问题,已在文中详细说明;
  2. 锂电池充放电电路在关闭输出后,仍存在一定功耗,导致电池电量在设备断电后仍缓慢流失,对小容量(200mAh)电池影响较大;
  3. 锂电池充放电电路板的按键过小,放入外壳后,使用有些不方便;
  4. 主控板的STM32删去了32.768KHz的外部低速晶振(放不下了),但是RTC最推荐使用LSE,因此RTC时钟只能退而求其次使用了HSE。
  5. 为了控制电路板尺寸,布局布线方面存在不符合硬件设计规范的部分。

软件问题

  1. 锂电池充放电电路预留了MAX17048电量检测芯片的位置,但是软件中还未实现该功能;
  2. 软件整体实现的功能较简单;
  3. 没有设计外置FLASH,导致保存的图片数据有限;
  4. FreeRTOS的实现较为粗糙,可以对任务信息进行打印(更加准确地设置任务堆栈的大小)、并合理使用相对延时和绝对延时;

其他问题

  1. 由于屏幕长时间停留在同一个画面,可能出现轻微烧屏的情况;(仔细观察屏幕可以发现烧屏,通过分光棱镜反射后基本察觉不到)

六.开源链接

【Holocubic简化修改版-基于STM32F405+ESP8266-12F:使用FreeRTOS和标准库】

你可能感兴趣的:(小型项目笔记,stm32,FreeRTOS,嵌入式)