发作品签到
标准版

#第七届立创电赛#基于N32G430的USB功率计

工程标签

4.9k
0
0
11

简介

基于N32G430的USB功率计,电压范围4.5~24V,电流范围0~3.27A。USB-A,USB-C接口输入输出。支持测量D+,D-电压,支持QC3.0、PD等多种快充协议

简介:基于N32G430的USB功率计,电压范围4.5~24V,电流范围0~3.27A。USB-A,USB-C接口输入输出。支持测量D+,D-电压,支持QC3.0、PD等多种快充协议

开源协议

CC-BY-NC-SA 3.0

创建时间:2022-08-13 01:43:05更新时间:2022-09-19 01:19:58

描述

关于USB-C接口

1)如果输入端是C-C线,输出端使用USB-A接口,那么由于CC1和CC2都是悬空状态,所以充电器或电脑不会有电压输出。如果有这种使用需求,需要在R3和R4位置焊接5.1K电阻用于识别设备。

2)如果输入端和输出端都是C-C线,请拆掉R3和R4,否则可能出现异常情况。需要注意的是,因为数据线内部只有一对CC是连接的,连接在功率计时需要注意方向。通常情况下,充电器或电脑的USB-C输出必须连接设备之后才会输出电压,只连接功率计输入端是不工作的。如果输出端连接设备后屏幕仍然无显示,可以将功率计输入或输出端的任意一根旋转180度后插入。

0、项目的B站视频

https://www.bilibili.com/video/BV1PN4y1F76v/

1、项目功能介绍

基于N32G430的USB功率计。

用于测量USB设备的电压、电流、功率等。在日常的硬件调试中,通过这个功率计,可以排查设备是否短路、数据线是否接触不良等问题。

支持测量VBUS线路的电压、电流、功率,同时可以测量D+和D-的电压

输入电压范围4.5~24V,电流范围0~3.27A,推荐用于测量65W及以下功率的充电器或电源适配器。

由于输入和输出均为两种接口,所以支持使用CH224受电协议模块旁路修改输入电压。

相关模块的开源工程https://oshwhub.com/XiaoMao/CH224K-Module

2、项目属性

自行设计

3、开源协议

CC-BY-NC-SA 3.0

4、硬件部分

本次设计尽量选用国产芯片

MCU采用国民技术N32G430K8L7,LQFP32封装。该型号相比STM32F030系列,内核升级到M4F,支持浮点运算,并且具有更高的主频,具有更强的性能。使用了ADC、SPI和I2C外设,内置时钟。预留了SWD接口用于烧录程序,预留了UART接口用于输出调试数据。其中,ADC用于测量DM和DP的电压,SPI用于连接OLED,I2C用于连接INA226。

监测芯片采用德州仪器INA226,最大支持36V输入电压。支持测量电压和电流,并自动计算功率。使用I2C输出测量结果。由于INA226为模拟输入,所以使用一个LDO独立供电,并在靠近电源引脚处使用10uF和100nF的MLCC电容进行滤波。电流采样电阻的阻值为10mΩ,较小的阻值可以尽量降低在这个电阻上产生的压降。较低的温度系数可以保证在电流较大时电阻的阻值变化较小,提高测量的线性度。本次选用的电阻为1%精度、2W功率,温度系数为±70ppm/℃。同时,电流采样电路使用了RC滤波以减小噪声。

在调试过程中,我发现这款芯片可以用TPA626替代,我打算在比赛结束后测试该芯片,如果替代成功,即可实现所有元件均为国产的目标。

数字电源采用DC-DC方案,为MCU和OLED供电。DC-DC的高效率可以防止高压差时PCB发热,影响测量结果。芯片选用TMI3359,最大支持30V输入电压。采用CD32封装的4.7uH电感,保证电感不会发热。我个人喜欢开关频率较高的DC-DC,这样可以选择较小的电容和电感,减少电路的面积。模拟电源采用LDO方案,为INA226供电。LDO的输出电压波动更小,更适合精密的测量。另外INA226属于低功耗元件,即使压差比较大,也不会发热。芯片选用SE8533,最大支持36V输入电压。输入电容采用耐压50V的MLCC电容。因为MLCC是陶瓷材质电容,会随着电压升高发生一定形变,导致容量降低,所以,MLCC的耐压值一般选用最大输入电压的2~3倍。

显示屏使用0.91寸OLED屏,分辨率为128x32,通信协议为SPI。

接口方面,输入端为一个USB-A公头和一个USB-C母头,输出端为一个USB-A母头和一个USB-C母头。使用USB-A可以免去数据线,而两个USB-C则考虑到了PD协议以及使用中可能需要延长线将功率计放置于利于观察的位置。为了可以使用USB-C输出的适配器,功率计的两个USB-C的CC连接在一起,并且预留了5.1K下拉电阻的焊接位置。

焊接完成的PCB如下图所示。

正面

正面

背面

背面

INA226特写

N32G430特写

5、软件部分

系统外设主要使用了SPI、I2C和ADC。其中,I2C用于INA226的通信,SPI用于OLED的通信,ADC用于采集D+和D-的电压。

本次软件开发使用Nations.N32G430_Library.1.0.0

外设的使用参考了其中的examples

1)在进行编程之前,需要先根据已经确定的参数计算INA226的Calibration Register值。根据规格书上的计算公式,已知的变量只有采样电阻Rshunt=10mΩ。而Current_LSB在计算电流时会使用到,为了方便计算,我将Current_LSB定为一个整数。65W充电协议的常见输出为20V3.25A,只需要取比3.25更大的值作为上限即可。由于分母为2^15,所以这里取电流上限为3.2768A,Current_LSB即为0.1mA。同时计算得到CAL的值为5120,在初始化时将该值填入0x05寄存器即可。

2)程序的流程图如下

3)初始化阶段,由于程序不需要大量运算,所以未开启PLL功能,降低了系统的总功耗。同时,RCC也仅开起了ADC、SPI、I2C和GPIO部分。在初始化时,部分参数使用了宏定义以方便修改。在调试过程中,我遇到了SPI不能用的问题,经过排查,我发现在初始化SPI时,即使没有用到硬件NSS,也需要将NSS寄存器置高才可以正常使用SPI。

4)读取测量结果并进行计算。

在读取功率寄存器后会自动开始新一轮测量,所以最后读取功率寄存器。

由于DM和DP电压保留一位小数即可,并不需要很精确的测量结果,所以基准电压直接取电源电压3.3V。将除数为2的整数次幂的除法转化为移位可以提高运行效率。

在输出端没有接任何负载的情况下,由于±1误差的存在,可能读取到负的电流值。为了避免这种情况发生,当电流的符号位为1时直接将电流和功率都视为0。

电压的LSB为固定值1.25mV,电流的LSB根据计算得到0.1mA,功率的LSB固定为电流的25倍,即2.5mW。将读取到的数据与LSB相乘即可得到最终的测量结果。

5)将测量结果转化为方便显示的格式。

由于INA226的精度较高,参考屏幕分辨率和字符大小,电压和电流保留3位小数,功率保留两位小数的情况下可以得到较好的显示效果。

在测量范围中,测量结果可能会用到十位也可能不会,为了防止字符移动位置,采用右对齐的方式进行排列。

使用求余和除法将测量结果的每一位拆分成单个数字。当十位是0时,使用空格替代这个0起到消隐的效果。

在数字的字体中,将空格填充到数字9的后面,即第10行,只要将需要显示空格的数字替换为10即可。

6、BOM清单

7、大赛LOGO验证

8、演示您的项目并录制成视频上传

正常工作效果展示

当电子负载为USB接口时,使用CH224模块旁路修改输入电压接线方式

20V输入展示

详细演示见视频

9.参赛感想

本次参加立创大赛以及国民技术训练营使我收获颇多。本次参赛从元件选型,到电路设计、PCB设计、焊接、编写程序以及调试都是我自己完成的。通过这次参赛,我不但锻炼了自己的设计能力,还收获了一个日常生活中能用到的小工具。感谢立创为我提供了这样的比赛环境

设计图

原理图
PCB

BOM

IDNameDesignatorFootprintQuantity
10.1uC1,C2,C3,C4,C5,C6,C14,C17,C18C04029
210uC7,C10C12062
322uC8C08051
427pC9C04021
510uC11,C13C06032

附件

序号文件名称下载次数
1
studio_video_1663516034934.mp4
7
2
studio_video_1663515771172.mp4
5
3
studio_video_1663515548238.mp4
50
4
N32G430_USBTester.hex
23
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

评论

全部评论(1)
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航