基于PIC16F877微控制器触摸式调光台灯智能化控制的实现
扫描二维码
随时随地手机看文章
本文系统讲述如何利用PIC16F877微控制器实现触摸式调光台灯的智能化控制,实现(1)触摸调光;(2)灯丝预热;(3)自动消除眩光、频闪;(4)定时闹钟;(5)特色铃音;(6)整点报时;(7)事件提醒;(8)日历功能;(9)中文液晶显示等功能,满足安全、高效、无眩光、无频闪、功能齐全等质量标准。
硬件设计
1.PIC16F877徵控制器
PIC16F877微控制器为MicroChip公司FLASH型CPU,片内含8K的FLASH程序存储区,368字节RAM,256字节的EEPROM,35个独立I/0口,一个16位计数器/定时器,两个8位计数器/定时器,14个可独立使用也可嵌套使用的中断源,2个捕捉器、比较器、PWM模块,,白带8路10位A/D,内带看门狗WDT及电源监视,具有休眠、等待等多种节电方式,I/0口可以直接驱动LCD。
2.硬件电路设计
触摸式调光台灯硬件框图如上图所示,硬件原理图如下图所示。
上图中C1和T1组成EMI滤波器,一方面可以减少镇流器对电网的干扰,另一方面可以防止其它电器设备对镇流器的干扰;V1-V4组成桥式整流器;C3、C4、V5、V6和R21组成无源功率因数校正电路,使功率因数达到0.9以上,为保证功率灯管使用寿命,电路的功率峰值因数应小于1.7,本文采用PIC16F877单片机的捕捉功能对频率进行反馈回读,根据频率的变化采取相应的措施,改变IR2151的输入,从而控制IR2151的输出频率,达到控制输出功率的目的。该方法可以使光源更稳定,消除眩光、频闪,达到护眼灯的效果。
触摸式调光灯工作时通过触摸金属片A(亮键)、B(暗键),将人体杂波信号通过耦合电容加到MCU的I/0口进行检测,同时,耦合电容还可以防止因个别器件损坏而造成麻电现象;MCU根据检测到的信号通过程序分析、运算,将PWM信号从17脚输出到IR2151,控制振荡频率;振荡器经高端(HO)和低端(LO)引脚输出,驱动两个场效应管IRF830交替导逼和截止,达到控制灯管的目的。
灯丝的预热由热敏电阻控制,上电后,IR2151的6脚、电感L1、电容C1O、Cl3组成串联谐振电路,在Cl3上产生高压加到灯管两端,将灯点亮。其中,RT为正温度系数的热敏电阻,起到对灯丝预热的作用;电源接通后灯丝电流几乎全部加载到C1O和RT上,由于C1O电容较大,LC串联电路不发生谐振,随着温度升高,RT阻值迅速增大,RT支路相当于开路)使LC串联电路发生谐振,即达到对灯丝进行预热及软启动的作用,延长了灯管的使用寿命,整个过程MCU时刻进行监控及调整,实现真正的智能化控制。
软件设计
软件设计由MCU初始化、装置自检、定时采样、中断处理、液晶显示、按键处理六部分,软件流程如下图所示。
定时器中断子程序为软件设计的核心,包含湿度、湿度采样、调光,除眩等控制,本文对温度、湿度的精度要求不是非常的严格,采样周期设为1min,通过采样5个点求平均值,且精度满足采样要求。
定时器初始化子程序如下;
/***********定时器初始化*******/
void tmint(void)
{
INTCON=0X00;
/********关闭中断**********/
GIE=1;
/***********总中断使能INTCON.7**********/
PEIE=1;
/*********外围接口中断使能位,必须置1否则TMR1中
断不好用***********/
TMR1IE=1;
/**********TMR1溢出中断使能位**********/
T1 CON=0X24;
/******************预分频器1:4暂时不打开TMR1***********/
TMR1 L=0X77;
TMR1 H=0XEC;
/**************定时器赋初值20mS中断1次***************/
TMR1ON=1;
/***********启动TMR1开始计数。T1CON.0**************/
}
定时器中断子程序如下:
/************定时器中断***********/
void interrupt clkint(void)
{
int i,j,k:
for(i=1:i<5:i++)
{
adwd_h[i]=adwd_h[i+1];
adwd_I[i]=adwd_I[i+1];
/**温度采样值移位,顶出第1位,新值存在5位***/
}
int m,n,t;
for(m=1;m<5;m++)
{
adsd_h[m]=adsd_h(m+1];
adsd_I[m]=adsd_I[m+1];
/***温度采样值移位,顶出第1位,新值存在5位*****/
}
ADCONO=Ox41;
/*****时钟源F/8,AO通道,允许A/D工作**********/
ADCON 1=0x82;
/********结果右对齐**********/
delayms(1);
/***************等待采样,采样电容充电时间提高精度**************/
ADCONOㄧ=Ox04;
/**********启动A/D转换GO.ADCON0.2***********/
while(ADIF==1)
/***********等转换结束位ADIF置1,PIR1.6**********/
{
adwd_h[5]=ADRESH;
adwd_I[5]=ADRESL;
/**********存温度采样结果**********/
}
ADCON0=0x51;
/**********时钟源F/8,A1通道,允许A/D工作**********/
ADCON1=0x82;
/*****结果右对齐**********/
delayms(1);
/**************等待采样,采样电容充电时间——提高精度************/
ADCON0ㄧ=0×04;
/********启动A/D转换GO,ADCON0.2********/
while(ADIF==1)
/*******等待转换结束位ADIF置1,PIR1.6***********/
{
adsd_h[5]=ADRESH;
adsd_1[5]=ADRESL;
/**********存温度采样结果**********/
}
TMR1 IF=O;
/*******清中断标志位********/
TMR1 L=0X77;
TMR1 H=0XEC;
/********定时器重新赋初值20mS中断1次***********/
}
功能说明
为使台灯亮度调节平稳过渡,本文设置8档调光:轻触金属片A亮键,灯由灭点亮,然后每触摸一下亮键,台灯亮度增加一档,至第8档时台灯达到最亮,此后再按亮键亮度也不会增加金属片B暗键功能和亮键相反,每按一次亮度减小~档,直至熄灭,同时通过液晶显示相应的状态。
其它功能通过不同按键进入相应的功能菜单进行设置,同时通过纯中文液晶菜单显示。另外,还可设置整点语音报时、3个定日寸闹铃以及事件提醒功能,每个闹铃周期还可以分别设定,事件提醒功能包括会议、约会、参加婚礼、运动、业余学习、其它等几种事件,提醒包括提前1天、提前1小时、提前10分钟三种选择。
由于MCU存储容量有限,闹铃铃音除了固定的铃音外,还有以下4个比较有特色的语音铃音供选择:(1)懒猪起床了,不然把你抬出去了;(2)宝贝起床,太阳都照到屁股了;(3)快点起床、快点起床,一会迟到了;(4)你的定时时间到,快去办事吧。