触摸屏控制的LED调光系统的设计.docx
《触摸屏控制的LED调光系统的设计.docx》由会员分享,可在线阅读,更多相关《触摸屏控制的LED调光系统的设计.docx(15页珍藏版)》请在冰豆网上搜索。
触摸屏控制的LED调光系统的设计
触摸屏控制的LED调光系统的设计
摘要:
该系统设计基于STM32F103RBT6处理器为系统主控芯片,采用在触摸屏上设计调光控制界面,通过对触摸屏的操作实现对LED灯的调光控制,调光采用PWM脉冲宽度调制,PWM调光的占空比范围为0-100%,按1%的梯度进行调节。
通过恒流源电路驱动LED灯。
该设计的触摸屏采用四线电阻屏,显示屏为TFT彩屏。
随着现代人们追求艺术化、个性、高品位的生活,本组研制了用户可以随意调光,取代了传统机械开关的触屏按键模式,从而控制LED灯的渐变。
关键词:
STM32F103RBT6;四线电阻屏;PWM脉宽调制;恒流源电路:
LED调光
一、前言
近几年来,随着科技的发展和物质生活水平的提高,家居、酒店智能化也不断被人们所推崇。
如今LED已经随处可见,其靠着低能耗,体积小,便宜等优点迅速抢占了市场。
而电阻式触摸屏工作在于外界完全隔离的环境中,它不怕灰尘、水汽和油污,可以用任何物体来触摸,比较适合家居和工业控制领域,充分发挥LED数字化照明的优势。
目前正是发展该系统的最佳时机,它将LED提光改革浪潮下的一波新的增长点,所以我们完全有必要设计一款由触摸屏控制的LED调光系统。
智能调光系统是按照预先编制的运行规律和工作条件自行运行的灯光环境智能调光管理系统,也是随着现代电力电子技术、计算机及微电子技术的发展而兴起的现代照明控制方式。
二、系统功能与意义的概述
该系统具有电路简单、功耗低、数据传输可靠性高、功能易扩展等特点,可充分适用在各种场景下高精度调光的要求:
控制LED灯光的强弱,调出理想的情调,随心所欲,达到最佳效果。
适用于家居客厅,酒店宾馆,会所KTV,别墅公寓,现代茶室,咖啡厅,办公场所,会议室。
采用TFT彩屏触摸模式实现调光控制,指示一目了然,方便夜间辨识,无论晴天还是雨天用户均可调出各自所需的灯光亮度。
定时、触屏操作,方便省心,符合现代潮流。
对于顺应人们舒适便捷的生活要求,促进LED照明发展有着重要意义。
三、硬件电路设计
(一)系统方案比较与选定
1.微控制处理器部分
方案一:
采用51单片机(如AT89S51)作为为控制核心。
方案二:
STM32F103RBT6处理器作为微控制核心。
选用方案二。
STM32F103RBT6相对于51单片机性价比高,资源多,功能强大。
2.开关控制部分
方案一:
采用四线电阻式触摸屏。
方案二:
采用传统机械开关。
选用方案一。
电阻式触摸屏环境要求低,可以用任何物体来触摸写字画画。
新颖方便。
3.屏幕显示部分
方案一:
采用点阵显示数据。
缺点是体积大。
方案二:
采用TFT触摸彩屏。
选用方案二。
TFT触屏相比于点阵TFT触屏体积小,但有更多的空间来显示数据。
而且是触屏,连按键都省了。
4.LED灯驱动电路部分
方案一:
采用串联电阻来控制电流。
方案二:
采用恒流源电路。
选用方案二。
对LED做恒流控制,目前是效率最高,成本最低的方案。
可获得预期的亮度要求。
此系统本组采用PT4115的降压恒流源。
(二)电路设计
系统主要分为电源部分,主控部分,触摸屏部分,驱动电路部分,系统总框图如图1所示。
图1系统总框图
1.电源电路
电源电路主要由变压器、桥式整流、LM7805和电容组成。
220V电源经过变压器,接入桥式整流,经过滤波到LM7805稳压,稳压成5V直流电,再通过ASM1117稳压成3.3V输出给STM32F103RBT6板块供电。
2.主控部分
STM32F103RBT6芯片资源:
32位CPU,最高主频72MHz,51个GPIO口,128KB字节FLASH,20KBSRAM,3个串口,2个12位ADC,3个16位定时器,1个24位系统节拍定时器,1个USB,2个I2C,2个SPI。
STM32F103RBT6开发板上的PA7口通过PWM脉宽调制,经过PT4115恒流控制LED灯。
开发板上的LED0接在PA8上,LED1接在PD2上,其中LED0和LED1是低电平有效。
TFT触摸屏与STM32总共有5根线相连接,分别是PC0、PC1、PC2、PC3、PC13。
3.四线电阻屏
四线电阻模拟量技术的两层透明金属层工作时每层均增加5V恒定电压:
一个竖直方向,一个水平方向。
一次校正,稳定性高,永不漂移。
基本原理:
手指按压屏幕,双层屏幕间距离改变,导致屏幕电阻值改变,获得触摸信息,显示在液晶屏上。
(x,y)坐标原理如图2所示。
图2四线电阻原理图
4.LED灯驱动电路
LED的特性:
发光亮度与通过的电流量几乎呈线性正比关系。
LED驱动电路特性:
输出电源是恒定的,而输出电压会跟随LED的VF值去变化。
LED受电流变化影响比较大,采用恒流源驱动能延长LED的使用寿命。
此系统的恒流源驱动电路我们采用PT4115来实现。
四、系统的软件设计
(一)TFT-LED显示程序
相关步骤:
设置STM32F103RBT6与TFTLCD模块相连接的IO。
初始化TFTLCD模块。
通过函数将字符和数字显示到TFTLCD模块上。
LCD_Fill(80,50,160,110,RED);//填充一个红色的矩形框
LCD_Fill(80,210,160,260,BLUE);//填充一个蓝色的矩形框
Test_Show_CH_Font24_2(90,70,0,GREEN,RED);//矩形框里显示字体调
Test_Show_CH_Font24_2(118,70,1,GREEN,RED);//矩形框里显示字体光
Test_Show_CH_Font24_2(90,220,4,WHITE,BLUE);//矩形框里显示字体定时
Test_Show_CH_Font24_2(118,220,5,WHITE,BLUE);
Test_Show_CH_Font24_2(20,150,2,BLUE,GREEN);//矩形框里显示字体灯亮
Test_Show_CH_Font24_2(48,150,3,BLUE,GREEN);
Test_Show_CH_Font24_2(160,150,6,MAGENTA,YELLOW);//显示字体灯灭
Test_Show_CH_Font24_2(188,150,7,MAGENTA,YELLOW);
以填充的方式在TFT主界面上画出四个矩形,上下左右分别写有调光、定时、灯亮、灯灭。
调光界面上下左分别写有递增、递减、返回。
定时界面上最上方显示有时间数值、上左上右下左下右分别写有加一、减一、确定、返回。
(二)触摸屏按钮控制程序
KEY_Init是用来初始化按键输入的IO口的,将PA0、PA13、PA15设置成输入。
voidKEY_Init(void)//按键初始化
{
RCC->APB2ENR|=1<<2;//使能PORTA时钟
GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入
GPIOA->CRL|=0X00000008;
GPIOA->CRH&=0X0F0FFFFF;//PA13,15设置成输入
GPIOA->CRH|=0X80800000;
GPIOA->ODR|=1<<13;//PA13上拉,PA0默认下拉
GPIOA->ODR|=1<<15;//PA15上拉
}
KEY_Scan函数则是用来扫描这3个IO口按键是否有按下。
按钮程序如下。
key=KEY_Scan();
if(Pen_Point.Key_Sta==Key_Down)//触摸屏被按下
{
Convert_Pos();//将像素坐标转化为物理坐标
Pen_Point.Key_Sta=Key_Up;
if(Pen_Point.X0>=80&&Pen_Point.X0<160&&Pen_Point.Y0>50&&Pen_Point.Y0<110)
elseif(Pen_Point.X0>=10&&Pen_Point.X0<90&&Pen_Point.Y0>130&&Pen_Point.Y0<190)
Pen_Int_Set(0);//关闭中断
while(PEN==0);//如果PEN一直有效,则一直执行Pen_Int_Set
(1);//开启中断
}
(三)汉字显示程序
用PCtolcd2002软件生成汉字的点阵数据->显示在液晶上。
要生成16*16的GBK字库,则选择GBK,字宽和高均选择16,其他大小选择12,然后选择众向取模方式二,最后单击生成字模就会出现所需字库了。
点阵字库的设置如图3所示。
图3点阵字库的设置方法
在指定位置(x,y)显示1个16*16的汉字程序如下。
voidTest_Show_CH_Font16(u16x,u16y,u8index,u16color)
{
u8temp,t,t1;
u16y0=y;
for(t=0;t<32;t++)//每个16*16的汉字点阵有32个字节
{
if(t<16)temp=tfont16[index*2][t];//前16个字节
elsetemp=tfont16[index*2+1][t-16];//后16个字节
for(t1=0;t1<8;t1++)
{
if(temp&0x80)LCD_Draw_Point(x,y,color);//画实心点
elseLCD_Draw_Point(x,y,BACK_COLOR);//画空白点(使用背景色)
temp<<=1;
y++;
if((y-y0)==16)
{
y=y0;
x++;
break;
}
}
}
}同理可以编写点阵为24的汉字程序。
(四)PWM输出控制占空比程序
此系统程序采用的是通道2和PWM模式2,即在向上计数时,CNT的值大于CCR的值才为有效电平。
占空比显示公式:
(CCR/ARR)×100%。
脉宽调制波形图如图4所示。
图4脉宽调制波形图
占空比:
(TH/T)×100%。
PWM波形显示图如图5所示。
图5PWM波形显示图
原理:
通过控制TIM3_CH2输出PWM来控制DS1的亮度。
步骤如下。
开启TIM3时钟,配置PA7为复用输出。
设置TIM3的ARR和PSC(控制输出PWM的周期)。
设置TIM3_CH2的PWM模式。
使能TIM3的CH2输出,使能TIM3。
修改TIM3_CCR2来控制占空比。
首先定义PWM初始化,设定arr的值为900,psc的值为0。
LED_Init();//初始化与LED连接的硬件接口
PWM_Init(900,0);//不分频。
PWM频率=72000/900=8Khz
当在屏幕上按下‘递增’键的时候,开发板上的DS1灯闪0.2秒后灭掉,实现按1%的梯度控制小灯越来越亮,直到占空比为100%的灯最亮。
LED1=1;
delay_ms(200);
LED1=0;//延时0.2秒使LED灯闪烁
if(LED0_PWM_VAL>0)
LED0_PWM_VAL-=9;//占空比的1%的梯度递减
当在屏幕上按下‘递减’键的时候,开发板上的DS1灯闪0.2秒后灭掉,实现按1%的梯度控制小灯越来越暗,最后达到占空比为0%,熄灭。
LED1=1;
delay_ms(200);
LED1=0;//延时0.2秒使LED灯闪烁
if(LED0_PWM_VAL<900)
LED0_PWM_VAL+=9;//占空比1%的梯度递增
设置PWM的初始占空比为50%。
当在屏幕上按下‘灯亮’键的时候,开发板上的DS1灯亮。
LED1=0;
LED0_PWM_VAL=450;//占空比=(900-450)/900×100%=50%
设置最大占空比为0。
当在屏幕上按下‘灯灭’键的时候,开发板上的DS1灯灭。
LED1=1;
LED0_PWM_VAL=900;//占空比=(900-900)/900×100%=50%
(五)定时熄灭程序
定时器2产生中断的步骤如下。
TIM2时钟使能。
设置TIM2_ARR和TIM2_PSC的值。
设置TIM2_DIER允许更新中断。
允许TIM3工作。
TIM2中断分组设置。
编写中断服务函数。
首先定时器初始化:
Timerx_Init(10000,7199);//10Khz的计数频率,计数到10000为1s
time=20;//定义初始值time为20
显示两位数数字,同汉字显示方法一样。
因为“0”的代码是“20”,所以可直接用“time/10+20”来表示“index”十位数数值的代码;同理用“time%10+20”来表示“index”个位数数值的代码。
程序如下:
time++;//定时时间递增1;同理递减1为time--;
Test_Show_CH_Font24_2(100,90,time/10+20,RED,WHITE);//十位的数值
Test_Show_CH_Font24_2(120,90,time%10+20,RED,WHITE);//个位的数值
定时器2使能:
TIM2->CR1|=0x01;
定时器2中断服务程序如下。
voidTIM2_IRQHandler(void)
{
if(TIM2->SR&0X0001)//溢出中断
{
LED1=!
LED1;
time--;
if(time==0)
{
LED0_PWM_VAL=900;//灯灭
LED1=1;
TIM2->CR1&=~0x01;//不使能定时器2
}}
TIM2->SR&=~(1<<0);//清除中断标志位
}
五、下载调试与测试结果
触摸屏三个界面如图6、图7、图8所示。
图6主界面图7调光界面图8定时界面
在完成软件设计之后,我们将编译好的文件下载到STM32开发板上,观看其运行结果是否与编写的一致。
当在主界面依次按下‘灯亮’、‘调光’,切换到调光界面,按下‘递减’键的时候,开发板上的DS1灯闪0.2秒后灭掉,控制小灯越来越暗;按下‘递增’键的时候,开发板上的DS1灯闪0.2秒后灭掉,控制小灯越来越亮。
当在主界面依次按下‘灯亮’、‘定时’,切换到定时界面,在初始值为20秒的基础上用‘加一’、‘减一’来设定时值t,按下‘确定’后,灯将在t秒后熄灭。
使用示波器来观察PWM的占空比波形。
当我们在屏幕上按下‘灯亮’键的时候,占空比显示为50%;当我们在屏幕上按下‘灯灭’键的时候,占空比显示为0。
在电路电源部分,通过7805整流成5V。
我们从LM7805的第3脚的测试输出电压为稳定的4.95V。
六、总结
本次系统设计本组分工明确,模块分明。
我们制作了控制一盏灯的亮度渐变,我主要编写软件程序,搭档制作硬件部分。
值得一提的是我们用PWM脉宽调制可以无极调光,并且我们在完成特定的任务以外,还自主增加了一个定时功能,使作品更加完善。
这次设计工程量较大,尤其是汉字显示部分,在程序编译时碰到错误。
在触摸屏程序中,原本设置‘增’‘减’为开发板上的DS0的亮和灭,但是其一直不亮,最后我将它改成用DS1的闪烁,现象成功且清晰。
我们通过耐心的分析,并且运用工具书、利用网络查找和咨询指导老师,从而慢慢解决了其中的问题。
总体说来,对于本人在编写PWM输出实验、触摸屏实验、汉字显示实验及定时器中断实验中更清晰了解,设计进展顺利,高效!
参考文献
[1]王静霞.单片机应用技术(C语言版)[M].电子工业出版社,2009
[2]刘军.例说STM32[M].北京航空航天大学出版社,2011
[3]何立民.单片机与嵌入式系统应用[M].北京航空航天大学出版社,2002
[4]刘淼.嵌入式系统接口设计与Linux驱动程序开发[M].北京航空航天大学出版社,2006
[5]江志红.51单片机技术与运用系统开发[M].清华大学出版社,2008
[6]李朝青.PC机及单片机数据通信技术[M].北京航空航天大学出版社,2001
附录
附录一:
使用LCD点阵生成软件“PCtoLCD2002”,生成汉字调(0)光
(1)灯
(2)亮(3)定(4)时(5)灯(6)灭(7)递(8)增(9)返(10)回(11)递(12)减(13)确(14)定(15)加(16)减(17)一(18),数字0(20)1(21)2(22)3(23)4(24)5(25)6(26)7(27)8(28)9(29)的代码。
附录二:
电源电路
‘
附录三:
电源电压转换电路图
附录四:
触摸屏与STM32的连接图
附录五:
PT4115应用电路
附录六:
实物成品