# 项目参数
**尺寸**: 53x53x17mm(宽x长x高)
**交互方式**:1.54寸240x240分辨率TFT屏,1个滚轮编码器 _(V2.1以后改为波轮开关)_,3颗轻触开关
**电源输入接口**:Type-c口,5-20VDC输入,支持(PD协议充电器)。
**电源输出接口**:功率计量口Type-c,可调电源输出XT-3.0公座
**可调电源输出范围**:2-30V,0-5A
**USB功率计量**:PD协议,QC协议
# 开源协议
本工程依据“CC-BY-NC-SA 4.0”知识共享许可协议,请勿用于商用,转载时请标明出处。
开源代码:[https://gitee.com/yllff/flpower](https://gitee.com/yllff/flpower)
# 项目属性
本项目为首次公开,为本人原创项目。项目未曾在别的比赛中获奖。
# 项目更新
2024/4/2 添加部分介绍内容,更新core V2.1板。
* core V2.1板更换了编码器,采用波轮开关以降低成本,引出swd口和串口。用于后续增加功能。**注意,该版本与之前的外壳不兼容。** 代码兼容。
* 添加了部分电路介绍和代码介绍。
# 项目待更新
* VCP虚拟串口功能 (V2.1版本待实现)
* 电流表计量(V2.1版本待实现)
* 电池恒流恒压充电(V2.1版本待实现)
* DAPLink功能(V3.0版本待实现)
* 0-50V的波形采样通道 (V3.0版本待实现)
------------------------------------------------
* 2S电池底座模块,用于实现无外接电源供电场景
* 4S电池底座模块,用于实现无外接电源供电场景
# 项目介绍
## 1.硬件
`PCB板`分为两块,一块核心板一块功率板,两者通过双排插针以及固定螺母连接,在布局上考虑了PCB叠层后的高度。核心板为4层板,功率板为2层板,阻容基本采用0603封装。主控采用合宙的air32f103cct6(性价比很高但**重**(ken)点也很多),**Arm cortex M3核心,256KBFlash,96KRam,主频216MHz**。提供type-C接口用于接入电源,内置FUSB302可实现PD协议可将输入电源诱骗至20V(需要外部电源支持)。可调电源控制芯片为SC8701,可实现升降压输出。这种设计拓宽了使用场景,比如手上只有5V的电源,也可以通过该电源输出2-30V的电压使用。或者配合18650电池用于无外接电源的场景。USB功率计量和可调电源的输入接口是同一个。
![核心板.jpg](//image.lceda.cn/pullimage/cvAxly75SxsFqgBPGZHuMox778dCycWa7o1F7Ndn.png)
![功率板.jpg](//image.lceda.cn/pullimage/kmGZS5Exnmk6L1DEaljD9bgb62oxD2pFXYyODRsk.png)
### 1.1框架
![框架.jpg](//image.lceda.cn/pullimage/nqvX3qP8CkoEvxBGBjIFZz0dk1n6GtgSL9OOAMCo.png)
作为电源使用时,电源从核心板的DCIN(Type-C口)接入,如果是带PD协议的充电器可经过FUSB302诱骗为最大功率模式(我测试时用的是20V5A的充电头),再通过两块PCB板之间的螺柱连接到功率板,核心板的控制信号通过双排排针连接到功率板。**单单核心板可实现usb功率计量功能,换句话说核心板可以单独使用。**
### 1.2结构
外壳我设计了2种,一种是3D打印一种是CNC铝合金(铝合金质感真的不错)。**`此外设计PCB尺寸的时候考虑了一种铝合金型材的尺寸,应该比较合适,不过没验证。`**
**3D打印外壳**分为上壳和下壳,上壳固定处放置了M2的热熔螺栓,如下图所示,两块PCB连接好后通过功率板上的焊接端子固定到下壳,上壳和下壳拼好后通过下壳背面螺丝拧紧。**这种外壳(我选择的是树脂打印)优点是足够便宜,缺点是打出来后有点软,而且有变形,上下壳有明显缝隙。**
![3d外壳.png](//image.lceda.cn/pullimage/IIFw0yOf6iD0EmjIHg0vXpjkgy72BTbyZg3dlZxO.png)
**CNC铝合金外壳**包含了上壳、下壳以及一块亚克力面板,如下图所示,面板先粘到上壳,其他固定方式同上。**这种外壳的优点是质感很好,而且有硬度,加快散热,亚克力面板也能一定程度的保护液晶屏。缺点是贵!还有外壳的接GND上的要注意!**
![cnc外壳.png](//image.lceda.cn/pullimage/A1oklF436eVOMfonzuEIRA4SnAQ2mQNKdU4avx2h.png)
### 1.3原理分析
#### 1.3.1 核心电路供电设计
迷你电源的核心部分的供电可以通过电源侧(USB2)供电,也可以通过调试USB口供电,通过电源切换电路当两路同时供电时,会选择使用调试USB口侧的供电。电源切换电路如下所示,我们简单分析下,首先当电源侧供电时,通过U11(ME3115AM6G)输出VCC1有3.7V的电压,并通过Q5的体二极管输出到VCC处,同时Q5由于栅极通过R27接地,漏极和源极导通减少了Q5的体二极管压降导致的功耗,此时再通过U10(ME6211A33M3G-N)得到了3.3V。当调试USB口侧插入电源时,U11的EN引脚因为接在调试USB口的GND引脚上所以被拉低,VCC1变为0V,同时Q5的栅极有5V电压,而Q5的源极因为D3的缘故大概为4.4V左右,Vgs>0所以Q5截止。此时VCC单单由VCC2来供电。此电路的优点是在电源侧供电时因为Q5导通的原因所以并没有多大损耗,而当两路同时供电时,可将电源侧电源屏蔽掉,去掉了内部电路损耗有助于准确的计算数控电源输入输出部分的损耗。
![image.png](//image.lceda.cn/pullimage/6a7cubtlC002436OM54v4cqXc8Nwnw4so18PiWol.png)
#### 1.3.2 电压可调设计
硬件中采用了SC8701这颗电源控制芯片,这是一颗同步4功率管Buck-Boost控制器,输出电压能够高于,等于或低于输入电压,可以极大的节省整体空间,并且这颗芯片提供了限流保护功能。其主要特性为输入电压2.7V至36V,输出电压2V至36V,可以通过PWM信号来调整输出电压。不足之处是可调的最小输出电压为1/6的最大设定电压,也就是说如果设计最大输出电压为30V,那么可调整到的最小输出电压为5V。原因如下,当PWM输出为0时,Vout=1/6Vset。
![image.png](//image.lceda.cn/pullimage/icOqd7anUeUsOzKRCkh8hqAyt6P7YhMP7IjHukqO.png)
那么有方法可以让输出电压的可调范围做的更宽吗?答案是有的,我们可以从另一个角度去解决,让PWM控制引脚输出一直为高,去调整FB处的“电阻”。根据图6中的公式我们可以知道,Vout和RDown的阻值成反比,如果我们将PWM控制引脚一直设为高,即让SC8701输出最大的设定值Vout_set,而我们改变RDown也就能改变输出电压。
![image.png](//image.lceda.cn/pullimage/AB0LPXdSKumug1uf8F56viHcfdHohFsARWJKkIDI.png)
但我们需要用MCU去控制输出,所以还要再设计下电路。Air32f103cct6带有DAC功能,只是12位的分辨率不太满足需求,可以通过下图中的电路将16位分辨率的PWM信号变为模拟信号,并且将电压范围转换成0-V_REF。
![image.png](//image.lceda.cn/pullimage/KvYbBYyEkKnLDrI6yIfh5UyJsUaxcEUuF0aX69GF.png)
将DAC信号通过电阻接入到FB点,通过调整DAC信号的幅值,就可以设置输出电压。其原理分析如下,当DAC输出为0V时,此时电流的走向如下图所示,两路电阻相当于并联,Vo输出电压为最大=1.22*(1+100k/((6.2k+2k)/2)),约为30.97V。实际测试大概为30.2V,主要是阻值有误差。
![image.png](//image.lceda.cn/pullimage/HvJfaoBPWTTbgwwnZ5KHzvbwrRtEwGWvgIwcNLXK.png)
当DAC输出为基准电源即2.5V时,此时电流的走向如下图所示,流经R23的电流几乎为0A,因为DAC经过分压后,FB点电压已经有1.22V,理想情况下SC8701将不输出电压,Vo=0V。实际测试约为1.4V,主要是基准电源的不稳定以及阻值有误差。所以当我们输出DAC电压在0-2.5V的范围时,理想的输出电压的范围为0-30.9V,这样就实现了宽范围的电压输出。**SC8701在文档里标注的输出为2-36V,内部原理未仔细研究,不确定是否输出最低为2V。**
![image.png](//image.lceda.cn/pullimage/rVuJTxqdpxh5tYaVUSIsiaJSyOf8RGZL2LtuMFZf.png)
## 2.软件
mcu侧代码分为bootloader和app两部分,bootloader提供了模拟U盘拖拽升级功能,无需其他软件工具即可升级app固件,比较方便。app代码基于`FreeRTOS+LVGL`, ide使用keil 5.38, gui使用`SquareLine Studio`生成。bootloader固件通过keil或者jflash下载。
### 2.1应用固件更新
烧入bootloader固件后,可以通过简便的方式升级应用固件。具体操作是:将usb线一端先接到电脑,再按住迷你电源的''<''键后将usb线另一端插入**调试口**,此时电脑会弹出一个名为“FL POWER”的U盘,打开U盘会有一个TXT文件名为“READY”。将要更新的固件文件(bin格式或者hex格式)拖拽到此U盘内即可,U盘将重新识别,其内部的“READY”TXT文件名会更新,“SUCCESS”表示更新成功。
### 2.2 GUI界面
界面使用`SquareLine Studio`生成,这是一个可视化的拖放式 UI 编辑器,可快速轻松地为嵌入式和桌面应用程序创建漂亮的图形用户界面。官网: https://squareline.io/,下载安装后可供个人免费使用,限制是只能设计5个UI界面和放置50个控件。通过软件简单设置可以方便直观的实现动画效果。
### 2.3调试上位机
。。。
### 2.4代码浅析
#### 2.4.1 App应用代码
app代码基于FreeRTOS+LVGL,在bsp初始化完后建立了多个Task,如下图所示。
![image.png](//image.lceda.cn/pullimage/2XMMNjGeZQLagANRsxB3G9Q6DgZqdZ9N8Siu1fSm.png)
Task_sample主要是采集各路电压电流值并进行计算,task_gui负责LVGL的运行处理,task_pd用于电源口的pd协议通讯,使其得到最大功率的电压选项,如图所示。
![image.png](//image.lceda.cn/pullimage/vKiez6AGGMeet38dBVhVyVPvHseaKPez5VLc4Wpu.png)
#### 2.4.2 Bootloader代码
Bootloader侧代码主要是用于升级固件,当迷你电源通过USB先连接到电脑,并检测到对应按键处于按住状态,则进入升级阶段,代码会建立一个FAT16文件系统,并模拟出以芯片内部Flash(从0x08004000开始)为存储的U盘,此时可以直接将要升级的固件拖拽到U盘里,固件将会被拷贝至芯片内部flash。完成后重启电源即可。如果在上电后未检测到对应按键按下,则直接跳转到App应用代码处,执行App应用代码。Main函数代码如下图所示。
![image.png](//image.lceda.cn/pullimage/ZrgJTLaeltuFfFz5dkvUXhpnWNmHHfNPmlAd5mPS.png)
## 3.组装
组装比较简单,先固定PCB,放好3枚按键帽,再固定上下外壳。**要注意如果是铝合金外壳,功率板背面的插件元器件的脚需要减平,以防碰到外壳短路,最好是贴上绝缘胶带。**
![cnc外壳分解.png](//image.lceda.cn/pullimage/tMCfs85kocF608harohVh3dZem2tISiReI6zYMDF.png)
![3d外壳分解.png](//image.lceda.cn/pullimage/ATWPOhYNeD7cF7M2RTSgane3dtK0PdIFSdnZQUDu.png)
## 4.功能
_**目前实现了可调电源输出功能,usb功率计量代码尚未适配。**_
## 5.使用和测试
### 5.1使用介绍
电源有3个type-c口和1个XT3.0口,3颗按键和1个编码开关。各个用处如下图所示,目前围绕数控电源功能尽量使得操作简单,后期功能有增加后可能会改动按键功能。具体使用请看附件视频。
![接口说明3.png](//image.lceda.cn/pullimage/bSWbqEDBRISEPC8SoPlaik9yje00NRWJoPubb9XF.png)
![接口说明4.png](//image.lceda.cn/pullimage/IJTKuGMHQcflUfkH8YeO0h6kpX4bVXSko4QBdQ53.png)
**USB调试口**:用于连接PC升级应用固件,以及作为电流表计时的单独供电来消除内部损耗误差。后期可能用于连接上位机软件。
**电源输入口**:接入5-20V电源,可以是各类充电头,默认通过pd协议选择最大功率挡。
**指示灯**:双色指示灯,红色表示内部有电源。蓝色表示运行,呼吸灯模式,后期可能作为一些状态指示用。
**电流表功能输出**:直连电源输入口,作为电流表计时使用,注意在输入电源经过pd协议升压后,该口电压也是升高的!外接使用时需注意!!!
**数控电源输出**:2-30V输出,XT3.0接口,注意正负方向!
**编码开关**:目前只作为编辑电压电流使用,中间按键用来选择倍数挡位,有`0.01、0.1、1`三种选项,顺时针旋转增加数值,逆时针旋转减少数值。
**左功能键**:目前作为bootloader升级固件时的进入按键。
**右功能键**:切换电压电流值选项。
### 5.2带载纹波
各负载阶段的波形,由于输入电源的最大功率为60W(20V3A),所以输出最大只测到了30V2A。
![5V空载.BMP](//image.lceda.cn/pullimage/7PVfpMqPk6AGTFePxSbh5RiW54SANWxtPbAih21t.bmp)
**【5V空载】**
![30V空载.BMP](//image.lceda.cn/pullimage/WebrExUDRDSNLZBgDE61pYB35te9jSOteenvIieR.bmp)
**【30V空载】**
![3.3V3A.BMP](//image.lceda.cn/pullimage/ijmUH9nX08fVTx7DqCRLMJEdjtXhxRpWiKNTdKhz.bmp)
**【3.3V3A】**
![5V3A.BMP](//image.lceda.cn/pullimage/4K2JlMf4KVxkurQqUZQ8Q5rB4dcp3LaD0DEnejep.bmp)
**【5V3A】**
![15V3A.BMP](//image.lceda.cn/pullimage/QUZndhkQYrUe3JWdjVY6vKhCrEo2Qri8x7NNuCFw.bmp)
**【15V3A】**
![30V2A.BMP](//image.lceda.cn/pullimage/LixUjT4FqcnEhKtUCSHQwhx0UJuvr1OemsnpXpzo.bmp)
**【30V2A】**
# 项目参考
项目中的部分代码参考了如下作者的代码,非常敬佩以下作者的开源精神,也非常感谢!
合宙官方库:[https://gitee.com/openLuat/luatos-soc-air32f103](https://gitee.com/openLuat/luatos-soc-air32f103)
stm32模拟u盘升级固件:[https://gitee.com/joeylolipop/stm32-iap-msd](https://gitee.com/joeylolipop/stm32-iap-msd)
FUSB302 PD协议:[https://gitee.com/liuzewen/PD_Micro](https://gitee.com/liuzewen/PD_Micro)
# 其他
主代码还在整理中,后面会提交到gitee。关于电流计量功能这块,目前没需求暂时不更新。想继续做的可以后面自己下载代码改。
开源代码:[https://gitee.com/yllff/flpower](https://gitee.com/yllff/flpower)
QQ讨论群:**334607120**
# 重点!
1、打样的时候,两块PCB都选**1.0mm厚度!1.0mm厚度!1.0mm厚度!**
2、功率板xt3.0口上再并个固态电容.
3、提供的BOM清单请再一次仔细核对,之前发现的错误已经更新.
4、主控是air32f103cct6,注意是**cct6**!
5、core V2.1板将编码器改为波轮开关,不兼容之前版本的外壳,请注意!
134
259
收藏到专辑