1. 项目概述
USB Type-C接口自2014年发布以来,已从单纯的物理连接器演变为集高速数据传输、高功率供电(最高240W)、视频输出与协议协商于一体的系统级接口。其中Power Delivery(PD)协议作为核心供电管理机制,通过结构化VDM(Vendor Defined Messages)在CC(Configuration Channel)线上完成电源能力通告、电压档位协商与角色切换。然而,PD协议的复杂性给工程师在实际开发中带来显著挑战:缺乏低成本、可交互、可复现的协议验证工具,导致充电器兼容性测试、设备功耗建模、诱骗电路调试等环节高度依赖昂贵的专业协议分析仪或黑盒模块。
本项目构建了一款基于ESP32-S3的嵌入式Type-C电流表,其核心价值在于将PD协议诱骗、高精度电参数采集与本地人机交互三者深度耦合,形成闭环验证系统。区别于仅显示电压/电流的简易功率计,该设备通过CH224专用PD诱骗芯片实现符合USB-IF规范的Sink端行为模拟,并利用INA226宽量程、高分辨率电流传感链路,同步捕获诱骗过程中的瞬态电参数变化。所有功能由ESP32-S3统一调度,通过SPI驱动TFT屏幕实现多维度参数可视化,同时保留Wi-Fi与蓝牙双模无线能力,为后续远程监控与数据回传预留硬件基础。整个系统采用单板集成设计,BOM成本可控,PCB尺寸紧凑(75mm×45mm),适用于实验室桌面验证、产线快速抽检及教学演示等多种场景。
2. 系统架构设计
2.1 整体拓扑结构
系统采用主从式分层架构,以ESP32-S3为中央控制器,协调PD协议层、传感采集层与人机交互层三类功能模块。其信号流向遵循“协议触发→电参数采集→数据处理→结果呈现”的逻辑闭环:
- PD诱骗层:CH224芯片通过CC1/CC2引脚直接接入Type-C Receptacle,接收上游Source端的VBUS电压与PD消息;用户通过物理按键向CH224发送电压档位选择指令,CH224据此生成符合PD 3.0规范的RDO(Request Data Object)并经CC线反馈至Source端。
- 传感采集层:INA226通过I²C总线挂载于ESP32-S3,其采样电阻(10mΩ)串联于VBUS供电路径中,实时监测流经Type-C接口的电流(±16A满量程)与电压(0–36V),并通过内部16位ADC完成模数转换。
- 人机交互层:0.96英寸SPI TFT屏幕(ST7735S驱动)提供本地参数显示;两颗独立按键分别映射为“PD电压档位切换”与“显示模式轮询”,按键状态经GPIO中断触发ESP32-S3的实时响应。
该架构摒弃了传统方案中MCU直接模拟PD协议的高复杂度路径,转而采用专用协处理器(CH224)承担协议栈解析与CC信号生成,使ESP32-S3得以专注于数据融合与UI渲染,显著提升系统可靠性与开发效率。
2.2 关键器件选型依据
| 器件 | 型号 | 选型理由 |
|---|---|---|
| 主控MCU | ESP32-S3R8N8 | 集成2.4GHz Wi-Fi/Bluetooth 5.0 LE双模射频,内置USB-JTAG调试接口;8MB PSRAM满足TFT帧缓存需求;32个可配置GPIO支持I²C/SPI/UART多外设并行驱动 |
| PD诱骗芯片 | CH224 | 国产高集成度PD Sink诱骗IC,支持PD 3.0全协议(含PPS),内置CC逻辑控制器与VBUS放电电路;通过简单IO电平即可切换5V/9V/12V/15V/20V五档固定电压请求,无需外部EEPROM存储配置 |
| 电流传感器 | INA226 | TI出品的高精度双向电流/电压/功率监控器,I²C接口,16位分辨率,0.1%满量程误差;内置10mΩ采样电阻,避免PCB布局引入寄生电感影响高频电流测量准确性 |
| 显示屏 | 0.96" SPI TFT | ST7735S驱动,160×80 RGB像素,SPI 4线制(SCLK/MOSI/DC/CS),峰值功耗<25mA;小尺寸适配便携设计,SPI接口释放ESP32-S3的I²C资源供INA226独占 |
器件选型严格遵循“功能必要性、接口匹配性、供应链稳定性”三原则。例如,未选用更廉价的CH226K(仅支持固定电压档位)而采用完整版CH224,是因其支持PPS(Programmable Power Supply)协议扩展能力,为后续升级可调电压诱骗预留硬件接口;INA226内置采样电阻的设计则直接规避了分立式方案中因PCB走线阻抗不一致导致的校准漂移问题。
3. 硬件电路设计详解
3.1 Type-C接口与PD诱骗电路
Type-C Receptacle采用标准16Pin直插封装,其CC1/CC2引脚通过10kΩ上拉电阻(R1/R2)连接至CH224的CC1/CC2输入端,构成PD协议的物理层基础。CH224的VDD引脚接3.3V稳压电源,其VBUS_DET引脚经分压网络(R3=100kΩ, R4=10kΩ)监测VBUS电压,当检测到VBUS>4.75V时自动启动PD协商流程。关键设计细节如下:
- CC线终端匹配:CH224内部集成5.1kΩ下拉电阻(Rp),当设备作为Sink接入Source时,Source端的5.1kΩ上拉与CH224的5.1kΩ下拉形成分压,使CC线电压稳定在约0.4V,符合USB-IF规定的Sink识别阈值。
- VBUS放电电路:CH224的DISCH引脚外接N-MOSFET(Q1,如DMN3025LSD)控制VBUS泄放回路。当PD协商失败或设备拔出时,CH224输出低电平驱动Q1导通,通过10Ω功率电阻(R5)将VBUS残压在100ms内泄放至安全水平(<3V),满足USB Type-C规范对热插拔安全性的强制要求。
- 按键消抖设计:两颗按键(SW1/SW2)均采用RC硬件消抖,按键一端接地,另一端经10kΩ上拉至3.3V,并通过100nF电容滤除机械抖动,确保ESP32-S3 GPIO读取到稳定电平。
该电路完全复现了标准USB Sink设备的电气特性,实测CH224在插入支持PD的充电器后,可在200ms内完成PD握手并稳定输出目标电压,无协议超时或重试现象。
3.2 电流/电压传感电路
INA226采用高侧电流检测拓扑,其VIN+引脚直接连接Type-C接口的VBUS_IN,VIN-引脚连接采样电阻(Rshunt=10mΩ)的负载侧,构成完整的电流检测回路。电路设计重点解决三个工程痛点:
- 共模电压抑制:INA226的共模输入范围为0–36V,完全覆盖USB PD全电压档位(5–20V),无需额外电平转换电路。其内部ΔΣ ADC对VIN+与VIN-的差分信号进行16位量化,理论电流分辨率达0.25mA(16A/65536)。
- 采样电阻布局:10mΩ电阻(如WSL2512R1000FEA)采用四端子开尔文连接,电流路径(IN+/IN-)与电压检测路径(SENSE+/SENSE-)物理分离,彻底消除焊盘接触电阻对毫欧级采样精度的影响。
- I²C总线保护:INA226的SCL/SDA引脚各串联100Ω限流电阻(R6/R7),并在SDA线上增加TVS二极管(D1,SMAJ5.0A)钳位静电冲击,防止ESD事件损坏I²C通信链路。
实测数据显示,在20V/3A负载条件下,INA226输出的电流读数标准差<±0.015A,电压读数误差<±0.02V,满足工业级功率计量精度要求。
3.3 显示与电源管理电路
TFT屏幕采用SPI 4线制接口,ESP32-S3的GPIO12(SCLK)、GPIO11(MOSI)、GPIO10(DC)、GPIO9(CS)分别驱动对应信号线。关键设计包括:
- 背光控制:屏幕LED+引脚经N-MOSFET(Q2)连接至5V电源,ESP32-S3的GPIO14输出PWM信号调节背光亮度,避免恒定高亮导致的功耗浪费与视觉疲劳。
- 电源路径管理:系统采用双电源输入策略——Type-C接口的VBUS经MP2315 DC-DC降压至3.3V为主控供电;同时板载Micro-USB接口通过CH224的5V LDO输出为TFT屏幕与按键电路供电。当Type-C未接入时,Micro-USB自动接管供电,确保设备始终处于可操作状态。
该设计使系统在无外部电源时仍能维持基本显示功能,极大提升了现场调试的灵活性。
4. 软件系统实现
4.1 固件架构与任务划分
固件基于ESP-IDF v5.1框架开发,采用FreeRTOS实时操作系统,构建三层任务模型:
- Protocol Task(PD协议任务):优先级最高(configLIBRARY_MAX_PRIORITIES-1),负责轮询CH224的状态寄存器(地址0x00),解析PD协商结果(如当前VBUS电压、PDO索引)。当检测到电压档位按键按下时,向CH224的控制寄存器(地址0x01)写入预设RDO值(如0x00000019对应9V请求)。
- Sensor Task(传感任务):优先级次高(configLIBRARY_MAX_PRIORITIES-2),每100ms通过I²C读取INA226的Shunt Voltage(0x01)、Bus Voltage(0x02)寄存器,结合校准系数计算实时电流(I = Vshunt / 0.01)与功率(P = Vbus × I)。
- Display Task(显示任务):优先级最低(configLIBRARY_MAX_PRIORITIES-3),接收来自前两个任务的共享数据结构(typedef struct {float voltage; float current; float power; uint8_t pd_voltage;} sensor_data_t),根据显示模式标志位(mode_flag)动态刷新TFT屏幕内容。
任务间通过队列(xQueueSend/xQueueReceive)传递数据,避免全局变量竞争;所有外设初始化(I²C/SPI/GPIO)在app_main()中一次性完成,确保硬件资源独占性。
4.2 关键算法实现
PD电压档位映射表
// CH224 RDO寄存器值定义(符合PD 3.0 Spec Table 6-11) const uint32_t pd_rdo_table[5] = { 0x00000009, // 5V @ 3A (Object Position=1, USB Communications Capable=0) 0x00000019, // 9V @ 3A (Object Position=2) 0x00000029, // 12V @ 3A (Object Position=3) 0x00000039, // 15V @ 3A (Object Position=4) 0x00000049 // 20V @ 3A (Object Position=5) };INA226校准与计算
// 初始化INA226校准寄存器(Calibration = 4096 * Rshunt / LSB, LSB=5μV) void ina226_init_calibration(void) { uint16_t cal_value = (uint16_t)(4096.0f * 0.01f / 0.000005f); // Rshunt=10mΩ i2c_master_write_byte(cmd, INA226_REG_CALIBRATION, cal_value >> 8, ACK_CHECK_EN); i2c_master_write_byte(cmd, INA226_REG_CALIBRATION + 1, cal_value & 0xFF, ACK_CHECK_EN); } // 实时电流计算(单位:A) float ina226_read_current(void) { uint16_t shunt_raw; i2c_master_read_word(cmd, INA226_REG_SHUNT_VOLTAGE, &shunt_raw); int16_t shunt_signed = (int16_t)shunt_raw; return (float)shunt_signed * 0.000005f / 0.01f; // LSB=5μV, Rshunt=0.01Ω }4.3 用户交互逻辑
显示模式按键(SW2)实现三级循环:
- Mode 0:主界面 —— 大字体显示实时电压(V)、电流(A)、功率(W),底部小字标注当前PD档位(如“PD:9V”)
- Mode 1:历史统计 —— 显示过去60秒的电流/电压最大值、最小值、平均值
- Mode 2:协议诊断 —— 显示CH224返回的PDO列表(Source端支持的全部电压档位)及当前RDO确认状态
电压档位按键(SW1)采用短按单步递进、长按(>1s)快速跳转逻辑,避免误操作导致PD协商中断。每次档位变更后,固件强制等待500ms再读取CH224状态寄存器,确保PD握手完成。
5. BOM清单与关键参数
| 序号 | 器件描述 | 型号/规格 | 数量 | 封装 | 关键参数说明 |
|---|---|---|---|---|---|
| 1 | 主控MCU | ESP32-S3R8N8 | 1 | QFN56 | 双核Xtensa LX7, 8MB PSRAM, 2.4G Wi-Fi/Bluetooth |
| 2 | PD诱骗芯片 | CH224 | 1 | QFN24 | 支持PD3.0/PPS, 5V/9V/12V/15V/20V五档诱骗 |
| 3 | 电流传感器 | INA226AIDGST | 1 | VSSOP10 | 16-bit ΔΣ ADC, 0.1% FSR error, 内置10mΩ采样电阻 |
| 4 | TFT显示屏 | 0.96" ST7735S | 1 | COB | 160×80 RGB, SPI 4-wire, 3.3V logic level |
| 5 | Type-C接口 | U.FL-16P | 1 | SMT | 符合USB-IF Type-C 2.0规范 |
| 6 | 电源管理IC | MP2315DD-LF-Z | 1 | SOIC8 | 4.5–24V输入, 3.3V/3A输出, 500kHz开关频率 |
| 7 | MOSFET(VBUS放电) | DMN3025LSD | 1 | SO-8 | Vds=30V, Id=25A, Rds(on)=2.5mΩ |
| 8 | 按键 | Tactile Switch (6×3.5mm) | 2 | SMT | 银触点,寿命≥10万次 |
| 9 | 采样电阻 | WSL2512R1000FEA | 1 | 2512 | 10mΩ, 1%, 1W, 四端子开尔文连接 |
| 10 | TVS二极管 | SMAJ5.0A | 1 | SMA | 反向击穿电压5.0V, 峰值脉冲功率400W |
所有器件均选用工业级温度范围(-40℃~85℃)型号,确保在实验室与产线环境下的长期稳定性。BOM总成本控制在¥85以内(批量1kpcs),具备明确的量产可行性。
6. 实测性能与典型应用
6.1 标准化测试数据
使用Keysight N6705C直流电源分析仪作为基准源,对本设备进行全量程校准:
| 测试条件 | INA226读数 | 基准源读数 | 绝对误差 | 相对误差 |
|---|---|---|---|---|
| 5V/0.5A (2.5W) | 4.992V/0.498A | 5.000V/0.500A | -0.008V/-0.002A | -0.16%/-0.4% |
| 12V/2.0A (24W) | 11.985V/1.996A | 12.000V/2.000A | -0.015V/-0.004A | -0.125%/-0.2% |
| 20V/3.0A (60W) | 19.972V/2.993A | 20.000V/3.000A | -0.028V/-0.007A | -0.14%/-0.23% |
PD诱骗功能通过USB-IF认证的Ellisys USB Explorer 260协议分析仪验证:CH224成功与Anker 100W PD充电器完成完整PD握手,RDO响应时间<150ms,电压建立时间<500ms,无协议错误帧。
6.2 典型应用场景实践
场景一:PD充电器兼容性验证
工程师将待测充电器接入本设备Type-C口,短按SW1切换至12V档位,观察TFT屏幕显示“PD:12V”后,立即读取实测电压(11.985V)与最大输出电流(2.98A)。若电压偏差>±5%或电流无法达到标称值,则判定该充电器PDO配置存在缺陷。此方法比传统万用表测试效率提升3倍以上,且可复现PD握手全过程。
场景二:移动设备功耗建模
将智能手机通过本设备接入PD充电器,设置显示模式为“历史统计”。记录待机、视频播放、游戏运行三种状态下的60秒电流均值(如待机0.12A、视频0.85A、游戏1.42A),结合电压数据计算各场景功耗。所得数据可直接导入电池续航仿真模型,误差<3%,显著优于仅依赖厂商标称值的粗略估算。
场景三:PD诱骗电路调试
在开发支持PD输入的嵌入式设备时,工程师常需验证自身设备的CC逻辑是否正确。此时可将本设备设为9V诱骗模式,接入待测设备的Type-C口,用示波器观测CC线波形。若待测设备能正确响应RDO并调整VBUS至9V,则证明其PD Sink协议栈功能正常;否则需检查CC上拉/下拉电阻配置或固件PD状态机逻辑。
此类应用凸显了本项目“协议-传感-交互”三位一体设计的价值:它不仅是测量工具,更是PD系统开发的调试探针与验证基准。
7. 设计局限性与改进方向
当前设计在以下方面存在可优化空间:
- 采样带宽限制:INA226默认转换时间为532μs(连续模式),无法捕捉PD握手过程中的毫秒级VBUS跌落(如Source端软启动阶段的200ms爬升)。后续可改用ADS1118(1MSPS采样率)配合外部10mΩ电阻,但需增加PCB面积与校准复杂度。
- 无线功能未启用:ESP32-S3的Wi-Fi/Bluetooth硬件资源已就绪,但固件尚未实现OTA升级或MQTT数据上传。实际部署中,可通过接入家庭Wi-Fi将功耗数据推送至InfluxDB,构建多节点充电站监控网络。
- 机械结构缺失:当前为裸板设计,未配备防护外壳与Type-C线缆固定机构。量产版本需增加IP54等级铝合金外壳,并在PCB边缘设计卡扣结构,确保现场使用中Type-C插头不易松脱。
这些改进均基于现有硬件资源展开,无需更换核心器件,体现了本设计良好的可扩展性。工程师可根据具体项目需求,选择性实施上述增强功能。