
【ESP32-C3】40W PD 供电暖白双色+RGB补光灯
工程标签
简介
以 ESP32-C3-MINI-1-N4 模组作为主控,采用 XL6003E1/XL6005E1 升压 LED 恒流驱动芯片,功率达 40W、以 PD 快充协议供电的 LED 补光灯方案设计
简介:以 ESP32-C3-MINI-1-N4 模组作为主控,采用 XL6003E1/XL6005E1 升压 LED 恒流驱动芯片,功率达 40W、以 PD 快充协议供电的 LED 补光灯方案设计开源协议
:CC BY-NC-SA 4.0
描述
项目简介
嗯哼哼,本项目设计了一款以 ESP32-C3 作为主控,功率达 40W、以 PD 快充协议供电的暖白双色 + RGB 补光灯方案。补光灯由驱动板与灯板两部分组成。驱动板有两个版本,分别使用 XL6003E1 和 XL6005E1 升压恒流驱动芯片作为 LED 灯驱动方案。灯板使用了 40 颗 暖白色 + 40 颗 正白色 3V/1W 2835 高亮 LED 灯珠与 35 颗 5050 WS2812 幻彩灯珠。支持暖白双色温度调节与 RGB 氛围灯光效果~
功能介绍
如刚刚简介所述,本开源项目中包括两种驱动板方案,XL6003E1 方案与 XL6005E1 方案有一些区别,该如何进行介绍呢......先从二者相同的部分讲起吧?
- 双色温 40W LED 恒流调光:采用XL6005E1 / XL6003E1 升压恒流驱动芯片驱动暖白光与正白光两组 LED。ESP32-C3 可通过 PWM 信号控制驱动芯片反馈电流,实现无级调光。最高功率 40W(暖白 20W + 正白 20W)(实际 LED 亮度与 PWM 占空比并不是线性关系......这点请务必注意哦)
- 可控的 Type-C PD 供电:通过 Type-C 接口与 CH224K USB PD 多快充协议受电芯片获取 9V~20V 输入电压.具体 PD 诱骗电压等级可由 ESP32-C3 进行控制。
- 主动散热与 NTC 测温:驱动板上带有 4010(40×40×10mm)散热风扇固定孔以及 XH2.54mm-2P 接口,ESP32-C3 可通过 PWM 信号控制 MOS 管通断进而控制散热风扇转速。灯板背面带有 0603 NTC 测温电阻焊盘,驱动板上带有对应的分压电阻焊盘,可通过 NTC 测温电阻测量灯板温度。(NTC 测温功能理论可行,我还没有测试这个功能......)
以上是两种驱动板方案的相同点,接下来要介绍不同的地方了~左侧 红板 为 XL6003E1 方案,接下来称为 方案一;右侧 绿板 为 XL6005E1 方案,接下来称为 方案二。
方案一与方案二在 PCB 尺寸上并无区别,但在元器件布局上近乎重做了一遍......从上两图对比上可以看出,方案一仅有一个 Type-C 接口,方案二有两个 Type-C 接口,二者在功能上的主要区别和设计思路如下:
- 二合一 Type-C 接口方案:方案一的 Type-C 接口集 ESP32-C3 调试烧录与 PD 供电二合一功能。成功完成 PD 快充诱骗后自动切换至 ESP32-C3 通信(其实这才是我想把方案一放上来的原因,二合一的接口很棒吧?真的很棒吧?)。这种设计相当简洁,一个接口即可搞定供电与调试烧录两个功能,适合追求极致集成的场景。
- PD 供电与调试烧录功能分离方案:方案二则把 PD 供电与调试烧录功能拆分给两个 Type-C 接口,上面的 Type-C 接口负责 PD 诱骗供电,下面的 Type-C 接口负责与 ESP32-C3 调试烧录并额外提供了 5V 防倒灌供电功能。这样设计的好处是功能划分清晰,在同时进行供电和调试时互不干扰,设计上更稳定可靠。
其次是两个方案所采用的 LED 升压恒流驱动芯片也不同,这直接决定了两板的输出能力上限也不同,简单来说,方案一(XL6003E1) 的开关电流最大为 2A,而 方案二(XL6005E1) 则能达到 4A。显然方案二的驱动潜力更足,能支持更大功率或更多灯珠的配置。不过对于本设计的 40W 功率来说,二者均可满足设计需求。
另一个值得注意的区别是芯片本身的散热表现:XL6003E1 为 SOP8L 封装,芯片底面无散热焊盘;而 XL6005E1 为 TO252-5L 封装,后者有一个炒鸡大的散热焊盘,在过大电流时散热表现更好,在长时间高功率运行场景下的表现更好一些。
硬件说明
1. XL6003E1/XL6005E1 - LED 升压恒流驱动电路
这两个芯片的外围电路设计是通用的。除了以下几点关键参数不同,其余部分基本一致:
- 输入电压范围不同:XL6003E1 输入电压范围为 3.6V ~ 24V。XL6005E1 输入电压范围为 3.6V ~ 32V。
- 驱动电流不同:XL6003E1 为 2A,XL6005E1 为 4A。
- 封装不同:XL6003E1 为 SOP8L 封装,XL6005E1 为 TO252-5L 封装。
电路原理图的设计基本遵循了官方手册。下图是手册中提供的支持 PWM 调光的典型应用电路:
就是照着官方技术手册提供的电路原理图猛猛抄就完事了(笑)。其中,决定输出电流的关键是连接在 FB 引脚的采样电阻 RS,其计算公式为:ILED = 0.22V / RS。
本设计需要对暖白和正白两组 LED 进行独立控制,因此使用了两片驱动芯片,每路目标功率为 20W(总功率 40W)。灯珠选用 3V/1W 的 2835 型号,在灯板上按 十串四并 排列,因此单路驱动电压 UOUT = 3V × 10 = 30V。
根据公式计算单路所需电流:ILED = 20W / 30V ≈ 0.667A。代入 RS = 0.22V / ILED,得出 RS ≈ 0.33Ω(即330mΩ)。计算过程就是这样啦(阿巴阿巴)。
如果你仔细看了以上描述,那么就会发现一个点:其实这个设计并没有完全发挥 LED 灯珠以及恒流驱动芯片的能力......该怎么解释呢......(翻之前的设计记录中.jpg)大概是当初设计时比较胆小不敢把功率往大了做的原因吧......如果需要更大功率的输出,可以适当减小 RS 电阻阻值。不过若仍需要 PD 供电,请注意自己的充电器的功率限制哦。不然把快充充电器炸了就得不偿失了......
2. Type-C 接口相关外围电路
这部分是实现 PD 供电与 ESP32-C3 调试烧录功能的核心。方案一与方案二采取了不同的设计思路来达成目标,各有特点。
2.1. 方案一(红板):二合一 Type-C 接口方案
这个方案的精髓在于用一个Type-C 接口,同时搞定 PD 大功率供电和 ESP32-C3 的调试烧录。实现这个功能的关键是一颗 CH442E 双刀双掷模拟开关芯片。CH442E 包含 2 路二选一低阻宽带双向模拟开关,双通道 2:1 MUX 合计 DPDT,可以用于视频或者 USB 信号二选一切换。
重点:它是如何工作的?(猛敲黑板)
- 初始状态(PD 诱骗阶段):当Type-C 线缆插入时,CH224K 开始工作,与充电器协商请求 9V/12V/15V/20V 电压。此时,CH224K 的 PG(Power Good)引脚输出低电平。
- 信号通路切换:这个低电平的 PG 信号被送到 CH442E 的 IN 控制引脚。CH442E 根据这个信号,将 Type-C 接口的 D+ 和 D- 数据线连接到 CH224K 的相应引脚上,以完成必要的协议通信。
- 切换完成(调试阶段):一旦 CH224K 成功诱骗到设定的电压(比如 20V),其 PG 引脚会变为高电平。
- 第二次信号通路改变:此时,CH442E 将 Type-C 的 D+ 和 D- 数据线从 CH224K 那边“断开”,并转接到 ESP32-C3 的 USB-D- 和 USB-D+ 引脚上。
- 最终:这个 Type-C 接口的能在稳定提供 20V PD 电源的同时,又成为一个标准的ESP32-C3 USB 串口,可以直接用于程序调试与代码烧录。实现了一根线,两种功能,自动切换。(
好累......这样描述应该清楚了吧?)
2.2. 方案二(绿板):PD 供电与调试烧录功能分离方案
嗯哼哼,这个方案采用了更直观、更稳健的思路:将供电和调试两个功能分开,交给两个独立的Type-C 接口。
- 上方 Type-C 接口(PD 供电):这个接口只负责 PD 诱骗供电。专门用于与充电器协商,获取 9V-20V 的电源。
- 下方 Type-C 接口(调试烧录与 5V 供电):这个接口则专门用于与ESP32-C3通信。它的 USB 信号直接连接到了 ESP32-C3 的 USB 引脚。同时,这个接口的 VBUS 还可以提供一个 5V 电源,这个 5V 电源通过一个二极管(防倒灌)引入板载 5V 电源总线作为调试烧录时的芯片供电使用。
综上所述
不知道你看完以上描述后,是否意识到了方案一的一个潜在缺点?方案一最麻烦的一点在于:若是需要对 ESP32-C3 调试烧录,那么就需要完成 PD 诱骗这一步骤。然而,大部分的电脑所提供的 USB 接口并不支持 PD 快充这个功能......但是我的笔记本上有一个雷电 4 接口哦(得意,不过这个功能在现在应该是大部分游戏本的标配就是了)。因此,在需要调试烧录的场景下,方案一可能带来很多不便......
因此,我自认为方案一是一个有趣且高度集成的“奇思妙想”,追求极简;而方案二则是更传统、功能分离、稳定可靠的方案。
3. 电源
然后,让我们快速过一遍电源这一部分吧?
主电源来自外部的 PD 供电(电源电压 9V ~ 20V,可通过 ESP32-C3 设置 CH224K CFG1 ~ CFG3 进行设置),这个输入电压首先会经过 TPS54302DDCR DC-DC 同步降压转换器转换得到 5V/3A 电源(主电源功率要足够),主要用以驱动 35 颗 WS2812 灯珠与 4010 散热风扇。
之后,由上得到的 5V 电源再经过 ME6217C33M5G LDO 线性稳压器得到稳定的 3.3V/800mA 电源。为 ESP32-C3 控制电路供电。
这部分电路原理图与 Layout 设计参考官方技术手册来设计就可以啦,没什么难的,各芯片的详细参数就不在这里贴出了,就麻烦各位自行查阅技术手册啦(偷懒.jpg)。
4. ESP32-C3-MINI-1-N4 模组外围电路及引脚功能图
这部分就不能偷懒了......重点是引脚图,其实在电路原理图的第二图页 “ESP32-C3-MINI-1” 部分已经给出了,这里就基于方案二的电路原理图,绘制了一个更直观的引脚功能图如下所示。请注意:方案一和方案二的具体引脚分配有所不同,但功能部分是不变的。
5. 灯板设计
灯板使用了 40 颗 暖白色 + 40 颗 正白色 3V/1W 2835 高亮 LED 灯珠与 35 颗 5050 WS2812 幻彩灯珠。支持暖白双色温度调节与 RGB 氛围灯光效果~(偷懒复制)
灯板本身也有两个版本,不过二者差别不大:
- 图左为 v1.0 灯板方案:连接焊盘放置在灯板底面,灯板正面显得更干净。
- 图右为 v1.1 灯板方案:改用了多层连接焊盘,焊接起来更顺手一些~
这里还需要提一下 RGB 的连接顺序,详见下图⬇~
从这张图也能发现一个焊接时的小坑:相邻两列的 WS2812 灯珠,其数据流向是相反的,焊接时请务必注意 RGB 灯珠的方向~(很费手欸)
本来想尝试下立创的铝基板的......但是很明显 80 颗 2835 封装的 LED 灯珠与 35 颗 5050 封装的 WS2812 幻彩灯珠的 Layout 不是单层铝基板能解决的......
软件代码
这部分请稍等一下下!!!目前我实现的功能也只是简单的拨码调光而已,还不是很能拿的出手呢......如果不嫌弃的话,我可以简单介绍目前放在附件里的代码文件结构,以便各位使用。
放在附件里的代码是基于 XL6005E1 方案进行设计的,不能直接套用在 XL6003E1 方案上!若需要请自行按照电路原理图中的引脚配置修改代码。
嗯哼哼,本项目的代码基于 VSCode + ESP-IDF 框架,使用 C/C++ 编程语言进行编写(基本是 C 风味的 C++,不必担心自己看不懂!大概?)。以下是工程的文件结构图~(使用 AI 直接生成的)
这里值得关注的文件夹有两个:user_code 与 user_func 文件夹。
- user_code 文件夹:文件夹下的 "alice.cpp" 放着所有 FreeRTOS 任务定义与实现,外设初始化与功能实现任务都堆在这里。
- user_func 文件夹:这里堆放着所有我写的自定义函数,各个外设的初始化函数与可能的操作函数都堆在这里。
目前提供的代码很简单,"alice.cpp" 开头提供了 "TEST_RGB_ENTRY" 与 "TEST_LED_ENTRY" 两个宏定义开关。
// 若需要测试 RGB 功能,则定义 TEST_RGB_ENTRY // #define TEST_RGB_ENTRY // 若需要测试 LED 功能,则定义 TEST_LED_ENTRY #define TEST_LED_ENTRY
如这两个宏定义所述:
- 如果定义了 TEST_RGB_ENTRY 编译烧录后,通过按下拨码开关选择 RGB 灯光模式,左右拨码则是调节 RGB 灯光亮度。
- 如果定义了 TEST_LED_ENTRY 编译烧录后,通过按下拨码开关选择要控制暖白/正白灯光亮度通道,左右拨码则是调节 LED 灯光亮度。
是的,目前就这么朴素……只能提供那么简单的代码QAQ,演示视频与代码放在附件部分啦,本来想写一个上位机软件控制的,不过目前仅通过拨码开关就可以达到我所需要的功能了......能用就行.jpg(懒癌又发作了)
组装流程
终于来到最后一步了,拍手拍手。
本设计中并不包含外壳设计......毕竟外壳还是有点贵的。这部分涉及到一些五金件,就不能参考 BOM 单上的内容了,以下列出我所使用的零件。
- M2×12mm 双通铜柱 × 4
- M2×6mm 内六角螺丝 × 8
- M3×30mm 倒边十字螺丝 × 4
- M3 螺帽 × 4
- (可选) 4010风扇金属网罩 × 1
接下来是推荐的组装流程。很抱歉这部分没法提供更详细的步骤图片......组装的时候忘拍了,下次会注意的!
第一步:固定散热风扇
驱动板上已经预留了4010风扇的M3安装孔。使用 M3×30mm螺丝 和 M3螺母 将风扇固定在板子上。如果想看起来更专业、防止手碰到扇叶,可以加装一个风扇网罩。最后,记得将风扇的供电线插到驱动板的XH2.54-2P接口上。
第二步:连接灯板与驱动板
这是最关键的一步,需要用电线将两块板子的对应焊盘连接起来。请使用耐高温的硅胶导线,并确保连接牢固、正确无误。需要连接的焊盘功能如下~
- W+ / W-:暖白光 LED 灯组供电线
- C+ / C-:正白光 LED 灯组供电线
- +5V / GND:WS2812 RGB 灯珠供电线
- DIN:WS2812 数据信号线
- NTC:NTC 测温电阻 ADC 采集信号线(可选)
第三步:组合灯板与驱动板
将连接好所有导线的灯板与驱动板对齐,使用 M2×12mm铜柱 和 M2×6mm螺丝,通过四角的安装孔将两者固定在一起。拧紧后检查一下,确保所有导线没有被过度挤压或拉扯。
完成以上三步,硬件组装就基本大功告成了!最后,在上电测试前,请务必再次核对所有供电与信号线的连接是否正确,特别要注意正负极不要接反!
注意事项
在动手组装、调试和使用这个补光灯之前,这里有一些非常重要的提醒和内容总结,请务必花几分钟读完,它能帮你避免很多坑!
供电与电源
- 必须使用支持 USB PD 协议的电源适配器,并且其输出功率建议不低于 45W(为转换效率留出余量)。
- 确保诱骗电压设置在9V或以上(通过CH224K配置),否则后级的 TPS54302DDCR 可能无法正常启动。
- XL6003E1 方案的二合一 Type-C 口需要上位机支持 PD 快充输出才能进行调试,普通电脑USB口无法供电和通信。XL6005E1 方案则无此限制。
功率与散热(重中之重!)
这是具有最大 40W 功率的设备,LED 灯珠和 XL6003E1 / XL6005E1、TPS54302DDCR 驱动芯片工作时会产生大量热量。务必确保所有发热器件良好接触散热器或留有通风空间,并保证散热风扇正常工作。长时间高亮度使用,过热是最大的风险。
XL6005E1(TO252-5L 封装)的散热性能优于 XL6003E1(SOP8L 封装),若追求更大功率或长时间运行,建议优先使用方案二设计哦。
组装与焊接
- 连接灯板与驱动板的导线请使用耐高温硅胶线,并确保焊接牢固,避免因接触不良或过热导致短路。
- 焊接灯板时,请特别注意WS2812灯珠的数据流向(相邻两列方向相反),接错会导致整条灯珠不亮。
- 灯板上的大电流走线(如 LED 正负极)若有必要建议开窗处理并进行拖锡加粗,以减少发热和压降。
调试与软件
- 附件代码基于 XL6005E1 方案(方案二) 编写,用于方案一时必须根据原理图修改GPIO引脚定义。
- 首次上电建议先使用万用表测量各输出点(5V、3.3V、LED 驱动电压)是否正常,再接上负载进行测试。
- 代码功能目前较为基础(拨码开关调光),复杂的网络控制等功能请等待后续开发~。
安全与一般性警告
- 驱动板为高压(可达 30V 以上)恒流源输出,调试时请务必小心,避免触电或短路。
- 请勿在通电状态下插拔连接线或焊接。
- NTC测温功能为理论设计,尚未经过充分测试,使用该功能时请谨慎判断数据可靠性。
- 使用时请注意绝缘和物理防护,避免意外触摸或异物掉落造成短路。
务必注意:安全第一。祝你和你的补光灯玩得开心!如果发现了文档中的错误或有更好的改进点子,非常欢迎分享和讨论~
碎碎念
这个灯板的大小和常见的 1L 饮料瓶底大小差不多,把空饮料瓶直接凳到补光灯上,deng!deng!,一个发光饮料瓶诞生了!这个画面还蛮有喜感的(不是你的笑点太低了么?......),要是有复刻成功的可以试试看?
说实话其实我自认为更擅长软件部分的设计呢......不过近期基本都在进行硬件设计,也很难说哪部分是我所擅长的了......自己想一个项目,然后设计一个方案,绘制原理图、Layout,提交打板后等待 PCB 邮到,然后一点点焊接测试。感觉自己学习到了一些东西,但又感觉在原地踏步......时间在一点点流逝,不知道自己是否有一点点积累呢?
2026.1.31 更新
忘记说明关于代码编译时的注意事项了(敲)......上传的代码所使用的 ESP-IDF 版本为 v5.4.1,同时上传的 v0.1 代码文件上有些问题......v0.1 代码文件中删除了 .vscode 与 .devcontainer 这两个文件夹,可能导致项目无法编译,在 v0.2 版本中把缺失的文件补上了......不过我的 ESP-IDF 安装目录为自定义的安装目录,与默认路径不同,在编译前请按照以下顺序进行设置:
- 第一,选择当前的 ESP-IDF 版本:选择 ESP-IDF 版本为 v5.4.1,其他 ESP-IDF 不是太旧版本应该也行?
- 第二,设置乐鑫设备目标(IDF_TARGET):在展开的命令面板下拉框中依次选择 esp32c3 -> ESP32-C3 chip (via builtin USB-JTAG) 作为目标设备。
- 第三,打开 SDK 配置编辑器(menuconfig):要是没出问题的话 ESP-IDF 会根据工作区文件夹下的 sdkconfig 文件进行配置,这一步没什么需要注意的,仅需等待 SDK 配置编辑器窗口弹出即可。
- 第四,构建项目:点击小扳手标志,然后等待项目构建完成。要是编译没问题的话大概会弹出以下窗口~
- 第五,烧录项目:把用 Type-C 连接设备与电脑,在 选择要使用的端口(COM、tty、usbserial) 中选择对应 ESP 设备的端口(要是端口处于未选中的状态的话 ESP-IDF 大概会将连接到当前电脑上的所有设备端口轮询一遍,烧录还是能烧录的,不过轮要找到设备的时间要很久就是了), 点击小闪电标志开始烧录,等待烧录完成。
流程大概就是这样?要是还有什么缺失或问题我会再补充的!
2026.2.20 更新
关于软件代码更新
想起来我似乎注册了一个 Gitee 账号?后续代码将托管在 Gitee 仓库 上!欢迎 Star 和反馈: https://gitee.com/LinYIN592/esp32-c3-led-rgb-fill-light
本次更新主要围绕 网络连接 与 交互方式 进行了修改,现在你可以通过 Wi-Fi 或 USB 串口轻松配置和控制补光灯。以下是主要新增功能:
-
Web 控制面板
设计了一个简单的 HTML 界面,实时显示 PD 供电状态(电压/指示灯),以及支持 RGB 氛围光颜色实时选取、暖白/冷白亮度独立调节、灯光模式切换(幻彩/固定色温/数字矩阵)。
-
Wi-Fi 连接与配置
支持 STA 模式连接指定 Wi-Fi 网络,SSID 和密码可保存至 NVS(非易失存储),重启后自动重连。
成功连接后自动启动 HTTP 服务器,并支持 mDNS,可通过http://esp-light-control.local在浏览器中访问控制面板。(先配置 ESP32-C3 的 WiFi 网络连接,让它连接到与你手机或者电脑相同的 WiFi 网络,然后访问这个网址!) -
USB 串口命令配置
简单的串口命令解析器,通过 USB 串口(如 Arduino 串口监视器)可直接发送指令:
esp+restart—— 重启设备
wifi+set=ssid:你的SSID,pass:你的密码—— 配置 Wi-Fi
wifi+get=—— 查询当前保存的 Wi-Fi 信息
无需重新编译固件,即可完成简单的网络配置。
关于硬件的更新方案?
嗯哼哼,在翻阅 XL6005E1 技术手册的时候,突然发现之前抄的 PWM 调光电路其实还有更优雅的接法……v1.0 与 v1.1 控制板的设计直接照搬了典型应用,虽然能用,但感觉并没有发挥 "恒流" 这个最重要的特点。
这次在翻 XLSEMI 官网时找到了一个看起来更合理的 PWM 控制电路,这个电路图看起来比芯片技术手册中的电路原理图可靠多了?
使用 1N4148 二极管调光(也就是现有的 v1.0 与 v1.1 方案)缺点是不支持高频调光(文档指出 PWM 频率应不大于 500Hz,实际测试应证了这一点...大于 500Hz 的 PWM 信号会导致线性度很差),线性度较差,低频时频闪比较严重。
《LED调光方案简介》
《XLSEMI 恒流 LED 产品 PWM 调光方案简介》
以下电路原理图是从第二个 PDF 文档中找到的,采用 RC 滤波方式控制的电路原理图。留个坑位,等板子打样回来验证后再试试看如何?(挖坑.jpg)或是哪位大佬帮忙验证:>
✨ 复刻愉快 ✨
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM3D模型
| 序号 | 文件名称 | 下载次数 |
|---|---|---|
暂无数据 | ||
附件
| 序号 | 文件名称 | 下载次数 |
|---|---|---|
| 1 | 【ESP32-C3】补光灯_project_v0.1.7z | 11 |
| 2 | RGB 功能演示视频.mp4 | 5 |
| 3 | 【ESP32-C3】补光灯_project_v0.2.7z | 8 |
克隆工程知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。


评论