USB可编程电源/功率监测仪-V1.0
简介
USB可编程电源/功耗监测V1.0,小程序控制, 支持USB PD3.0,BC1.2协议,支持5V~20V输入, 宽范围的输出电压,从2.7V ~ 20V可调,3A的带载能力
简介:USB可编程电源/功耗监测V1.0,小程序控制, 支持USB PD3.0,BC1.2协议,支持5V~20V输入, 宽范围的输出电压,从2.7V ~ 20V可调,3A的带载能力开源协议
:GPL 3.0
描述
项目简介
——————————————————————————————————————————————————————————————
本设计支持USB PD3.0,BC1.2协议, 可通过PD/BC1.2协议使支持PD/BC1.2协议的USB电源适配器输出5V,9V,12V,15V,20V
电源给系统供电;
宽范围的输出电压,从2.7V ~ 20V可调,3A的带载能力;
输入电压电流,输出电压电流实时监测,通过320X240的TFT屏或者上位机反馈给用户;
可通过一个多功能按键或者上位机对输出电压,输入电压进行调整;
此项目为初版,硬件设计上还有一些小问题,在最后面有列举出来,如果大家想复刻的话建议在V2.0的版本上去捣腾。下面是V2.0的开源地址,
为何还要保留V1.0呢?主要是考虑到前期有小伙伴已经在捣腾V1.0版本了,在这里保留V1.0,是希望他们有资料可以查看。
【星火计划】USB可编程电源/功率监测 - 嘉立创EDA开源硬件平台 (oshwhub.com)
(点击图片看大图)
上位机微信小程序
小程序上线了,可以扫描打开小程序:
项目背景
——————————————————————————————————————————————————————————————
- 本人是一个喜欢捣腾的嵌入式软件工程师,平时喜欢搞搞一些有趣的“玩具”,由于手上目前没有可调电源,平时捣腾“玩具”
时经常会用到一些比如12V,3.3V,5V或者模拟电池电压变化的过程等的这些电压源,又不想花那个钱去买一台可调电源,心想“我
可不可以搞一台方便携带,小巧,不依赖特定的电压源,可以满足日常大部分需求的可调电源呢”;我首先想到的是,“我是不是
可以利用现有的电源适配器(USB 适配器),外挂一个DC to DC芯片,实现升降压是不是就可以实现了?”。
- 说搞就搞,前期也到开源广场看了一遍,看看有没有类似的开源,复刻一个就好了;可是。。。。。,要不就是要固定
10V以上的输入电压源(这不是很鸡肋吗,我为了使用你这个电压源,我还得另外再搞个专用的适配器,这不符合我的设计需求);
要不就是电路复杂,整机做的比较大,不方便携带,不方便DIY;
- 算了,还得我自己来!开搞。。。
项目亮点
——————————————————————————————————————————————————————————————
- 支持USB PD3.0/PD2.0,BC1.2协议,支持5V~20V输入
- 输出电压从2.7V ~ 20V可调,3A的输出电流带载能力,可满足日常实验使用
- 微信小程序配置输入输出电压
- 电源输入电压,电流实时监测
- 电源输出电压,电流实时监测
- 电压检测分辨率8mV,电流检测分辨率40uV/10mR=4uA
- 320x240 TFT屏实时显示用电情况,可做为一个简易功率计使用,监测用电设备的用电能力
- 可通过BLE与上位机进行通信,实现更多应用的拓展开发
- 外围器件少,实现原理简单,非常方便DIY
- 小巧方便,不依赖特定电源,只要是USB适配器都可以使用
- 软硬件全部开源
- 本项目还可以做为一款入门级的开发板使用,在嵌入式学习中的大部分外设,在此项目中都有使用,如:I2C、UART、
SPI,USB和IO控制等,未使用的IO口都有引出。
硬件介绍
——————————————————————————————————————————————————————————————
- 硬件资源与尺寸标注
(点击图片看大图)
(点击图片看大图)
- 电源输出端子座
(点击图片看大图)
在这里我重点解释一下为何本设计选用了如图所示的输出接线端子座,其实目的就一个,方便,不依赖于特定的接线插头,随便身边一条普通
的线就可以使用;而且无需其他额外的工具就可以操作(有手就行)。
我在开源社区有看到一些类似开源项目,使用的都是一些专用的插座,有一定的局限性,不符合便携方便的需求。
- 原理图介绍(下面的图片点击可以看大图)
- 下面是电源输入部分的电路,本设计的输入分为两部分,一部分是通过USB Type-C口输入;另外一部分是通过
U10,U11两个接线端子接入DC电源。
- PD协议芯片电路,这部分电路相对比较简单,只是必要的供电和控制电路,完成PD协议与BC1.2协议的交互。
注意:VBUS的如下串联电阻在此版PCB中未加入,目前只是更新了原理图,如果没有串联10k电阻,在20V供电时
PD芯片会发烫,时间久了可能会损坏!!
- USB切换电路,用于PD协议芯片的USB D+,D-和MCU USB D+,D-的复用切换,工作原理是:当上电时D+,D-交给
PD协议芯片,完成BC1.2的协议交互;当不不需要协议信息交互时,可用做MCU的对外通信USB接口,另外MCU的固件
也是通过这个USB口下载的。
- 3.3V DC-DC电路,为系统提供3.3V供电电压。支持3.0V~40V的输入电压。
- 电压电流检测电路,INA3221支持3路的差分输入,和3路的bus端输入,这里的差分输入一般用来检测微
小电压变化的模拟信号,如电流检测,它的ADC是16位的,有一位是符号位,实际的数值表示位为15位,LSB:
是40uV,满量程为163.8mV;bus端输入可以用来测量分辨率要求不高的模拟信号,如系统输入/输出电压检测,
LSB:是8mV,满量程为32.76V。
本设计使用IN-1端检测VBUS端的输入电压,IN+1,IN-1检测VBUS的输入电流;IN-2端检测输出电压,NI+2,IN-2
检测输出电流;
- 数字电源Buck-Boost电路,为负载提供电源,他的主要作用是根据用户设定的输出电压,和输出限流,
为用电设备提供电源。输出电压和限流可通过I2C接口配置。
下图红框部分的电路有标注“新增”的,是后期调试时新增加的,此版PCB板没有更新,仅更新了原理图,这点需要
注意,目前是通过飞线的方式加入元器件的。SC8721支持2.7V~22V的输入电压和2.7V~22V的转换输出电压。
- 主控MCU电路,包含boot、Reset、IO接口和电源部分,这里需要注意的是在通过USB口烧写固件时需要保证
{BOOT1,BOOT0}=01 ,这样才能保证CODE从启动程序存储器启动;这里的BOOT1在PB2口上,PB2连接了一个
按键输入,上面有一个滤波电容,当MCU有通过电后滤波电容会储存电荷,当想进入启动程序时,有很大概率进不了,
而是进入了RAM程序段;这里的解决办法是同时按住SW1和短接BOOT0端子,然后复位或者上电MCU。
- 本设计还加入了一颗低功耗蓝牙(BLE)芯片,如下是BLE芯片的电路,包含RF、晶振、IO控制和电源部分。
BLE芯片可通过跳线冒与MCU的UART进行物理连接,通过UART口实现数据的交互;在下载BLE芯片固件时,需取消跳
线冒,如下USB0 DP,DM用于BLE芯片固件下载口或者在正常模式下时的UART TX、RX与MCU进行通信。
- 如下是LCD接口电路,由背光控制、电源、IO控制和SPI通信电路组成
- 如下是多功能按键电路和实物图
用户UI介绍
——————————————————————————————————————————————————————————————
- LCD显示描述
- lcd左上角部分有两部分信息,1. 是显示当前设定的请求允许的最大受电电压,也就是通过PD协议或者是BC1.2协议向USB
电源适配器请求的允许最大受电电压;2. 是实时显示输入源的电压与电流信息
- lcd右上角部分有两部分信息,1. 是显示当前设定的期望输出电压,和电流限制;2.是显示实时显示实际的输出电压、
电流和功率信息
- lcd下半部分,用于实时记录最近250个采样点的输出电压与电流信息,红色线条表示输出电压,浅蓝色线条表示输出电流
- 多功能按键描述
如下是本设计使用到的多功能按键,它有三个方向的自由度,分别是逆时针旋转,顺时针旋转和中间向下按下,
它们分别代表了3个不同的按键。本项目中把逆时针旋转定义为左键(LEFT),顺时针旋转定义为右键(RIGHT),
中间按键定义为中间键(CENTER)。
下表是本项目中使用到的按键事件
按键事件 | 描述 |
DOWN | 按键按下 |
UP | 按键抬起 |
SINGLE_CLICK | 单击 |
MULTI_CLICK
|
多击,如:双击,三击,四击等 |
LP | 长按 |
VLP | 长长按 |
VVLP | 超长按 |
HOLD | 按下不放 |
按键功能描述
按键名称 |
前提条件 |
按键事件 |
触发功能 |
备注 |
CENTER |
开机状态 |
SINGLE_CLICK |
使能输出电压、输出限流的设定 |
当此功能触发后,对应可调节的选项会闪烁 |
CENTER |
输出电压/限定流设定使能 |
SINGLE_CLICK |
切换选定输出电压和电流 |
|
CENTER |
开机状态 |
MULTI_CLICK=3 |
循环设定PD协议/或者BC1.2协议的请求受电电压 |
5V->9V->12V->15V->20->5V...... |
CENTER |
开机状态 |
MULTI_CLICK=4 |
循环地打开/关闭电压和电流检测记录表功能 |
开机为打开状态,在打开状态,系统将实时采集最近250个点的电压和电流信息,并输出到LCD屏幕 |
LEFT |
输出电压/限定流设定使能 |
SINGLE_CLICK |
输出电压减少50mV |
|
LEFT |
输出电压/限定流设定使能 |
MULTI_CLICK=2 |
输出电压减少100mV |
|
LEFT |
输出电压/限定流设定使能 |
MULTI_CLICK=3 |
输出电压减少1000mV |
|
RIGHT |
输出电压/限定流设定使能 |
SINGLE_CLICK |
输出电压增加50mV |
|
RIGHT |
输出电压/限定流设定使能 |
MULTI_CLICK=2 |
输出电压增加100mV |
|
RIGHT |
输出电压/限定流设定使能 |
MULTI_CLICK=3 |
输出电压增加1000mV |
|
LEFT |
输出电压/限定流设定使能 |
HOLD |
持续减少输出电压 |
步进为50mV |
RIGHT |
输出电压/限定流设定使能 |
HOLD |
持续增加输出电压 |
步进为50mV |
软件介绍
——————————————————————————————————————————————————————————————
本项目使用的软件架构为本人自行开发,此软件架构的核心是所有的功能模块被独立分开,模块与模块之间以消息的方式进行
信息交互,各个模块维护各自的状态;本着以功能内聚大,以数据耦合为主,尽量不使用逻辑耦合,或者直接修改对方数据的方式。
如下是程序框架图,下面对部分模块进行简要说明,详细的大家可以看看源代码,如有不明白的地方欢迎大家留言讨论:
mcu_os:
核心是mcu_os部分,这部分实现了消息处理,任务调度,内存管理等功能,本项目中的usr_main_app、usr_input_task、
usr_display_task几个功能任务模块就是居于此基础之上进行消息传递,实现系统UI的各个功能需求。
usr_display_task:
负责接收来自usr_main_app发来的一些状态信息,在LCD屏幕上实现各种界面显示。
usr_main_app:
负责接收来自usr_input_task发出的用户输入事件,对用户输入事件进行响应,并把一些状态信息发送给usr_display_task
usr_input_task:
负责调用驱动层的io_key,读取io_key状态信息,生成按键事件并把按键事件发送给usr_main_app
主要API函数介绍:
固件下载
——————————————————————————————————————————————————————————————
mcu固件下载
- 本项目的MCU固件下载只需要一条C口的USB线就可以,使用雅特力的USB DFU下载工具(Artery_ISP_Programmer),大家
自行下载安装,也可以在代码仓库里的这个目录里找到我下载好的“docs\tools\ARTRY_ISP”,同时还需要安装USB DFU驱动
(Artery_DFU_DriverInstall.exe),通常在下载工具的目录里面有。
- 上电之前需确保{BOOT1,BOOT0}=01才能进入USB DFU模式,BOOT1(PB2)目前接的是一个向右旋的按键,保持按键处于向右
按下状态;BOOT0有一个接线端子,将两头短接到一起就可以,PCB板子上有丝印,下载程序过程中一定要保持短接状态,因为这端
子还有另外一个功能,就是切换USB接口到MCU这边。
- 当{BOOT1,BOOT0}=01时上电,设备进入USB DFU模式,如下图1部分,表示设备已经进入USB DFU模式;接着一直点击下
一步直到图2,选择需要下载的固件,软后点击下一步完成关机下载;断电,恢复{BOOT1,BOOT0}=00/10;上电,这时设备应该
能正常跑起来了。
低功耗蓝牙固件下载
1. 按如下方式接好USB线到板子,如果芯片是空片,这里就不需要杰里的强制升级的开发工具了,这里我们只需准备一条如下图的USB数据线就可以;
后面更新程序时就不用数据线了(因为本项目的源码是打开了OTA功能的),我们可以通过杰里的OTA升级小程序更新软件,(可以在微信端搜索
“杰里OTA”)。
接上USB线到电脑后,电脑端“设备管理器”中应该可以看到如下的USB设备
2. 用VS CODE打开SDK源代码,按如下图操作,编译并下载程序(如果你的VS CODE没有安装Task Explorer插件的话自己需按装一下)。
你最终应该会看到如下的提示信息,说明程序下载完成。
3. 如果需要OTA的话OTA文件在如下的目录里。
硬件展示
——————————————————————————————————————————————————————————————
1. 铜柱双通:M2*6 4颗
2. 铜柱单通:M2*11+3 4颗
3. 螺丝:M2*6 8颗
项目当前已知问题!!
——————————————————————————————————————————————————————————————
1. PD芯片CH224K的VBUS引脚需串联10k电阻,原理图有更新,PCB未更新。
2. 刷屏速度慢,肉眼可见的闪屏。
3. 电压调节电路在SC8721的CE引脚需增加一个下拉电阻,保证上电时芯片处于关闭状态,原理图有更新,PCB未更新。
4. 电压/电流调整的方式不是很方便,本人还是比较喜欢使用旋钮的方式。但是旋钮又占空间,很难把东西做到很小。
5. 输出电流检测电路需要优化,目前调节电压时会检测到有输出电流;需把检测电阻往外移,移到反馈网络和所有滤波电路的后面。
6. LCD焊盘位置有点偏上,可以适当向下偏移一点;
如果您觉得本项目不错,麻烦点个赞。
同时如果您觉得本项目有实用价值,也欢迎您点击收藏一下。
其他附件
——————————————————————————————————————————————————————————————
- MCU源代码地址:https://gitee.com/Bryan_He/open_usb_power_supply.git
- BLE源码地址:https://gitee.com/Bryan_He/uart2ble.git
- 目前为止的MCU固件,下面附件中下载:usb-power-supply-MCU-Firmware.hex
- 小程序上线成功了,可以扫描打开小程序(小伙伴们可以尽情的玩耍了):
- 有小伙伴反馈找不到MCU的购买渠道,如下是雅特力的天猫店铺链接:
历史记录
——————————————————————————————————————————————————————————————
2024-1-3
起草,构思这个项目的需求;
1. 可以将USB电源适配器通过一个DC-DC可调升降压电源芯片转换后输出一个从1.0V~30V的可调DC电源
2. 支持PD3.0协议,当使用支持PD3.0的USB电源适配器时,可以通过协议沟通,使其输出5V,9V,12V,15V,20V的电压
2. 输入电压,电流的实时检测和显示
2. 输出电压,电流的实时检测和显示
3. 输出电流可设定,超过设定输出电流关断输出
4. 一个比较友好的人机交互界面
2024-1-5
根据项目需求,选择DC-DC升降压电源芯片和其他的一些外围器件,初步选定硬件方案:
1. DC-DC Buck-Boost: 南芯SC8721QFER,Vin:2.7 V to 22V;Vout:2.7 V to 22V
2. MCU:打算使用雅特力AT32F415KCU7
3. 电流检测:打算选TI的INA3221AIRGVR
4. LCD:待定
5. PD芯片:CH224K,4V 至 22V 输入电压,支持 PD3.0/2.0,BC1.2 快充协议
2024-1-10
完成原理图,完成部分元器件布局
2024-01-24 17:50:39
完成pcb所有布线,下单PCB和SMT,整理资料,申请PCB耗材免单
2024-01-31 19:39
等了几天,终于等到你了!!今天板子已经SMT贴好,寄到深圳,一回家就拆快递咯,下面展示一下贴好的板子,免单贴了2片,终于不用手贴了,
太爽了!!有两颗芯片由于立创商城没有,所有只能手焊了。
2024-02-01
今天将未贴的物料焊接上去了,准备上电,测量供电是否正常;可以上电后发现MCU和其他的IC的3.3V供电不正常,只有1.1V左右,哎真是折腾不止啊。。
经过排查后发现电源的RC滤波电路的电阻贴错物料了。
2024-02-02
完成in3221的驱动和输入/输出电压/电流的检测。开始调试SC8721的驱动,在调试过程中我反复控制CE引脚,很不幸的事情还是发生了,
一片板子的SC8721冒烟了,很不能解释,我并没有加任何负载,为何会这样呢?
看来年前就只能到这里了,明天就回老家了,这个问题只能年后处理,不知道是硬件问题还是软件控制逻辑问题。
2024-02-20
SC8721驱动完成,可实时调节输出电压。
2024-02-26 晚上23:38
完成部分LCD的显示,并且可实时刷新监测的电压电流。还不错!!
2024-02-28 晚上23:48
完成部分LCD的全部布局显示!
2024-03-01 晚
完成全部的LCD显示及数据检测刷新功能
2024-03-02 晚 21:47
撰写开发文档,为发布项目整理开源相关的文件
2024-03-10 早上 10:38
这几天在调试蓝牙部分,因之前没有使用过这颗蓝牙芯片,在调试过程中遇到了不少问题,在此记录分享一下:
1. 芯片的供电不能超过3.5V,不然芯片可能会损坏,在这里为啥会提这个呢,是因为本人在调试过程中芯片因为这供电坏了不少;这主要是杰里的
下载工具输出的供电是5V的。这里需要想办法避免;在下载时我是这样给芯片供电的,这样就可以避免烧坏芯片了。
2. 在第一次下载程序时需确保PA9口没有外部的下拉电路,如果有需暂时先断开。因为芯片默认这个口是有低电平持续4S后有复位芯片的功能,
影响下载程序。
3. 晶振的偏差不能太大,太大将导致无法搜索到蓝牙,这个问题困扰了我大部分的调试时间,因为程序运行一切正常,就是找不到蓝牙,后面
经过排查才发现是晶振的问题。
4. 这里有个小技巧与大家分享,就是杰里的大部分芯片,如果是空片,里面没有任何程序的时候,第一次下载程序是不需要使用任何工具的,只
需要一条普通的USB数据线就可以下载了!!后续如果需要更新程序的话可以使用OTA的方式(前提是程序内部需配置打开BLE OTA的功能),然后
微信端搜索“杰里OTA”就可以找到这个小程序,通过这个小程序进行OTA升级,非常方便,这点对于只是想玩玩,不愿意花钱买工具(80多RMB)
的朋友还是一个不错的方案。
2024-03-10 晚上 21:01
今天收到了亚克力板,第一时间组装了一台,还好这次很顺利,没有出现其他的意外,下面展示一下成果吧!嗯。。。瞬间档次就上来了。
2024-03-17 晚上
微信小程序的UI界面和蓝牙通信部分基本功能已经调通。
2024-03-23 早上
完成微信小程序的全部功能。
2024-03-31 晚上
2.0版本开始布局PCB器件
2024-04-01 晚上
2.0版本线路基本全部走通,再有一轮的优化走线和排版就可以发出去了。
2024-04-06 晚上
2.0版本PCB板发出制板,准备采购一些关键物料
2024-04-07
有很多小伙伴申请了小程序体验,但是体验版本的数量只有15个体验成员,为了不辜负大家的支持,我决定上线小程序。之前没有接触过小程序,
这几天查阅了相关资料“如何上线小程序”,今天提交了相关的备案资料等待审核,审核通过后会第一时间分享出来给大家,谢谢大家的支持!!
版本迭代
——————————————————————————————————————————————————————————————
- 评论区有不少小伙伴期待有下一版本的更新,我这几天有认真的在考虑过这个问题,最终决定在现有的基础之上,
再迭代一个版本,把现有的一些问题点都优化掉,让她更接近于产品的要求。
- 另外我还有一个不错的想法,我想把这个USB电源变得更加的实用和方便,我想再增加一个有用的小功能,在这里就先不
透露给小伙伴们了,想给大家一个小 “惊喜”。
V2.0 已经发布,感兴趣的小伙伴可以拽下面链接:
【星火计划】USB可编程电源/功率监测 - 嘉立创EDA开源硬件平台 (oshwhub.com)
项目愿景
——————————————————————————————————————————————————————————————
- 希望通过开源分享的方式,与更多的小伙伴交流技术,一起成长,为祖国的产业转型做一点自己的微博力量。
- 希望此项目能帮助到那些希望学习,捣腾嵌入式的小伙伴,能为你们提供在开发学习过程中对设备供电需求的一种廉价方便的方案。
演示视频
——————————————————————————————————————————————————————————————
评论