3229|6

821

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【沁恒试用】九、LED触摸调光灯 [复制链接]

 

       家里原来有个用了很多年的台灯,灯管配不上就闲置了。这次本打算利用这个旧灯架改制一个LED触摸调光台灯,结果半个月前老婆收拾房间当废品丢弃了,起因是家里有了一个小米LED台灯。改制台灯的事已经想了很久,材料也准备了,不过这只是个半成品,算是给自己个安慰。

一、简介

       LED照明部分使用了2颗3W LED灯珠,LED恒流驱动使用了PT4115,PWM产生及触摸按键部分使用了CH549EVT开发板。利用开发板上的三只触摸按键分别控制PWM占空增加;PWM占空比减少,用于调节LED亮度,另外一个用于LED关闭。

二、硬件介绍

1、LED灯珠。

       LED采用TOSHIBA_TL1F1-NW0-L两只串联,其主要参数见下图。原计划使用三颗计9W,后面发现小米台灯6W LED已经很亮了,于是就改为了两颗。LED散热器选用了一根250*27*5mm的铝合金条;

2、LED驱动PT4115。

       手上还有一种AMC7150驱动电流更大一些,但没有PWM控制功能。这里选用的是PT4115芯片。电路使用的是手册中的典型应用电路。其DIM引脚这PWM控制端。

3、电源。

       为方便调试使用了成品电源,第一次选用了一只7.2V输出的电源,结果PT4115采样电阻减少至0.1欧姆,LED工作电源还不到130mA;随后又换了一只9V输出的电源,在PT4115采样电阻0.1欧姆时LED工作电流达到了近630mA,最后又将PT4115采样电阻调整至0.22欧姆时,LED工作电流达到了近320mA。电源输出只有600mA,有点小了;

三、硬件电路制作、调试。

       PT4115安家的小板是之前制作PCB时补白的产物,电感是个拆机件。调试过程中发现LED的工作电流会随着时间慢慢下降一些,至310mA时基本稳定。

四、控制程序实现。

       因为有了前期的一些测试实验,在加之本次制作比较简单,再就是沁恒电子还提供了大量的例程,所以程序在整体实现的过程就比较简单了,不过按键处理函数写的太糟糕。下面是主要代码:

#define time 500										//延时常数

static UINT16 TEMP;										//用于按键计数
UINT16 PowerValue[16];                               	//保存触摸按键上电未触摸值
volatile UINT16 Press_Flag = 0;                      	//按下标志位
UINT8C CPW_Table[16] = { 30,30,30,30, 30,30,30,30,   	//与板间电容有关的参数,分别对应每个按键
                         30,30,30,30, 30,30,30,30,
                       };
UINT8C PWM_CODE[]={0,32,64,128,192,255};				//预设PWM占空比值


void main()
{
	UINT8 ch;
	UINT16 value;
	UINT16 err;                   //触摸模拟变化差值
	CfgFsys();                    //CH549时钟选择配置
	mDelaymS(20);
	mInitSTDIO();                 //串口0初始化,此例用于调试
	printf("TouchKey demo start ...\n");
	LED_Port_Init();
	TouchKey_Init();
	PWM_Config();
	//UART0_Config;
	Press_Flag = 0;                //无按键按下
	/* 获取按键初值 */
	for(ch=8; ch!=12; ch++)
	{
	  PowerValue[ch] = TouchKeySelect(ch,CPW_Table[ch]);
	  printf("%d ",PowerValue[ch]);
	}
	printf("\n");
	
	while(1)
	{
    /* 按键检测 */
		for(ch=8; ch!=11; ch++)//此处去除了ch12,即P25用于PWM输出。
		{
			value = TouchKeySelect(ch,CPW_Table[ch]);
			err = ABS(PowerValue[ch],value);
			switch(ch)
			{
				case 8:
				{
					if(err > DOWM_THRESHOLD_VALUE)     //差值大于阈值,认为按下
					{
						if((Press_Flag & (1<<ch)) == 0)  //说明是第一次按下
						{
							//printf("ch %d pressed,value:%d\n",(UINT16)ch, value);
							/* 点灯处理 */
							LED_Control(ch-8,1);
						}
						Press_Flag |= (1<<ch);
					}
					else if(err < UP_THRESHOLD_VALUE)  //说明抬起或者未按下
					{
						if(Press_Flag & (1<<ch))         //刚抬起
						{
							Press_Flag &= ~(1<<ch);
							//printf("ch %d up,value:%d\n",(UINT16)ch, value);
							/* 灭灯处理 */
							LED_Control(ch-8,0);
						
							TEMP ++;
							if(TEMP >= 5)
								TEMP = 5;
							PWM_DATA0 = PWM_CODE[TEMP];
							//PWM_TEMP = PWM_DATA0;
							printf("TEMP %d\n",TEMP);
							mDelaymS(time);
						}
					}
				}break;
									
				case 9:
				{
					if(err > DOWM_THRESHOLD_VALUE)     //差值大于阈值,认为按下
					{
						if((Press_Flag & (1<<ch)) == 0)  //说明是第一次按下
						{
							//printf("ch %d pressed,value:%d\n",(UINT16)ch, value);
							/* 点灯处理 */
							LED_Control(ch-8,1);
						}
						Press_Flag |= (1<<ch);
					}
					else if(err < UP_THRESHOLD_VALUE)  //说明抬起或者未按下
					{
						if(Press_Flag & (1<<ch))         //刚抬起
						{
							Press_Flag &= ~(1<<ch);
							//printf("ch %d up,value:%d\n",(UINT16)ch, value);
							/* 灭灯处理 */
							LED_Control(ch-8,0);
						
							TEMP--;
							if(TEMP <= 0)
								TEMP = 1;
							PWM_DATA0 = PWM_CODE[TEMP];
							//PWM_TEMP = PWM_DATA0;
							printf("TEMP %d\n",TEMP);
							mDelaymS(time);
						}
					}
				}break;
		
				case 10:
				{
					if(err > DOWM_THRESHOLD_VALUE)     //差值大于阈值,认为按下
					{
						if((Press_Flag & (1<<ch)) == 0)  //说明是第一次按下
						{
							//printf("ch %d pressed,value:%d\n",(UINT16)ch, value);
							/* 点灯处理 */
							LED_Control(ch-8,1);
						}
						Press_Flag |= (1<<ch);
					}
					else if(err < UP_THRESHOLD_VALUE)  //说明抬起或者未按下
					{
						if(Press_Flag & (1<<ch))         //刚抬起
						{
							Press_Flag &= ~(1<<ch);
							//printf("ch %d up,value:%d\n",(UINT16)ch, value);
							/* 灭灯处理 */
							LED_Control(ch-8,0);
						
							TEMP = 0;					
							PWM_DATA0 = PWM_CODE[TEMP];//LED熄灭
							
							printf("TEMP %d\n",TEMP);
							mDelaymS(time);
						}
					}
				}break;
				default: break;
			}
		}
	}
}

四、成果展示


五、总结及改进

       这次制作算是对CH549的一次简单的综合应用,不过确实太简单了点。原计划是使用CH554T并且也画了PCB,因为旧灯架没了也就暂时放下而利用了CH549EVT进行。

       这次用了两颗LED还是不错的,但没有均光罩投射出的光会产生重影,没有实际应用价值,用于台灯照明这是必须改进的。制作中利用了三个触摸按键,一个用于增加PWM;一个用于减少PWM;另外一只用于开、关LED电源,考虑到是临时实验验证就把开关的功能省略了,关闭LED采用了将PWM占空比调整为“0”进行替代;而打开LED直接触摸“增加”、“减少”PWM占空比进行替代。因此准备做如下改进:

1、使用TSSOP20封装的CH554T作为主控;

2、增加电源控制电路,即采用一只PMOS及一只NPN型三极管组成电子开关,用以控制LED电源,实现触摸控制其“开”、“关”状态;

3、将LED灯关闭前的“亮度”,即PWM占空比值保存至片内的FLASH_ROM,在下一次LED打开时再将其读出并写入PWM占空比设置寄存器,实现亮度记忆功能;

4、考虑将LED亮度设置为亮-中亮-暗三档;

5、将LED供电电源更换为9V/1A;

       通过这一段时间的学习,虽然对沁恒电子的CH549微控制器有了一定的认知,但还停留在比较肤浅的层面,对于陌生的USB更是没有入门,学习的路还很长。




此内容由EEWORLD论坛网友lising原创,如需转载或用于商业用途需征得作者同意并注明出处
 

最新回复

谢谢楼主分享   详情 回复 发表于 2021-4-25 14:59

赞赏

1

查看全部赞赏

点赞 关注
 
 

回复
举报

821

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
本帖最后由 lising 于 2019-7-28 23:27 编辑

插入的一小段视频没有显示。在这再补充一下,只有13秒。

WeChat_20190728222221.rar (1.87 MB, 下载次数: 0)

 

 
 
 

回复

2万

帖子

341

TA的资源

版主

板凳
 

支持一下,不错

PT4115这颗老牌驱动LED的IC不错

点评

谢谢版主支持! 又发现了一款SOP8的BP1808也不错,准备弄几片试试。  详情 回复 发表于 2019-7-31 21:47
 
 
 

回复

821

帖子

0

TA的资源

一粒金砂(高级)

4
 
qwqwqw2088 发表于 2019-7-31 21:26 支持一下,不错 PT4115这颗老牌驱动LED的IC不错

谢谢版主支持!

又发现了一款SOP8的BP1808也不错,准备弄几片试试。

点评

支持国产IC 这家上海的IC公司可以受理样品申请的  详情 回复 发表于 2019-7-31 22:48
 
 
 

回复

2万

帖子

341

TA的资源

版主

5
 
lising 发表于 2019-7-31 21:47 谢谢版主支持! 又发现了一款SOP8的BP1808也不错,准备弄几片试试。

支持国产IC

这家上海的IC公司可以受理样品申请的

点评

是国产的IC,上海一家公司的。从这款芯片手册上看性能不错、价格也很便宜,准备顺道买几片试试。  详情 回复 发表于 2019-7-31 23:25
 
 
 

回复

821

帖子

0

TA的资源

一粒金砂(高级)

6
 
qwqwqw2088 发表于 2019-7-31 22:48 支持国产IC 这家上海的IC公司可以受理样品申请的

是国产的IC,上海一家公司的。从这款芯片手册上看性能不错、价格也很便宜,准备顺道买几片试试。

 
 
 

回复

661

帖子

0

TA的资源

纯净的硅(初级)

7
 

谢谢楼主分享

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表