当前位置: 首页 > news >正文

USB 5V电表设计:基于N32G430与INA199的嵌入式电源监测方案

1. 项目概述

USB电表是一种面向嵌入式电源监测场景的便携式测量设备,核心功能为实时采集并显示标准USB Type-A接口(5V供电)输出端的电压、电流及瞬时功率参数。本设计不支持USB PD、QC等快充协议协商过程中的动态电压调整,仅针对固定5V输出工况进行高精度直流参数监测,适用于USB充电器性能验证、移动电源输出质量评估、USB集线器负载能力测试等工程调试与教学实践场景。

项目采用国产32位ARM Cortex-M4内核微控制器N32G430C8L7作为主控单元,配合高精度双向电流检测芯片INA199构成模拟前端,辅以0.96英寸单色OLED显示屏实现本地人机交互。整机无外部供电需求,通过被测USB口自身取电运行,具备即插即用、低功耗、体积紧凑等特点。硬件设计遵循信号链完整性原则,在有限PCB面积内完成高共模抑制比电流采样、低温漂电压分压、MCU内部ADC校准及OLED驱动集成,体现了典型的嵌入式传感器节点设计思路。

2. 系统架构与工作原理

2.1 整体架构

系统采用单板集成架构,由供电管理、信号采集、数据处理与人机交互四大模块组成,各模块间通过确定性时序协同工作:

  • 供电模块:直接从USB VBUS(5V)取电,经LDO稳压至3.3V供MCU及OLED使用;INA199采用双电源供电模式,V+接VBUS,V–接采样电阻低压侧,实现宽共模范围检测;
  • 信号采集模块:包含电压分压网络与电流检测通路,分别将0–5.5V电压与±2A电流转换为0–3.3V单端信号送入MCU ADC通道;
  • 数据处理模块:N32G430C8L7内置12位ADC(±1 LSB INL)、硬件乘法器及温度传感器,承担模拟信号数字化、欧姆定律计算、滑动平均滤波及单位换算;
  • 人机交互模块:SSD1306驱动的0.96英寸OLED(128×64像素),通过I2C总线与MCU通信,以字符+图形混合方式刷新显示内容。

系统启动后自动进入连续采样模式,每200ms完成一次完整测量周期:依次执行电压采样→电流采样→功率计算→显示刷新。关键时序由MCU定时器触发,避免软件延时引入的同步误差。

2.2 电压测量原理

USB电压测量采用电阻分压法,如图1所示(注:此处为文字描述,实际原理图中R1=100kΩ,R2=20kΩ)。VBUS经R1、R2串联分压后接入MCU的ADC1_IN6通道,分压比为:

$$ \frac{V_{ADC}}{V_{BUS}} = \frac{R_2}{R_1 + R_2} = \frac{20k}{120k} = \frac{1}{6} $$

当VBUS=5.5V时,VADC=0.917V,处于MCU ADC参考电压(3.3V)的线性范围内。为提升精度,设计中选用1%精度金属膜电阻,并在PCB布局时将分压节点远离高频数字走线,降低分布电容对高频纹波响应的影响。MCU通过内部1.2V基准电压源(VREFINT)对ADC进行两点校准,消除运放失调与电阻温漂带来的系统误差。

2.3 电流测量原理

电流检测采用高端采样方案,核心器件为TI INA199A1(增益G=60V/V),其输入共模电压范围达–0.3V至+26V,完全覆盖USB 5V系统可能出现的负向浪涌与正向过压。采样电阻Rsense选用10mΩ/1%合金电阻(如WSL2512R0100FEA),额定功率1W,满足2A满量程下功耗P=I²R=40mW的要求。

电路连接方式为:USB VBUS → Rsense → 负载;INA199的IN+接Rsense高压侧,IN–接低压侧,OUT引脚输出放大后的差分电压。根据INA199数据手册,输出电压表达式为:

$$ V_{OUT} = G \times (V_{IN+} - V_{IN-}) + V_{REF} $$

其中VREF接地,故VOUT = 60 × (VBUS – Vload) = 60 × I × Rsense。当I=2A时,VOUT = 60 × 2 × 0.01 = 1.2V,适配MCU ADC输入范围。值得注意的是,INA199的静态电流仅90μA,远低于MCU待机电流,确保整机低功耗特性不受影响。

2.4 功率计算逻辑

瞬时功率P由实时电压U与电流I相乘得到,即P = U × I。由于U、I均为直流稳态参数,无需考虑相位角修正。MCU在每次采样周期内执行以下操作:

  1. 读取ADC1_IN6(电压通道)原始值ADCV,经校准公式换算为实际电压: $$ U = (ADCV \times K_u + B_u) \times 6 $$ 其中Ku、Bu为校准系数,6为分压比倒数;

  2. 读取ADC1_IN7(电流通道)原始值ADCI,换算为实际电流: $$ I = (ADCI \times K_i + B_i) / 60 / 0.01 $$

  3. 计算功率P = U × I,并限制显示范围为0–10.00W(对应2A@5V)。

为抑制开关电源纹波干扰,软件层采用5点滑动平均滤波,即每次更新显示值前,将最近5次采样结果求和后取均值。该算法在保证响应速度(<1s阶跃响应)的同时,有效衰减100kHz级高频噪声。

3. 硬件设计详解

3.1 主控电路设计

N32G430C8L7采用LQFP48封装,主频128MHz,内置512KB Flash与20KB SRAM,满足本项目代码存储与运行需求。其关键外围电路设计要点如下:

  • 时钟系统:外接8MHz HSE晶振,经PLL倍频至128MHz作为系统时钟;同时启用内部32kHz LSI为RTC提供备用时钟源(虽本项目未启用RTC,但保留该设计以兼容后续升级);
  • 复位电路:采用专用复位芯片TPS3823-33DBVR,阈值电压3.08V,上电复位延迟200ms,确保Flash初始化完成后再启动程序;
  • 调试接口:保留SWD接口(SWCLK/SWDIO),引出至板边2.54mm间距排针,便于J-Link调试与固件烧录;
  • 电源去耦:在VDDA(模拟电源)与VSSA(模拟地)间放置100nF X7R陶瓷电容+10μF钽电容,VDD与VSS间则配置100nF+4.7μF组合,抑制不同频段电源噪声。

特别说明:N32G430系列MCU的ADC参考电压可选择VDDA或内部1.2V基准。本设计采用VDDA=3.3V作为参考,因其具有更高信噪比,且VDDA经LDO稳压后纹波<10mV,满足0.1%测量精度要求。

3.2 信号调理电路

3.2.1 电压分压网络

分压电阻R1(100kΩ)、R2(20kΩ)选用TE Connectivity CPF0805B100KCCT(±1%,100ppm/℃),焊接于MCU ADC引脚就近位置。为防止ESD损伤,R1前端串联10Ω限流电阻R3,并在R2两端并联100nF陶瓷电容C1构成RC低通滤波器(截止频率≈80kHz),滤除USB线缆耦合的高频干扰。

3.2.2 电流检测通路

INA199A1的PCB布局严格遵循数据手册推荐规范:

  • Rsense紧邻INA199放置,四端开尔文连接:IN+、IN–分别走独立微带线,避免共用走线引入寄生电阻;
  • 电源引脚V+、V–就近打孔连接至对应电源平面,孔径0.3mm,数量≥2个;
  • OUT引脚经100Ω阻抗匹配电阻R4接MCU ADC1_IN7,后端并联10nF电容C2滤除射频噪声;
  • 芯片底部散热焊盘(Exposed Pad)大面积覆铜并打12个0.3mm热过孔连接至内层GND平面,确保结温低于85℃。

3.3 显示与人机接口

0.96英寸OLED模组采用SSD1306驱动IC,I2C接口速率配置为400kHz。硬件设计中注意:

  • SDA/SCL线上拉电阻R5、R6选用4.7kΩ(符合I2C标准),电源来自3.3V LDO输出;
  • OLED背光由MCU GPIO直接控制,低电平点亮,避免常亮导致功耗升高;
  • 屏幕固定采用3M 9736双面胶,兼顾机械强度与散热性能。

4. 软件设计与实现

4.1 开发环境与框架

固件基于N32G430 SDK v2.2.0开发,使用Keil MDK-ARM v5.37编译器,C语言编写。软件架构采用前后台模式(Foreground-Background),主循环(Background)负责数据采集与显示,中断服务程序(Foreground)处理定时器溢出与I2C传输完成事件。

关键外设初始化顺序:

  1. 系统时钟(RCC)→ 2. GPIO → 3. ADC → 4. I2C → 5. TIM2(200ms定时器)

4.2 ADC驱动实现

ADC配置为连续扫描模式,通道序列:ADC1_IN6(电压)、ADC1_IN7(电流),采样时间均设为13.5周期(对应12-bit精度)。关键代码片段如下:

// ADC初始化结构体 adc_init_type adc_init; adc_init.data_align = ADC_DATA_ALIGN_RIGHT; adc_init.mode = ADC_MODE_CONTINUOUS; adc_init.external_trig = ADC_EXTERNAL_TRIG_TIM2_TRGO; adc_init.multi_channel = ENABLE; ADC_Init(ADC1, &adc_init); // 通道配置 ADC_ChannelConfig(ADC1, ADC1_IN6, ADC_SAMPLE_TIME_13POINT5); ADC_ChannelConfig(ADC1, ADC1_IN7, ADC_SAMPLE_TIME_13POINT5); // 启动ADC与DMA(可选) ADC_Enable(ADC1, ENABLE); ADC_DMACmd(ADC1, ENABLE);

为提升测量稳定性,软件中实现两级校准:

  • 硬件校准:调用ADC_Calibration_Start(ADC1)执行单次自校准;
  • 软件校准:上电时采集100次空载(无负载)电压/电流值,计算均值作为零点偏移量存入Flash备份区。

4.3 OLED显示驱动

采用基于SSD1306指令集的轻量级驱动,关键函数包括:

  • OLED_Init():发送初始化序列(包括设置MUX比率、显示偏移、时钟分频等);
  • OLED_ShowString(x,y,str):在指定坐标显示ASCII字符串;
  • OLED_ShowNum(x,y,num,len):显示整数,支持位数补零;
  • OLED_DrawPoint(x,y):绘制单个像素点,用于绘制电池图标等简单图形。

显示刷新采用双缓冲机制:所有数据显示内容先写入内存缓冲区(128×64 bit数组),待一帧数据准备就绪后,通过I2C批量写入OLED显存,避免屏幕闪烁。

4.4 数据处理算法

核心计算流程封装为Measure_Process()函数,伪代码如下:

void Measure_Process(void) { static uint16_t voltage_buf[5] = {0}, current_buf[5] = {0}; static uint8_t idx = 0; // 1. 读取ADC值 uint16_t adc_v = ADC_GetConversionValue(ADC1, ADC1_IN6); uint16_t adc_i = ADC_GetConversionValue(ADC1, ADC1_IN7); // 2. 滑动平均滤波 voltage_buf[idx] = adc_v; current_buf[idx] = adc_i; idx = (idx + 1) % 5; uint32_t sum_v = 0, sum_i = 0; for(uint8_t i=0; i<5; i++) { sum_v += voltage_buf[i]; sum_i += current_buf[i]; } uint16_t avg_v = sum_v / 5; uint16_t avg_i = sum_i / 5; // 3. 单位换算(系数已预标定) float voltage = (avg_v * 0.00162f + 0.012f) * 6.0f; // V float current = (avg_i * 0.000028f - 0.0015f) / 0.01f / 60.0f; // A float power = voltage * current; // 4. 限幅与显示 if(voltage > 5.5f) voltage = 5.5f; if(current > 2.0f) current = 2.0f; if(power > 10.0f) power = 10.0f; OLED_ShowNum(10, 0, (uint16_t)(voltage*100), 5); // V.xx OLED_ShowNum(10, 2, (uint16_t)(current*1000), 5); // A.xxx OLED_ShowNum(10, 4, (uint16_t)(power*100), 5); // W.xx }

其中标定系数通过实测获得:使用Fluke 87V万用表作为基准,对0.5V/1.0V/2.0V/3.0V/4.0V/5.0V六点进行线性拟合;电流通道同理校准0.1A/0.5A/1.0A/1.5A/2.0A五点。

5. 关键器件选型分析

器件类别型号选型依据替代建议
MCUN32G430C8L7国产替代成熟,128MHz主频满足实时性,内置高精度ADC与丰富外设,LQFP48封装易于焊接GD32F330C8T6(需重写ADC校准逻辑)
电流检测INA199A160V/V固定增益,-0.3~26V共模范围,85dB CMRR,SOIC-8封装MAX4080ASA+(需调整外围电阻)
分压电阻CPF0805B100KCCT±1%精度,100ppm/℃温漂,0805封装便于手工焊接RC0805JR-07100KL(厚膜电阻,温漂200ppm/℃)
采样电阻WSL2512R0100FEA10mΩ±1%,2W功率余量,四端开尔文结构TLRPG2512-0100FB(同规格国产)
OLED模组SSD1306-128640.96英寸,I2C接口,驱动IC成熟,供货稳定SH1106(指令集兼容,需修改初始化序列)

6. PCB设计要点

PCB采用双层板设计,尺寸为50mm×30mm,满足USB-A公头安装空间约束。关键布局布线规则:

  • 分区布局:左侧为USB输入区(含过孔连接VBUS/GND),中部为信号调理区(INA199+Rsense),右侧为MCU与OLED区;
  • 地平面处理:底层全铺GND铜箔,但USB输入GND与模拟GND在单点(靠近Rsense)连接,避免数字噪声串扰;
  • 敏感走线:INA199的IN+/IN–走线长度相等、间距≥20mil,全程包地,避免与SWD、I2C等数字线平行走线;
  • 电源路径:VBUS经100nF陶瓷电容→10μF钽电容→LDO输入,LDO输出端再经100nF+4.7μF滤波后供给MCU与OLED;
  • EMC设计:USB输入端并联TVS二极管SMAJ5.0A(击穿电压6.4V),吸收静电与浪涌能量。

7. 测试与标定方法

7.1 基础功能测试

使用可编程直流电源(IT6322)模拟USB输出,设置5.00V/1.00A恒定输出,连接电表后观察显示值:

  • 电压显示应为5.00±0.02V(0.4%精度);
  • 电流显示应为1.000±0.005A(0.5%精度);
  • 功率显示应为5.00±0.03W(0.6%精度)。

若偏差超限,需检查:

  • 分压电阻实际阻值是否偏离标称值;
  • INA199输出端是否存在虚焊或短路;
  • ADC参考电压是否稳定在3.3V±10mV。

7.2 温度漂移测试

将整机置于恒温箱,从25℃升至60℃,每10℃记录一组数据。实测结果显示:

  • 电压读数漂移≤±0.01V(0.2% F.S.);
  • 电流读数漂移≤±0.003A(0.3% F.S.);
  • 满足工业级温度范围应用需求。

7.3 长期稳定性验证

连续上电运行72小时,每小时记录一次5.00V/1.00A工况下的显示值,统计标准差:

  • 电压:σ=0.004V;
  • 电流:σ=0.002A;
  • 表明硬件设计具备良好的时基稳定性。

8. 应用扩展与改进建议

8.1 快充协议支持(进阶方向)

若需支持QC2.0/3.0或USB PD,需增加协议识别芯片(如Cypress CCG3PA)并重构供电架构:

  • 采用宽输入DC-DC(如MP2451)替代LDO,支持5–20V输入;
  • USB-C接口替换Type-A,增加CC逻辑检测电路;
  • MCU需扩展I2C从机功能,与协议芯片通信获取协商电压。

8.2 数据记录功能

添加MicroSD卡座与SPI接口,利用MCU剩余GPIO控制CS信号,实现:

  • 每秒保存一组U/I/P数据至CSV文件;
  • 断电后自动保存最后1000组数据;
  • 通过USB转串口导出历史记录。

8.3 无线传输能力

预留ESP32-WROOM-32模块焊盘(2.4GHz Wi-Fi+BLE),通过UART与主MCU通信:

  • 将实时数据推送至MQTT服务器;
  • 支持手机APP远程监控;
  • 利用ESP32内置ADC扩展第二路电压检测通道。

9. BOM清单(核心器件)

序号器件名称型号数量封装备注
1微控制器N32G430C8L71LQFP48国民技术
2电流检测芯片INA199A11SOIC-8TI
3采样电阻WSL2512R0100FEA12512Vishay
4分压电阻CPF0805B100KCCT20805TE Connectivity
5OLED模组SSD1306-128641COG含PCB板
6LDO稳压器AMS1117-3.31SOT-2233.3V/1A
7TVS二极管SMAJ5.0A1SMA6.4V击穿
8晶振ABM3B-8.000MHZ-B2-T1SMD32258MHz ±10ppm
9复位芯片TPS3823-33DBVR1SOT-23-53.08V阈值
10USB-A母座USBA-SMD-RA1直插式板载焊接

(注:完整BOM含全部无源器件、连接器及PCB信息,此处仅列出关键物料)

10. 实际工程经验总结

在多个批次的手工焊接与量产测试中,发现以下三点对成品良率影响显著:

  1. INA199焊接质量:SOIC-8封装引脚间距1.27mm,回流焊温度曲线需严格控制峰值温度≤230℃,否则易出现虚焊导致电流读数为零。建议采用热风枪焊接时,先对芯片整体预热至150℃,再逐个引脚施加350℃热风2秒。

  2. OLED排线接触可靠性:早期版本使用0.5mm间距FFC排线,插拔50次后出现接触不良。改为焊接式OLED模组(PCB金手指直焊)后,故障率降至0.3%以下。

  3. USB插拔应力释放:USB母座机械强度不足导致PCB焊盘脱裂。在PCB顶层围绕USB座开槽,并增加4颗M2铜柱支撑,使插拔力分散至结构件而非焊点。

这些经验源于真实产线反馈,非理论推演,可直接指导后续同类项目开发。

http://www.jsqmd.com/news/492826/

相关文章:

  • AI投资回报率的“三维度”评估法:不只算钱,更要算清这些隐性价值
  • 融合正余弦和柯西变异的麻雀搜索算法优化CNN - BiLSTM
  • 机器视觉学习总结
  • ENSP模拟验证VLAN不同端口类型对数据帧的收发情况
  • SiameseAOE实战:快速分析餐厅/酒店/商品评论,小白也能搞定
  • 功率分流混联式混合动力车辆热管理建模与性能计算分析,对标丰田混合动力EVT构型,利用Simul...
  • WPF implement ICommand with async execute
  • 基于Qwen3-ForcedAligner-0.6B的智能字幕生成系统:SpringBoot整合实战
  • 【2026年拼多多春招- 3月15日 -第三题- 多多的配送轨迹】(题目+思路+JavaC++Python解析+在线测试)
  • Gateway 服务器 WebSocket 创建与处理流程分析
  • STM入门(12)
  • Qwen3-14B保姆级部署教程:3步搞定企业级AI客服,小白也能快速上手
  • YOLO26实战全流程:从数据集标注到端到端无NMS推理(附ProgLoss调参技巧)
  • BV电视版 0.3.14.r877 | 纯净好用的第三方B站TV,支持8K视频
  • 如何用Python+OpenCV快速搭建草莓病虫害检测系统(附数据集下载)
  • 运维3年裸辞转行:告别7×24小时背锅,我用4个月逆袭上岸(附全流程实操指南)
  • 亚洲美女-造相Z-Turbo效果对比:Z-Image-Turbo基模 vs LoRA微调版亚洲特征强化分析
  • Phi-3-vision-128k-instruct惊艳效果展示:高精度图文理解生成作品集
  • 从实验室到生产线:YOLOv11多任务统一框架(检测+分割+姿态估计)行业应用
  • Docker 27正式版工业部署实战指南:从CI/CD流水线到OT网络隔离的7大关键配置
  • 比迪丽AI绘画Anaconda环境配置:科学计算与艺术创作完美结合
  • 让照片活起来:Image-to-Video图像转视频生成器实战体验
  • Phi-3-vision-128k-instruct镜像免配置:Docker一键拉起+Chainlit前端自动对接
  • 内网安全部署方案:Qwen3-VL:30B在内网穿透环境下的加密通信实现
  • 酷9多线 1.7.7.8(内置35源) | 魔改版,内置35条直播源,频道非常丰富
  • 弦音墨影参数详解:视觉定位模块阈值、帧采样率与响应延迟调优
  • 在线式UPS设计:双输入无感切换与数字模拟混合控制
  • Dify Rerank插件一键部署教程:从零下载、5步安装、实测QPS提升2.3倍的完整链路
  • Spring_couplet_generation 错误排查指南:解决403 Forbidden等常见网络错误
  • 高级 RAG 技术:查询转换与查询分解