设为主页  加入收藏
 
·I2S数字功放IC/内置DSP音频算法功放芯片  ·马达驱动IC  ·2.1声道单芯片D类功放IC  ·内置DC/DC升压模块的D类功放IC  ·锂电充电管理IC/快充IC  ·无线遥控方案
当前位置:首页->方案设计
呼吸灯原理(非PWM实现方式)
文章来源:永阜康科技 更新时间:2020/10/16 11:07:00
在线咨询:
给我发消息
小鄢 2850985542
给我发消息
姚红霞 3003214837
给我发消息
张代明 3003290139
13713728695
 

1.呼吸灯原理分析:模拟人体呼吸,吸气和呼气各占1.5S,人眼的图像滞留时间0.04s(1/24帧画面),按最快0.04s算,就是40ms。亮0.02S,灭0.02s,人眼看到的应该是一直亮(可以实验)。

2.呼吸灯程序设计:就是改变这40ms中,亮和灭所占的百分比(40ms相对不柔和,20ms效果柔和)。

亮的百分比多,人眼看到的就亮,反之就是暗(实验,为了提高呼吸灯的柔和效果,采用设置20ms一个周期,20ms内调整亮和灭的比例)

因此程序设计:1.5S需要1500/20=75个周期,75个周期中,亮度百分比有0%增长到100%,因此每个周期增长时间为20ms/75=266us(点亮)。熄灭的原理,正好相反,熄灭时间增长。程序中需要两个循环,一个用来点亮一个用来熄灭。3.STM32程序实现代码 程序要灵活设计,能够调整呼吸时间的长短,1.5s这个参数。可以调整柔和度,可以调整40ms这个周期参数,这样就实现了呼吸灯的灵活调整。源代码先不放出来了,等做完实验放出。 ***********

//=======================================

void LedOnOff(uint32_t t,uint32_t xx) //T代表整个周期的时间,xx代表周期中点亮时间的长度

{

HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET); //GPIO_PIN_SET

HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);

mydely_us(xx); //点亮时间

HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);

mydely_us(t-xx); //熄灭时间

}

//*****************

*****************************************

int main(void)

{

int i;

int myLongTime=1500; //ms 呼吸总体时间

int myshortTime=40; //ms

int myCYC=myLongTime/myshortTime;

delay_init(); //初始化延时函数

LED_Init(); //初始化LED端口

while(1)

{

for(i=1; i<myCYC; i++)

LedOnOff(myshortTime*1000,i*myshortTime*1000.0/myCYC);

for(i=myCYC; i>1; i-=1)

LedOnOff(myshortTime*1000,i*myshortTime*1000.0/myCYC);

}

}

/*

4.原理分析,

模拟人体呼吸,吸气和呼气各占1.5S,人眼的图像滞留时间0.04s(1/24帧画面)

按最快0.04s算,就是40ms。亮0.02S,灭0.02s,人眼看到的应该是一直亮(可以实验)

呼吸灯,就是改变这40ms中,亮和灭所占的百分比。

1500/40=38周期,40ms/37=1052us。38个周期变比中,每个周期增长1个单位1052us,38个周期刚好是40ms.这样达到全亮

亮的百分比多,人眼看到的就亮,反之就是暗。

利用40ms这个时间,目测感觉有闪烁,减少这个时间,变化就会缓慢,没有闪烁感。参考用20ms

//us延时函数的实现

void mydely_us(uint32_t count)

{

HAL_TIM_Base_Stop_IT(&htim1);

my_tim1_count=0;

HAL_TIM_Base_Start_IT(&htim1);

while(my_tim1_count<count);

HAL_TIM_Base_Stop_IT(&htim1);

}

void TIM1_UP_IRQHandler(void)

{

/* USER CODE BEGIN TIM1_UP_IRQn 0 */

extern uint32_t my_tim1_count;

my_tim1_count++;

__HAL_TIM_CLEAR_IT(&htim1, TIM_IT_UPDATE);

/* USER CODE END TIM1_UP_IRQn 0 */

//HAL_TIM_IRQHandler(&htim1);

/* USER CODE BEGIN TIM1_UP_IRQn 1 */

/* USER CODE END TIM1_UP_IRQn 1 */

}

5.说明

利用HAL库,默认没有办法实现us的定时器,方法是。利用硬件定时器,产生一个1us的周期中断,每进入一次中断,一个全局变量加1,通过判断这个变量的值,来确定当前的延时时间。6.问题:1.HAL库的执行效率比较低,1us中断的实际,还没有处理完中断过程,因此需要手动修改中断函数,添加__HAL_TIM_CLEAR_IT(&htim1, TIM_IT_UPDATE);屏蔽: //HAL_TIM_IRQHandler(&htim1);这样中断处理时间会减少很多。2.全局变量的变化,如果总开着定时中断,会影响正常程序的执行,因此,需要延时的时候,开启定时器,延时结束,关闭定时器

void mydely_us(uint32_t count)

{

HAL_TIM_Base_Stop_IT(&htim1);

my_tim1_count=0;

HAL_TIM_Base_Start_IT(&htim1);

while(my_tim1_count<count);

HAL_TIM_Base_Stop_IT(&htim1);

 
 
 
    您可能对以下产品感兴趣  
产品型号 功能介绍 兼容型号 封装形式 工作电压 备注
HTR3236 HTR3236是一款36路LED PWM驱动器,PWM频率可固定为3kHz或22kHz。每一路最大输出电流可通过外置电阻REXT调节,最大38mA,并 可独立控制4档可选。每一路可通过I2C单独控制256级细腻亮度调节。 IS31FL3236/SN3218 QFN-44 2.5V-5.5V 36路LED PWM驱动器
HTR3218 HTR3218是一款18路LED PWM驱动器,PWM频率可固定为3kHz或22kHz。每一路最大输出电流可通过外置电阻REXT调节,最大38mA,并可独立控制4档可选。每一路可通过I2C单独控制256级细腻亮度调节。 IS31FL3218/SN3218 QFN-24 2.5V-5.5V 18路LED PWM驱动器
 
 
    相关产品  
A3992/HR3992(DMOS全桥PWM串行控制两相步进电机驱动IC)
DRV8833/HR8833( 2A低电压双路刷式直流或单路双极步进PWM绕组电流调节/限制电机驱动器IC)
APA2068(PWM脉宽调制/模拟音量控制/直流音量控制2.6W双声道AB类音频功放IC)
 
 
·蓝牙音箱的音频功放/升压/充电管
·单节锂电内置升压音频功放IC选型
·HT7179 12V升24V内置
·5V USB输入、三节锂电升压型
·网络主播声卡专用耳机放大IC-H
 
M12269 HT366 ACM8629 HT338 

业务洽谈:手机:13713728695(微信同号)   QQ:3003207580  EMAIL:panbo@szczkjgs.com   联系人:潘波

地址:深圳市宝安西乡航城大道航城创新创业园A5栋307/309

版权所有:深圳市永阜康科技有限公司  备案号:粤ICP备17113496号