你好!欢迎来到深圳市颖特新科技有限公司!
语言
当前位置:首页 >> MM32/灵动微电子 >> MM32W无线MCU系列产品应用笔记 —— 智能炫彩遥控灯方案

MM32W无线MCU系列产品应用笔记 —— 智能炫彩遥控灯方案

关键字:灵动微电子 MM32W无线MCU 智能炫彩遥控灯方案 作者: 来源: 发布时间:2022-06-16  浏览:9
基于蓝牙技术的智能灯控方案是智能家居应用重要组成部分,通过连接手机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灯的颜色。                        

原理图

如需要了解更多灵动微MCU产品,请联系灵动微核心代理商,颖特新科技


编辑:ls  最后修改时间:2022-06-16

联系方式

0755-82591179

传真:0755-82591176

邮箱:vicky@yingtexin.net

地址:深圳市龙华区民治街道民治大道973万众润丰创业园A栋2楼A08

Copyright © 2014-2023 颖特新科技有限公司 All Rights Reserved.  粤ICP备14043402号-4