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

Spectator:基于CH32X035的USB PD/QC诱骗器设计与实现

1. 为什么你需要一个USB PD/QC诱骗器

作为一个经常折腾电子设备的开发者,我遇到过太多次这样的场景:手头有个支持快充的设备,但不知道它到底支持哪些协议;或者想测试自己设计的电路在不同电压下的表现,却苦于没有合适的电源。这时候,一个靠谱的快充诱骗器就能派上大用场。

Spectator这款基于CH32X035的诱骗器,可以说是我的"瑞士军刀"。它不仅能诱骗PD和QC协议,还集成了电压电流监测、ADC/DAC工具等功能。想象一下,你只需要这么一个小设备,就能完成以往需要多个仪器才能搞定的测试工作,这感觉不要太爽。

CH32X035这颗国产RISC-V芯片真的很给力,内置了PD PHY、运放和高速ADC,这让我们的设计变得特别简洁。我记得第一次用它成功诱骗出20V电压时,那种成就感简直爆棚。下面我就来详细说说这个项目的设计思路和实现细节。

2. 硬件设计要点

2.1 核心芯片选型

选择CH32X035G8U6这颗芯片真是明智之举。它内置的USB PD PHY省去了外置协议芯片的麻烦,48MHz的主频完全够用,20KB SRAM跑个简单菜单系统绰绰有余。最让我惊喜的是它内置的运放和12位ADC,这让我们的电流检测电路简单了不少。

实际使用中,我发现它的GPIO响应速度特别快,处理编码器信号毫无压力。62KB的Flash空间足够放下我们所有的功能代码,还能留出空间给未来的升级。

2.2 电源电路设计

电源部分我们做了双重保护:首先是TVS二极管防止静电和浪涌,然后是自恢复保险丝。实测中遇到过几次短路情况,这套保护机制都很好地保护了设备。

分压电阻的选择很有讲究。我们用了0.1%精度的电阻,确保电压检测的准确性。电流采样用的是50mΩ的精密电阻,配合芯片内置的运放,测量精度可以达到±1%。

2.3 人机交互设计

OLED屏幕通过SPI接口连接,使用DMA传输可以大大减轻CPU负担。我移植了u8g2库,菜单滑动效果非常流畅。编码器用的是常见的EC11,通过TIM的编码器模式读取,代码简洁又高效。

这里有个小技巧:在编码器中断服务函数里不要做太多处理,只记录方向,主循环中再处理实际逻辑。这样可以避免旋转过快时丢失脉冲。

3. 软件实现细节

3.1 PD协议实现

CH32X035内置的PD控制器让协议实现变得简单。我们主要处理了两类请求:Fixed电压和PPS。Fixed电压就是常见的5V、9V这些固定档位,PPS则可以实现更精细的调压。

void PD_Negotiate(uint8_t voltage_index) { PD_Message msg; msg.MessageType = PD_MSG_REQUEST; msg.DataObjects[0] = PD_DataObject(voltage_index); PD_Transmit(&msg); }

PPS调压的实现稍微复杂些,需要通过波轮调整电压值,然后发送包含目标电压和电流的请求。实测发现,很多充电器对PPS请求的响应速度差异很大,这点在代码中需要做超时处理。

3.2 QC协议处理

QC协议是通过D+ D-线上的电压来通信的。我们用了两个GPIO配合简单的电阻网络来实现:

QC2.0: D+ D- Vbus 0.6V 0V 5V 0.6V 0.6V 9V 3.3V 3.3V 12V 3.3V 0.6V 20V QC3.0: 上升沿: D+ 3.3V, D- 0.6V (+0.2V) 下降沿: D+ 0.6V, D- 3.3V (-0.2V)

这里有个坑要注意:有些充电器在切换QC电压时会有短暂的断电过程,如果负载较大可能会造成设备重启。解决方法是在切换时先降低负载电流。

3.3 ADC/DAC功能实现

ADC部分我们用了芯片内置的12位ADC,测量范围0-3.3V。为了提高精度,软件上做了多次采样取平均的处理。DAC功能则是通过PWM加RC低通滤波器实现的,配合内置运放做缓冲,输出非常稳定。

#define DAC_PWM_PERIOD 4096 void Set_DAC_Output(uint16_t value) { if(value > DAC_PWM_PERIOD) value = DAC_PWM_PERIOD; TIM_SetCompare1(TIM1, value); }

实际测试发现,PWM频率选择在20kHz左右,配合10kΩ电阻和0.1μF电容组成的低通滤波器,纹波可以控制在10mV以内,对大多数应用来说已经足够好了。

4. 系统整合与优化

4.1 内存管理

虽然CH32X035有20KB SRAM,但在实现多功能时还是要注意内存使用。我们把菜单系统的显示缓冲区和协议处理缓冲区做了复用,节省了不少空间。

协议栈的处理也做了优化,PD协议的状态机是非阻塞式的,这样在等待充电器响应时不会卡住整个系统。实测下来,这种设计让菜单操作始终保持流畅。

4.2 实时性保障

系统中有几个对实时性要求较高的任务:编码器读取、PD协议处理和电压电流监测。我们通过合理分配中断优先级来确保关键任务及时响应。

编码器中断设为最高优先级,确保旋转操作跟手。PD协议中断次之,电压电流监测放在主循环中处理,通过DMA自动采集ADC数据,大大减轻了CPU负担。

4.3 功耗控制

虽然这是个插电设备,但我们还是做了低功耗优化。在闲置状态下,CPU会进入低功耗模式,只有编码器中断能唤醒它。OLED屏幕也有自动关闭功能,长时间不操作时会自动熄灭。

实测待机电流可以做到1mA以下,这对于一个功能这么丰富的设备来说相当不错了。

5. 实际使用体验

经过几个月的使用和迭代,Spectator已经成了我工作台上不可或缺的工具。它最大的优势就是小巧便携但功能全面,出差时带它一个就能应付大多数测试需求。

PD诱骗功能特别稳定,测试过市面上主流的20多款充电器,兼容性都很好。QC诱骗的连续调压功能在做电源测试时特别方便,可以精细地观察电路在不同电压下的表现。

ADC/DAC功能虽然精度比不上专业设备,但对于快速验证电路已经足够用了。我经常用它来测量传感器输出或者生成测试信号,省去了搬动大型仪器的麻烦。

电压电流计的刷新率做到了10Hz,用来监测充电过程完全够用。最让我满意的是它的电流测量精度,实测误差在±20mA以内,对于判断设备的工作状态很有参考价值。

http://www.gsyq.cn/news/1598211.html

相关文章:

  • 深度剖析CVE-2025-24813:Tomcat反序列化漏洞的源码级攻防实战
  • 【技术回响】从IXI到iPod:数字音频播放器的前世今生与未来畅想
  • Windows字体美化终极方案:No!! MeiryoUI让你的系统界面焕然一新
  • Qt5.15 QWebEngine网页加载超时:从代理到证书链验证的深度排查与优化
  • 狼人杀进阶:从专业术语到实战表水策略全解析
  • Win10任务栏无线网络图标消失了怎么恢复,托盘设置和网卡驱动分步排查
  • GanttProject项目管理的终极指南:掌握任务依赖与资源分配
  • 银川黄金白银回收铂金旧金回收无套路门店 TOP 榜单 实地测评资料整理
  • 从零到一:基于PyTorch与EcapaTdnn构建高精度声纹识别系统
  • 【深度学习】【部署】Flask + PyTorch模型服务化:从API设计到生产环境实践【进阶】
  • N_m3u8DL-RE:免费高效的流媒体下载工具完全指南
  • 广告AI助手设计:从Jarvis执行者到HAL合伙人
  • 朋友圈广告:为什么它能让企业线上获客更简单
  • 云浮高口碑黄金铂金回收白银回收实体老店排行 5 家靠谱门店电话地址全收录
  • 【PHP运维】CentOS 7下通过Remi仓库yum升级至PHP 8.2实战
  • CocosCreator长列表性能优化实战:基于对象池与动态渲染的无尽循环列表实现
  • 3个高效技巧:让Illustrator脚本成为你的设计加速器
  • WCET分析工具实战:从理论到ARM平台精准评估
  • STM32H743+CubeMX-主从定时器联动:TIM1精准输出PWM,TIM2无中断同步计数
  • 编译原理《算符优先分析法的实战演练与代码剖析》
  • 阳江黄金白银回收铂金旧金回收无套路门店 TOP 榜单 实地测评资料整理
  • 文档驱动开发:开源项目冷启动阶段的文档规范与交互式示例设计
  • 构建情报驱动自动化闭环:从漏洞预警到动态防御的实战体系
  • 数据结构(四):堆排序与归并排序
  • Three.js 模型粒子化教程
  • 从“热循环”到“精准复制”:深入解析PCR三步曲的分子动力学
  • CGAL实战:Alpha Wrapping算法在3D模型修复与简化中的应用
  • Hi7011替代H5112C:更高电压、更大电流与65536级高辉调光的国产升级方案
  • 解锁Fay数字人Agent版:从零开始构建你的智能决策助手
  • Java ArrayList 完整详解