MM32W系列MCU LED智能灯控方案
0 2023-03-22

在前面一章中我们已经详细介绍过MM32W系列MCU的自定义AT指令,在接下来的章节我们将着重介绍基于BLE开发的应用方案,在本章节我们将介绍智能灯控方案。

基于蓝牙技术的智能灯控方案是智能家居应用重要组成部分,通过连接手机APP可以控制灯的开关、亮度、设定开关时间、统计耗电量等功能。该方案具有控制方便,功能多样,操作迅速,设计开发简单等优势。

硬件资源:

LED的驱动分别使用PA9/10/11输出PWM波形控制三极管来驱动RGB灯。通过控制灰度来实现视觉上的亮度和颜色变化,红、绿、蓝三个颜色通道每种颜色各分为255阶亮度,在0时"灯"最弱--是关掉的,而在255时"灯"最亮。当三色数值相同时为无色彩的灰度色,而三色都为255时为最亮的白色,都为0时为黑色控制频率。可以使用几百赫兹到几十K赫兹来进行调节不同色彩的灯光。驱动控制原理部分详见下图:


图1 RGB灯驱动原理图

软件资源:

1、PA9/10/11为TIM1的CH2、3、4的捕获比较输出通道,需要将三个IO工作模式的配置为复用推挽输出,同时配置AF寄存器为TIM1的CH2、3、4功能,TIM1需要配置CH2、3、4为脉冲宽度调制模式。配置方式实现代码如下:

void PWM_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

TIM_OCInitTypeDef  TIM_OCInitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 , ENABLE);

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA , ENABLE); 

GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource9,GPIO_AF_2);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource10,GPIO_AF_2);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource11,GPIO_AF_2);

TIM_TimeBaseStructure.TIM_Period = 255*100;

TIM_TimeBaseStructure.TIM_Prescaler = 0;

TIM_TimeBaseStructure.TIM_ClockDivision = 0;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); 

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

TIM_OCInitStructure.TIM_Pulse = 0;

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 

TIM_OC2Init(TIM1, &TIM_OCInitStructure);

TIM_OC3Init(TIM1, &TIM_OCInitStructure);

TIM_OC4Init(TIM1, &TIM_OCInitStructure);

TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);

TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);

TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);

TIM_ARRPreloadConfig(TIM1, ENABLE);

TIM_Cmd(TIM1, ENABLE);

TIM1->BDTR |= 0x8000;

//上电亮白光

SetLEDLum(0,0,0,100);

SetLEDLum(0,0,100,101);

}

2、我们在UpdateLEDValueAll函数中调用Led_getInfo(data)来获取RGB的配置信息,data是一个数组指针,数组成员包含RGB三个LED的灰度值(0-255),而Led_getInfo(data)最终通过调用server_rd_rsp(u8 attOpcode, u16 attHandle, u8 pdu_type)函数来获取手机APP发送给我们的信息。根据data信息修改TIM1的CCR2、3、4的大小来调节CH2、3、4三路PWM输出的占空比,进而调节REB的三个LED的亮度,来实现我们对于不同色彩、亮度的需求。详细实现代码如下:

void UpdateLEDValueAll(void) //porting function

{

int t;

unsigned char data[7];

unsigned char EnableLED_Flag = 0;

unsigned int Led_Lum_percent = 100;

Led_getInfo(data);

EnableLED_Flag = data[0];

if(EnableLED_Flag == 0) {

TIM_SetCompare2(TIM1,0); //G

TIM_SetCompare3(TIM1,0); //B

TIM_SetCompare4(TIM1,0); //R

} else {

Led_Lum_percent = data[6];

t = data[3] * Led_Lum_percent; TIM_SetCompare2(TIM1,t); //Rx100

t = data[2] * Led_Lum_percent; TIM_SetCompare3(TIM1,t); //Gx100

t = data[1] * Led_Lum_percent; TIM_SetCompare4(TIM1,t); //Bx100

}

}

我们选用一款通用APP做为控制端,操作流程如下:

1. 手机打开App,会自动开始搜索蓝牙设备名(如MindMotionLED)并连接。

2. 连接成功以后app出现RGB控制界面,可以在APP界面中点选不同区域来改变LED灯的颜色。


图2 APP界面 
声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • LED
  • 光伏
  • 太阳能
  • 新能源
  • MLCC的LED照明应用

    是时候关注我们一波了永铭MLCC的H系列应用于LED照明一、LED照明应用LED照明领域,主要应用的MLCC

    8小时前
  • 关于LED驱动器输出对地短路的原因及处理

      在诸如汽车LED照明等应用中,由于驾驶员通常远离LED,因此需要增加短路保护功能,JOHNRICE在本文中介绍了如何防止LED驱动器输出对地短路。  非同步

    05-29
  • 一文带你了解LED照明和太阳能充电的技术挑战及解决方案(问答篇)

      作为一种既环保又节能的解决方案,LED照明在汽车、家庭、办公楼、酒店、机场和路灯等广泛的应用场合找到了自己的用武之地。但它的大规模商用除了还要克服成本障碍以

    05-28
  • LED灯具最佳驱动方式有哪些?

    LED是“LightEmittingDiode”的缩写,中文简称发光二极管,因为其具有节能环保、寿命长、光电效率高、抗震性能好等优点,近年来得以快速发展,理论上

    05-27
  • 逐条分析解决LED灯三种常见故障

    LED灯以其亮度大、耗能低、寿命长等特点,逐步霸占当今电灯市场。一般来说,LED灯是很难发生问题的,在LED灯的问题中,不外乎三种毛病:灯不亮、灯变暗、关灯后闪

    05-27
  • 从显示器的根本,背光原理上来对LCD与LED的区别进行讲解

      说到显示技术,人们最先想到的就是液晶显示(LCD)。随着时间的推移,一些新的显示技术开始走进人们的生活,LED显示技术就是其中一种。如果没有较为系统的对这两

    05-26
  • LED显示屏储存、安装应该注意什么?

      1、将箱体摆放地点打扫干净后,用珍珠棉铺设。  2、严禁杂乱堆放模组或堆叠10张以上。模组堆叠时,灯面相对摆放并使用珍珠棉进行隔离。    3、箱体的摆放建

    05-26
  • 一文详细讲解太阳能路灯系统的配置计算方法

      随着国家大力推崇绿色节能减排新能源,太阳能资源的应用进入人们的视线,凯创光电将其自主研发的蜂窝通孔LED路灯和太阳能资源进行了科学的整合,推出了太阳能LED

    05-26
  • led电视技术的前世今生

      LED全称“LightEmittingDiode”,译为发光二极管,是一种半导体组件。由于LED对电流的通过非常敏感,极小的电流就可以让它发光,而且寿命长,

    05-22
  • 一起聊一聊白色LED发展史

      在蓝色及白色LED等GaN类LED领域,日本国内厂商尚处于优势地位。原因是量产规模在全球所占的份额居首。尽管2004年底台湾厂商的GaN类LED芯片总体量产

    05-22
  • 你知道LED数字钟频率源的改进方法有哪些吗?

      大部分LED数字钟是用市电f220V/50Hz作频率源来计时,每天计时误差约20秒,需要经常调整,非常麻烦。  为找到合适的晶体,只好拆开家中3只废弃的不同

    05-22
  • 大尺寸TFT-LCD的LED背光模块的光源分析

      1前言  LCD是被动发光器件,本身是不发光的,因此必须要有背光模块给LCD提供光源。用来作为背光模块的光源有以下几种:  (1)冷阴极荧光灯;  (2)L

    05-22
下载排行榜
更多
广告