嘉立创产业服务站群
发作品签到
专业版

#第七届立创电赛#USB功率计与QC诱骗可调电源

工程标签

8.2k
0
0
4

简介

使用N32G430实现了usb功率监测。MAX:20V2A。可USB2.0直通。附加QC3.0诱骗模拟诱骗,DC限流保护输出。

简介:使用N32G430实现了usb功率监测。MAX:20V2A。可USB2.0直通。附加QC3.0诱骗模拟诱骗,DC限流保护输出。

开源协议

CC-BY-NC-SA 3.0

创建时间:2022-08-11 22:40:54更新时间:2024-05-28 05:42:38

描述

 

 1、项目功能介绍

 

参加立创训练营的项目。

最大输入20V3A。实现了USB功率、纹波检测。支持USB2.0直通,或者QC3.0诱骗。DC降压限流输出。

电源部分为dcdc转3.3V为系统供电.使用了MT2492,虽然标称耐压12V,但实测19V下仍能正常输出3.3V 。

电压检测为内部12位ADC,电流检测使用INA199对10毫欧电阻差模50倍放大后内部12bitADC。

 

2、项目属性

首次公开,原创

参考了这个的项目。

【开源】高精度QC3.0诱骗器_哔哩哔哩_bilibili

谢鸣使用了这个图形库的画线函数。
单片机图形库开源分享 32 51 oled_哔哩哔哩_bilibili

 

 

3、硬件部分

硬件结构脉络图

YDadJQOeHZixBw8yWMajLl32quAkorKTGiAT7uFa.png 

A.首先是单片的最小系统

fwDqAt4VFB8L8d6qKyjgMkLj85J6VnYqOepbYgbf.png

 这个比较常规,仿照参考资料就行。值得说一下的是,为了节约成本,未使用参考电源ic,而是直接加滤波后接入ADC参考输入。然后BOOT0启动分区选择和rst仅用0603电阻留着焊点,外接按钮,当程序调试完后可以拆调,提高外观。

B.模块电源部分

 XDWxiwJWSeUzOvBlmR4CwewpXaaXtCbCYEGLlXJQ.png

qjKfA7FBMEhiMbDfZ73h2wnCAR58kM0Da35VZdjX.png 使用了MT2492虽然标定是16VMAX,但是实测19V下仍然能正常输出3.3V。原理图的15uH是根据手册计算出来的,但是焊接完并不能正常工作。换了一个10uH功率电感后工作正常。

20V则掉压至0.5V左右。可见对mcu保护非常好。充分宽的耐压,完整适配QC3.0的12V。

 

C.烧录与交互

MYC7sffn7h3YyCePQi72Il250s30oSGHcuppFRCI.png

烧录方面引出了uart串口烧录和SWD,这里推荐用SWD在keil里一键烧录。Uart需要下载国民技术的下载软件。此外uart无法debug 。

人机交互方面,用了4个按钮。这里有更好的方案,参考国民技术的开发板,可以按钮一端接IO一端接地就行。然后为了滤波可以按钮并联一个100nF的电容。

显示用的是0.91的spi的屏。不得不说128x32对比128x64体验真的差了挺多。绘制区小一半了,很多显示都比较凑合。驱动用的购买处的示例工程软spi,然后自己重写了中间的字符绘制等东西。再次谢鸣大佬的图形库,我复制适配了里面的一个画线函数。屏幕硬件实际是接在mcu硬件spi脚的,日后有空再搞。

D.核心采样功能

3d4G9EzffucGgU7o3x1INB3CfbMSvUTUtiaVlVA3.png

通过采集输入电压和总线上的电流便可计算功率。

电压是通过电阻分压然后接入ADC引脚。

电流则是通过INA199对10毫欧的采样电阻进行的50倍差模电压放大后进入ADC脚。然后一个设计的小点,MCU系统接入是在低端采样电阻之后,从而避免单片机系统对负载功率采样的影响。

UielL1fvJtxeYuXr2Ha0OPnznuZcR5uGYOPg2lun.png群里挺多人问这个ADC系数。这里粗略的解释一下。

mxMlonLqeus9CxMkf9ThL0yk9FixG0TDiD8VbqfI.png一般我们可能更多会看见左边的电路图模型,而在绘制电路时,我们更多是右边那种形式。

利用万用表的电压档,我们可以测得任意『两点的电压差』,注意是两点的电压差。比如上图,我们会说Uab电压是6.66V,Ubc=3.333V。

在Uxx中,我们把后者电压作为参考,如Uab,其实是Ua-Ub。

那Ua是什么?

其实是对0V而言,a点的电压

而0V定在哪里?一般是锚定为电源的负极。(计做题算时则可以随意设定某点电压为0v然后以此锚点,去计算)。

于是,在这样的电子学体系下,你会发现右图的表达方式是如此自然。

假如你暂时还未能理解,你可以认为,我们始终把万用表的黑笔始终压在电池负极。

而test点的电压可以通过分压计算

Utest= VCC * 5/(10+5)

,如果VCC=10那么Utest=3.33V。(这里是计算思路是串联电阻,电流一定,然后凭这点利用欧姆定律去推导计算)

反过来,如果已知Utest=1V。那么

VCC=Utest ÷[ 5/(10+5) ] =3v

单片机的ADC就是“万用表的黑笔始终压在电池负极”,ADC脚则是红表笔。

然后正式解释那个计算系数。

以我的为例。Lf1aSxywgqq8wGpZkoMSJ0Srn51YQEWrrhO7Zgt9.png

如图,ADC实际采样值为679.RSYswfZdliqo5jDhrUAgKnRsWIo0Tm9cix1i28ev.jpeg

而这ADC值意味着什么?

qeYs4SGYW9Zg2BzXqh05ktUKPt7wzD07C2dcD6cJ.png

于是这个ADC=679的来源是

sRBwU1CHvyG2Rqbb3oATJus4gyAWBgGvsjQDvHFx.png

ADC=Utest/3.3 *4095= 679

那么我们逆推

vXqRSjxZXcCXyYHxBPz3s0Tb658sPPD8in5654ZV.png

Utest=ADC ÷4096*3.3=0.547v

然后结合前面的电阻分压

Vcc= Utest÷[10/(10+82)]=5.03v

再深入一些:

Vcc= Utest÷[10/(10+82)]

Vcc= (ADC ÷4096*3.3) ÷[10/(10+82)]

然后我们把里面的常数化简到一起:

Vcc=ADC* (7.4121X10^-3); Vcc=ADC*0.0074121 (伏特);

如果先前接触过编程,就知道浮点计算是有误差的,于是我们把系数扩大1000倍,使得输出结果单位由伏特变为毫伏。

Vcc=ADC*7.4121;可见与例子中的十分接近了。但为什么还是不一样呢?那是因为MCU的ADC采样时有偏差的。想理解的看[数据手册]的74页(不是用户手册,有2个pdf,重点不同)

。以及善用搜索引擎。

 

6TwFWGIl1l3pgSzzxqnRuyjDL5Dz9hX3K20WLOxl.png

然后是电流获取。这里利用了INA199的50倍差模电压放大。「差模」可以理解为万用表表笔是压在电阻两端测得的电压值。

那么知道电阻两端的电压值,由I=U/R,即可计算得到电流,这里不再赘述了。

w0h29OeNotUkhRcMz52f06QwmnI0MfxucEPpmYVJ.png

为了修正偏差,我这里是使用了可调电源进系数矫正。可见是与理论计算相当接近的。(想实现这个,自行搜索excel拟合曲线)

D.QC诱骗与通道切换

P23MPqAiCVELw6joOd5LFclLTptTm4hUo5ZvIdHk.png

左边是一颗USB2.0的模拟开关ic。利用usb3.0的公头,保证系统先进上电进行工作,默认导通USB2.0的输入输出。原理图可见我的正负与ic的对不上,这里是方便实体pcb中的走线。数据手册中写的是轨到轨。所以我才敢这样做。至于QC3.0充电协议,这个部分自行搜索。

4、软件部分

程序结构主体大体是这样:

之后应该会在B站详细讲解

演示视频:

【立创训练营USB功率计-哔哩哔哩】 https://b23.tv/eCdln06

 


END.作品与立创电赛logo展示

jdcDPtd59cau5utQnZE7HOGT0rZhstWWUIjKwuh3.jpeg

wnCKt5lkwWUWt9BfqcYLZOXoPRkxYSbbNKbnoNpr.jpegdvGseSepAyCM0696dx9tUIoiXU8DmavjlGK7up5U.jpeg

FMwJhbkCDQSj2HBjcocMumKRtUyfZRfJTm6B0EC8.jpeg

8L2ELE9Qp2bkXys7HrQo25wT4GGbcDd1pVs2xM00.jpeg

 

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
1
N32G430C8L7_USBMeter_COPY.zip
466
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

评论

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

底部导航