站内搜索
发作品签到
ESP32-Typec电流表(PPS诱骗器&监听器)
专业版

ESP32-Typec电流表(PPS诱骗器&监听器)

工程标签

ESP系列

4.5k
0
0
19

简介

基于 ESP32-S3 的 USB-PD 诱骗器与监听器

简介:基于 ESP32-S3 的 USB-PD 诱骗器与监听器
立创开发板「课设/毕设」开源计划

开源协议

GPL 3.0

创建时间:2025-10-19 15:17:19更新时间:2025-11-25 14:17:46

描述

基于 ESP32-S3 的 USB-PD 诱骗器与监听器


> 11.25 上传固件与外壳stl模型
> 对于部分充电头仍有BUG,还在修复,慎重复刻!


PD诱骗与电流监测
图片名称
PD报文解析
图片名称
实施解析PD报文
图片名称
PD报文记录
图片名称
PCB
图片名称

一、项目概述

1.1 项目名称

ESP32-S3 USB Power Delivery 诱骗器与协议分析仪

1.2 项目简介

本项目基于 立创·ESP32S3R8N8开发板,实现 USB Power Delivery (PD) 电压诱骗(主动请求)与协议监听(被动抓包)、实时功率监测与 LVGL 可视化。主要用途包括充电器测试、PD 协议学习、方案验证与维修诊断。

核心硬件:ESP32‑S3 + CH224A (PD 诱骗) + CH32X035 (PD 监听) + INA226(电参采集)+ 9mΩ 分流电阻 + 双 USB‑C(输入/输出)+ 240×240 SPI TFT。

1.3 应用场景

  • 📱 移动设备快充测试:验证手机/笔记本的 PD 协议支持情况
  • 🔌 电源适配器开发:测试充电器的 PD 协议实现
  • 📚 教学实验平台:USB-PD 协议原理学习与实践
  • 🔧 维修诊断工具:快速检测充电异常问题
  • 🧪 硬件方案验证:原型设计阶段的供电测试

1.4 技术亮点

  • 双模式:诱骗模式(主动请求电压) / 监听模式(被动采集,不干扰)
  • 电压支持:5 / 9 / 12 / 15 / 20 / 28 V + PPS (3.0–21.0 V,100 mV 步进)
  • 实时测量:INA226 精度 ±1%,9 mΩ 分流电阻,电压 0–36V,电流 0–6A
  • 协议支持:USB‑PD 2.0 / 3.0 / 3.1(支持解析 Source Capabilities / Request / PS_RDY / VDM 等)
  • UI:LVGL 8.3 + TFT(实时显示、数据包列表、HEX 导出)
  • 软件架构:三层(Application / Business / HAL),FreeRTOS 任务隔离,UART 接收后台任务,I²C 驱动器抽象
  • 按照USBPD3.2手册进行解析PD报文
    图片名称

二、硬件设计

2.1 核心硬件清单

硬件模块型号/规格功能说明数量
主控开发板立创·ESP32S3R8N8开发板主控芯片,运行三层架构软件1
PD 诱骗芯片CH224A (I2C 地址: 0x23)主动请求 USB-PD 电压档位1
PD 监听芯片CH32X035监听 CC 线 PD 通讯协议1
电流传感器INA226 (I2C 地址: 0x40)测量电压/电流/功率1
采样电阻9mΩ / 2WINA226 电流采样1
显示屏240x240 TFT LCD (SPI)LVGL 图形界面显示1
按键拨轮开关左键/右键/下键(GPIO 6/7/42)1
USB-C 接口公头 + 母头输入输出接口2

2.1.1 ESP32-S3 控制核心

image.png
原理图采用 立创·ESP32S3R8N8开发板,负责界面绘制、PD 业务逻辑、电压管理和数据解析。

主要特性:

  • 240MHz 双核 Xtensa LX7
  • 集成 USB OTG/PSRAM
  • 内置 Wi-Fi,可未来扩展无线 OTA / Web UI
  • 资源充足,可同时运行 LVGL + CH32 解码任务

所有外围驱动通过 HAL 层抽象,包括:

  • I²C(CH224A / INA226)
  • UART(CH32 PD 抓包)
  • SPI(TFT 显示屏)

2.1.2 CH224A USB-PD 诱骗芯片

image.png
本电路采用 CH224A 作为 USB-PD 的主动协商器件,用于向电源适配器请求电压档位。

硬件特性:

  • I²C 地址:0x23
  • 支持标准 PD 固定档位:5V/9V/12V/15V/20V/28V
  • 支持 PPS 可调:3V ~ 21V
  • 配合 ESP32-S3 可实现按键切换电压、长按调节 PPS

典型应用电路包括:

  • CC1/CC2 上拉电阻
  • VBUS 过压保护电路
  • CH224A 使能脚(与 GPIO 控制电源模式切换)

2.1.3 CH32X035 PD 监听器(Sniffer)

image.png
为了不干扰 PD 协商过程,本项目采用 CH32X035 独立捕获 CC 线的 PD 通信(BMC 调制)。

监听功能包括:

  • 捕获 Source Capabilities、Request、PS_RDY 等 PD 报文
  • 解析 SOP / SOP’ / SOP’’
  • 通过 UART 将解析结果实时发送给 ESP32-S3

硬件实现:

  • CH32X035 配合外部 CC1/CC2 电平检测电路
  • UART 与 ESP32-S3 的 RX/TX 交叉连接
  • 独立供电,保证监听链路不会对 PD 诱骗产生干扰

2.1.4 INA226 精密电流/电压采集

image.png
采用 INA226 作为主电流/电压监测器件,具备高精度与宽量程优势。

关键硬件参数:

  • I²C 地址:0x40
  • 电压测量范围:0~36V
  • 电流测量:配合 9mΩ 采样电阻,支持 6A 以内
  • 上位机:ESP32 读取 INA226 的电压/电流/功率寄存器

硬件注意点:

  • 浮地测量:INA226 正负输入跨接在取样电阻两端
  • 使用 2W 大功率分流电阻,避免高电流发热
  • 在 PD 诱骗高电压(20~28V)时仍能稳定工作

2.1.5 双 USB-C 接口设计

image.png
本设计包含 输入端(电源适配器)输出端(被测设备) 两个 Type-C。

硬件结构:

  • 输入 USB-C:与 CH224A/CH32X035 的 CC 信号相连,用于 PD 协商与监听
  • 输出 USB-C:提供 Vbus 输出给负载设备
  • 采用 MOS + 二极管的防倒灌与切换电路(原理图 U6/U7 区块)
  • CC1/CC2 通过分离电阻引出,避免 PD 调试产生互相影响

确保以下特性:

  • Vbus 反灌保护
  • USB-C 插入方向适配(CC 自动切换)
  • 高电压下的可靠隔离(20~28V)

2.1.6 TFT SPI 显示屏

image.png
使用 240×240 分辨率 TFT 显示屏,SPI 接口。

硬件特性:

  • 驱动 IC:ST7789
  • 支持 LVGL 8.3
  • 使用 TFT_eSPI 库驱动
  • 采用 GPIO + SPI 控制片选、D/C、Reset、Backlight

原理图已包含背光控制电阻、滤波电容和 SPI 信号完整性设计。


2.1.7 TPS54202 同步降压电源

image.png
为整板提供 3.3V 稳压电源。

硬件特点:

  • 28V 宽输入
  • 2A 输出能力
  • 低待机功耗
  • 典型电路包括:电感、肖特基二极管、输入输出滤波电容

这是保证整个 PD 系统在高压条件下稳定工作的重要部分。

2.2 系统框图

image.png

2.3 引脚分配

功能GPIO说明
I2C_SDAGPIO 21CH224A + INA226 共享
I2C_SCLGPIO 22CH224A + INA226 共享
UART1_RXGPIO 18CH32 数据接收
UART1_TXGPIO 17CH32 数据发送
TFT_CSGPIO 5TFT 片选
TFT_DCGPIO 16TFT 数据/命令
TFT_RSTGPIO 23TFT 复位
TFT_MOSIGPIO 23SPI 数据
TFT_SCLKGPIO 18SPI 时钟
BUTTON_LEFTGPIO 6左键(上拉输入)
BUTTON_DOWNGPIO 7下键(上拉输入)
BUTTON_RIGHTGPIO 42右键(上拉输入)
CC_ENGPIO 4CH224A 使能控制

三、软件架构

3.1 三层架构设计

┌─────────────────────────────────────────────────┐
│  Application Layer (应用层)                     │
│  ┌───────────────────────────────────────────┐  │
│  │         AppController                     │  │
│  │  • 模块初始化与生命周期管理               │  │
│  │  • 主循环调度(按键/传感器/显示更新)     │  │
│  │  • 按钮回调事件分发                       │  │
│  │  • 模式切换(诱骗模式/监听模式)         │  │
│  └───────────────────────────────────────────┘  │
└──────────────────┬──────────────────────────────┘
                   │
┌──────────────────▼──────────────────────────────┐
│  Business Logic Layer (业务逻辑层)              │
│  ┌──────────────────┐  ┌──────────────────────┐ │
│  │ VoltageManager   │  │USBPDProtocolHandler  │ │
│  │ • 电压档位选择   │  │• PD 数据包解析       │ │
│  │ • PPS 精细调节   │  │• 协议类型识别        │ │
│  │ • 配置持久化     │  │• HEX 格式化输出      │ │
│  │ • 状态同步到UI   │  │• 数据包存储管理      │ │
│  └──────────────────┘  └──────────────────────┘ │
└──────────────────┬──────────────────────────────┘
                   │
┌──────────────────▼──────────────────────────────┐
│  HAL Layer (硬件抽象层)                          │
│  ┌──────────┐ ┌──────────┐ ┌──────────────┐    │
│  │CH224A    │ │INA226    │ │SerialDriver  │    │
│  │Driver    │ │Driver    │ │(CH32 UART)   │    │
│  │• 设置电压│ │• 读传感器│ │• 后台任务    │    │
│  │• PPS控制 │ │• 校准配置│ │• 数据包回调  │    │
│  └──────────┘ └──────────┘ └──────────────┘    │
│  ┌──────────┐ ┌──────────────────────────────┐ │
│  │Button    │ │DisplayDriver                 │ │
│  │Driver    │ │• LVGL UI刷新                 │ │
│  │• 去抖    │ │• 双界面切换(主屏/USBPD屏)    │ │
│  │• 事件    │ │• 传感器数据渲染              │ │
│  └──────────┘ └──────────────────────────────┘ │
└─────────────────────────────────────────────────┘

image.png

3.2 关键模块说明

3.2.1 应用层(Application Layer)

  • 文件src/application/AppController.cpp
  • 职责
    • 系统启动时检测模式(通过 DOWN 按钮)
    • 初始化所有驱动和业务模块
    • 主循环中协调按键扫描、传感器读取、UI刷新
    • 按钮事件回调注册与分发

3.2.2 业务逻辑层(Business Logic Layer)

  • VoltageManagersrc/business/VoltageManager.cpp):

    • 管理 8 种电压档位(5V/9V/12V/15V/20V/28V/PPS/AVS)
    • PPS 电压步进调节(100mV 步长,3V~21V)
    • 与 CH224A 驱动交互,应用电压选择
  • USBPDProtocolHandlersrc/business/USBPDProtocolHandler.cpp):

    • 接收 CH32 串口原始数据包
    • 调用 usbpd_parser.cpp 解析协议
    • 管理最多 1000 个数据包的缓存
    • 支持 HEX 格式导出到串口

3.2.3 硬件抽象层(HAL Layer)

驱动模块关键接口硬件依赖
CH224ADriversetVoltage(mode), setPPSVoltage(mV), isPDActive()CH224A (I2C 0x23)
INA226DriverreadSensorData(), configure()INA226 (I2C 0x40)
SerialDriverinitUART1(), setPacketCallback(), startBackgroundTask()UART1 (CH32)
ButtonDriverinit(), tick(), onLeftClick(), onRightClick()GPIO 6/7/42
DisplayDriverupdateSensorData(), switchToScreen(), refresh()TFT SPI + LVGL

3.3 技术栈

分类技术选型版本
框架Arduino (PlatformIO)-
RTOSFreeRTOS (ESP-IDF 内置)-
UI框架LVGL8.3.10
I2C库Wire (Arduino)-
电流传感器库INA226_WE1.2.12
按键库OneButton2.6.1
TFT驱动TFT_eSPI2.5.43

四、功能特性

4.1 核心功能

4.1.1 双模式运行

模式启动方式功能描述应用场景
诱骗模式按住 DOWN 键上电• 可主动切换电压档位
• 支持 PPS 精细调节
• 实时监测输出参数
设备供电测试、充电器性能验证
监听模式正常上电• 锁定 5V 供电
• 被动监听 CC 线通讯
• 不干扰原有协议交互
协议分析、教学演示、故障诊断

4.1.2 电压诱骗功能

  • 固定档位:5V / 9V / 12V / 15V / 20V / 28V
  • 可调模式
    • PPS (Programmable Power Supply):3V ~ 21V,步进 100mV
    • AVS (Adjustable Voltage Supply):动态电压调节
  • 操作方式
    • 左右键切换档位
    • 长按左右键在 PPS 模式下微调电压
    • 下键确认应用选择

4.1.3 实时功率监测

  • 监测参数
    • 电压:±1% 精度
    • 电流:±1% 精度(通过 9mΩ 采样电阻)
    • 功率:实时计算显示
  • 更新频率:5 秒/次(可配置)
  • 量程范围
    • 电压:0 ~ 36V
    • 电流:0 ~ 6A
    • 功率:0 ~ 216W

4.1.4 USB-PD 协议分析

  • 支持协议:USB PD 2.0 / 3.0 / 3.1
  • 可解析消息类型
    • Source Capabilities (电源能力)
    • Request (请求)
    • Accept/Reject (应答)
    • PS_RDY (电源就绪)
    • Vendor Defined Messages (厂商自定义)
  • 数据展示
    • 实时解析显示(LVGL 界面)
    • HEX 原始数据导出(串口)
    • 最多存储 1000 个数据包

4.1.5 图形化界面

  • 界面设计:使用 NXP GUI Guider 可视化设计工具生成
  • 屏幕切换
    • 主屏幕:电压选择、传感器数据、PD 状态
    • USBPD 屏幕:协议数据包列表、HEX 数据显示
  • 交互方式
    • 单击左/右键:切换电压档位
    • 长按左/右键:PPS 精细调节 / 切换到 USBPD 界面
    • 单击下键:应用电压设置 / 导出数据包到串口

4.2 特色亮点

4.2.1 架构设计优势

清晰的分层架构:应用层、业务层、HAL层解耦,易于维护和扩展
无全局变量污染:V2.1 版本彻底废弃全局变量,使用对象引用传递
回调机制解耦:下层通过回调通知上层,避免循环依赖
依赖注入设计:驱动对象通过构造函数传递,便于单元测试

4.2.2 并发处理

FreeRTOS 多任务:串口数据接收独立后台任务,不阻塞主循环
LVGL 定时器:UI 刷新异步处理,保证界面流畅
按键去抖:OneButton 库硬件级去抖,支持单击/长按/双击事件

4.2.3 内存优化

固定缓冲区:串口接收使用 256 字节固定缓冲区,避免动态分配
数据包限制:USB-PD 数据包最多存储 1000 个,防止内存溢出
字体压缩:LVGL 字体使用内置压缩算法,节省 Flash 空间


五、开发与测试

5.1 开发环境

5.1.1 必需工具

  • IDE:Visual Studio Code
  • 插件:PlatformIO IDE
  • 编译平台:Espressif32 (Arduino Framework)
  • 烧录工具:esptool.py (PlatformIO 自动集成)

5.1.2 推荐工具

  • UI 设计:NXP GUI Guider 1.6+
  • 串口调试:PlatformIO Serial Monitor / Termite
  • 协议分析:Wireshark (USB-PD 插件)
  • 版本管理:Git

5.2 测试验证

模块测试内容结果
CH224A5~28V 档位诱骗✅ 稳定
CH32X035PD 报文监听✅ 能完整解析
INA226电压/电流精度✅ 误差 <1%
MOS 防倒灌反向插入测试✅ 无反灌
TFTLVGL 刷新性能✅ >30 FPS
整机20V/5A 功率测试✅ 通过

设计图

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

BOM

暂无BOM

3D模型

序号文件名称下载次数
1
电流表 主体.stl
18
2
电流表 屏幕垫块.stl
9

附件

序号文件名称下载次数
1
ESP32-Typec电流表(PPS诱骗器&监听器)~1.mp4
13
2
merged-firmware.bin
14
克隆工程
添加到专辑
0
0
分享
侵权投诉
知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

底部导航