· 13 min read

LumiDock Flex:双色温主动散热台灯

LumiDock Flex 是我制作的第三款照明设备。也是我第一个台灯项目。之前做完便携式照明灯后,直接夹在悬臂上当台灯用了。既然如此,索性也算是对控制板迭个代,把上次的经验带过来,做个新的项目吧。我要一个低趴的台灯,在不遮挡屏幕的同时,帮助我照亮工作台,改善我焊接和调试硬件电路时的采光效果。

这次的台灯主要功能如下:

  • 双色温独立无级调光
  • 内置可充电电池
  • 支持温控主动散热
  • $ 4 \times 16 cm $ LED 板,最大 16 W 的输入功率
  • 带有 $ \frac{1}{4} inch $ 的螺母,用于连接支架后作为台灯使用
  • USB-C 5 ~ 12 V 电源输入,支持 PD、QC、DCP、PE 等快充协议
  • USB-C 掉电自动关灯

这是 LumiDock Flex 和我的使用场景照片:

LumiDock Flex 的工作环境

硬件电路

项目的硬件电路分为两片 PCB,一是 LED 灯板,二是控制板。他们之间通过 2.0 mm $2 \times 3 P$ 的排针排母硬连接。

LED 灯板

LED 灯板照片

灯板就是个厚度 2.0 mm 的单面铝基板,跨线部分使用了 1206 尺寸的 $0 \Omega$ 电阻跨越。然后反贴了一个 2.0 mm 的排针。

LED 继续选用了 RA95 高色显的 0.5 W 白光 LED,我按个人偏好贴了 6500K 和 5000K 的。看着比我买的商品灯好很多,这也是我为啥要自己搓的原因。

LED 灯板是 $ 4 \times 16 cm $、2 mm 厚的铝基板。非常感谢捷配最近调整的免费打样政策,让我能白嫖三片 这种规格的 LED 灯板。实际上这个厚度可能没必要,这个项目备用方案是通过这个铝基板来提供一定的支撑作用,不过根据我的体验结果 1.6 mm 应该也是够了。2 mm 权当作是增加散热吧。

控制板

控制板是白嫖嘉立创的 4 层板,1.2 mm。这个厚度就是故意设计的了。

控制板

控制板中间有一个挖空底部的排母位,可以让 LED 灯板的排针以底部向上插入的方式连接到控制板。在四周的螺丝孔位,两片 PCB 之间有 4 个 1mm 厚的垫片进行支撑,让 USB-C 母座的固定脚的凸出部分悬空,使得两片 PCB 能相对平行地固定住。

控制板与灯板

控制板分为三个部分:

  • LED 驱动电路
  • 电源管理
  • 主控

LED 驱动电路

LED 驱动芯片使用了 SY7203,30 V 的驱动电压能够驱动 8 串白光 LED。

LumiDock Flex 带有两路独立且完整的 LED 驱动电路,主要包含了驱动芯片、二极管和电感器组成了异步升压横流驱动电路。电路按照数据手册的推荐应用设计的,经过迭代,三个主要元件发热量目前在单路 8 串 166.7 mA (约 4 W)的负载,双路全部启用,环境 30 °C 的条件下自然散热,大概稳定在 55 °C 的温度。配合驱动电路底部的导热硅胶垫和上方主动散热的风道,实际温度表现控制在 46 ° C 左右。

166 mA 时主控板热成像

反馈电阻使用 1% 精度、25 ppm 的 0402 贴片电阻,阻值为 $1.2 \Omega$,发热偏大,但还是在正常的工作温度内。

2024-11-29。为了确认下设计的满载功率,我将反馈电阻调整到原定的 $0.6 \Omega$,LED 灯板每路先八串后两并,共两路。根据满载功率 19.2 W - 关灯功率 0.4 W 计算,LED 灯驱动满载总功率约 18.8 W,符合设计要求。驱动电路温度在主动散热工作时也来到 54 ° C 左右,之后受到温控策略限制,降低了亮度,温度保持在 52.7 ° C 左右。反馈电阻温度有明显降低,没有看到高温的情况。

233 mA 时主控板热成像

电源管理

使用了 SGM41511 作为 PMIC。主要是他支持 12 V 电压输入,充放电都支持 DC-DC 同步升降压。这款芯片功能挺强大的,淘宝购买价格也低。

虽然这款芯片带有电源路径管理,但是由于不提供 VBUS 直通,而支持 VBUS 直通的芯片想买到又很贵,所以这里使用了一颗 TPS2121 来控制电源路径。通过 TPS2121,现在就能实现 12 V 的 VBUS 电源直接进入 LED 升压驱动电路,相比 5 V 或者 4.2 V 的输入电压,极大程度降低了驱动电路的发热量。作为台灯来说,正常情况下都是通过 USB PD 协议,供着 12 V 的电压,发热量的降低也能减少主动散热带来的噪音问题。

USB 受电芯片选择了 HUSB238 。这里没有使用 MCU 来处理,主要是因为希望兼容非 USB-C 的快充协议,另外也是不想增加开发难度和成本。

主控电路

主控使用的是 STM32G031G8U6。G071 比 G031 多了 USB PD PHY,价格贵了 3 元至少,所以 USB PD 靠独立芯片来实现更划算,HUB238 不到两元嘞!

STM32G031G8U6 外设充足,ADC 精度不错,在这个项目中使用非常合适。

STM32G031G8U6 内部有温度传感器,主要的温控逻辑的温度来源由这个内部的温度传感器读取。与此同时,我还是在芯片外部增加了一个 I2C 控制的数字温度传感器 GX21M15。目前用于作为独立的温度保护器使用,温度达到设定的关断温度时,将发出低电平信号。LED 驱动电路是高电平使能,通过将关断信号与 LED 的 PWM 控制信号相与,实现了过温停机保护的功能。

独立的温度保护电路原理图

目前的遗憾是没有增加远端的温度采集,目前的温度采集都是在控制板上,主要是保护控制板不要过热。根据开发过程中的测试和最近几天成品的使用,LED 灯板温度一直都比驱动板低一些。并且两板通过导热垫传递温度,到是不太可能出现问题。

目前满功率使用,温度还没超过 50 °C,温控策略是 40 °C 开始主动散热,50 °C 开始降低亮度,60 °C 降至无权关灯。如果温度还是下不去,GX21M15 会强制将亮度降到 0,避免 MCU 未按预期工作。在这个策略下,电池温度基本上没可能超过 60 °C,正常是不会超过 50 °C,目前使用外部电源,满载时电池区域温度不超过 40 °C,电池应该是安全的。

软件设计

MCU 程序使用 embassy-stm32 作为 HAL。Rust 万岁!

Git Repo:https://github.com/IvanLi-CN/LumiDock-Flex

程序设计的比较简单,逻辑都放在了 main.rs 中,其他芯片的驱动都放在了单独的 crate 中。项目里没有啥花里胡哨的东西,目前没有为低功耗做优化,毕竟是个台灯,所以这事没啥优先级,绝对不是因为我没写过想要偷懒拖拖拉拉只挖坑不填坑……

外壳

外壳使用 FreeCAD 进行建模,工程文件和打印的模型也在 Git Repo 中。

目前外壳中框部分我个人觉得搞得有点厚,本来设计 6 mm 的厚度一是为了包容 $ \frac{1}{4} inch $ 的螺母 5mm 的长度,统一厚度好看也好设计,二是为了让外壳不那么透光。结果捏,光固化树脂打印,比我想象得还容易透光。不过倒不至于影响我看显示屏,就是开灯后没那么好看。

外壳中框

螺母倒是好嵌,烙铁开 100 °C 捅就行了,我捅的时候觉得我预留的孔尺寸还行,后面上螺丝时发现有部分螺母会与模型打滑,后面滴了胶水解决了。

外壳是在三维猴打印的,三个部分花了 50 元出头,运费另加 5 元。本来以为这个最贵的 LED 灯珠,还是比不过外壳的价格。我也看了下 CNC,看完就默默下单 3D 打印了……如果再做长一些的灯,估计成本要招架不住了。

外壳现在有一个弱点,滑动顶盖的卡扣强度有点不好,由于卡扣有锁紧效果,现在锁得比较紧,可能应力有点大,导致有个卡扣不知道什么时候断在里面了,目前卡扣剩下 7 个了,够用就够用,就是有点膈应 😖。卡扣部分应该再弄松 0.5 ~ 1 mm。

已知问题

满载情况下,散热能力跟不上,会导致亮度略有降低。不过 LED 已经是满功率工作了,原则上应该降低额定的工作电流,一来延长 LED 的寿命,二来降低发热。但是为了将 233 mA 作为类似 boost 模式使用,或许可以考虑更换更大封装二极管,以及使用小感值的电感来减轻发热。目前使用的 10 uH 电感可能有点大,或许应该该用 6.8 uH 或者 4.7 uH 的同封装电感。不过满载情况下真的亮得有点刺眼了,只做为桌面台灯没必要那么亮。

风扇起转时噪音明显。因为是对风扇电源进行 PWM 占空比调节转速,起转时占空比低,转速稳定前会有噪音。这个噪音比正常工作时大一些,但我个人能接受。

结语

个人觉得,LumiDock Flex 算是个能够分享出来并正常使用的项目,后续等我想做的项目都做完了,再回头优化一下软件部分。硬件部分目前还行,如果有时间的话再小小地优化调整一下,模型卡扣部分大概是需要优化一下,加固并弄松点。

Back to Blog

相关文章

查看更多 »
2023 年,再组一台黑苹果 ITX 主机

2023 年,再组一台黑苹果 ITX 主机

这是第二次组黑苹果台式机了,上一次是第一次,所以保守地选择了 i5-10400 + B460M + 6600XT 的组合。因为最近感受到 CPU 性能有一些吃紧,并且 ITX 的遗憾又开始涌上心头,最后看到 V 站老哥出 10700K + Z490I。顺势入手了。但是夜长梦多,挑选了半天的配件,最后发现应该买 12600K 比较合适。只能友好地鸽掉了 TAT

React 18,新的严格模式

好好的 useMemo、useEffect 居然执行了两次,我明明传入了依赖,为什么会执行两次呢?原来是 React 18 的破坏性改动!