单片机课程设计触控调光灯讲解.docx
《单片机课程设计触控调光灯讲解.docx》由会员分享,可在线阅读,更多相关《单片机课程设计触控调光灯讲解.docx(14页珍藏版)》请在冰豆网上搜索。
![单片机课程设计触控调光灯讲解.docx](https://file1.bdocx.com/fileroot1/2023-1/26/38c9c88d-b5d5-4d9b-b36f-3571098be8bf/38c9c88d-b5d5-4d9b-b36f-3571098be8bf1.gif)
单片机课程设计触控调光灯讲解
绪论
随着经济发展的加快,科学技术的进步,人们生活水平得到了提高,设备逐渐完善。
台灯是生活中的伴侣,我们是不喜欢与强烈的光线打交道的,因为强光对人身体是有害的,为了大家能健康地生活与工作,设计师也想出了一个较为完美的构思,就是台灯的出现,它的出现让很多朋友们得到了满意的效果,但是生活中没有完美的东西,台灯亦不例外,这就需要我们的改进。
例如,很多时候我们并不需要让台灯处于全亮状态,有时候我们只需要微弱的光照即可,过强的光线反而会对使用者造成不必要的干扰,而且这也是对电能的一大浪费。
此外,关于开关的使用寿命,也是影响台灯的耐用性的另一个问题。
因此,本设计的指导思想就是让台灯更耐用、更好用且能够调节亮度,解决过高的亮度对使用者的干扰同时也是为了节能,以及解决普通机械开关易损坏的问题。
对于触模式台灯,手一触到台灯的感应部位灯就会自动亮,如果多触摸几下,台灯就会达到最亮的极限,这样就可以调节了台灯的亮度也避免了开关易坏导致的调节亮度易失灵的问题。
本文介绍了触摸式台灯调光电路的设计及工作过程。
本设计目的是通过设计工作熟悉触摸式调光灯电路基本构成与基本工作原理,并能将这些技术应用实际系统设计,提高自己对电路知识的认识。
一、系统工作原理
本设计采用STC公司的12系列单片机为控制芯片,配合外围电路进行对触摸按键的检测及对台灯亮度和开关的控制,利用单片机产生不同占空比的PWM方波实现对灯光的亮暗控制。
此外,本设计的触控功能的实现则是利用单片机的I/O口的开漏模式且未加上拉电阻,在此模式下I/O更容易接受外界微弱的电平,更容易受到手指的干扰。
本设计中,在被设置成开漏的I/O口要在单片机读该口前将其置1,使其成为高阻状态,当I/O接口被设置到高阻输入状态时,I/O接口就是纯电平输入状态,在接口悬空时为低电平,当有手指触摸到I/O接口时,手指上的微弱电流会使I/O接口跳变到高电平,只要读出I/O接口的电平高低就可以了解是否有触摸操作,然后加一段按键去抖程序后去调整与PWM占空比相关的数值,从而实现灯光亮度的连续可调。
二、系统硬件组成
本设计中所采用的芯片有STC公司的小型封装插件式单片机STC12C2052AD、AMS11175.0降压稳压IC、以及若干二极管、三极管,电阻电容等元器件。
其中:
2.1控制部分
STC12C2052AD单片机的引脚位置与用途如图2-1所示:
图2-1STC12C2050AD引脚图
STC12C2052AD系列单片机是单时钟/机器周期(1T)的兼容8051内核单片机,是高速/低功耗的新一代8051单片机,全新的流水线/精简指令集结构,内部集成复位电路
其优点有以下几个方面:
1.性价比高 采用STC12系列单片机可以省掉复位电路、外部数据存储器(如24Cxx系列芯片),某些场合还可以省掉晶振,电路简单、价格低廉。
2.速度快STC12系列单片机为单时钟/机器周期(1T),一些指令执行速度是传统8051的24倍,最低的也是3倍。
3.安全性好 目前,很难破译STC12系列单片机加密程序,加之用户数据可以保存到单片机内部,解密者很难通过用户数据分析单片机的运行状况。
4.可以直接代替8051针对传统8051单片机开发的程序,可以直接用于STC12系列单片机,无须重新编写。
在本设计中,单片机的I/O口的P3.4、P3.5、P3.7均在程序中设定为开漏模式,以连接外部触摸板来分别实现对灯光的关闭、渐亮、渐暗的控制。
单片机的P1.7口被程序设定为PWM方波输出口,用来连接驱动灯光的驱动部分。
图2-2为本设计控制部分的原理图:
图2-2控制部分原理图
由于此次设计采用8V电压供电,为安全起见,单片机的输出端和接地端均与后面的驱动部分用二极管1N4148进行单向隔离,此外,本设计还预留了程序下载接口,方便日后功能的增强和对程序的调试。
2.2驱动部分
驱动部分我采取的是用NPN型功率三极管13003级联搭建成的达林顿驱动器,以实现对较大电流负载的驱动控制。
由于所使用的LED灯头内无限流电阻,且实测其全亮发光时电流高达0.5A,为防止电流过大所引起的三极管过热烧毁,因此在其负载回路串接了10Ω2.5W的限流电阻,以牺牲较小的光照强度来换取元件的安全。
图2-3为驱动电路及LED接口的原理图:
图2-3驱动电路与LED接口
其中三极管13003为NPN型硅晶体管、功率开关三极管,主要用于:
日光灯、电子镇流器、充电器等高压功率开关电路。
其参数为:
(TO-92封装)
1.芯片面积:
1.63×1.63(特制芯片)
2.额定电流:
1.5A(加大电流品种)
3.饱和压降低、热性能好、反向击穿电压高、漏电流小。
4.13003最大额定值如表2-1:
表2-1三极管13003最大额定值
因此,用三极管13003来搭建驱动电路能为负载提供足够的电流,能使LED发出足够的光照强度供照明使用。
2.3电源部分
本设计之初经试验发现若用单节18650锂电池供电,虽然也能正常工作(即触控调光可用),但由于三极管等驱动部分电路存在较大电压降,导致即使控制状态为全亮,但实际的照明亮度却很低。
后经试验发现采取两节18650串联成8V供电后LED及驱动部分均能正常工作(单节18650锂电池满电状态下实测电压在4.1V左右),单片机部分则用降压稳压芯片AMS1117供电,两路不同电压电路再采取适当隔离后,整个控制驱动板即能正常工作。
其供电、降压以及电源指示电路如图2-4所示:
图2-4电源及指示部分原理图
其中:
AMS1117是一个正向低压降稳压器,在1A电流下压降为1.2V。
AMS1117有两个版本:
固定输出版本和可调版本,固定输出电压为1.5V、1.8V、2.5V、2.85V、3.0V、3.3V、5.0V,具有1%的精度;固定输出电压为1.2V的精度为2%,其内部集成过热保护和限流电路,是电池供电和便携式计算机的最佳选择。
AMS1117参数如下:
1.输入电压最大:
18V
2.输出电流最大:
1A
3.输出电压:
5.0V
4.功耗:
5W
5.输入电压最小:
6.2V
6.封装类型:
SOT-223,SOT-89
7.工作温度范围:
-20°Cto+125°C(也有0°Cto+125°C)
由于本设计采取电池纯直流供电,所以可以省去AMS1117周围的滤波电容等元件及其电路连线,让整个控制板更小巧,以便能顺利装入空间不大的台灯底座,经实测,降压稳压芯片AMS1117能正常稳定工作。
三、系统软件设计
系统的软件部分分为按键检测部分和PWM方波生成部分。
其中,系统的软件流程图如图3-1所示:
3.1系统流程图
图3-1系统软件流程图
STC12C2052AD系列单片机所有I/O口均可由软件配置成4种类型之一,如表3-1所示。
4种类型分别为:
准双向口(标准8051输出模式)、推挽输出、仅为输入(高阻)或开漏输出功能。
每个口配置2个控制寄存器控制每个引脚输出类型。
STC12C2052AD系列单片机上电复位后为准双向口(标准8051输出模式)模式。
其中P3口设定(P3.7,X,P3.5,P3.4,P3.3,P3.2,P3.1,P3.0,无P3.6口)如下表:
表3-1STC12C2052ADI/O口配置方式
在本设计中P3口的配置为P3M0=0xb0;P3M1=0xb0;
即:
P3.5,P3.4,P3.7为开漏输入,其余为普通双向I/O口
3.2系统程序
/****************************************************************
文件名:
LED调光
修改调试:
@春阳
最后修改:
2015.11.17
功能:
触控调光台灯
备注:
此次设计采用定时器0生成PWM信号,另外,stc12系列头文件,type.h则在本主程序下方
****************************************************************/
#include"stc12c5a.h"//stc12系列单片机总头文件,其包含各I/O口位定义
#include"type.h"//见文档末尾
#defineFRE22118400
#defineTIME_FRE10000000//计时1/10000000=0.0000001s=0.0001ms(此时间是用来加快LED闪烁频率)
#defineT0RELOAD(65536-(FRE/TIME_FRE))
/****************初始化变量**************************/
volatileU32SYS_TIME=0;
volatileU32LED_PWM=0;
/********************************************************************
函数名:
毫秒级CPU延时函数
调用:
delay(?
);
参数:
1~65535(参数不可为0)
返回值:
无
结果:
占用CPU方式延时与参数数值相同的毫秒时间
备注:
应用于1T单片机时i<600,应用于12T单片机时i<125
********************************************************************/
voiddelay(unsignedinta)
{
unsignedinti;
while(--a!
=0)
{
for(i=0;i<600;i++);
}
}
/********************************************************************
函数名:
定时器0初始化函数
调用:
Timer0_Init();
参数:
无
返回值:
无
结果:
设置定时器0工作方式
备注:
********************************************************************/
voidTimer0_Init()
{
TMOD&=0XF0;
TMOD|=0X01;//定时器0的16位计数方式
TH0=T0RELOAD/256;
TL0=T0RELOAD%256;
AUXR|=0X80;//计数器0时钟为Fosc,即1T
PT0=1;//定时器0优先级控制位,1为高优先级0为低优先级
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
}
/********************************************************************
函数名:
主函数
调用:
无
参数:
无
返回值:
无
结果:
程序开始处,无限循环
备注:
触控调光台灯主程序,包含按键检测及占空比调节
********************************************************************/
voidmain()
{
Timer0_Init();
P3M0=0xb0;//P3口配置:
P3.7,P3.5,P3.4为开漏输入,其余为普通双向I/O口
P3M1=0xb0;
while
(1)
{
P34=1;//p3.4置为开漏高阻态
if(P34==1)//KEY1直接关灯键
{
delay
(2);//延时消抖
if(P34==1)
{
LED_PWM=0;//熄灭LED
}
}
P35=1;//p3.5置为开漏高阻
if(P35==1)//KEY2按键一直按着,LED逐渐变亮
{
delay
(2);//延时消抖
if(P35==1)
{
if(LED_PWM<100)
LED_PWM++;//灯光渐亮
}
}
P37=1;//p3.7置为开漏高阻
if(P37==1)//KEY3按键一直按着,LED逐渐变暗
{
delay
(2);//延时消抖
if(P37==1)
{
if(LED_PWM>0)
LED_PWM--;//灯光渐暗
}
}
}
}
/********************************************************************
函数名:
T0定时器中断服务程序
调用:
无
参数:
无
返回值:
无
结果:
提供PWM波输出I/O口的电平翻转
备注:
********************************************************************/
voidTimer0_Routine()interrupt1
{
TH0=T0RELOAD/256;
TL0=T0RELOAD%256;
SYS_TIME++;
if(SYS_TIME{
P17=1;//点亮LED
}
else
{
P17=0;//关闭LED
}
if(SYS_TIME>100)
{SYS_TIME=0;}
}
/******************************type.h***************************/
#ifndef_TYPE_H_
#define_TYPE_H_
typedefunsignedcharU8;
typedefsignedcharS8;
typedefunsignedintU16;
typedefsignedintS16;
typedefunsignedlongU32;
typedefsignedlongS32;
#endif
四、总结与体会
经过一段时间的焊接与调试,总算把台灯制作完成,期间也经历过各种意想不到的问题。
就以三极管搭建的达林顿驱动来说,在找到功率三极管13003之前,我只找到了一堆9014,由于三极管9014的功率有限,无法承受灯头20多个LED带来的0.5A的强大电流,即使使用了几对分立元件搭建的达林顿也一样,表现均是高度发热,用万用表实测温度已高达130℃,所以根本无法用在实际应用当中。
由于电流过大,所以也无法使用集成达林顿IC,直到找到能允许较大功率的三极管13003后,才使得整个系统的温升控制在能接受的范围。
归其原因就在于所使用的LED灯头,此灯头来自一电源报废的商品LED充电台灯,由于灯头的LED仅仅采用并联的做法做在一块专用PCB板上,上面无任何限流保护措施才导致此次制作LED工作时电流过大,以至于在寻找驱动方法上费了好大功夫。
本次的课程设计不但顺利完成,而且所制作的调光台灯很实用,也整好满足我的日常需求。
由于设计过程中除单片机外大部分器件均来自废旧电路板上的拆机件,经检测性能正常后装进控制板。
包括所用的功率三极管13003就是在一废旧电子镇流器上拆得,二极管则在另一废旧电路板拆得,就连此次台灯所使用的底座都是拆自一废旧的USB摄像头,所以此次的设计也是以追求环保可循环、废物利用的理念来完成的。
总之,这次的制作成功让我学到不少在课本上学不到的知识,在遇到问题后经过自己的检测和查找最终解决问题之后带来的成就感也是巨大的。
附录
系统整体原理图:
系统PCB:
焊接实物图:
参考文献:
1.杜洋《爱上单片机第二版》人民邮电出版社2011.10
2.STC12C2052AD系列单片机器件手册www.STCMCU.com
3.AMS11175.0V器件手册XX百科
4.三极管13003器件手册电子发烧友网