MM32W系列MCU LED智能灯控方案
eetrendMcu 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
  • 光伏
  • 太阳能
  • 新能源
  • 如何提高太阳能电池的使用效率

    太阳能电池在实际生活中随处可见,即使是在乡村,也能看见太阳能电池的身影,比如装载太阳能电池的路灯。为增进大家对太阳能电池的认识,本文将对太阳能电池的历史、太阳能电池的材料、太阳能电池背板的退化原因予...

    2024-09-04
  • 太阳能电池的维护与保养方法是什么?

    太阳能电池作为常用电池类型,在现代社会得到了进一步发展。同时,太阳能电池为我们的生活带来了诸多便利,如美团单车上面的太阳能电池,为定位续航提供了支持。为增进大家对太阳能电池的认识,本文将介绍提高太阳...

    2024-09-04
  • PLC如何控制LED数码管

    LED数码显示管是一种由多个发光二极管封装在一起组成的显示器件,其广泛应用于各种场合,比如广告牌、钟表……

    2024-07-12
  • 三极管的低成本电压隔离方案

    昨天发了一篇关于线性光耦+运放做电压隔离采集的文章,今天在HCNR200的数据手册里又看到了一个低成本的隔离方案,使用的不是运算放大器,而是三极管,电路图如下:

    2024-07-12
  • 太阳能充电器的智能调节功能如何使用?

    充电器的使用极为频繁,几乎每个人每天都在使用充电器。为增进大家对充电器的认识,本文将对太阳能充电器,以及太阳能充电器的好坏予以介绍。通过本文,您将对充电器具备更深的了解。如果你对充电器具有兴趣,不妨...

    2024-07-08
  • 太阳能电池结构原理的全面解析与应用指南

    上篇文章中,小编对太阳能电池产业、太阳能电池特性有所阐述。为增进大家对太阳能电池的认识,本文将基于两点介绍有机太阳能电池:1、有机太阳能电池结构原理,2、有机太阳能电池应用前景。如果你对太阳能电池具有...

    2024-06-21
  • 制作有机太阳能电池的步骤

    太阳能电池在生活中有很多应用,路灯、单车等设备上,都有太阳能电池的身影。上篇文章中,小编对有机太阳能电池有所阐述。为增进大家对太阳能电池的认识,本文将对太阳能电池产业发展、太阳能电池基本特性予以介绍...

    2024-06-21
  • 大佬分享的太阳能电池知识

    太阳能电池,是生活中常见的电池类型之一。但是,太阳能电池按照材料的不同具有不同分类,比如薄膜太阳能电池、有机太阳能电池等。本文中,小编将堆有机太阳能电池予以介绍。如果你对太阳能电池具有兴趣,不妨继续...

    2024-06-21
  • 用三极管实现一个闪光经典电路的设计方案

    很多时候,我们是知其然,不知所以然。如果刨根问到底的话,可能这个问题会持续耽误完成这件事情的整个过程。但是不

    2024-05-11
  • 您了解光伏配电箱吗?家用配电箱跳闸问题如何检测?

    配电箱,是常用电力设备。通过配电箱,能够对电力加以管控。为增进大家对配电箱的认识,本文将对光伏配电箱予以介绍,并阐述如何检测家用配电箱的跳闸问题。如果你对配电箱具有兴趣,不妨和小编一起继续往下阅读哦...

    2024-01-24
  • LED灯光里的“隐形杀手”:警惕频闪危害

    使用LED等是家家户户的选择,然而也有的人在安装LED等之后,灯就会不停的闪烁。在晚上的时候,就会觉得比较吓人,那么led灯闪烁是什么原因呢?想要解决闪烁的问题,就一定要找对原因,才可以彻底的改善。下面就给大家...

    2024-01-15
下载排行榜
更多
评测报告
更多
广告