【星火计划】USB可编程电源/功率监测
简介
【星火计划】USB可编程电源/功耗监测,小程序控制, 支持USB PD3.0,BC1.2协议,支持5V~20V输入, 宽范围的输出电压,从2.7V ~ 20V可调,3A的带载能力
简介:【星火计划】USB可编程电源/功耗监测,小程序控制, 支持USB PD3.0,BC1.2协议,支持5V~20V输入, 宽范围的输出电压,从2.7V ~ 20V可调,3A的带载能力开源协议
:GPL 3.0
(未经作者授权,禁止转载)描述
重要变更通知
———————————————————————————————————————————————————————————
如下的R45,R22无需焊接,解决SC8721莫名挂掉的问题点。!!!!!!!!
项目简介
———————————————————————————————————————————————————————————
这几天有很多小伙伴在反馈:找不到V1.0的资料,下面是原V1.0的项目地址
USB可编程电源/功率监测仪-V1.0 - 嘉立创EDA开源硬件平台 (oshwhub.com)
本设计支持USB PD3.0,BC1.2协议, 可通过PD/BC1.2协议使支持PD/BC1.2协议的USB电源适配器输出5V,9V,12V,15V,20V
电源给系统供电;
宽范围的输出电压,从2.7V ~ 20V可调,3A的带载能力;
输入电压电流,输出电压电流实时监测,通过320X240的TFT屏或者上位机反馈给用户;
可通过一个多功能按键或者上位机对输出电压,输入电压进行调整;
(点击图片看大图)
上位机微信小程序
(点击图片看大图)
小程序上线了,可以扫描打开小程序:
项目背景
———————————————————————————————————————————————————————————
- 本人是一个喜欢捣腾的嵌入式软件工程师,平时喜欢搞搞一些有趣的“玩具”,由于手上目前没有可调电源,平时捣腾“玩具”
时经常会用到一些比如12V,3.3V,5V或者模拟电池电压变化的过程等的这些电压源,又不想花那个钱去买一台可调电源,心想“我
可不可以搞一台方便携带,小巧,不依赖特定的电压源,可以满足日常大部分需求的可调电源呢”;我首先想到的是,“我是不是
可以利用现有的电源适配器(USB 适配器),外挂一个DC to DC芯片,实现升降压是不是就可以实现了?”。
- 说搞就搞,前期也到开源广场看了一遍,看看有没有类似的开源,复刻一个就好了;可是。。。。。,要不就是要固定
10V以上的输入电压源(这不是很鸡肋吗,我为了使用你这个电压源,我还得另外再搞个专用的适配器,这不符合我的设计需求);
要不就是电路复杂,整机做的比较大,不方便携带,不方便DIY;
- 算了,还得我自己来!开搞。。。
项目亮点
———————————————————————————————————————————————————————————
- 支持USB PD3.0/PD2.0,BC1.2协议,支持5V~20V输入
- 输出电压从2.7V ~ 20V可调,3A的输出电流带载能力,可满足日常实验使用
- 输出限流可从500mA~3A可调
- 一路简易的DC电压测量表功能,量程0V~48V
- 电源输出可控,方便反复给用电设备断电上电的操作
- 微信小程序配置输入输出电压
- 电源输入电压,电流实时监测
- 电源输出电压,电流实时监测
- 电压检测分辨率8mV,电流检测分辨率40uV/10mR=4mA
- 320x240 TFT屏实时显示用电情况,可做为一个简易功率计使用,监测用电设备的用电能力
- 可通过BLE与上位机进行通信,实现更多应用的拓展开发
- 外围器件少,实现原理简单,非常方便DIY
- 小巧方便,不依赖特定电源,只要是USB适配器都可以使用
- 软硬件全部开源
- 本项目还可以做为一款入门级的开发板使用,在嵌入式学习中的大部分外设,在此项目中都有使用,如:I2C、UART、
SPI,USB和IO控制等,未使用的IO口都有引出。
硬件介绍
———————————————————————————————————————————————————————————
- 硬件资源与尺寸标注
(点击图片看大图)
(点击图片看大图)
- 电源输出端子座
(点击图片看大图)
在这里重点解释一下为何本设计选用了如图所示的输出接线端子座,其实目的就一个,方便,不依赖于特定的接线插头,
随便身边一条普通的线就可以使用;而且无需其他额外的工具就可以操作(有手就行)。
我在开源社区有看到一些类似的开源项目,使用的都是一些专用的插座,有一定的局限性,不符合便携方便的需求。
- 原理图介绍(下面的图片点击可以看大图)
- 下面是电源输入部分的电路,本设计的输入分为两部分,一部分是通过USB Type-C口输入;
另外一部分是通过U10,U11两个接线端子接入DC电源。
(点击图片看大图)
- PD协议芯片电路,这部分电路相对比较简单,只是必要的供电和控制电路,完成PD协议与BC1.2协议的交互。
(点击图片看大图)
- USB切换电路,用于PD协议芯片的USB D+,D-和MCU USB D+,D-的复用切换,工作原理是:当上电时D+,D-交给
PD协议芯片,完成BC1.2的协议交互;当不不需要协议信息交互时,可用做MCU的对外通信USB接口,另外MCU的固件
也是通过这个USB口下载的。
(点击图片看大图)
- 3.3V DC-DC电路,为系统提供3.3V供电电压。支持4.5V~28V的输入电压。
(点击图片看大图)
- 电压电流检测电路,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
检测输出电流;IN-3端为简易电压表的电压检测端。
(点击图片看大图)
- 数字电源Buck-Boost电路,为负载提供电源,他的主要作用是根据用户设定的输出电压,和输出限流,
为用电设备提供电源。输出电压和限流可通过I2C接口配置。
(点击图片看大图)
- 主控MCU电路,包含boot、Reset、IO接口和电源部分,这里需要注意的是在通过USB口烧写固件时需要保证
{BOOT1,BOOT0}=01 ,这样才能保证CODE从启动程序存储器启动;
(点击图片看大图)
- 本设计还加入了一颗低功耗蓝牙(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个不同的按键。本项目中把逆时针旋转定义为CCW,顺时针旋转定义为CW,
中间按键定义为中间键(CENTER)。
下表是本项目中使用到的按键事件
按键事件 | 描述 |
DOWN | 按键按下 |
UP | 按键抬起 |
SINGLE_CLICK | 单击 |
MULTI_CLICK
|
多击,如:双击,三击,四击等 |
LP | 长按 |
VLP | 长长按 |
VVLP | 超长按 |
HOLD | 按下不放 |
CW | 顺时针旋转 |
CCW | 逆时针旋转 |
按键功能描述
按键名称 |
前提条件 |
按键事件 |
触发功能 |
备注 |
CENTER |
开机状态 |
MULTI_CLICK=2 |
使能输出电压、输出限流的设定 |
当此功能触发后,对应可调节的选项会闪烁 |
CENTER |
输出电压/限定流设定使能 |
MULTI_CLICK=2 |
切换选定输出电压和电流 |
|
CENTER |
开机状态 |
MULTI_CLICK=3 |
循环设定PD协议/或者BC1.2协议的请求受电电压 |
5V->9V->12V->15V->20->5V...... |
CENTER |
开机状态 |
MULTI_CLICK=4 |
循环地打开/关闭电压和电流检测记录表功能 |
开机为打开状态,在打开状态,系统将实时采集最近250个点的电压和电流信息,并输出到LCD屏幕 |
CENTER |
开机状态 |
LP | 循环地打开/关闭电压表测量界面 |
|
CCW |
输出电压使能 |
逆时针旋转 |
减少输出电压 |
|
CCW | 限定电流设定使能 | 逆时针旋转 | 减少输出限流 | |
CW |
输出电压使能 |
顺时针旋转 |
增加输出电压 |
|
CW |
限定电流设定使能 |
顺时针旋转 |
增加输出限流 |
|
CENTER | 开机状态 | SINGLE_CLICK | 循环地打开/关闭电源输出 | |
CENTER | 开机状态 |
MULTI_CLICK=5 |
循环地打开/关闭小程序二维码 | |
软件介绍
———————————————————————————————————————————————————————————
本项目使用的软件架构为本人自行开发,此软件架构的核心是所有的功能模块被独立分开,模块与模块之间以消息的方式进行
信息交互,各个模块维护各自的状态;本着以功能内聚大,以数据耦合为主,尽量不使用逻辑耦合,或者直接修改对方数据的方式。
如下是程序框架图,下面对部分模块进行简要说明,详细的大家可以看看源代码,如有不明白的地方欢迎大家留言讨论:
(点击图片看大图)
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)目前接的是一个200K的下拉电阻;无需额外操作。
BOOT0有一个接线端子,将两头短接到一起就可以,PCB板子上有丝印,下载程序过程中一定要保持短接状态,因为这端
子还有另外一个功能,就是切换USB接口到MCU这边。
- 当{BOOT1,BOOT0}=01时上电,设备进入USB DFU模式,如下图1部分,表示设备已经进入USB DFU模式;接着一直点击下
一步直到图2,选择需要下载的固件,软后点击下一步完成关机下载;断电,恢复{BOOT1,BOOT0}=00/10;上电,这时设备应该
能正常跑起来了。
硬件设置
软件操作
(点击图片看大图)
低功耗蓝牙固件下载
- 方法1
1. 按如下方式接好USB线到板子,如果芯片是空片,这里就不需要杰里的强制升级的开发工具了,这里我们只需准备一条如下图的USB数据线就可以;
后面更新程序时就不用数据线了(因为本项目的源码是打开了OTA功能的),我们可以通过杰里的OTA升级小程序更新软件,(可以在微信端搜索
“杰里OTA”)。
点击图片看大图
接上USB线到电脑后,电脑端“设备管理器”中应该可以看到如下的USB设备
点击图片看大图
2. 用VS CODE打开SDK源代码,按如下图操作,编译并下载程序(如果你的VS CODE没有安装Task Explorer插件的话自己需按装一下)。
点击图片看大图
你最终应该会看到如下的提示信息,说明程序下载完成。
点击图片看大图
- 方法2
如果你电脑上没有安装VS CODE,也不关心源代码如何实现的话,你可以下载下面的附件“uart2ble_tools.7z”,解压后点击“download.bat”
批处理文件,也可以快速下载BLE的固件到蓝牙芯片内。
点击图片看大图
启动下载后一定要有如下的提示才算下载成功,
点击图片看大图
- BLE OTA文件
1. 如果需要OTA的话OTA文件在如下的目录里。
点击图片看大图
硬件展示
———————————————————————————————————————————————————————————
1. 铜柱双通:M2*6 4颗
2. 铜柱单通:M2*11+3 4颗
3. 螺丝:M2*6 8颗
项目当前已知问题!!
———————————————————————————————————————————————————————————
- 注意!!
SC8721经过大部分小伙伴的多次验证,
这颗芯片很怕长时间的高温吹,如果长时间用风枪吹,很大概率会损坏!!
建议大家如果有铁板烧的,尽量用铁板烧焊接,测边的引脚如果没有焊接好的,尽量用烙铁补焊!!!
- MCU与蓝牙的物理连接,需要按如下图所示的两个跳线帽建立连接,(否则小程序没法控制电压调整和显示电压电流信息)
如果您觉得本项目不错,帮忙点个赞。
同时如果您觉得本项目有实用价值,也欢迎您点击收藏一下。
其他附件
———————————————————————————————————————————————————————————
- MCU源代码地址(代码仓库有两个分支master是V1.0;HV2.0是V2.0):
https://gitee.com/Bryan_He/open_usb_power_supply.git
- BLE源码地址:https://gitee.com/Bryan_He/uart2ble.git
- 目前为止的MCU固件,下面附件中下载:usb-power-supply-v2-sw-v2.3.hex -->改善屏幕刷新率,屏幕不再闪烁;把V3的数据保存功能合并过来,
- 蓝牙固件及下载工具:uart2ble_tools.7z
- 小程序上线成功了,可以扫描打开小程序(小伙伴们可以尽情的玩耍了):
点击图片看大图
- 有小伙伴反馈找不到MCU的购买渠道,如下是雅特力的天猫店铺链接:
- B站完整的制作过程和演示操作:
https://www.bilibili.com/video/BV1pT421273o/
历史记录
———————————————————————————————————————————————————————————
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个体验成员,为了不辜负大家的支持,我决定上线小程序。之前没有接触过小程序,
这几天查阅了相关资料“如何上线小程序”,今天提交了相关的备案资料等待审核,审核通过后会第一时间分享出来给大家,谢谢大家的支持!!
2024-04-14 晚
部分元器件焊接完,首次使用铁板烧,没经验,被烫伤了,小伙伴们在使用过程中得注意高温啊。
版本迭代
———————————————————————————————————————————————————————————
- -
项目愿景
———————————————————————————————————————————————————————————
- 希望通过开源分享的方式,与更多的小伙伴交流技术,一起成长,为祖国的产业转型做一点自己的微博力量。
- 希望此项目能帮助到那些希望学习,捣腾嵌入式的小伙伴,能为你们提供在开发学习过程中对设备供电需求的一种廉价方便的方案。
演示视频
———————————————————————————————————————————————————————————
- B站完整的制作过程和操作演示: https://www.bilibili.com/video/BV1pT421273o/
评论