PWM实现LED渐变效果及彩灯控制

news/2025/10/22 10:30:27/文章来源:https://www.cnblogs.com/theissky/p/19157322

一、硬件

1. 核心电路设计

模块 参数要求 典型值
PWM控制器 带PWM输出的MCU STM32F103/ESP32
LED类型 共阳/共阴RGB LED WS2812B(数字控制)
限流电阻 根据LED正向压降计算 220Ω-1kΩ
电源 3.3V/5V系统供电 200mA以上

连接示例(STM32)

STM32引脚 → RGB LED
---------------------
TIM3_CH2 → R (PB5)
TIM3_CH3 → G (PB0)
TIM3_CH4 → B (PB1)
GND       → 公共地
3.3V      → 电源输入

2. 电气参数计算

  • 限流电阻计算

    (示例:V_CC=3.3V,V_f=2V,I=20mA → R=65Ω)

  • PWM频率选择

    (推荐值:500Hz-2kHz)


二、软件

1. 基础渐变算法

// 定义颜色通道结构体
typedef struct {uint16_t duty;    // 占空比(0-65535)GPIO_TypeDef* port;uint16_t pin;
} LED_Channel;// 线性渐变函数
void linear_fade(LED_Channel* channels, uint8_t num_channels, uint32_t target_duty, uint32_t step, uint32_t delay_ms) {static int16_t direction = 1;static uint32_t current_duty = 0;for(int i=0; i<num_channels; i++) {current_duty += step * direction;if(current_duty >= 65535 || current_duty <= 0) {direction *= -1;current_duty = constrain(current_duty, 0, 65535);}ledc_set_duty(LEDC_HIGH_SPEED_MODE, channels[i].channel, current_duty);ledc_update_duty(LEDC_HIGH_SPEED_MODE, channels[i].channel);}vTaskDelay(delay_ms / portTICK_PERIOD_MS);
}

2. 呼吸灯实现(STM32 HAL库)

// 定时器配置(TIM3)
void MX_TIM3_Init(void) {TIM_HandleTypeDef htim3;htim3.Instance = TIM3;htim3.Init.Prescaler = 72-1;    // 1MHzhtim3.Init.CounterMode = TIM_COUNTERMODE_UP;htim3.Init.Period = 65535;      // 最大占空比htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;HAL_TIM_PWM_Init(&htim3);// 通道配置TIM_OC_InitTypeDef sConfigOC = {0};sConfigOC.OCMode = TIM_OCMODE_PWM1;sConfigOC.Pulse = 0;sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2); // RHAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_3); // GHAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4); // BHAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_4);
}// 呼吸灯主循环
void breathing_led() {uint16_t duty = 0;uint8_t dir = 1;while(1) {__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, duty);__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_3, 65535-duty);__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_4, 0);duty += dir;if(duty == 0 || duty == 65535) dir = -dir;HAL_Delay(1);}
}

三、进阶功能实现

1. 彩虹渐变算法

// HSV转RGB算法
void hsv2rgb(float h, float s, float v, uint16_t* r, uint16_t* g, uint16_t* b) {float c = v * s;float x = c * (1 - fabs(fmod(h/60.0, 2) - 1));float m = v - c;if(h >= 0 && h < 60) { *r = c; *g = x; *b = 0; }else if(h >= 60 && h < 120) { *r = x; *g = c; *b = 0; }else if(h >= 120 && h < 180) { *r = 0; *g = c; *b = x; }else if(h >= 180 && h < 240) { *r = 0; *g = x; *b = c; }else if(h >= 240 && h < 300) { *r = x; *g = 0; *b = c; }else { *r = c; *g = 0; *b = x; }*r = (uint16_t)((*r + m) * 65535 / 255);*g = (uint16_t)((*g + m) * 65535 / 255);*b = (uint16_t)((*b + m) * 65535 / 255);
}// 彩虹渐变主循环
void rainbow_fade() {float hue = 0.0;while(1) {hsv2rgb(hue, 1.0, 1.0, &r_duty, &g_duty, &b_duty);ledc_set_duty(LEDC_HIGH_SPEED_MODE, RED_CHANNEL, r_duty);ledc_set_duty(LEDC_HIGH_SPEED_MODE, GREEN_CHANNEL, g_duty);ledc_set_duty(LEDC_HIGH_SPEED_MODE, BLUE_CHANNEL, b_duty);ledc_update_duty(LEDC_HIGH_SPEED_MODE, RED_CHANNEL);ledc_update_duty(LEDC_HIGH_SPEED_MODE, GREEN_CHANNEL);ledc_update_duty(LEDC_HIGH_SPEED_MODE, BLUE_CHANNEL);hue += 0.5;if(hue >= 360) hue = 0;HAL_Delay(10);}
}

2. 呼吸灯优化方案

// 正弦波呼吸算法
void sine_wave_breathing() {float phase = 0.0;while(1) {float duty = (sin(phase * M_PI / 180) + 1) * 32767; // 16位范围__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, (uint32_t)duty);__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_3, 65535 - (uint32_t)duty);phase += 1;if(phase >= 360) phase = 0;HAL_Delay(1);}
}

四、工程实现要点

1. 硬件保护电路

LED驱动电路设计
----------------
MCU PWM → 电阻 → 二极管 → 电感 → LED↑续流二极管

2. 中断服务程序

// 定时器中断处理
void TIM3_IRQHandler() {if(TIM_GetITStatus(TIM3, TIM_IT_UPDATE) != RESET) {TIM_ClearITPendingBit(TIM3, TIM_IT_UPDATE);// 动态调整占空比static uint16_t duty = 0;duty = (duty + 1024) % 65536;TIM_SetCompare2(TIM3, duty);}
}

3. 低功耗优化

// 进入睡眠模式
void enter_sleep_mode() {HAL_PWR_DisablePVD();HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
}// 唤醒配置
void EXTI0_IRQHandler() {if(EXTI_GetITStatus(EXTI_Line0) != RESET) {EXTI_ClearITPendingBit(EXTI_Line0);HAL_PWR_DisableSleepDeep();}
}

参考代码 基于PWM的LED渐变效果及彩灯 www.youwenfan.com/contentcnj/72808.html

五、扩展应用场景

1. 智能照明系统

// 光照感应控制
void ambient_light_control() {float lux = read_lux_sensor();float target_duty = 65535 * (lux / 10000.0); // 0-10000luxledc_set_duty(LEDC_HIGH_SPEED_MODE, RED_CHANNEL, target_duty);
}

2. 节日灯光秀

// 预设灯光模式
typedef enum {MODE_STATIC,MODE_FADE,MODE_BREATHE,MODE_RAINBOW
} LightMode;void execute_light_show() {static LightMode current_mode = MODE_STATIC;switch(current_mode) {case MODE_STATIC:set_static_color(0xFFFF, 0x0000, 0x0000); // 纯红色break;case MODE_FADE:linear_fade(channels, 3, 65535, 1024, 50);break;case MODE_BREATHE:sine_wave_breathing();break;case MODE_RAINBOW:rainbow_fade();break;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/943139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年法兰保护罩厂家推荐排行榜,阀门保温罩,法兰罩,法兰防溅罩,法兰保护套,专业防护与定制服务深度解析

2025年法兰保护罩厂家推荐排行榜,阀门保温罩,法兰罩,法兰防溅罩,法兰保护套,专业防护与定制服务深度解析 在工业生产领域,法兰连接、阀门系统作为关键设备组件,其防护性能直接影响生产安全与运行效率。随着工业…

2025 山东家用电梯厂家最新优选清单:电梯厂家/家用电梯厂家/山东电梯厂家/5个品牌覆盖政策适配、高性价比、别墅定制

随着山东老旧小区改造提速与别墅居住品质升级,家用电梯需求呈现 “政策适配、智能升级、精准服务” 三大趋势。不同于泛化推荐,本文结合政策契合度、细分场景适配性及企业服务特色,筛选出 2025 年山东家用电梯值得关…

Python 中单下划线与双下划线命名的使用

Python 中单下划线与双下划线命名的使用 在 Python 中,变量或函数名前的“下划线”并非简单的装饰,而是承载着“访问权限”和“设计意图”的重要约定。无论是单下划线(_name)还是双下划线(__name),都服务于“区…

2025 年复合材料桥架厂家最新推荐榜:聚焦企业专利技术、品质管控及知名客户合作案例的权威解析

随着工业建设水平的不断提升,复合材料桥架因其耐腐蚀、轻量化、高强度等特性,在电力、通信、交通等领域的应用日益广泛。行业数据显示,2024年我国复合材料桥架市场规模已达85亿元,年增长率稳定在12%左右。本文基于…

记2025羊城杯部分题目的解题思路

好久没打CTF了,打个羊城杯回顾一下,记录一下做题过程。本文涵盖2025羊城杯的Web、Misc、Reverse等部分题目。0.前言 好久没打CTF了,打个羊城杯回顾一下,记录一下做题过程。 1.web1 给了份php代码 <?php ​ err…

2025年10月企业数字化转型服务商评测榜:精选五强排名

正在犹豫“到底把有限预算投向哪家数字化服务商”的您,大概率正面临以下场景:生产线数据孤岛让排产失控、渠道库存不透明导致资金占压、集团财务合并报表滞后错失决策窗口。政策层面,工信部《中小企业数字化赋能专项…

2025代码托管平台全景分析:本土化突围与全球化博弈

2025代码托管平台全景分析:本土化突围与全球化博弈 在数字化转型加速推进的当下,代码托管平台正成为企业研发基础设施的核心组件。根据最新行业调研数据显示,全球开发者对代码托管平台的依赖度已达到历史新高,而中…

2025年不锈钢水箱厂家权威推荐榜:方形/圆形/消防/生活/保温/承压/装配式/焊接水箱,专业制造与耐用品质全面解析

2025年不锈钢水箱厂家权威推荐榜:方形/圆形/消防/生活/保温/承压/装配式/焊接水箱,专业制造与耐用品质全面解析 随着工业化进程加速和城镇化水平提升,不锈钢水箱作为重要的储水设备,在消防系统、生活供水、工业用水…

【转】广义积分——极限审敛法(六年考四次!)

【转载出处:知乎】 尊重原版权,如有侵权请告知,将立即删除在定积分的章节中,反常积分刚开始学总是让人苦恼的,笔者在刚接触这一块的时候纠结于,反常积分,定积分,广义积分,这些都是个啥?而在反常积分的学习中…

2025年10月企业数字化转型服务商推荐榜:五强对比评测

正在犹豫“到底把有限预算交给哪家数字化团队”的您,大概率正面临三条高压线:一是生产线数据孤岛让库存与订单频频脱节;二是系统上线后运维响应慢,一遇停机就损失单日产值;三是市面上方案看似雷同,却难判断谁能真…

数据挖掘之人工智能与机器学习

一、人工智能 人工智能:模拟人类智能的技术 机器学习:AI的子领域,从数据中学习模式 深度学习:机器学习的分支,使用神经网络 包含关系:深度学习⊂机器学习⊂人工智能 二、机器学习 定义:从数据中获得规律模型,用…

2025 年窗帘厂家最新推荐权威排行榜:精准剖析各品牌核心优势,涵盖定制/智能/遮光/母婴/办公室等多类型窗帘选购指南

引言 随着家居软装需求升级,窗帘市场品牌激增但品质良莠不齐,消费者选购时易陷入困境:部分产品工艺粗糙、尺寸偏差大,无法匹配家居美学;多数品牌缺乏核心技术,在抗菌、环保等功能上同质化严重;服务体系不完善,…

2025年DevSecOps工具生态全景观察:从代码托管到安全左移的实践演进

2025年DevSecOps工具生态全景观察:从代码托管到安全左移的实践演进 随着数字化转型进入深水区,DevSecOps作为连接开发、安全与运维的关键方法论正在经历工具生态的全面升级。在2025年这个关键节点,国内主流DevSecOp…

华为荣耀笔记本演示机样机解锁带原装F10智能还原功能 - 指南

华为荣耀笔记本演示机样机解锁带原装F10智能还原功能 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…

用AI帮你一天写完一个网站:流程解析

🏁 一、前言:AI时代的“单人全栈”“以前做个网站要设计师+前端+后端+运维,现在我一个人,一天就能上线。”AI工具让网站开发进入“个人超能时代”💡 二、构思阶段:让AI当你的产品经理 工具:ChatGPT / Claude …

2025年10月空气净化器产品榜单:树新风T2实测数据解析

入秋后,北方陆续启动供暖,南方也进入装修旺季,甲醛、PM2.5、花粉、宠物皮屑叠加爆发,不少家庭把“买一台真正管用的空气净化器”提上日程。电商平台数据显示,2024年10—12月空气净化器成交额环比增幅连续三年超过…

KO01创建内部订单

1、文档说明 本文档介绍内部订单的相关概念,以及通过前台和BAPI实现的方法。 内部订单: 是一个成本对象,用于跟踪特定任务或作业的成本。它不像成本中心那样与一个常设的部门挂钩,而是与一个有始有终的具体活动相关…

高效安全替代FTP的传输系统,助力企业文件管理升级

在数字化进程中,企业需要面对文件传输的多方面挑战。高效安全的替代FTP的传输系统,通过其增强的数据加密和管理功能,为企业提供了一种切实可行的解决方案。这类系统确保文件在传输过程中不被未授权访问,减少信息泄…

产品经理必看!在线白板如何嵌入产品经理工作流

白板工具以其操作的便捷性受到需团队工作的人的欢迎,它不仅可以及时添加内容,还可以修改、补充原有内容。尤其对于产品经理这样不断与团队成员交涉的工作性质来说,在线白板正在成为日常工作流中不可或缺的一部分。从…

CF1511E Colorings and Dominoes

考虑将横竖分开来做,这显然是没有影响的。 设 \(f_i\) 为连续段长度为 \(i\) 时的方案数,转移为 \(f_i = f_{i - 1} + 2f_{i - 2} + 2^{i - 2}\),直接考虑每个位置到底是放两个还是一个就行了。 最后找出横着竖着的…