ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

LED热管理实战:从恒流驱动到STM32温度保护设计

LED热管理实战:从恒流驱动到STM32温度保护设计 做LED相关的电路很多人一开始都觉得这东西又不像灯泡那样烫手随便接个限流电阻让它亮起来就算完事。结果用不了多久灯珠发暗、颜色发黄严重的直接烧掉。我最早拿着一颗3W白光LED配上5V开关电源加一个色环电阻点亮不到两分钟手指碰到灯珠背面直接被烫得缩回去——那一刻我才真正意识到LED的热从来不是小事。这个项目的题目叫 LED Thermal (Mis)Management重点全在那个 Mis 上绝大多数LED失效不是因为灯珠本身品质差而是散热管理压根没做对。恒压驱动没有限流、芯片选型错误、PCB铜皮太薄、散热片装得不贴合、测温点选错位置……每一条都是看着是小问题实际是大坑。这篇文章适合所有在做单片机项目、智能灯具、LED驱动电路、电子竞赛设计的读者。我会把LED发热的底层逻辑、驱动电路怎么选、NMOS怎么接、STM32CubeMX怎么配置、NTC温度采集怎么算、实测怎么测温度这些全部过一遍尽量做到拿到就能照着做。1. LED Thermal (Mis)Management 到底在管什么1.1 LED发热的本质电-光-热三方账LED本质是一个PN结半导体器件电子和空穴复合时释放能量一部分变成光子另一部分直接变成晶格振动也就是热能。市面上的功率LED把电能转成光能的比例一般在20%~40%之间剩下的60%~80%全是热。我经常跟人算一笔账一颗标称1W的白光LED通常工作在350mA、正向压降约3.2V电功率大约是1.12W。就算光效做到30%也有接近0.8W的能量变成了热全部要通过灯珠外壳、PCB、散热器排出去。这个热量如果不及时带走LED结温就会一路飙升。结温对LED的影响是双重的一是光效随温度升高而下降温度越高越不亮越不亮意味着同样的电功率下热占比更高形成恶性循环二是使用寿命按阿伦尼乌斯规律衰退业内经验大致是结温每升高10℃LED的预期寿命明显缩短光衰速度加快。白光大功率LED的结温上限一般是120℃但想要在几年内保持稳定的光通量最好把结温压在85℃以下。这不是玄学是热设计里最核心的一条红线。1.2 恒压驱动的热失控是最大的Mis-management很多人做LED项目图省事直接用恒压电源供电比如12V开关电源接一串灯珠再串个限流电阻完事。这里藏着一个非常危险的特性LED的正向压降具有负温度系数大致是-2mV/℃到-4mV/℃。什么意思当LED温度升高时它的正向压降会下降如果此时电源是恒压源、限流电阻又是固定的那么流过LED的电流会随之增大。电流增大导致发热更严重发热更严重又进一步降低正向压降电流继续增大——这就是经典的LED热失控。我见过最夸张的例子是有人用3.3V的LDO直接驱动一颗蓝色LED刚上电时电流是正常的20mA过了几十秒电流涨到60mA以上灯珠越来越亮最后啪一下烧成焦黑。用示波器测电压电压几乎没变变的只有电流。这就是典型的Thermal Mis-management没有意识到恒压源无法约束LED电流。结论很简单功率LED必须恒流驱动如果是小功率指示灯用恒压加电阻也要先测算好电流随温度的变化幅度别让它跑飞。1.3 算一笔账一个3W灯珠到底要散多少热拿一颗3W白光LED来说额定电流700mA典型正向压降3.2V电功率2.24W。按30%光效算热功率大约1.57W按更保守的25%光效算热功率接近1.7W。不要小看这1.7W在电子器件里一个指甲盖大小的器件要持续散掉1.7W热量比很多人想象中难得多。热量的传递路径是LED芯片结 → 热沉 → 灯珠外壳 → PCB → 散热器 → 环境空气。每一段都有热阻整条链路的热阻就是各级热阻之和结温计算公式是Tj Ta P热 × (Rth_JC Rth_CS Rth_SA)其中Rth_JC是结到外壳的热阻Rth_CS是外壳到散热器的接触热阻Rth_SA是散热器到环境的热阻。比如某款5050灯珠的Rth_JC是10K/W如果直接焊在普通FR4板上不加任何散热板级Rth_JA可能高达60K/W那么在0.8W热功率、环境温度25℃时结温就是25 0.8 × 60 73℃。勉强能活但寿命已经开始打折扣。如果把同样的灯珠放在铝基板上板级热阻能降到18K/W结温只有25 0.8 × 18 ≈ 39℃。同样一颗灯珠两种PCB方案结温差了34℃寿命和光衰完全不是一个级别。2. 驱动电路选型怎么从源头减少发热2.1 线性恒流 vs 开关恒流驱动芯片怎么选我常跟初学者说驱动方案的选择本身就是热管理的一部分。线性恒流芯片的优点是电路简单、没有开关噪声但缺点也很明显——多出来的电压全都在芯片上变成热量。以经典的AMC7135为例它是350mA线性恒流芯片输入电压最高6V自身压降约0.4V。如果用12V输入去驱动一颗Vf为3.2V的LEDAMC7135要吃掉12 - 3.2 - 0.4 8.4V的压降芯片上的功耗就是8.4V × 0.35A ≈ 2.94W。这比LED本身发热还大芯片不烫才怪。所以线性恒流只适合输入电压和LED正向压降接近的场景。真正适合功率LED的是开关恒流驱动主流方案是降压型Buck恒流。很多人搜led闪灯驱动芯片搜到的PT4115就是典型代表。PT4115内置功率管输入电压最高到30V外围只需一个电感、一个续流二极管、一个采样电阻就能工作效率可以做到90%以上。输出电流由采样电阻决定公式是Iout 0.1 / Rs这里的0.1是芯片内部基准电压。想要350mA采样电阻就是0.1 / 0.35 ≈ 0.286Ω取标称值0.3Ω想要700mA就用0.14Ω左右。选择开关驱动而不是线性驱动最大的好处就是把多余的能量从芯片发热变成电感储能转换热量压力大幅下降。这也是热管理的源头思路先让驱动电路少发热再去处理LED本身的散热而不是等热量都产生了再想办法排。2.2 NMOS驱动LED电路接法、选型、避坑用单片机控制LED的亮灭或PWM调光最靠谱的方式是用NMOS做低边开关。所谓低边就是把NMOS放在LED和地之间LED正极接电源负极接MOS管的D极MOS管的S极接地G极接单片机的GPIO。这样驱动逻辑很直接GPIO输出高电平MOS管导通LED点亮输出低电平MOS管截止LED熄灭。选型上有两个坑。第一个坑是栅极驱动电压。如果你的单片机是3.3V供电普通MOS管比如IRF540开启电压Vgs(th)在2V以上但要在3.3V下完全导通、把导通电阻RDS(on)降到最低需要至少10V的Vgs3.3V只能让它半开不开这时候MOS管处在线性区导通电阻很大发热严重LED亮度也上不去。正确做法是选逻辑电平MOS管比如AO3400、IRLZ44N这类在Vgs2.5V或4.5V时就能给出很低的RDS(on)。第二个坑是栅极悬空。GPIO在单片机上电复位瞬间可能是高阻态如果MOS管栅极悬空会受干扰误开LED闪一下甚至烧驱动。解决办法是在G极对地加一个10kΩ到100kΩ的下拉电阻确保默认是关断的。另外在栅极回路串一个10Ω到100Ω的电阻可以抑制开关瞬间的振铃如果是长线连接装一个1kΩ的栅极电阻对EMI也很有帮助。PWM频率较高时还要考虑单片机GPIO驱动栅极电容的能力频率超过20kHz、MOS管Qg超过10nC建议加一级驱动芯片或三极管推挽否则开关损耗会变成额外的热源。2.3 SELV在LED电源里到底是什么意思做LED项目的人经常看到电源标签上写SELV尤其在LED灯带、橱柜灯、低压灯具上特别常见。SELV是Safety Extra-Low Voltage的缩写也就是安全特低电压。划分标准一般是直流电压不超过60V交流峰值不超过42.4V。12V和24V的LED灯带电源都落在SELV范围内人可以直接接触带电部分而不至于触电这是它最大的价值。但SELV不是随便一个低压适配器就能叫的。它要求电源内部必须实现安全隔离也就是初级交流电和次级直流输出之间要有足够的电气隔离和绝缘层并且输出端对地、对初级都要满足特定的爬电距离和耐压要求。很多劣质所谓LED电源直接用的是非隔离电路输出端虽然也是12V但和市电之间没有可靠隔离一旦某个元件击穿整个安全低压就不安全了。从热管理角度看SELV也有实际意义因为电压被限制在60V以下功率一定时电流会偏大导线、接插件上的损耗会更明显大功率LED项目里要注意线径载流别让线材发热拖累整体可靠性。选择LED电源时确认标签上有明确的SELV标识而不是只看输出电压数字这一点在采购阶段就要养成习惯。2.4 热阻链路与散热路径设计散热路径设计是LED Thermal Management里最容易被忽视的环节。PCB是把热量从灯珠传递出去的第一站普通FR4板材导热系数只有0.3W/(m·K)左右而铝基板的导热系数能达到1~2W/(m·K)如果是做灯板直接用铝基板是性价比最高的选择。如果你只能用普通FR4板那就必须在LED焊盘下面打满热过孔常见做法是打0.3mm的小孔、间距0.8mm左右孔内沉铜把热量导到背面的大面积铜皮上去。还有一个关键细节是导热界面材料。灯珠外壳和散热器之间不能直接贴合因为表面再平也存在微观缝隙空气是很好的隔热体。所以一定要在接触面填充导热硅脂导热系数1.5W/(m·K)以上的就很够用了。硅脂不要涂太厚薄薄一层抹匀即可否则硅脂本身的热阻会主导整个接触热阻。如果是用螺钉固定散热器注意螺丝扭矩不要过大否则会压裂LED基板也不要用普通的白色散热硅胶代替硅脂长期使用硅胶老化后会干裂接触热阻会大幅上升。遇到过好几个案例都是散热器看起来很大但用了干掉的硅胶垫最后LED照样烧问题就出在接触热阻上。3. 实操一套带温度保护的LED调光系统3.1 硬件方案与BOM清单为了把前面这些原理落下来我做了一套完整的LED恒流调光温度保护系统整体架构是STM32F103作为主控光敏传感器检测环境亮度自动调光NTC热敏电阻贴在铝基板上实时监测温度温度高了自动降电流超过阈值直接切断LED输出。BOM清单如下主控STM32F103C8T6最小系统板LED3颗1W白光LED串联总Vf约9.6V驱动PT4115降压恒流模块采样电阻0.3Ω输出电流约300mAMOS管AO3400逻辑电平NMOS用于PWM调光和硬件关断光敏传感器光敏电阻LDR 10kΩ分压电阻温度传感器10kΩ NTC热敏电阻B值3435散热铝基板或普通FR4打热孔 小型铝散热器 导热硅脂电源12V/1A SELV电源适配器选12V输入、3颗LED串联是因为串联能提高总Vf让降压驱动的压差更小整个系统效率更高。如果只用一颗LED配12V输入PT4115虽然能压下来但大占空比下输出纹波和电感要求都会更苛刻。串联方案也更符合大功率LED驱动的常规设计习惯。3.2 STM32CubeMX配置ADC、PWM、GPIO输出很多新手搜stm32cubex led配置output其实只配置了GPIO输出让LED常亮但真正要做温度保护至少还要配ADC和PWM。我在STM32CubeMX里的具体配置是这样RCC选择HSE晶振系统时钟配置到72MHzGPIOPA4配置为GPIO_Output用于LED总开关接到NMOS栅极注意同时配置一个下拉电阻的硬件电路CubeMX里没有内部下拉就用外部10kΩ下拉ADC1IN0PA0接光敏传感器分压点IN1PA1接NTC分压点扫描模式开启分辨率12bit采样时间选55.5 cyclesTIM3Channel1配置为PWM输出默认引脚PA6频率设20kHz输出到PT4115的DIM引脚实现调光如果还要驱动蜂鸣器可以再配一个GPIO输出外接三极管或MOS管驱动这里有个容易踩的坑PA0和PA6一查引脚功能表会发现它们分别是ADC的输入和TIM3的PWM输出位置刚好不冲突但PA0同时也是TIM2_CH1如果想同时用PWM和ADC就要仔细检查引脚复用冲突。CubeMX做得比较好的一点是它会在配置时自动标红冲突引脚看到冲突别硬来换一个通道或者换一个定时器就行。NTC分压电路我采用的是10kΩ上拉到3.3V、NTC下拉到GND的接法ADC引脚再接一个0.1µF的滤波电容到地这样采样值稳定很多。NTC的电阻值随温度变化的公式是R R25 × exp(B × (1/T - 1/298.15))其中R2510kΩB3435。算一下几个关键点25℃时R10kΩ分压正好是1.65VADC读数约204880℃时R≈1.66kΩ分压约0.47VADC读数约58485℃时读数更低。这几个数据标定好之后以后只需要根据ADC读数反推温度即可。3.3 光敏传感器控制LED亮灭与PWM逻辑光敏电阻控制LED亮灭的逻辑并不复杂但要注意稳定性和滞回。我用的是LDR从3.3V接到ADC引脚、10kΩ电阻下拉到GND的接法环境光强时LDR阻值低ADC电压低环境光暗时LDR阻值高ADC电压高。注意这个逻辑是反的代码里处理一下就行。控制策略我做了三档环境亮度高ADC读数低于1000LED全亮PWM占空比80%环境亮度中等1000~2500PWM占空比50%环境亮度低高于2500PWM占空比25%避免深夜刺眼关键点是滞回。如果不加滞回光敏电阻在临界点附近波动LED会反复变化看起来就像在闪。所以我在判断档位时加了200个ADC计的滞回区间从亮变暗和从暗变亮时切换阈值不一样。这是做这种自动感光项目最容易忽略的细节。温度保护逻辑同样放在主循环里温度低于60℃PWM按光敏逻辑正常输出温度60℃~75℃PWM占空比按比例线性降低比如从100%降到40%温度高于85℃直接把PA4置低关断MOS管LED熄灭同时置一个错误标志位直到温度降到70℃以下才恢复这样的设计可以保证即使散热器过小或者环境温度过高系统也不会让LED结温冲顶属于一种软保护策略比单纯依赖保险丝或断电要温和得多。3.4 实测数据与调参记录这套系统我实际跑了一下午环境温度26℃。先做静态测试300mA恒流下3颗串联LED的实测总Vf是9.8VPT4115输入12V整个驱动板工作半小时后外壳温度42℃LED铝基板背面贴在导热硅脂上的测温点是47℃用接触式热电偶测灯珠焊点温度是53℃。按照灯珠Rth_JC约10K/W、热功率约0.7W来估算结温大约60℃这个状态是安全的。接着做极限测试把铝基板上的散热器拆掉只留裸板同样是300mA3分钟后NTC读数从原来的47℃一路涨到78℃然后触发了我设定的降功率逻辑PWM占空比从80%压到40%温度慢慢稳定在72℃左右。如果我把85℃关机阈值去掉在这种状态下继续跑估计十分钟内就会超过120℃灯珠光衰会非常明显这就是散热器的重要性被量化出来的过程。调参过程中还有一个发现PT4115的DIM引脚直接接MCU的PWM时占空比和输出电流并不是完全线性的尤其是占空比低于10%时电流会掉得比较快。所以我在光敏逻辑里把最低档设在25%不是为了好看是为了避开非线性区。如果你要让LED真正低亮度工作建议驱动芯片换成DIM调光线性度更好的型号或者干脆用MOS管做后级PWM斩波。4. 常见问题与排查技巧实录4.1 LED闪烁不是灯的问题是电路的问题LED闪烁大概是做这类项目时被问得最多的尤其搜led闪灯驱动芯片的人多半是遇到了不该闪却闪的情况。我归纳下来闪烁问题不出在灯珠上基本都在驱动或接线环节。第一是开关驱动器的输入电容不足。PT4115这类Buck芯片需要输入端有足够的电解电容来吸收开关纹波我实测输入电容从10µF换成100µF之后整灯在摄像头下基本看不到频闪而之前用手机录像能看到明显的横纹滚动。第二是PWM频率太低。人眼对100Hz以下的闪烁相当敏感如果你用MCU定时器输出PWM调光频率至少设在1kHz以上建议直接设20kHz还能避开音频噪声。第三是接线松动和虚焊。LED灯珠引脚焊盘温度反复膨胀收缩冷焊点很容易变成间歇性开路表现为灯时亮时灭这种在热成像下反而看不出来需要放大镜查焊点。如果LED闪烁频率恰好和某个环境光频率一致比如室内荧光灯的100Hz频闪那可能是光敏传感器受环境光干扰而不是LED本身的问题。解决方法是给ADC采样做多次平均或者把光敏采样时间放在LED关闭的瞬间避免采样到自己的光。4.2 温度异常的定位方法手测、热电偶、热像仪判断LED系统发热是否正常最粗暴的办法是用手背贴散热器感觉烫不烫但手测只能定性。我推荐的排查顺序是先用手摸散热器大概判断然后用热电偶测灯珠焊脚温度最后有条件再用热像仪看整个板面的温度分布。热电偶测温有几个注意点热电偶探头要尽量贴近灯珠焊盘最好用导热胶固定不要悬空如果测的是铝基板背面要在探头和铝板之间涂一点导热硅脂否则测得的是空气温度。热像仪测LED时要注意灯珠表面是强辐射源测到的可能是光辐射而非真实表面温度建议在灯珠表面贴一小块黑胶带或者涂无光黑漆等温度稳定后再测胶带表面的温度才能代表表面温度。还有一个很实用的电压检测法搜led灯珠电压检测电路的人应该会需要这个。用恒流源给灯珠通10mA左右的电流然后用万用表量正向压降如果Vf明显低于同规格灯珠说明灯珠可能已经内部短路或老化了如果Vf异常高且电流很小说明灯珠开路。这个方法不需要拆灯隔着PCB焊盘就能测日常排查非常有用。4.3 数码时钟/点阵的电流与发热取舍做LED数字时钟的人常为字形耗电纠结其实不管是数码管还是点阵动态扫描本身就是一种热管理手段。4位数码管动态扫描时每位只点亮1/4的时间虽然峰值电流要相应提高来保证亮度但平均电流其实下降整体发热更分散。这里有个容易被忽略的细节不同数字的笔画数不一样0亮6段1只亮2段。如果用共用限流电阻加恒压驱动笔画少的数字段电流会偏大、亮度偏高长时间运行还会导致特定笔画灯珠加速老化。更好的方案是每段独立限流电阻或者用恒流段驱动芯片如果追求均匀亮度还要考虑不同数字的平均功耗差异对电源和散热的影响。另外字形设计也影响功耗搜led数字时钟字体时看到的那些七段异形字笔画宽窄不同实际电流和亮度也有差异设计时不能只看外观爽。动态扫描还有一个细节刷新频率太低会闪太高损耗增加。我一般设在500Hz到1kHz数码管不会闪驱动管开关损耗也还在可控范围。4.4 多传感器联动的驱动分配问题搜红外超声波传感器led灯蜂鸣器三级怎么做用这类问题的朋友多半在做报警类项目。红外、超声波、光敏传感器加LED和蜂鸣器做成三级联动红外检测到人体是第一级LED亮起超声波距离小于设定值是第二级LED亮起同时蜂鸣器响光敏判断光线暗是第三级调整LED亮度。逻辑不复杂真正的问题是负载驱动分配。MCU的GPIO直接驱动LED没有问题但蜂鸣器不要直接接GPIO。有源蜂鸣器工作电流一般在20~30mA接近STM32单个GPIO的极限而且有感性的线圈反电动势会导致GPIO损伤。正确做法是用一个S8050三极管驱动蜂鸣器基极串1kΩ电阻接GPIO蜂鸣器并一个反向续流二极管。LED也一样如果是多颗LED并联不要把所有LED都挂在一个IO上要么用MOS管统一驱动要么分多路输出防止单个IO过流。这类多传感器项目的热管理重点在于持续工作蜂鸣器长响会发热如果一直鸣叫建议PWM驱动或者响5秒停2秒LED如果整夜亮着一定要按前文说的恒流或合理限流设计不然第二天早上灯就变暗了。5. 一点个人体会散热方案是设计出来的不是救出来的这套项目做下来我最大的体会是LED散热问题必须前置到设计阶段考虑不能等板子焊好了再想办法补救。选驱动方案时先想清楚线性驱动还是开关驱动布局时先决定铝基板还是FR4加过孔焊接时先把导热硅脂和散热器准备好最后才是写代码做控制。温度保护是最后一道防线不是唯一的防线。再分享一个小技巧如果手头没有热像仪可以用一个简单办法判断散热是否均匀。让LED满载稳定工作半小时后关机立刻用手背从不同位置依次靠近散热器和PCB背面感受温度梯度。如果散热器中心明显比边缘烫说明热量没有均匀扩散可能是基板导热层厚度不够或者热过孔太少如果灯珠周围很烫但散热器温度不高问题一定出在导热硅脂或接触面上。如果你也在做类似项目建议从一颗1W灯珠起步测好数据再往上扩展。LED是一个把电、光、热三个维度耦合在一起的东西能把这本账算清楚后面再做阵列灯、调光灯、智能灯都会顺手很多。
返回列表