#第七届立创电赛#【2022暑训营】基于N32G430C8L7的模块化USB电压电流功率表设计与开源分享
基于N32G430C8L7的模块化USB电压电流功率表设计与制作最近有不少朋友在问有没有一种简单又强大的工具能精确测量USB设备的电压、电流和功率特别是现在USB PD快充这么普及动不动就几十瓦的功率。正好我之前为立创电赛和暑训营设计过这么一个项目今天就来和大家详细拆解一下从硬件选型到PCB布局手把手教你做一个模块化、可扩展的USB电压电流功率表。这个表的核心是国民技术的N32G430C8L7单片机它性能足够性价比高。最关键的是我们采用了24针满针脚的USB 3.1 Gen2接口这意味着所有数据线都连接上了是真正的“满血”接口不仅能测常规USB设备甚至能支持测量雷电Thunderbolt协议的硬盘盒等设备。整个设计是模块化的方便你后期升级比如把LDO供电换成效率更高的DCDC或者更换更精密的电流采样芯片。板上还预留了多余的IIC和ADC接口想加个温度传感器什么的飞根线就行。下面咱们就一步步来看这个项目是怎么做出来的。1. 项目核心功能与设计思路首先咱们得搞清楚这个USB表要干什么以及为什么这么设计。1.1 它能做什么简单说这就是一个USB“万用表”。你把它串联在电脑或充电头和你的手机、平板、移动硬盘等USB设备之间它就能实时显示电压VUSB端口输出的实际电压比如5V、9V、12V、20VPD协议。电流A设备消耗的电流。功率W电压乘以电流得到实时功率。它的高级之处在于使用了24针的USB 3.1 Gen2 Type-C公母座。普通的USB表可能只用4根或9根线供电和低速数据而我们把24根针脚全部引出并走线。这样做最大的好处是保留了所有高速数据通道TX/RX差分对使得这块表具备测量雷电Thunderbolt设备的基本硬件条件通用性极强。1.2 模块化设计的好处我在设计时特意把电路分成了几个相对独立的部分主控模块核心是N32G430C8L7 MCU。电源模块使用SE8633 LDO为整个系统提供3.3V稳压。采样模块电流检测部分设计了兼容INA199和INA226两种芯片的焊盘可以二选一焊接。这种堆叠、模块化的思路让后期修改变得非常灵活。比如你觉得LDO在高压输入时发热大完全可以自己画一个小板子把SE8633换成一颗DCDC降压芯片然后替换掉原来的电源模块。采样精度不够换个更精密的电流采样芯片也行。这就像拼乐高哪个部分不满意就升级哪个。2. 硬件设计与关键元器件选型硬件是项目的骨架选对元器件项目就成功了一半。2.1 主控芯片N32G430C8L7我们选用国民技术的N32G430C8L7作为大脑。这是一颗基于ARM Cortex-M4F内核的MCU主频最高128MHz带硬件浮点单元FPU做功率计算浮点乘法很快。它内置的ADC模数转换器精度不错正好用来读取采样电路送来的电压信号。关键它性价比高资源也够用驱动个屏幕、处理一下采样数据绰绰有余。2.2 电源管理SE8633 LDO给单片机、屏幕、采样芯片供电需要稳定干净的3.3V。这里选择了SE8633这款低压差线性稳压器LDO。为什么用LDO电路相对简单噪声小对模拟采样电路干扰小。SE8633的特点它的输入电压范围很宽最高支持80V输入这意味着即使你测量的是20V的PD快充电压直接进入USB表SE8633也能稳稳地将其降到3.3V保证了高压情况下的安全性。当然高压输入时LDO的功耗发热会比较大所以我在设计思路上留了后路——你可以后期把它模块化替换成高效的DCDC电路。2.3 电流采样方案INA199 与 INA226测量电流的核心是“采样电阻放大器”。我们在USB的电源路径VBUS上串联一个毫欧级别的小电阻采样电阻测量电阻两端的微小压降根据欧姆定律I V/R算出电流。直接测量这个微小电压很难所以需要专用的电流检测放大器。板子上设计了两种芯片的焊盘INA199这是一款高侧电流检测放大器增益固定可选50V/V、100V/V等电路简单。INA226这款就更强大了它集成了电流检测放大器、ADC甚至一个IIC接口。MCU可以直接通过IIC总线从INA226读取已经计算好的电流、电压和功率值精度高还能减轻MCU的ADC负担。你可以根据手头芯片和精度要求选择其中一种焊接这就是模块化灵活性的体现。2.4 接口与PCB布局要点这是本项目硬件上最具特色的部分。24针满针接口我们使用了USB 3.1 Gen2的Type-C公头和母座24个引脚全部利用。这不仅是为了供电和USB2.0数据D D-更是为了那多组高速差分线TX/RX。PCB布局与走线等长走线对于USB3.0及以上速率的高速差分信号线如TXp/TXn RXp/RXn我们进行了等长走线处理。目的是让一对差分信号同时到达终点减少信号失真保证通信质量。阻抗匹配未完成在原始设计中差分线的阻抗没有进行匹配。这意味着在极高速度如10Gbps的USB 3.1 Gen2下信号反射可能会比较严重影响稳定性。对于测量功能来说可能够用但若想完美兼容雷电协议这一步是需要优化的。屏蔽建议原文特别提到“需要自行贴铝箔屏蔽”。这是因为高速差分线RXTX很容易成为辐射源也会受到外界干扰。自己贴一层接地铝箔能有效屏蔽干扰让测量更稳定。这是个非常实用的后期加固技巧。扩展接口板上特意引出了几组空闲的IIC和ADC引脚。IIC可以接各种传感器如温湿度、气压ADC可以直接测量外部模拟电压。你想增加一个温度监控功能只需要找一个IIC接口的温度传感器飞线接上再写几行代码读取就可以了。3. 软件部分与程序烧录软件方面这个项目采用了比较务实的方案。原文提到“使用非官方方案代码微改”。我理解是可能参考了市面上已有的开源USB表代码框架然后针对我们这块板子使用的N32G430C8L7芯片、特定的屏幕驱动以及采样电路进行了适配和修改。比如初始化芯片的时钟、配置ADC去读取采样电压、驱动OLED屏幕显示数值等等。注意虽然代码有修改但原文也指出“刷入官方方案也能亮屏”。这说明硬件设计可能与某个流行的开源USB表方案比如“USB PD诱骗器”社区的一些方案的硬件兼容性较高。如果你手头有那些方案的固件烧进去屏幕可能能点亮但测量功能大概率是不准的因为采样电路、校准参数肯定不同。对于想复现这个项目的朋友最理想的路径是获取为本项目特定硬件编写的源代码原项目已开源。使用Keil、IAR或GCC等工具针对N32G430C8L7芯片进行编译。通过SWD/JTAG调试器如ST-Link、DAP-Link将程序烧录到芯片中。4. 制作、调试与扩展建议如果你拿到了这个项目的开源资料原理图、PCB文件、代码准备自己打板焊接这里有几个实操建议焊接顺序建议先焊接电源部分SE8633 LDO及其周边电容焊接完后用万用表测量一下确保3.3V输出正常。然后再焊接主控MCU和电流采样芯片最后焊接USB接口和屏幕等外设。电流采样校准这是精度关键。你需要一个相对精确的万用表和可调负载。给USB表输入一个固定电压如5V接上负载让电流稳定在某个值如1A。同时用你的万用表测量实际电流然后在代码中调整校准系数使USB表显示的值与万用表一致。最好在多个电流点如0.5A 1A 2A进行校准。扩展功能实战——加装温度传感器 板上预留了IIC接口我们以添加一个常用的LM75温度传感器为例硬件连接找到板子上引出的IIC引脚通常是SCL和SDA以及3.3V和GND。将LM75的对应引脚飞线连接。软件修改在原有代码中初始化IIC总线然后添加读取LM75寄存器的函数。LM75的地址通常是0x48。显示在屏幕显示布局里分出一小块区域来显示读取到的温度值。// 示例代码片段读取LM75温度需根据实际使用的IIC驱动调整 float Read_LM75_Temperature(void) { uint8_t buffer[2]; float temp; // 假设LM75地址为0x48 温度值寄存器地址为0x00 I2C_ReadBytes(0x48, 0x00, buffer, 2); // LM75返回11位精度的数据 temp (int16_t)((buffer[0] 8) | buffer[1]) / 256.0; return temp; }关于雷电协议设备测量再次强调这个硬件具备了连接雷电设备的物理基础24针全通但由于高速信号线阻抗未匹配可能无法进行高速数据传输但测量其供电电压和电流是完全可以的。贴上铝箔屏蔽层能更好地保证在复杂电磁环境下测量的稳定性。这个项目从一颗MCU开始到一块能显示精准功率的USB表涉及了电源设计、模拟采样、高速PCB布局、单片机编程等多个嵌入式开发的关键环节。希望这份详细的拆解能帮你不仅做出一个工具更能理解背后的设计思路。所有硬件和软件资料都是开源的你可以完全复刻也可以在此基础上魔改做出属于你自己的、功能更强的测试仪器。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2413093.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!